summaryrefslogtreecommitdiffstats
path: root/source/ap/vim
diff options
context:
space:
mode:
author Patrick J Volkerding <volkerdi@slackware.com>2012-09-26 01:10:42 +0000
committer Eric Hameleers <alien@slackware.com>2018-05-31 22:51:55 +0200
commit9664bee729d487bcc0a0bc35859f8e13d5421c75 (patch)
treeb428a16618e36ed864a8d76ea3435e19a452bf90 /source/ap/vim
parent75a4a592e5ccda30715f93563d741b83e0dcf39e (diff)
downloadcurrent-9664bee729d487bcc0a0bc35859f8e13d5421c75.tar.gz
current-9664bee729d487bcc0a0bc35859f8e13d5421c75.tar.xz
Slackware 14.0slackware-14.0
Wed Sep 26 01:10:42 UTC 2012 Slackware 14.0 x86_64 stable is released! We're perfectionists here at Slackware, so this release has been a long time a-brewing. But we think you'll agree that it was worth the wait. Slackware 14.0 combines modern components, ease of use, and flexible configuration... our "KISS" philosophy demands it. The ISOs are off to be replicated, a 6 CD-ROM 32-bit set and a dual-sided 32-bit/64-bit x86/x86_64 DVD. Please consider supporting the Slackware project by picking up a copy from store.slackware.com. We're taking pre-orders now, and offer a discount if you sign up for a subscription. Thanks to everyone who helped make this happen. The Slackware team, the upstream developers, and (of course) the awesome Slackware user community. Have fun! :-)
Diffstat (limited to 'source/ap/vim')
-rw-r--r--source/ap/vim/patches/7.3.155286
-rw-r--r--source/ap/vim/patches/7.3.15689
-rw-r--r--source/ap/vim/patches/7.3.15752
-rw-r--r--source/ap/vim/patches/7.3.15848
-rw-r--r--source/ap/vim/patches/7.3.15954
-rw-r--r--source/ap/vim/patches/7.3.160482
-rw-r--r--source/ap/vim/patches/7.3.1611645
-rw-r--r--source/ap/vim/patches/7.3.16283
-rw-r--r--source/ap/vim/patches/7.3.16359
-rw-r--r--source/ap/vim/patches/7.3.164181
-rw-r--r--source/ap/vim/patches/7.3.16547
-rw-r--r--source/ap/vim/patches/7.3.16670
-rw-r--r--source/ap/vim/patches/7.3.16796
-rw-r--r--source/ap/vim/patches/7.3.16882
-rw-r--r--source/ap/vim/patches/7.3.169130
-rw-r--r--source/ap/vim/patches/7.3.17070
-rw-r--r--source/ap/vim/patches/7.3.171142
-rw-r--r--source/ap/vim/patches/7.3.172268
-rw-r--r--source/ap/vim/patches/7.3.17379
-rw-r--r--source/ap/vim/patches/7.3.174109
-rw-r--r--source/ap/vim/patches/7.3.17550
-rw-r--r--source/ap/vim/patches/7.3.176165
-rw-r--r--source/ap/vim/patches/7.3.17797
-rw-r--r--source/ap/vim/patches/7.3.178163
-rw-r--r--source/ap/vim/patches/7.3.17995
-rw-r--r--source/ap/vim/patches/7.3.180295
-rw-r--r--source/ap/vim/patches/7.3.181171
-rw-r--r--source/ap/vim/patches/7.3.18253
-rw-r--r--source/ap/vim/patches/7.3.18387
-rw-r--r--source/ap/vim/patches/7.3.18486
-rw-r--r--source/ap/vim/patches/7.3.18577
-rw-r--r--source/ap/vim/patches/7.3.18659
-rw-r--r--source/ap/vim/patches/7.3.1876621
-rw-r--r--source/ap/vim/patches/7.3.188184
-rw-r--r--source/ap/vim/patches/7.3.18949
-rw-r--r--source/ap/vim/patches/7.3.19048
-rw-r--r--source/ap/vim/patches/7.3.191526
-rw-r--r--source/ap/vim/patches/7.3.19261
-rw-r--r--source/ap/vim/patches/7.3.19370
-rw-r--r--source/ap/vim/patches/7.3.19448
-rw-r--r--source/ap/vim/patches/7.3.195199
-rw-r--r--source/ap/vim/patches/7.3.196224
-rw-r--r--source/ap/vim/patches/7.3.19778
-rw-r--r--source/ap/vim/patches/7.3.198403
-rw-r--r--source/ap/vim/patches/7.3.19957
-rw-r--r--source/ap/vim/patches/7.3.20075
-rw-r--r--source/ap/vim/patches/7.3.201124
-rw-r--r--source/ap/vim/patches/7.3.202868
-rw-r--r--source/ap/vim/patches/7.3.203102
-rw-r--r--source/ap/vim/patches/7.3.20451
-rw-r--r--source/ap/vim/patches/7.3.20593
-rw-r--r--source/ap/vim/patches/7.3.20654
-rw-r--r--source/ap/vim/patches/7.3.20754
-rw-r--r--source/ap/vim/patches/7.3.20851
-rw-r--r--source/ap/vim/patches/7.3.20995
-rw-r--r--source/ap/vim/patches/7.3.210182
-rw-r--r--source/ap/vim/patches/7.3.21151
-rw-r--r--source/ap/vim/patches/7.3.212243
-rw-r--r--source/ap/vim/patches/7.3.213142
-rw-r--r--source/ap/vim/patches/7.3.21455
-rw-r--r--source/ap/vim/patches/7.3.21563
-rw-r--r--source/ap/vim/patches/7.3.216263
-rw-r--r--source/ap/vim/patches/7.3.21763
-rw-r--r--source/ap/vim/patches/7.3.21891
-rw-r--r--source/ap/vim/patches/7.3.21992
-rw-r--r--source/ap/vim/patches/7.3.2201230
-rw-r--r--source/ap/vim/patches/7.3.221287
-rw-r--r--source/ap/vim/patches/7.3.22271
-rw-r--r--source/ap/vim/patches/7.3.223387
-rw-r--r--source/ap/vim/patches/7.3.224162
-rw-r--r--source/ap/vim/patches/7.3.225bin0 -> 18841 bytes
-rw-r--r--source/ap/vim/patches/7.3.22658
-rw-r--r--source/ap/vim/patches/7.3.227109
-rw-r--r--source/ap/vim/patches/7.3.22845
-rw-r--r--source/ap/vim/patches/7.3.22955
-rw-r--r--source/ap/vim/patches/7.3.23070
-rw-r--r--source/ap/vim/patches/7.3.231128
-rw-r--r--source/ap/vim/patches/7.3.23284
-rw-r--r--source/ap/vim/patches/7.3.23381
-rw-r--r--source/ap/vim/patches/7.3.234178
-rw-r--r--source/ap/vim/patches/7.3.235360
-rw-r--r--source/ap/vim/patches/7.3.23687
-rw-r--r--source/ap/vim/patches/7.3.237222
-rw-r--r--source/ap/vim/patches/7.3.23853
-rw-r--r--source/ap/vim/patches/7.3.239321
-rw-r--r--source/ap/vim/patches/7.3.240795
-rw-r--r--source/ap/vim/patches/7.3.24171
-rw-r--r--source/ap/vim/patches/7.3.24271
-rw-r--r--source/ap/vim/patches/7.3.24352
-rw-r--r--source/ap/vim/patches/7.3.24448
-rw-r--r--source/ap/vim/patches/7.3.24581
-rw-r--r--source/ap/vim/patches/7.3.24655
-rw-r--r--source/ap/vim/patches/7.3.24795
-rw-r--r--source/ap/vim/patches/7.3.248129
-rw-r--r--source/ap/vim/patches/7.3.249134
-rw-r--r--source/ap/vim/patches/7.3.250104
-rw-r--r--source/ap/vim/patches/7.3.251184
-rw-r--r--source/ap/vim/patches/7.3.25243
-rw-r--r--source/ap/vim/patches/7.3.253539
-rw-r--r--source/ap/vim/patches/7.3.25447
-rw-r--r--source/ap/vim/patches/7.3.25581
-rw-r--r--source/ap/vim/patches/7.3.256322
-rw-r--r--source/ap/vim/patches/7.3.25797
-rw-r--r--source/ap/vim/patches/7.3.25870
-rw-r--r--source/ap/vim/patches/7.3.259503
-rw-r--r--source/ap/vim/patches/7.3.26069
-rw-r--r--source/ap/vim/patches/7.3.26153
-rw-r--r--source/ap/vim/patches/7.3.2621356
-rw-r--r--source/ap/vim/patches/7.3.263162
-rw-r--r--source/ap/vim/patches/7.3.264159
-rw-r--r--source/ap/vim/patches/7.3.265145
-rw-r--r--source/ap/vim/patches/7.3.26654
-rw-r--r--source/ap/vim/patches/7.3.26767
-rw-r--r--source/ap/vim/patches/7.3.26869
-rw-r--r--source/ap/vim/patches/7.3.269112
-rw-r--r--source/ap/vim/patches/7.3.27052
-rw-r--r--source/ap/vim/patches/7.3.271504
-rw-r--r--source/ap/vim/patches/7.3.27251
-rw-r--r--source/ap/vim/patches/7.3.273124
-rw-r--r--source/ap/vim/patches/7.3.27455
-rw-r--r--source/ap/vim/patches/7.3.27577
-rw-r--r--source/ap/vim/patches/7.3.276130
-rw-r--r--source/ap/vim/patches/7.3.277348
-rw-r--r--source/ap/vim/patches/7.3.27873
-rw-r--r--source/ap/vim/patches/7.3.279118
-rw-r--r--source/ap/vim/patches/7.3.280181
-rw-r--r--source/ap/vim/patches/7.3.281134
-rw-r--r--source/ap/vim/patches/7.3.28260
-rw-r--r--source/ap/vim/patches/7.3.283114
-rw-r--r--source/ap/vim/patches/7.3.284211
-rw-r--r--source/ap/vim/patches/7.3.285144
-rw-r--r--source/ap/vim/patches/7.3.28684
-rw-r--r--source/ap/vim/patches/7.3.287100
-rw-r--r--source/ap/vim/patches/7.3.28876
-rw-r--r--source/ap/vim/patches/7.3.28956
-rw-r--r--source/ap/vim/patches/7.3.29075
-rw-r--r--source/ap/vim/patches/7.3.291125
-rw-r--r--source/ap/vim/patches/7.3.29255
-rw-r--r--source/ap/vim/patches/7.3.29374
-rw-r--r--source/ap/vim/patches/7.3.29458
-rw-r--r--source/ap/vim/patches/7.3.295109
-rw-r--r--source/ap/vim/patches/7.3.296222
-rw-r--r--source/ap/vim/patches/7.3.297130
-rw-r--r--source/ap/vim/patches/7.3.298167
-rw-r--r--source/ap/vim/patches/7.3.299516
-rw-r--r--source/ap/vim/patches/7.3.30074
-rw-r--r--source/ap/vim/patches/7.3.30197
-rw-r--r--source/ap/vim/patches/7.3.30268
-rw-r--r--source/ap/vim/patches/7.3.30355
-rw-r--r--source/ap/vim/patches/7.3.304103
-rw-r--r--source/ap/vim/patches/7.3.30558
-rw-r--r--source/ap/vim/patches/7.3.306244
-rw-r--r--source/ap/vim/patches/7.3.307180
-rw-r--r--source/ap/vim/patches/7.3.308260
-rw-r--r--source/ap/vim/patches/7.3.309105
-rw-r--r--source/ap/vim/patches/7.3.3103524
-rw-r--r--source/ap/vim/patches/7.3.311351
-rw-r--r--source/ap/vim/patches/7.3.31258
-rw-r--r--source/ap/vim/patches/7.3.31353
-rw-r--r--source/ap/vim/patches/7.3.31454
-rw-r--r--source/ap/vim/patches/7.3.315475
-rw-r--r--source/ap/vim/patches/7.3.31648
-rw-r--r--source/ap/vim/patches/7.3.317116
-rw-r--r--source/ap/vim/patches/7.3.31890
-rw-r--r--source/ap/vim/patches/7.3.319154
-rw-r--r--source/ap/vim/patches/7.3.320130
-rw-r--r--source/ap/vim/patches/7.3.321304
-rw-r--r--source/ap/vim/patches/7.3.32252
-rw-r--r--source/ap/vim/patches/7.3.32352
-rw-r--r--source/ap/vim/patches/7.3.32453
-rw-r--r--source/ap/vim/patches/7.3.32564
-rw-r--r--source/ap/vim/patches/7.3.326285
-rw-r--r--source/ap/vim/patches/7.3.32764
-rw-r--r--source/ap/vim/patches/7.3.32845
-rw-r--r--source/ap/vim/patches/7.3.32972
-rw-r--r--source/ap/vim/patches/7.3.33045
-rw-r--r--source/ap/vim/patches/7.3.33153
-rw-r--r--source/ap/vim/patches/7.3.332206
-rw-r--r--source/ap/vim/patches/7.3.333245
-rw-r--r--source/ap/vim/patches/7.3.33458
-rw-r--r--source/ap/vim/patches/7.3.33548
-rw-r--r--source/ap/vim/patches/7.3.3361100
-rw-r--r--source/ap/vim/patches/7.3.33758
-rw-r--r--source/ap/vim/patches/7.3.338100
-rw-r--r--source/ap/vim/patches/7.3.33957
-rw-r--r--source/ap/vim/patches/7.3.34062
-rw-r--r--source/ap/vim/patches/7.3.341360
-rw-r--r--source/ap/vim/patches/7.3.34293
-rw-r--r--source/ap/vim/patches/7.3.343252
-rw-r--r--source/ap/vim/patches/7.3.344121
-rw-r--r--source/ap/vim/patches/7.3.34548
-rw-r--r--source/ap/vim/patches/7.3.346143
-rw-r--r--source/ap/vim/patches/7.3.34754
-rw-r--r--source/ap/vim/patches/7.3.34857
-rw-r--r--source/ap/vim/patches/7.3.34988
-rw-r--r--source/ap/vim/patches/7.3.35046
-rw-r--r--source/ap/vim/patches/7.3.35146
-rw-r--r--source/ap/vim/patches/7.3.352108
-rw-r--r--source/ap/vim/patches/7.3.353155
-rw-r--r--source/ap/vim/patches/7.3.35471
-rw-r--r--source/ap/vim/patches/7.3.35556
-rw-r--r--source/ap/vim/patches/7.3.35679
-rw-r--r--source/ap/vim/patches/7.3.35752
-rw-r--r--source/ap/vim/patches/7.3.35874
-rw-r--r--source/ap/vim/patches/7.3.35964
-rw-r--r--source/ap/vim/patches/7.3.36061
-rw-r--r--source/ap/vim/patches/7.3.36155
-rw-r--r--source/ap/vim/patches/7.3.36259
-rw-r--r--source/ap/vim/patches/7.3.363110
-rw-r--r--source/ap/vim/patches/7.3.36457
-rw-r--r--source/ap/vim/patches/7.3.365131
-rw-r--r--source/ap/vim/patches/7.3.36676
-rw-r--r--source/ap/vim/patches/7.3.36753
-rw-r--r--source/ap/vim/patches/7.3.368103
-rw-r--r--source/ap/vim/patches/7.3.36948
-rw-r--r--source/ap/vim/patches/7.3.37063
-rw-r--r--source/ap/vim/patches/7.3.37175
-rw-r--r--source/ap/vim/patches/7.3.37252
-rw-r--r--source/ap/vim/patches/7.3.37378
-rw-r--r--source/ap/vim/patches/7.3.37459
-rw-r--r--source/ap/vim/patches/7.3.37564
-rw-r--r--source/ap/vim/patches/7.3.37657
-rw-r--r--source/ap/vim/patches/7.3.377406
-rw-r--r--source/ap/vim/patches/7.3.37871
-rw-r--r--source/ap/vim/patches/7.3.379112
-rw-r--r--source/ap/vim/patches/7.3.380318
-rw-r--r--source/ap/vim/patches/7.3.381260
-rw-r--r--source/ap/vim/patches/7.3.382173
-rw-r--r--source/ap/vim/patches/7.3.38351
-rw-r--r--source/ap/vim/patches/7.3.38453
-rw-r--r--source/ap/vim/patches/7.3.38569
-rw-r--r--source/ap/vim/patches/7.3.38655
-rw-r--r--source/ap/vim/patches/7.3.38761
-rw-r--r--source/ap/vim/patches/7.3.38845
-rw-r--r--source/ap/vim/patches/7.3.38961
-rw-r--r--source/ap/vim/patches/7.3.390155
-rw-r--r--source/ap/vim/patches/7.3.39151
-rw-r--r--source/ap/vim/patches/7.3.392115
-rw-r--r--source/ap/vim/patches/7.3.393130
-rw-r--r--source/ap/vim/patches/7.3.39462
-rw-r--r--source/ap/vim/patches/7.3.395115
-rw-r--r--source/ap/vim/patches/7.3.39649
-rw-r--r--source/ap/vim/patches/7.3.397224
-rw-r--r--source/ap/vim/patches/7.3.39865
-rw-r--r--source/ap/vim/patches/7.3.399137
-rw-r--r--source/ap/vim/patches/7.3.4001762
-rw-r--r--source/ap/vim/patches/7.3.401191
-rw-r--r--source/ap/vim/patches/7.3.40259
-rw-r--r--source/ap/vim/patches/7.3.403108
-rw-r--r--source/ap/vim/patches/7.3.40485
-rw-r--r--source/ap/vim/patches/7.3.405101
-rw-r--r--source/ap/vim/patches/7.3.406103
-rw-r--r--source/ap/vim/patches/7.3.407270
-rw-r--r--source/ap/vim/patches/7.3.40848
-rw-r--r--source/ap/vim/patches/7.3.40948
-rw-r--r--source/ap/vim/patches/7.3.41054
-rw-r--r--source/ap/vim/patches/7.3.41155
-rw-r--r--source/ap/vim/patches/7.3.41251
-rw-r--r--source/ap/vim/patches/7.3.41390
-rw-r--r--source/ap/vim/patches/7.3.41490
-rw-r--r--source/ap/vim/patches/7.3.41554
-rw-r--r--source/ap/vim/patches/7.3.41654
-rw-r--r--source/ap/vim/patches/7.3.41747
-rw-r--r--source/ap/vim/patches/7.3.41853
-rw-r--r--source/ap/vim/patches/7.3.41985
-rw-r--r--source/ap/vim/patches/7.3.42070
-rw-r--r--source/ap/vim/patches/7.3.42160
-rw-r--r--source/ap/vim/patches/7.3.42294
-rw-r--r--source/ap/vim/patches/7.3.423130
-rw-r--r--source/ap/vim/patches/7.3.42462
-rw-r--r--source/ap/vim/patches/7.3.42578
-rw-r--r--source/ap/vim/patches/7.3.426279
-rw-r--r--source/ap/vim/patches/7.3.427378
-rw-r--r--source/ap/vim/patches/7.3.428113
-rw-r--r--source/ap/vim/patches/7.3.429192
-rw-r--r--source/ap/vim/patches/7.3.43080
-rw-r--r--source/ap/vim/patches/7.3.431280
-rw-r--r--source/ap/vim/patches/7.3.432228
-rw-r--r--source/ap/vim/patches/7.3.43392
-rw-r--r--source/ap/vim/patches/7.3.434233
-rw-r--r--source/ap/vim/patches/7.3.43563
-rw-r--r--source/ap/vim/patches/7.3.436111
-rw-r--r--source/ap/vim/patches/7.3.43773
-rw-r--r--source/ap/vim/patches/7.3.438126
-rw-r--r--source/ap/vim/patches/7.3.43987
-rw-r--r--source/ap/vim/patches/7.3.440211
-rw-r--r--source/ap/vim/patches/7.3.441341
-rw-r--r--source/ap/vim/patches/7.3.442186
-rw-r--r--source/ap/vim/patches/7.3.443206
-rw-r--r--source/ap/vim/patches/7.3.44496
-rw-r--r--source/ap/vim/patches/7.3.445199
-rw-r--r--source/ap/vim/patches/7.3.446164
-rw-r--r--source/ap/vim/patches/7.3.447377
-rw-r--r--source/ap/vim/patches/7.3.448180
-rw-r--r--source/ap/vim/patches/7.3.449455
-rw-r--r--source/ap/vim/patches/7.3.45081
-rw-r--r--source/ap/vim/patches/7.3.451363
-rw-r--r--source/ap/vim/patches/7.3.45270
-rw-r--r--source/ap/vim/patches/7.3.45358
-rw-r--r--source/ap/vim/patches/7.3.45484
-rw-r--r--source/ap/vim/patches/7.3.45570
-rw-r--r--source/ap/vim/patches/7.3.456376
-rw-r--r--source/ap/vim/patches/7.3.45781
-rw-r--r--source/ap/vim/patches/7.3.45852
-rw-r--r--source/ap/vim/patches/7.3.45971
-rw-r--r--source/ap/vim/patches/7.3.46089
-rw-r--r--source/ap/vim/patches/7.3.461243
-rw-r--r--source/ap/vim/patches/7.3.462191
-rw-r--r--source/ap/vim/patches/7.3.46363
-rw-r--r--source/ap/vim/patches/7.3.46460
-rw-r--r--source/ap/vim/patches/7.3.465398
-rw-r--r--source/ap/vim/patches/7.3.46649
-rw-r--r--source/ap/vim/patches/7.3.46754
-rw-r--r--source/ap/vim/patches/7.3.468144
-rw-r--r--source/ap/vim/patches/7.3.46953
-rw-r--r--source/ap/vim/patches/7.3.47067
-rw-r--r--source/ap/vim/patches/7.3.47192
-rw-r--r--source/ap/vim/patches/7.3.47288
-rw-r--r--source/ap/vim/patches/7.3.47368
-rw-r--r--source/ap/vim/patches/7.3.47462
-rw-r--r--source/ap/vim/patches/7.3.47598
-rw-r--r--source/ap/vim/patches/7.3.47656
-rw-r--r--source/ap/vim/patches/7.3.47752
-rw-r--r--source/ap/vim/patches/7.3.47846
-rw-r--r--source/ap/vim/patches/7.3.479134
-rw-r--r--source/ap/vim/patches/7.3.480237
-rw-r--r--source/ap/vim/patches/7.3.48165
-rw-r--r--source/ap/vim/patches/7.3.48257
-rw-r--r--source/ap/vim/patches/7.3.48397
-rw-r--r--source/ap/vim/patches/7.3.48462
-rw-r--r--source/ap/vim/patches/7.3.48552
-rw-r--r--source/ap/vim/patches/7.3.48658
-rw-r--r--source/ap/vim/patches/7.3.487572
-rw-r--r--source/ap/vim/patches/7.3.48852
-rw-r--r--source/ap/vim/patches/7.3.48989
-rw-r--r--source/ap/vim/patches/7.3.4902517
-rw-r--r--source/ap/vim/patches/7.3.491235
-rw-r--r--source/ap/vim/patches/7.3.492718
-rw-r--r--source/ap/vim/patches/7.3.49354
-rw-r--r--source/ap/vim/patches/7.3.494186
-rw-r--r--source/ap/vim/patches/7.3.495124
-rw-r--r--source/ap/vim/patches/7.3.49669
-rw-r--r--source/ap/vim/patches/7.3.49750
-rw-r--r--source/ap/vim/patches/7.3.49863
-rw-r--r--source/ap/vim/patches/7.3.49984
-rw-r--r--source/ap/vim/patches/7.3.50046
-rw-r--r--source/ap/vim/patches/7.3.50163
-rw-r--r--source/ap/vim/patches/7.3.50267
-rw-r--r--source/ap/vim/patches/7.3.50351
-rw-r--r--source/ap/vim/patches/7.3.50487
-rw-r--r--source/ap/vim/patches/7.3.505116
-rw-r--r--source/ap/vim/patches/7.3.506100
-rw-r--r--source/ap/vim/patches/7.3.507149
-rw-r--r--source/ap/vim/patches/7.3.50885
-rw-r--r--source/ap/vim/patches/7.3.509304
-rw-r--r--source/ap/vim/patches/7.3.51053
-rw-r--r--source/ap/vim/patches/7.3.51149
-rw-r--r--source/ap/vim/patches/7.3.51270
-rw-r--r--source/ap/vim/patches/7.3.513129
-rw-r--r--source/ap/vim/patches/7.3.514232
-rw-r--r--source/ap/vim/patches/7.3.51568
-rw-r--r--source/ap/vim/patches/7.3.51694
-rw-r--r--source/ap/vim/patches/7.3.51760
-rw-r--r--source/ap/vim/patches/7.3.51857
-rw-r--r--source/ap/vim/patches/7.3.51964
-rw-r--r--source/ap/vim/patches/7.3.520140
-rw-r--r--source/ap/vim/patches/7.3.521129
-rw-r--r--source/ap/vim/patches/7.3.52256
-rw-r--r--source/ap/vim/patches/7.3.523103
-rw-r--r--source/ap/vim/patches/7.3.52446
-rw-r--r--source/ap/vim/patches/7.3.52555
-rw-r--r--source/ap/vim/patches/7.3.52659
-rw-r--r--source/ap/vim/patches/7.3.52759
-rw-r--r--source/ap/vim/patches/7.3.528171
-rw-r--r--source/ap/vim/patches/7.3.52981
-rw-r--r--source/ap/vim/patches/7.3.53050
-rw-r--r--source/ap/vim/patches/7.3.53152
-rw-r--r--source/ap/vim/patches/7.3.53253
-rw-r--r--source/ap/vim/patches/7.3.53346
-rw-r--r--source/ap/vim/patches/7.3.534101
-rw-r--r--source/ap/vim/patches/7.3.535356
-rw-r--r--source/ap/vim/patches/7.3.53673
-rw-r--r--source/ap/vim/patches/7.3.53747
-rw-r--r--source/ap/vim/patches/7.3.538321
-rw-r--r--source/ap/vim/patches/7.3.53951
-rw-r--r--source/ap/vim/patches/7.3.54055
-rw-r--r--source/ap/vim/patches/7.3.5411090
-rw-r--r--source/ap/vim/patches/7.3.54273
-rw-r--r--source/ap/vim/patches/7.3.54355
-rw-r--r--source/ap/vim/patches/7.3.54481
-rw-r--r--source/ap/vim/patches/7.3.545359
-rw-r--r--source/ap/vim/patches/7.3.54654
-rw-r--r--source/ap/vim/patches/7.3.54752
-rw-r--r--source/ap/vim/patches/7.3.54853
-rw-r--r--source/ap/vim/patches/7.3.549125
-rw-r--r--source/ap/vim/patches/7.3.550160
-rw-r--r--source/ap/vim/patches/7.3.551494
-rw-r--r--source/ap/vim/patches/7.3.552582
-rw-r--r--source/ap/vim/patches/7.3.55385
-rw-r--r--source/ap/vim/patches/7.3.55452
-rw-r--r--source/ap/vim/patches/7.3.555232
-rw-r--r--source/ap/vim/patches/7.3.55670
-rw-r--r--source/ap/vim/patches/7.3.55799
-rw-r--r--source/ap/vim/patches/7.3.55890
-rw-r--r--source/ap/vim/patches/7.3.559131
-rw-r--r--source/ap/vim/patches/7.3.56049
-rw-r--r--source/ap/vim/patches/7.3.56152
-rw-r--r--source/ap/vim/patches/7.3.56263
-rw-r--r--source/ap/vim/patches/7.3.56397
-rw-r--r--source/ap/vim/patches/7.3.56453
-rw-r--r--source/ap/vim/patches/7.3.56552
-rw-r--r--source/ap/vim/patches/7.3.56683
-rw-r--r--source/ap/vim/patches/7.3.56756
-rw-r--r--source/ap/vim/patches/7.3.568138
-rw-r--r--source/ap/vim/patches/7.3.5694762
-rw-r--r--source/ap/vim/patches/7.3.570145
-rw-r--r--source/ap/vim/patches/7.3.571117
-rw-r--r--source/ap/vim/patches/7.3.57259
-rw-r--r--source/ap/vim/patches/7.3.57352
-rw-r--r--source/ap/vim/patches/7.3.57488
-rw-r--r--source/ap/vim/patches/7.3.57560
-rw-r--r--source/ap/vim/patches/7.3.576255
-rw-r--r--source/ap/vim/patches/7.3.577273
-rw-r--r--source/ap/vim/patches/7.3.57880
-rw-r--r--source/ap/vim/patches/7.3.579232
-rw-r--r--source/ap/vim/patches/7.3.58052
-rw-r--r--source/ap/vim/patches/7.3.581117
-rw-r--r--source/ap/vim/patches/7.3.58261
-rw-r--r--source/ap/vim/patches/7.3.58379
-rw-r--r--source/ap/vim/patches/7.3.584134
-rw-r--r--source/ap/vim/patches/7.3.58556
-rw-r--r--source/ap/vim/patches/7.3.586103
-rw-r--r--source/ap/vim/patches/7.3.58784
-rw-r--r--source/ap/vim/patches/7.3.58885
-rw-r--r--source/ap/vim/patches/7.3.58969
-rw-r--r--source/ap/vim/patches/7.3.59061
-rw-r--r--source/ap/vim/patches/7.3.591208
-rw-r--r--source/ap/vim/patches/7.3.592126
-rw-r--r--source/ap/vim/patches/7.3.59381
-rw-r--r--source/ap/vim/patches/7.3.594171
-rw-r--r--source/ap/vim/patches/7.3.595154
-rw-r--r--source/ap/vim/patches/7.3.596171
-rw-r--r--source/ap/vim/patches/7.3.597720
-rw-r--r--source/ap/vim/patches/7.3.59873
-rw-r--r--source/ap/vim/patches/7.3.599107
-rw-r--r--source/ap/vim/patches/7.3.60068
-rw-r--r--source/ap/vim/patches/7.3.60151
-rw-r--r--source/ap/vim/patches/7.3.60255
-rw-r--r--source/ap/vim/patches/7.3.603370
-rw-r--r--source/ap/vim/patches/7.3.60460
-rw-r--r--source/ap/vim/patches/7.3.60586
-rw-r--r--source/ap/vim/patches/7.3.60676
-rw-r--r--source/ap/vim/patches/7.3.60756
-rw-r--r--source/ap/vim/patches/7.3.608119
-rw-r--r--source/ap/vim/patches/7.3.609251
-rw-r--r--source/ap/vim/patches/7.3.610400
-rw-r--r--source/ap/vim/patches/7.3.61158
-rw-r--r--source/ap/vim/patches/7.3.61283
-rw-r--r--source/ap/vim/patches/7.3.613149
-rw-r--r--source/ap/vim/patches/7.3.614176
-rw-r--r--source/ap/vim/patches/7.3.615107
-rw-r--r--source/ap/vim/patches/7.3.61646
-rw-r--r--source/ap/vim/patches/7.3.61765
-rw-r--r--source/ap/vim/patches/7.3.618367
-rw-r--r--source/ap/vim/patches/7.3.61950
-rw-r--r--source/ap/vim/patches/7.3.620163
-rw-r--r--source/ap/vim/patches/7.3.62172
-rw-r--r--source/ap/vim/patches/7.3.62256
-rw-r--r--source/ap/vim/patches/7.3.62392
-rw-r--r--source/ap/vim/patches/7.3.62452
-rw-r--r--source/ap/vim/patches/7.3.625140
-rw-r--r--source/ap/vim/patches/7.3.62649
-rw-r--r--source/ap/vim/patches/7.3.627102
-rw-r--r--source/ap/vim/patches/7.3.62854
-rw-r--r--source/ap/vim/patches/7.3.629437
-rw-r--r--source/ap/vim/patches/7.3.63048
-rw-r--r--source/ap/vim/patches/7.3.631322
-rw-r--r--source/ap/vim/patches/7.3.632537
-rw-r--r--source/ap/vim/patches/7.3.63381
-rw-r--r--source/ap/vim/patches/7.3.63457
-rw-r--r--source/ap/vim/patches/7.3.63550
-rw-r--r--source/ap/vim/patches/7.3.636148
-rw-r--r--source/ap/vim/patches/7.3.63794
-rw-r--r--source/ap/vim/patches/7.3.63855
-rw-r--r--source/ap/vim/patches/7.3.639846
-rw-r--r--source/ap/vim/patches/7.3.640bin0 -> 455297 bytes
-rw-r--r--source/ap/vim/patches/7.3.64168
-rw-r--r--source/ap/vim/patches/7.3.64255
-rw-r--r--source/ap/vim/patches/7.3.64373
-rw-r--r--source/ap/vim/patches/7.3.64472
-rw-r--r--source/ap/vim/patches/7.3.645118
491 files changed, 87657 insertions, 0 deletions
diff --git a/source/ap/vim/patches/7.3.155 b/source/ap/vim/patches/7.3.155
new file mode 100644
index 000000000..806efca2b
--- /dev/null
+++ b/source/ap/vim/patches/7.3.155
@@ -0,0 +1,286 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.155
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.155
+Problem: Crash when using map(), filter() and remove() on v:. (ZyX)
+ Also for extend(). (Yukihiro Nakadaira)
+Solution: Mark v: as locked. Also correct locking error messages.
+Files: src/eval.c
+
+
+*** ../vim-7.3.154/src/eval.c 2011-04-01 16:07:41.000000000 +0200
+--- src/eval.c 2011-04-11 13:28:34.000000000 +0200
+***************
+*** 853,858 ****
+--- 853,859 ----
+
+ init_var_dict(&globvardict, &globvars_var);
+ init_var_dict(&vimvardict, &vimvars_var);
++ vimvardict.dv_lock = VAR_FIXED;
+ hash_init(&compat_hashtab);
+ hash_init(&func_hashtab);
+
+***************
+*** 8545,8551 ****
+ if (argvars[0].v_type == VAR_LIST)
+ {
+ if ((l = argvars[0].vval.v_list) != NULL
+! && !tv_check_lock(l->lv_lock, (char_u *)"add()")
+ && list_append_tv(l, &argvars[1]) == OK)
+ copy_tv(&argvars[0], rettv);
+ }
+--- 8546,8552 ----
+ if (argvars[0].v_type == VAR_LIST)
+ {
+ if ((l = argvars[0].vval.v_list) != NULL
+! && !tv_check_lock(l->lv_lock, (char_u *)_("add() argument"))
+ && list_append_tv(l, &argvars[1]) == OK)
+ copy_tv(&argvars[0], rettv);
+ }
+***************
+*** 9946,9951 ****
+--- 9947,9954 ----
+ typval_T *argvars;
+ typval_T *rettv;
+ {
++ char *arg_errmsg = N_("extend() argument");
++
+ if (argvars[0].v_type == VAR_LIST && argvars[1].v_type == VAR_LIST)
+ {
+ list_T *l1, *l2;
+***************
+*** 9955,9961 ****
+
+ l1 = argvars[0].vval.v_list;
+ l2 = argvars[1].vval.v_list;
+! if (l1 != NULL && !tv_check_lock(l1->lv_lock, (char_u *)"extend()")
+ && l2 != NULL)
+ {
+ if (argvars[2].v_type != VAR_UNKNOWN)
+--- 9958,9964 ----
+
+ l1 = argvars[0].vval.v_list;
+ l2 = argvars[1].vval.v_list;
+! if (l1 != NULL && !tv_check_lock(l1->lv_lock, (char_u *)_(arg_errmsg))
+ && l2 != NULL)
+ {
+ if (argvars[2].v_type != VAR_UNKNOWN)
+***************
+*** 9994,10000 ****
+
+ d1 = argvars[0].vval.v_dict;
+ d2 = argvars[1].vval.v_dict;
+! if (d1 != NULL && !tv_check_lock(d1->dv_lock, (char_u *)"extend()")
+ && d2 != NULL)
+ {
+ /* Check the third argument. */
+--- 9997,10003 ----
+
+ d1 = argvars[0].vval.v_dict;
+ d2 = argvars[1].vval.v_dict;
+! if (d1 != NULL && !tv_check_lock(d1->dv_lock, (char_u *)_(arg_errmsg))
+ && d2 != NULL)
+ {
+ /* Check the third argument. */
+***************
+*** 10236,10255 ****
+ typval_T save_key;
+ int rem;
+ int todo;
+! char_u *ermsg = map ? (char_u *)"map()" : (char_u *)"filter()";
+ int save_did_emsg;
+ int idx = 0;
+
+ if (argvars[0].v_type == VAR_LIST)
+ {
+ if ((l = argvars[0].vval.v_list) == NULL
+! || (map && tv_check_lock(l->lv_lock, ermsg)))
+ return;
+ }
+ else if (argvars[0].v_type == VAR_DICT)
+ {
+ if ((d = argvars[0].vval.v_dict) == NULL
+! || (map && tv_check_lock(d->dv_lock, ermsg)))
+ return;
+ }
+ else
+--- 10239,10260 ----
+ typval_T save_key;
+ int rem;
+ int todo;
+! char_u *ermsg = (char_u *)(map ? "map()" : "filter()");
+! char *arg_errmsg = (map ? N_("map() argument")
+! : N_("filter() argument"));
+ int save_did_emsg;
+ int idx = 0;
+
+ if (argvars[0].v_type == VAR_LIST)
+ {
+ if ((l = argvars[0].vval.v_list) == NULL
+! || tv_check_lock(l->lv_lock, (char_u *)_(arg_errmsg)))
+ return;
+ }
+ else if (argvars[0].v_type == VAR_DICT)
+ {
+ if ((d = argvars[0].vval.v_dict) == NULL
+! || tv_check_lock(d->dv_lock, (char_u *)_(arg_errmsg)))
+ return;
+ }
+ else
+***************
+*** 10286,10292 ****
+ {
+ --todo;
+ di = HI2DI(hi);
+! if (tv_check_lock(di->di_tv.v_lock, ermsg))
+ break;
+ vimvars[VV_KEY].vv_str = vim_strsave(di->di_key);
+ if (filter_map_one(&di->di_tv, expr, map, &rem) == FAIL
+--- 10291,10298 ----
+ {
+ --todo;
+ di = HI2DI(hi);
+! if (tv_check_lock(di->di_tv.v_lock,
+! (char_u *)_(arg_errmsg)))
+ break;
+ vimvars[VV_KEY].vv_str = vim_strsave(di->di_key);
+ if (filter_map_one(&di->di_tv, expr, map, &rem) == FAIL
+***************
+*** 10305,10311 ****
+
+ for (li = l->lv_first; li != NULL; li = nli)
+ {
+! if (tv_check_lock(li->li_tv.v_lock, ermsg))
+ break;
+ nli = li->li_next;
+ vimvars[VV_KEY].vv_nr = idx;
+--- 10311,10317 ----
+
+ for (li = l->lv_first; li != NULL; li = nli)
+ {
+! if (tv_check_lock(li->li_tv.v_lock, (char_u *)_(arg_errmsg)))
+ break;
+ nli = li->li_next;
+ vimvars[VV_KEY].vv_nr = idx;
+***************
+*** 12910,12916 ****
+ if (argvars[0].v_type != VAR_LIST)
+ EMSG2(_(e_listarg), "insert()");
+ else if ((l = argvars[0].vval.v_list) != NULL
+! && !tv_check_lock(l->lv_lock, (char_u *)"insert()"))
+ {
+ if (argvars[2].v_type != VAR_UNKNOWN)
+ before = get_tv_number_chk(&argvars[2], &error);
+--- 12916,12922 ----
+ if (argvars[0].v_type != VAR_LIST)
+ EMSG2(_(e_listarg), "insert()");
+ else if ((l = argvars[0].vval.v_list) != NULL
+! && !tv_check_lock(l->lv_lock, (char_u *)_("insert() argument")))
+ {
+ if (argvars[2].v_type != VAR_UNKNOWN)
+ before = get_tv_number_chk(&argvars[2], &error);
+***************
+*** 14775,14787 ****
+ char_u *key;
+ dict_T *d;
+ dictitem_T *di;
+
+ if (argvars[0].v_type == VAR_DICT)
+ {
+ if (argvars[2].v_type != VAR_UNKNOWN)
+ EMSG2(_(e_toomanyarg), "remove()");
+ else if ((d = argvars[0].vval.v_dict) != NULL
+! && !tv_check_lock(d->dv_lock, (char_u *)"remove() argument"))
+ {
+ key = get_tv_string_chk(&argvars[1]);
+ if (key != NULL)
+--- 14781,14794 ----
+ char_u *key;
+ dict_T *d;
+ dictitem_T *di;
++ char *arg_errmsg = N_("remove() argument");
+
+ if (argvars[0].v_type == VAR_DICT)
+ {
+ if (argvars[2].v_type != VAR_UNKNOWN)
+ EMSG2(_(e_toomanyarg), "remove()");
+ else if ((d = argvars[0].vval.v_dict) != NULL
+! && !tv_check_lock(d->dv_lock, (char_u *)_(arg_errmsg)))
+ {
+ key = get_tv_string_chk(&argvars[1]);
+ if (key != NULL)
+***************
+*** 14801,14807 ****
+ else if (argvars[0].v_type != VAR_LIST)
+ EMSG2(_(e_listdictarg), "remove()");
+ else if ((l = argvars[0].vval.v_list) != NULL
+! && !tv_check_lock(l->lv_lock, (char_u *)"remove() argument"))
+ {
+ int error = FALSE;
+
+--- 14808,14814 ----
+ else if (argvars[0].v_type != VAR_LIST)
+ EMSG2(_(e_listdictarg), "remove()");
+ else if ((l = argvars[0].vval.v_list) != NULL
+! && !tv_check_lock(l->lv_lock, (char_u *)_(arg_errmsg)))
+ {
+ int error = FALSE;
+
+***************
+*** 15135,15141 ****
+ if (argvars[0].v_type != VAR_LIST)
+ EMSG2(_(e_listarg), "reverse()");
+ else if ((l = argvars[0].vval.v_list) != NULL
+! && !tv_check_lock(l->lv_lock, (char_u *)"reverse()"))
+ {
+ li = l->lv_last;
+ l->lv_first = l->lv_last = NULL;
+--- 15142,15148 ----
+ if (argvars[0].v_type != VAR_LIST)
+ EMSG2(_(e_listarg), "reverse()");
+ else if ((l = argvars[0].vval.v_list) != NULL
+! && !tv_check_lock(l->lv_lock, (char_u *)_("reverse() argument")))
+ {
+ li = l->lv_last;
+ l->lv_first = l->lv_last = NULL;
+***************
+*** 16432,16438 ****
+ else
+ {
+ l = argvars[0].vval.v_list;
+! if (l == NULL || tv_check_lock(l->lv_lock, (char_u *)"sort()"))
+ return;
+ rettv->vval.v_list = l;
+ rettv->v_type = VAR_LIST;
+--- 16439,16446 ----
+ else
+ {
+ l = argvars[0].vval.v_list;
+! if (l == NULL || tv_check_lock(l->lv_lock,
+! (char_u *)_("sort() argument")))
+ return;
+ rettv->vval.v_list = l;
+ rettv->v_type = VAR_LIST;
+*** ../vim-7.3.154/src/version.c 2011-04-02 15:12:45.000000000 +0200
+--- src/version.c 2011-04-11 13:13:38.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 155,
+ /**/
+
+--
+I used to be indecisive, now I'm not sure.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.156 b/source/ap/vim/patches/7.3.156
new file mode 100644
index 000000000..ec873242e
--- /dev/null
+++ b/source/ap/vim/patches/7.3.156
@@ -0,0 +1,89 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.156
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.156
+Problem: Tty names possibly left unterminated.
+Solution: Use vim_strncpy() instead of strncpy().
+Files: src/pty.c
+
+
+*** ../vim-7.3.155/src/pty.c 2010-08-15 21:57:28.000000000 +0200
+--- src/pty.c 2011-04-11 14:02:49.000000000 +0200
+***************
+*** 209,216 ****
+ #ifdef _SEQUENT_
+ fvhangup(s);
+ #endif
+! strncpy(PtyName, m, sizeof(PtyName));
+! strncpy(TtyName, s, sizeof(TtyName));
+ initmaster(f);
+ *ttyn = TtyName;
+ return f;
+--- 209,216 ----
+ #ifdef _SEQUENT_
+ fvhangup(s);
+ #endif
+! vim_strncpy((char_u *)PtyName, (char_u *)m, sizeof(PtyName) - 1);
+! vim_strncpy((char_u *)TtyName, (char_u *)s, sizeof(TtyName) - 1);
+ initmaster(f);
+ *ttyn = TtyName;
+ return f;
+***************
+*** 301,307 ****
+ return -1;
+ }
+ signal(SIGCHLD, sigcld);
+! strncpy(TtyName, m, sizeof(TtyName));
+ initmaster(f);
+ *ttyn = TtyName;
+ return f;
+--- 301,307 ----
+ return -1;
+ }
+ signal(SIGCHLD, sigcld);
+! vim_strncpy((char_u *)TtyName, (char_u *)m, sizeof(TtyName) - 1);
+ initmaster(f);
+ *ttyn = TtyName;
+ return f;
+***************
+*** 326,332 ****
+ /* a dumb looking loop replaced by mycrofts code: */
+ if ((f = open("/dev/ptc", O_RDWR | O_NOCTTY | O_EXTRA)) < 0)
+ return -1;
+! strncpy(TtyName, ttyname(f), sizeof(TtyName));
+ if (geteuid() != ROOT_UID && mch_access(TtyName, R_OK | W_OK))
+ {
+ close(f);
+--- 326,332 ----
+ /* a dumb looking loop replaced by mycrofts code: */
+ if ((f = open("/dev/ptc", O_RDWR | O_NOCTTY | O_EXTRA)) < 0)
+ return -1;
+! vim_strncpy((char_u *)TtyName, (char_u *)ttyname(f), sizeof(TtyName) - 1);
+ if (geteuid() != ROOT_UID && mch_access(TtyName, R_OK | W_OK))
+ {
+ close(f);
+*** ../vim-7.3.155/src/version.c 2011-04-11 13:46:07.000000000 +0200
+--- src/version.c 2011-04-11 14:23:38.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 156,
+ /**/
+
+--
+I think that you'll agree that engineers are very effective in their social
+interactions. It's the "normal" people who are nuts.
+ (Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.157 b/source/ap/vim/patches/7.3.157
new file mode 100644
index 000000000..403c94865
--- /dev/null
+++ b/source/ap/vim/patches/7.3.157
@@ -0,0 +1,52 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.157
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.157
+Problem: Superfluous assignment.
+Solution: Remove assignment.
+Files: src/misc1.c
+
+
+*** ../vim-7.3.156/src/misc1.c 2011-03-22 13:07:19.000000000 +0100
+--- src/misc1.c 2011-04-11 14:11:17.000000000 +0200
+***************
+*** 6773,6780 ****
+ {
+ curwin->w_cursor.lnum = our_paren_pos.lnum;
+ curwin->w_cursor.col = col;
+! if ((trypos = find_match_paren(ind_maxparen,
+! ind_maxcomment)) != NULL)
+ amount += ind_unclosed2;
+ else
+ amount += ind_unclosed;
+--- 6775,6781 ----
+ {
+ curwin->w_cursor.lnum = our_paren_pos.lnum;
+ curwin->w_cursor.col = col;
+! if (find_match_paren(ind_maxparen, ind_maxcomment) != NULL)
+ amount += ind_unclosed2;
+ else
+ amount += ind_unclosed;
+*** ../vim-7.3.156/src/version.c 2011-04-11 14:24:33.000000000 +0200
+--- src/version.c 2011-04-11 14:25:36.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 157,
+ /**/
+
+--
+A radioactive cat has eighteen half-lives.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.158 b/source/ap/vim/patches/7.3.158
new file mode 100644
index 000000000..8fba3508b
--- /dev/null
+++ b/source/ap/vim/patches/7.3.158
@@ -0,0 +1,48 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.158
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.158
+Problem: Might use uninitialized memory in C indenting.
+Solution: Init arrays to empty.
+Files: src/misc1.c
+
+
+*** ../vim-7.3.157/src/misc1.c 2011-04-11 14:26:15.000000000 +0200
+--- src/misc1.c 2011-04-11 14:11:17.000000000 +0200
+***************
+*** 6433,6438 ****
+--- 6433,6440 ----
+ /* find how indented the line beginning the comment is */
+ getvcol(curwin, trypos, &col, NULL, NULL);
+ amount = col;
++ *lead_start = NUL;
++ *lead_middle = NUL;
+
+ p = curbuf->b_p_com;
+ while (*p != NUL)
+*** ../vim-7.3.157/src/version.c 2011-04-11 14:26:15.000000000 +0200
+--- src/version.c 2011-04-11 14:27:05.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 158,
+ /**/
+
+--
+It's totally unfair to suggest - as many have - that engineers are socially
+inept. Engineers simply have different objectives when it comes to social
+interaction.
+ (Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.159 b/source/ap/vim/patches/7.3.159
new file mode 100644
index 000000000..7029ac86c
--- /dev/null
+++ b/source/ap/vim/patches/7.3.159
@@ -0,0 +1,54 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.159
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.159
+Problem: Using uninitialized pointer when out of memory.
+Solution: Check for NULL return value.
+Files: src/mbyte.c
+
+
+*** ../vim-7.3.158/src/mbyte.c 2010-10-27 13:37:39.000000000 +0200
+--- src/mbyte.c 2011-04-11 14:17:39.000000000 +0200
+***************
+*** 4129,4135 ****
+ done = to - (char *)result;
+ }
+
+! if (resultlenp != NULL)
+ *resultlenp = (int)(to - (char *)result);
+ return result;
+ }
+--- 4129,4135 ----
+ done = to - (char *)result;
+ }
+
+! if (resultlenp != NULL && result != NULL)
+ *resultlenp = (int)(to - (char *)result);
+ return result;
+ }
+*** ../vim-7.3.158/src/version.c 2011-04-11 14:27:34.000000000 +0200
+--- src/version.c 2011-04-11 14:28:08.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 159,
+ /**/
+
+--
+I learned the customs and mannerisms of engineers by observing them, much the
+way Jane Goodall learned about the great apes, but without the hassle of
+grooming.
+ (Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.160 b/source/ap/vim/patches/7.3.160
new file mode 100644
index 000000000..bf3a069ff
--- /dev/null
+++ b/source/ap/vim/patches/7.3.160
@@ -0,0 +1,482 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.160
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.160
+Problem: Unsafe string copying.
+Solution: Use vim_strncpy() instead of strcpy(). Use vim_strcat() instead
+ of strcat().
+Files: src/buffer.c, src/ex_docmd.c, src/hardcopy.c, src/menu.c,
+ src/misc1.c, src/misc2.c, src/proto/misc2.pro, src/netbeans.c,
+ src/os_unix.c, src/spell.c, src/syntax.c, src/tag.c
+
+*** ../vim-7.3.159/src/buffer.c 2011-02-15 14:24:42.000000000 +0100
+--- src/buffer.c 2011-04-11 16:08:38.000000000 +0200
+***************
+*** 3176,3182 ****
+ /* format: "fname + (path) (1 of 2) - VIM" */
+
+ if (curbuf->b_fname == NULL)
+! STRCPY(buf, _("[No Name]"));
+ else
+ {
+ p = transstr(gettail(curbuf->b_fname));
+--- 3176,3182 ----
+ /* format: "fname + (path) (1 of 2) - VIM" */
+
+ if (curbuf->b_fname == NULL)
+! vim_strncpy(buf, (char_u *)_("[No Name]"), IOSIZE - 100);
+ else
+ {
+ p = transstr(gettail(curbuf->b_fname));
+***************
+*** 3232,3238 ****
+ if (serverName != NULL)
+ {
+ STRCAT(buf, " - ");
+! STRCAT(buf, serverName);
+ }
+ else
+ #endif
+--- 3232,3238 ----
+ if (serverName != NULL)
+ {
+ STRCAT(buf, " - ");
+! vim_strcat(buf, serverName, IOSIZE);
+ }
+ else
+ #endif
+*** ../vim-7.3.159/src/ex_docmd.c 2011-03-03 15:54:45.000000000 +0100
+--- src/ex_docmd.c 2011-04-11 15:43:48.000000000 +0200
+***************
+*** 5096,5102 ****
+ char_u buff[IOSIZE];
+
+ if (n == 1)
+! STRCPY(buff, _("1 more file to edit. Quit anyway?"));
+ else
+ vim_snprintf((char *)buff, IOSIZE,
+ _("%d more files to edit. Quit anyway?"), n);
+--- 5096,5104 ----
+ char_u buff[IOSIZE];
+
+ if (n == 1)
+! vim_strncpy(buff,
+! (char_u *)_("1 more file to edit. Quit anyway?"),
+! IOSIZE - 1);
+ else
+ vim_snprintf((char *)buff, IOSIZE,
+ _("%d more files to edit. Quit anyway?"), n);
+*** ../vim-7.3.159/src/hardcopy.c 2010-08-15 21:57:25.000000000 +0200
+--- src/hardcopy.c 2011-04-11 15:30:09.000000000 +0200
+***************
+*** 1761,1772 ****
+ {
+ char_u buffer[MAXPATHL + 1];
+
+! STRCPY(resource->name, name);
+ /* Look for named resource file in runtimepath */
+ STRCPY(buffer, "print");
+ add_pathsep(buffer);
+! STRCAT(buffer, name);
+! STRCAT(buffer, ".ps");
+ resource->filename[0] = NUL;
+ return (do_in_runtimepath(buffer, FALSE, prt_resource_name,
+ resource->filename)
+--- 1761,1772 ----
+ {
+ char_u buffer[MAXPATHL + 1];
+
+! vim_strncpy(resource->name, (char_u *)name, 63);
+ /* Look for named resource file in runtimepath */
+ STRCPY(buffer, "print");
+ add_pathsep(buffer);
+! vim_strcat(buffer, (char_u *)name, MAXPATHL);
+! vim_strcat(buffer, (char_u *)".ps", MAXPATHL);
+ resource->filename[0] = NUL;
+ return (do_in_runtimepath(buffer, FALSE, prt_resource_name,
+ resource->filename)
+*** ../vim-7.3.159/src/menu.c 2011-01-04 17:49:25.000000000 +0100
+--- src/menu.c 2011-04-11 15:17:21.000000000 +0200
+***************
+*** 1394,1400 ****
+ int idx;
+ {
+ static vimmenu_T *menu = NULL;
+! static char_u tbuffer[256]; /*hack*/
+ char_u *str;
+ #ifdef FEAT_MULTI_LANG
+ static int should_advance = FALSE;
+--- 1394,1401 ----
+ int idx;
+ {
+ static vimmenu_T *menu = NULL;
+! #define TBUFFER_LEN 256
+! static char_u tbuffer[TBUFFER_LEN]; /*hack*/
+ char_u *str;
+ #ifdef FEAT_MULTI_LANG
+ static int should_advance = FALSE;
+***************
+*** 1428,1438 ****
+ {
+ #ifdef FEAT_MULTI_LANG
+ if (should_advance)
+! STRCPY(tbuffer, menu->en_dname);
+ else
+ {
+ #endif
+! STRCPY(tbuffer, menu->dname);
+ #ifdef FEAT_MULTI_LANG
+ if (menu->en_dname == NULL)
+ should_advance = TRUE;
+--- 1429,1439 ----
+ {
+ #ifdef FEAT_MULTI_LANG
+ if (should_advance)
+! vim_strncpy(tbuffer, menu->en_dname, TBUFFER_LEN - 2);
+ else
+ {
+ #endif
+! vim_strncpy(tbuffer, menu->dname, TBUFFER_LEN - 2);
+ #ifdef FEAT_MULTI_LANG
+ if (menu->en_dname == NULL)
+ should_advance = TRUE;
+*** ../vim-7.3.159/src/misc1.c 2011-04-11 14:27:34.000000000 +0200
+--- src/misc1.c 2011-04-11 16:03:22.000000000 +0200
+***************
+*** 3332,3350 ****
+ if (pn == 1)
+ {
+ if (n > 0)
+! STRCPY(msg_buf, _("1 more line"));
+ else
+! STRCPY(msg_buf, _("1 line less"));
+ }
+ else
+ {
+ if (n > 0)
+! sprintf((char *)msg_buf, _("%ld more lines"), pn);
+ else
+! sprintf((char *)msg_buf, _("%ld fewer lines"), pn);
+ }
+ if (got_int)
+! STRCAT(msg_buf, _(" (Interrupted)"));
+ if (msg(msg_buf))
+ {
+ set_keep_msg(msg_buf, 0);
+--- 3332,3354 ----
+ if (pn == 1)
+ {
+ if (n > 0)
+! vim_strncpy(msg_buf, (char_u *)_("1 more line"),
+! MSG_BUF_LEN - 1);
+ else
+! vim_strncpy(msg_buf, (char_u *)_("1 line less"),
+! MSG_BUF_LEN - 1);
+ }
+ else
+ {
+ if (n > 0)
+! vim_snprintf((char *)msg_buf, MSG_BUF_LEN,
+! _("%ld more lines"), pn);
+ else
+! vim_snprintf((char *)msg_buf, MSG_BUF_LEN,
+! _("%ld fewer lines"), pn);
+ }
+ if (got_int)
+! vim_strcat(msg_buf, (char_u *)_(" (Interrupted)"), MSG_BUF_LEN);
+ if (msg(msg_buf))
+ {
+ set_keep_msg(msg_buf, 0);
+*** ../vim-7.3.159/src/misc2.c 2010-12-08 13:11:15.000000000 +0100
+--- src/misc2.c 2011-04-11 15:30:20.000000000 +0200
+***************
+*** 1647,1652 ****
+--- 1647,1674 ----
+ }
+
+ /*
++ * Like strcat(), but make sure the result fits in "tosize" bytes and is
++ * always NUL terminated.
++ */
++ void
++ vim_strcat(to, from, tosize)
++ char_u *to;
++ char_u *from;
++ size_t tosize;
++ {
++ size_t tolen = STRLEN(to);
++ size_t fromlen = STRLEN(from);
++
++ if (tolen + fromlen + 1 > tosize)
++ {
++ mch_memmove(to + tolen, from, tosize - tolen - 1);
++ to[tosize - 1] = NUL;
++ }
++ else
++ STRCPY(to + tolen, from);
++ }
++
++ /*
+ * Isolate one part of a string option where parts are separated with
+ * "sep_chars".
+ * The part is copied into "buf[maxlen]".
+*** ../vim-7.3.159/src/proto/misc2.pro 2010-08-15 21:57:28.000000000 +0200
+--- src/proto/misc2.pro 2011-04-11 15:29:55.000000000 +0200
+***************
+*** 40,45 ****
+--- 40,46 ----
+ void copy_chars __ARGS((char_u *ptr, size_t count, int c));
+ void del_trailing_spaces __ARGS((char_u *ptr));
+ void vim_strncpy __ARGS((char_u *to, char_u *from, size_t len));
++ void vim_strcat __ARGS((char_u *to, char_u *from, size_t tosize));
+ int copy_option_part __ARGS((char_u **option, char_u *buf, int maxlen, char *sep_chars));
+ void vim_free __ARGS((void *x));
+ int vim_stricmp __ARGS((char *s1, char *s2));
+*** ../vim-7.3.159/src/netbeans.c 2011-04-01 15:33:54.000000000 +0200
+--- src/netbeans.c 2011-04-11 16:02:51.000000000 +0200
+***************
+*** 3914,3927 ****
+ }
+ else
+ {
+! char_u ebuf[BUFSIZ];
+
+! STRCPY(ebuf, (char_u *)_("E505: "));
+! STRCAT(ebuf, IObuff);
+! STRCAT(ebuf, (char_u *)_("is read-only (add ! to override)"));
+! STRCPY(IObuff, ebuf);
+! nbdebug((" %s\n", ebuf ));
+! emsg(IObuff);
+ }
+ }
+
+--- 3914,3925 ----
+ }
+ else
+ {
+! char_u msgbuf[IOSIZE];
+
+! vim_snprintf((char *)msgbuf, IOSIZE,
+! _("E505: %s is read-only (add ! to override)"), IObuff);
+! nbdebug((" %s\n", msgbuf));
+! emsg(msgbuf);
+ }
+ }
+
+*** ../vim-7.3.159/src/os_unix.c 2011-02-15 17:39:14.000000000 +0100
+--- src/os_unix.c 2011-04-11 16:39:11.000000000 +0200
+***************
+*** 5725,5730 ****
+--- 5725,5731 ----
+ if (shell_style == STYLE_PRINT && !did_find_nul)
+ {
+ /* If there is a NUL, set did_find_nul, else set check_spaces */
++ buffer[len] = NUL;
+ if (len && (int)STRLEN(buffer) < (int)len - 1)
+ did_find_nul = TRUE;
+ else
+***************
+*** 6594,6600 ****
+ xterm_hints.x = 2;
+ return TRUE;
+ }
+! if (mouse_code == NULL)
+ {
+ xterm_trace = 0;
+ return FALSE;
+--- 6595,6601 ----
+ xterm_hints.x = 2;
+ return TRUE;
+ }
+! if (mouse_code == NULL || STRLEN(mouse_code) > 45)
+ {
+ xterm_trace = 0;
+ return FALSE;
+*** ../vim-7.3.159/src/spell.c 2011-02-01 13:59:44.000000000 +0100
+--- src/spell.c 2011-04-11 15:50:40.000000000 +0200
+***************
+*** 6957,6963 ****
+ if (ae->ae_add == NULL)
+ *newword = NUL;
+ else
+! STRCPY(newword, ae->ae_add);
+ p = word;
+ if (ae->ae_chop != NULL)
+ {
+--- 6957,6963 ----
+ if (ae->ae_add == NULL)
+ *newword = NUL;
+ else
+! vim_strncpy(newword, ae->ae_add, MAXWLEN - 1);
+ p = word;
+ if (ae->ae_chop != NULL)
+ {
+***************
+*** 6978,6984 ****
+ else
+ {
+ /* suffix: chop/add at the end of the word */
+! STRCPY(newword, word);
+ if (ae->ae_chop != NULL)
+ {
+ /* Remove chop string. */
+--- 6978,6984 ----
+ else
+ {
+ /* suffix: chop/add at the end of the word */
+! vim_strncpy(newword, word, MAXWLEN - 1);
+ if (ae->ae_chop != NULL)
+ {
+ /* Remove chop string. */
+***************
+*** 8654,8660 ****
+ * Write the .sug file.
+ * Make the file name by changing ".spl" to ".sug".
+ */
+! STRCPY(fname, wfname);
+ len = (int)STRLEN(fname);
+ fname[len - 2] = 'u';
+ fname[len - 1] = 'g';
+--- 8654,8660 ----
+ * Write the .sug file.
+ * Make the file name by changing ".spl" to ".sug".
+ */
+! vim_strncpy(fname, wfname, MAXPATHL - 1);
+ len = (int)STRLEN(fname);
+ fname[len - 2] = 'u';
+ fname[len - 1] = 'g';
+***************
+*** 10261,10267 ****
+
+ /* The suggested word may replace only part of the bad word, add
+ * the not replaced part. */
+! STRCPY(wcopy, stp->st_word);
+ if (sug.su_badlen > stp->st_orglen)
+ vim_strncpy(wcopy + stp->st_wordlen,
+ sug.su_badptr + stp->st_orglen,
+--- 10261,10267 ----
+
+ /* The suggested word may replace only part of the bad word, add
+ * the not replaced part. */
+! vim_strncpy(wcopy, stp->st_word, MAXWLEN);
+ if (sug.su_badlen > stp->st_orglen)
+ vim_strncpy(wcopy + stp->st_wordlen,
+ sug.su_badptr + stp->st_orglen,
+***************
+*** 13162,13168 ****
+ pbad = badsound2;
+ }
+
+! if (lendiff > 0)
+ {
+ /* Add part of the bad word to the good word, so that we soundfold
+ * what replaces the bad word. */
+--- 13162,13168 ----
+ pbad = badsound2;
+ }
+
+! if (lendiff > 0 && stp->st_wordlen + lendiff < MAXWLEN)
+ {
+ /* Add part of the bad word to the good word, so that we soundfold
+ * what replaces the bad word. */
+***************
+*** 13875,13881 ****
+ for (i = gap->ga_len - 1; i >= 0; --i)
+ {
+ /* Need to append what follows to check for "the the". */
+! STRCPY(longword, stp[i].st_word);
+ len = stp[i].st_wordlen;
+ vim_strncpy(longword + len, su->su_badptr + stp[i].st_orglen,
+ MAXWLEN - len);
+--- 13875,13881 ----
+ for (i = gap->ga_len - 1; i >= 0; --i)
+ {
+ /* Need to append what follows to check for "the the". */
+! vim_strncpy(longword, stp[i].st_word, MAXWLEN);
+ len = stp[i].st_wordlen;
+ vim_strncpy(longword + len, su->su_badptr + stp[i].st_orglen,
+ MAXWLEN - len);
+***************
+*** 14221,14227 ****
+ *t = NUL;
+ }
+ else
+! STRCPY(word, s);
+
+ smp = (salitem_T *)slang->sl_sal.ga_data;
+
+--- 14221,14227 ----
+ *t = NUL;
+ }
+ else
+! vim_strncpy(word, s, MAXWLEN - 1);
+
+ smp = (salitem_T *)slang->sl_sal.ga_data;
+
+*** ../vim-7.3.159/src/syntax.c 2011-04-02 15:12:45.000000000 +0200
+--- src/syntax.c 2011-04-11 15:44:30.000000000 +0200
+***************
+*** 8576,8583 ****
+ if (iarg & hl_attr_table[i])
+ {
+ if (buf[0] != NUL)
+! STRCAT(buf, ",");
+! STRCAT(buf, hl_name_table[i]);
+ iarg &= ~hl_attr_table[i]; /* don't want "inverse" */
+ }
+ }
+--- 8576,8583 ----
+ if (iarg & hl_attr_table[i])
+ {
+ if (buf[0] != NUL)
+! vim_strcat(buf, (char_u *)",", 100);
+! vim_strcat(buf, (char_u *)hl_name_table[i], 100);
+ iarg &= ~hl_attr_table[i]; /* don't want "inverse" */
+ }
+ }
+*** ../vim-7.3.159/src/tag.c 2011-02-25 15:13:43.000000000 +0100
+--- src/tag.c 2011-04-11 15:34:59.000000000 +0200
+***************
+*** 806,812 ****
+ p = tag_full_fname(&tagp);
+ if (p == NULL)
+ continue;
+! STRCPY(fname, p);
+ vim_free(p);
+
+ /*
+--- 806,812 ----
+ p = tag_full_fname(&tagp);
+ if (p == NULL)
+ continue;
+! vim_strncpy(fname, p, MAXPATHL);
+ vim_free(p);
+
+ /*
+*** ../vim-7.3.159/src/version.c 2011-04-11 14:29:13.000000000 +0200
+--- src/version.c 2011-04-11 16:50:53.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 160,
+ /**/
+
+--
+If someone questions your market projections, simply point out that your
+target market is "People who are nuts" and "People who will buy any damn
+thing". Nobody is going to tell you there aren't enough of those people
+to go around.
+ (Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.161 b/source/ap/vim/patches/7.3.161
new file mode 100644
index 000000000..61223ec2b
--- /dev/null
+++ b/source/ap/vim/patches/7.3.161
@@ -0,0 +1,1645 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.161
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.161
+Problem: Items on the stack may be too big.
+Solution: Make items static or allocate them.
+Files: src/eval.c, src/ex_cmds.c, src/ex_cmds2.c, src/ex_docmd.c,
+ src/fileio.c, src/hardcopy.c, src/quickfix.c, src/main.c,
+ src/netbeans.c, src/spell.c, src/tag.c, src/vim.h, src/xxd/xxd.c
+
+
+*** ../vim-7.3.160/src/eval.c 2011-04-11 13:46:07.000000000 +0200
+--- src/eval.c 2011-04-11 21:05:50.000000000 +0200
+***************
+*** 11100,11117 ****
+ typval_T *argvars UNUSED;
+ typval_T *rettv;
+ {
+! char_u cwd[MAXPATHL];
+
+ rettv->v_type = VAR_STRING;
+! if (mch_dirname(cwd, MAXPATHL) == FAIL)
+! rettv->vval.v_string = NULL;
+! else
+ {
+! rettv->vval.v_string = vim_strsave(cwd);
+ #ifdef BACKSLASH_IN_FILENAME
+! if (rettv->vval.v_string != NULL)
+! slash_adjust(rettv->vval.v_string);
+ #endif
+ }
+ }
+
+--- 11100,11121 ----
+ typval_T *argvars UNUSED;
+ typval_T *rettv;
+ {
+! char_u *cwd;
+
+ rettv->v_type = VAR_STRING;
+! rettv->vval.v_string = NULL;
+! cwd = alloc(MAXPATHL);
+! if (cwd != NULL)
+ {
+! if (mch_dirname(cwd, MAXPATHL) != FAIL)
+! {
+! rettv->vval.v_string = vim_strsave(cwd);
+ #ifdef BACKSLASH_IN_FILENAME
+! if (rettv->vval.v_string != NULL)
+! slash_adjust(rettv->vval.v_string);
+ #endif
++ }
++ vim_free(cwd);
+ }
+ }
+
+***************
+*** 14938,14943 ****
+--- 14942,14950 ----
+ typval_T *rettv;
+ {
+ char_u *p;
++ #ifdef HAVE_READLINK
++ char_u *buf = NULL;
++ #endif
+
+ p = get_tv_string(&argvars[0]);
+ #ifdef FEAT_SHORTCUT
+***************
+*** 14953,14959 ****
+ #else
+ # ifdef HAVE_READLINK
+ {
+- char_u buf[MAXPATHL + 1];
+ char_u *cpy;
+ int len;
+ char_u *remain = NULL;
+--- 14960,14965 ----
+***************
+*** 14981,14986 ****
+--- 14987,14996 ----
+ q[-1] = NUL;
+ }
+
++ buf = alloc(MAXPATHL + 1);
++ if (buf == NULL)
++ goto fail;
++
+ for (;;)
+ {
+ for (;;)
+***************
+*** 15124,15129 ****
+--- 15134,15140 ----
+
+ #ifdef HAVE_READLINK
+ fail:
++ vim_free(buf);
+ #endif
+ rettv->v_type = VAR_STRING;
+ }
+***************
+*** 17604,17621 ****
+ typval_T *argvars UNUSED;
+ typval_T *rettv;
+ {
+! char_u fname[MAXPATHL + 1];
+ tagname_T tn;
+ int first;
+
+ if (rettv_list_alloc(rettv) == FAIL)
+ return;
+
+ for (first = TRUE; ; first = FALSE)
+ if (get_tagfname(&tn, first, fname) == FAIL
+ || list_append_string(rettv->vval.v_list, fname, -1) == FAIL)
+ break;
+ tagname_free(&tn);
+ }
+
+ /*
+--- 17615,17636 ----
+ typval_T *argvars UNUSED;
+ typval_T *rettv;
+ {
+! char_u *fname;
+ tagname_T tn;
+ int first;
+
+ if (rettv_list_alloc(rettv) == FAIL)
+ return;
++ fname = alloc(MAXPATHL);
++ if (fname == NULL)
++ return;
+
+ for (first = TRUE; ; first = FALSE)
+ if (get_tagfname(&tn, first, fname) == FAIL
+ || list_append_string(rettv->vval.v_list, fname, -1) == FAIL)
+ break;
+ tagname_free(&tn);
++ vim_free(fname);
+ }
+
+ /*
+*** ../vim-7.3.160/src/ex_cmds.c 2011-02-01 13:48:47.000000000 +0100
+--- src/ex_cmds.c 2011-04-11 20:51:34.000000000 +0200
+***************
+*** 2777,2783 ****
+ #if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG)
+ if (p_confirm || cmdmod.confirm)
+ {
+! char_u buff[IOSIZE];
+
+ dialog_msg(buff, _("Overwrite existing file \"%s\"?"), fname);
+ if (vim_dialog_yesno(VIM_QUESTION, NULL, buff, 2) != VIM_YES)
+--- 2777,2783 ----
+ #if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG)
+ if (p_confirm || cmdmod.confirm)
+ {
+! char_u buff[DIALOG_MSG_SIZE];
+
+ dialog_msg(buff, _("Overwrite existing file \"%s\"?"), fname);
+ if (vim_dialog_yesno(VIM_QUESTION, NULL, buff, 2) != VIM_YES)
+***************
+*** 2795,2801 ****
+ /* For ":w! filename" check that no swap file exists for "filename". */
+ if (other && !emsg_silent)
+ {
+! char_u dir[MAXPATHL];
+ char_u *p;
+ int r;
+ char_u *swapname;
+--- 2795,2801 ----
+ /* For ":w! filename" check that no swap file exists for "filename". */
+ if (other && !emsg_silent)
+ {
+! char_u *dir;
+ char_u *p;
+ int r;
+ char_u *swapname;
+***************
+*** 2806,2825 ****
+ * Use 'shortname' of the current buffer, since there is no buffer
+ * for the written file. */
+ if (*p_dir == NUL)
+ STRCPY(dir, ".");
+ else
+ {
+ p = p_dir;
+ copy_option_part(&p, dir, MAXPATHL, ",");
+ }
+ swapname = makeswapname(fname, ffname, curbuf, dir);
+ r = vim_fexists(swapname);
+ if (r)
+ {
+ #if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG)
+ if (p_confirm || cmdmod.confirm)
+ {
+! char_u buff[IOSIZE];
+
+ dialog_msg(buff,
+ _("Swap file \"%s\" exists, overwrite anyway?"),
+--- 2806,2834 ----
+ * Use 'shortname' of the current buffer, since there is no buffer
+ * for the written file. */
+ if (*p_dir == NUL)
++ {
++ dir = alloc(5);
++ if (dir == NULL)
++ return FAIL;
+ STRCPY(dir, ".");
++ }
+ else
+ {
++ dir = alloc(MAXPATHL);
++ if (dir == NULL)
++ return FAIL;
+ p = p_dir;
+ copy_option_part(&p, dir, MAXPATHL, ",");
+ }
+ swapname = makeswapname(fname, ffname, curbuf, dir);
++ vim_free(dir);
+ r = vim_fexists(swapname);
+ if (r)
+ {
+ #if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG)
+ if (p_confirm || cmdmod.confirm)
+ {
+! char_u buff[DIALOG_MSG_SIZE];
+
+ dialog_msg(buff,
+ _("Swap file \"%s\" exists, overwrite anyway?"),
+***************
+*** 2969,2975 ****
+ #if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG)
+ if ((p_confirm || cmdmod.confirm) && buf->b_fname != NULL)
+ {
+! char_u buff[IOSIZE];
+
+ if (buf->b_p_ro)
+ dialog_msg(buff, _("'readonly' option is set for \"%s\".\nDo you wish to write anyway?"),
+--- 2978,2984 ----
+ #if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG)
+ if ((p_confirm || cmdmod.confirm) && buf->b_fname != NULL)
+ {
+! char_u buff[DIALOG_MSG_SIZE];
+
+ if (buf->b_p_ro)
+ dialog_msg(buff, _("'readonly' option is set for \"%s\".\nDo you wish to write anyway?"),
+*** ../vim-7.3.160/src/ex_cmds2.c 2011-02-25 14:46:06.000000000 +0100
+--- src/ex_cmds2.c 2011-04-11 20:51:40.000000000 +0200
+***************
+*** 1492,1498 ****
+ buf_T *buf;
+ int checkall; /* may abandon all changed buffers */
+ {
+! char_u buff[IOSIZE];
+ int ret;
+ buf_T *buf2;
+
+--- 1492,1498 ----
+ buf_T *buf;
+ int checkall; /* may abandon all changed buffers */
+ {
+! char_u buff[DIALOG_MSG_SIZE];
+ int ret;
+ buf_T *buf2;
+
+*** ../vim-7.3.160/src/ex_docmd.c 2011-04-11 16:56:29.000000000 +0200
+--- src/ex_docmd.c 2011-04-11 21:20:35.000000000 +0200
+***************
+*** 5093,5106 ****
+ #if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG)
+ if ((p_confirm || cmdmod.confirm) && curbuf->b_fname != NULL)
+ {
+! char_u buff[IOSIZE];
+
+ if (n == 1)
+ vim_strncpy(buff,
+ (char_u *)_("1 more file to edit. Quit anyway?"),
+! IOSIZE - 1);
+ else
+! vim_snprintf((char *)buff, IOSIZE,
+ _("%d more files to edit. Quit anyway?"), n);
+ if (vim_dialog_yesno(VIM_QUESTION, NULL, buff, 1) == VIM_YES)
+ return OK;
+--- 5093,5106 ----
+ #if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG)
+ if ((p_confirm || cmdmod.confirm) && curbuf->b_fname != NULL)
+ {
+! char_u buff[DIALOG_MSG_SIZE];
+
+ if (n == 1)
+ vim_strncpy(buff,
+ (char_u *)_("1 more file to edit. Quit anyway?"),
+! DIALOG_MSG_SIZE - 1);
+ else
+! vim_snprintf((char *)buff, DIALOG_MSG_SIZE,
+ _("%d more files to edit. Quit anyway?"), n);
+ if (vim_dialog_yesno(VIM_QUESTION, NULL, buff, 1) == VIM_YES)
+ return OK;
+***************
+*** 8926,8960 ****
+ failed = TRUE;
+ if (eap->cmdidx == CMD_mksession)
+ {
+! char_u dirnow[MAXPATHL]; /* current directory */
+
+! /*
+! * Change to session file's dir.
+! */
+! if (mch_dirname(dirnow, MAXPATHL) == FAIL
+! || mch_chdir((char *)dirnow) != 0)
+! *dirnow = NUL;
+! if (*dirnow != NUL && (ssop_flags & SSOP_SESDIR))
+! {
+! if (vim_chdirfile(fname) == OK)
+! shorten_fnames(TRUE);
+! }
+! else if (*dirnow != NUL
+! && (ssop_flags & SSOP_CURDIR) && globaldir != NULL)
+ {
+! if (mch_chdir((char *)globaldir) == 0)
+! shorten_fnames(TRUE);
+! }
+
+! failed |= (makeopens(fd, dirnow) == FAIL);
+
+! /* restore original dir */
+! if (*dirnow != NUL && ((ssop_flags & SSOP_SESDIR)
+ || ((ssop_flags & SSOP_CURDIR) && globaldir != NULL)))
+! {
+! if (mch_chdir((char *)dirnow) != 0)
+! EMSG(_(e_prev_dir));
+! shorten_fnames(TRUE);
+ }
+ }
+ else
+--- 8926,8967 ----
+ failed = TRUE;
+ if (eap->cmdidx == CMD_mksession)
+ {
+! char_u *dirnow; /* current directory */
+
+! dirnow = alloc(MAXPATHL);
+! if (dirnow == NULL)
+! failed = TRUE;
+! else
+ {
+! /*
+! * Change to session file's dir.
+! */
+! if (mch_dirname(dirnow, MAXPATHL) == FAIL
+! || mch_chdir((char *)dirnow) != 0)
+! *dirnow = NUL;
+! if (*dirnow != NUL && (ssop_flags & SSOP_SESDIR))
+! {
+! if (vim_chdirfile(fname) == OK)
+! shorten_fnames(TRUE);
+! }
+! else if (*dirnow != NUL
+! && (ssop_flags & SSOP_CURDIR) && globaldir != NULL)
+! {
+! if (mch_chdir((char *)globaldir) == 0)
+! shorten_fnames(TRUE);
+! }
+
+! failed |= (makeopens(fd, dirnow) == FAIL);
+
+! /* restore original dir */
+! if (*dirnow != NUL && ((ssop_flags & SSOP_SESDIR)
+ || ((ssop_flags & SSOP_CURDIR) && globaldir != NULL)))
+! {
+! if (mch_chdir((char *)dirnow) != 0)
+! EMSG(_(e_prev_dir));
+! shorten_fnames(TRUE);
+! }
+! vim_free(dirnow);
+ }
+ }
+ else
+***************
+*** 8985,8994 ****
+ else if (eap->cmdidx == CMD_mksession)
+ {
+ /* successful session write - set this_session var */
+! char_u tbuf[MAXPATHL];
+
+! if (vim_FullName(fname, tbuf, MAXPATHL, FALSE) == OK)
+! set_vim_var_string(VV_THIS_SESSION, tbuf, -1);
+ }
+ #endif
+ #ifdef MKSESSION_NL
+--- 8992,9006 ----
+ else if (eap->cmdidx == CMD_mksession)
+ {
+ /* successful session write - set this_session var */
+! char_u *tbuf;
+
+! tbuf = alloc(MAXPATHL);
+! if (tbuf != NULL)
+! {
+! if (vim_FullName(fname, tbuf, MAXPATHL, FALSE) == OK)
+! set_vim_var_string(VV_THIS_SESSION, tbuf, -1);
+! vim_free(tbuf);
+! }
+ }
+ #endif
+ #ifdef MKSESSION_NL
+***************
+*** 10677,10683 ****
+ unsigned *flagp;
+ {
+ int i;
+! char_u buf[MAXPATHL];
+ char_u *s;
+
+ if (gap->ga_len == 0)
+--- 10689,10695 ----
+ unsigned *flagp;
+ {
+ int i;
+! char_u *buf = NULL;
+ char_u *s;
+
+ if (gap->ga_len == 0)
+***************
+*** 10692,10702 ****
+ {
+ if (fullname)
+ {
+! (void)vim_FullName(s, buf, MAXPATHL, FALSE);
+! s = buf;
+ }
+ if (fputs(" ", fd) < 0 || ses_put_fname(fd, s, flagp) == FAIL)
+ return FAIL;
+ }
+ }
+ return put_eol(fd);
+--- 10704,10722 ----
+ {
+ if (fullname)
+ {
+! buf = alloc(MAXPATHL);
+! if (buf != NULL)
+! {
+! (void)vim_FullName(s, buf, MAXPATHL, FALSE);
+! s = buf;
+! }
+ }
+ if (fputs(" ", fd) < 0 || ses_put_fname(fd, s, flagp) == FAIL)
++ {
++ vim_free(buf);
+ return FAIL;
++ }
++ vim_free(buf);
+ }
+ }
+ return put_eol(fd);
+***************
+*** 10925,10931 ****
+
+ #if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG) || defined(PROTO)
+ /*
+! * Make a dialog message in "buff[IOSIZE]".
+ * "format" must contain "%s".
+ */
+ void
+--- 10945,10951 ----
+
+ #if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG) || defined(PROTO)
+ /*
+! * Make a dialog message in "buff[DIALOG_MSG_SIZE]".
+ * "format" must contain "%s".
+ */
+ void
+***************
+*** 10936,10942 ****
+ {
+ if (fname == NULL)
+ fname = (char_u *)_("Untitled");
+! vim_snprintf((char *)buff, IOSIZE, format, fname);
+ }
+ #endif
+
+--- 10956,10962 ----
+ {
+ if (fname == NULL)
+ fname = (char_u *)_("Untitled");
+! vim_snprintf((char *)buff, DIALOG_MSG_SIZE, format, fname);
+ }
+ #endif
+
+*** ../vim-7.3.160/src/fileio.c 2011-02-25 16:52:13.000000000 +0100
+--- src/fileio.c 2011-04-11 18:35:10.000000000 +0200
+***************
+*** 6023,6037 ****
+ shorten_fname1(full_path)
+ char_u *full_path;
+ {
+! char_u dirname[MAXPATHL];
+ char_u *p = full_path;
+
+ if (mch_dirname(dirname, MAXPATHL) == OK)
+ {
+ p = shorten_fname(full_path, dirname);
+ if (p == NULL || *p == NUL)
+ p = full_path;
+ }
+ return p;
+ }
+ #endif
+--- 6023,6041 ----
+ shorten_fname1(full_path)
+ char_u *full_path;
+ {
+! char_u *dirname;
+ char_u *p = full_path;
+
++ dirname = alloc(MAXPATHL);
++ if (dirname == NULL)
++ return full_path;
+ if (mch_dirname(dirname, MAXPATHL) == OK)
+ {
+ p = shorten_fname(full_path, dirname);
+ if (p == NULL || *p == NUL)
+ p = full_path;
+ }
++ vim_free(dirname);
+ return p;
+ }
+ #endif
+*** ../vim-7.3.160/src/hardcopy.c 2011-04-11 16:56:29.000000000 +0200
+--- src/hardcopy.c 2011-04-11 18:23:38.000000000 +0200
+***************
+*** 1759,1765 ****
+ char *name;
+ struct prt_ps_resource_S *resource;
+ {
+! char_u buffer[MAXPATHL + 1];
+
+ vim_strncpy(resource->name, (char_u *)name, 63);
+ /* Look for named resource file in runtimepath */
+--- 1759,1770 ----
+ char *name;
+ struct prt_ps_resource_S *resource;
+ {
+! char_u *buffer;
+! int retval;
+!
+! buffer = alloc(MAXPATHL + 1);
+! if (buffer == NULL)
+! return FALSE;
+
+ vim_strncpy(resource->name, (char_u *)name, 63);
+ /* Look for named resource file in runtimepath */
+***************
+*** 1768,1776 ****
+ vim_strcat(buffer, (char_u *)name, MAXPATHL);
+ vim_strcat(buffer, (char_u *)".ps", MAXPATHL);
+ resource->filename[0] = NUL;
+! return (do_in_runtimepath(buffer, FALSE, prt_resource_name,
+ resource->filename)
+ && resource->filename[0] != NUL);
+ }
+
+ /* PS CR and LF characters have platform independent values */
+--- 1773,1783 ----
+ vim_strcat(buffer, (char_u *)name, MAXPATHL);
+ vim_strcat(buffer, (char_u *)".ps", MAXPATHL);
+ resource->filename[0] = NUL;
+! retval = (do_in_runtimepath(buffer, FALSE, prt_resource_name,
+ resource->filename)
+ && resource->filename[0] != NUL);
++ vim_free(buffer);
++ return retval;
+ }
+
+ /* PS CR and LF characters have platform independent values */
+***************
+*** 2848,2862 ****
+ double right;
+ double top;
+ double bottom;
+! struct prt_ps_resource_S res_prolog;
+! struct prt_ps_resource_S res_encoding;
+ char buffer[256];
+ char_u *p_encoding;
+ char_u *p;
+ #ifdef FEAT_MBYTE
+! struct prt_ps_resource_S res_cidfont;
+! struct prt_ps_resource_S res_cmap;
+ #endif
+
+ /*
+ * PS DSC Header comments - no PS code!
+--- 2855,2887 ----
+ double right;
+ double top;
+ double bottom;
+! struct prt_ps_resource_S *res_prolog;
+! struct prt_ps_resource_S *res_encoding;
+ char buffer[256];
+ char_u *p_encoding;
+ char_u *p;
+ #ifdef FEAT_MBYTE
+! struct prt_ps_resource_S *res_cidfont;
+! struct prt_ps_resource_S *res_cmap;
+ #endif
++ int retval = FALSE;
++
++ res_prolog = (struct prt_ps_resource_S *)
++ alloc(sizeof(struct prt_ps_resource_S));
++ res_encoding = (struct prt_ps_resource_S *)
++ alloc(sizeof(struct prt_ps_resource_S));
++ #ifdef FEAT_MBYTE
++ res_cidfont = (struct prt_ps_resource_S *)
++ alloc(sizeof(struct prt_ps_resource_S));
++ res_cmap = (struct prt_ps_resource_S *)
++ alloc(sizeof(struct prt_ps_resource_S));
++ #endif
++ if (res_prolog == NULL || res_encoding == NULL
++ #ifdef FEAT_MBYTE
++ || res_cidfont == NULL || res_cmap == NULL
++ #endif
++ )
++ goto theend;
+
+ /*
+ * PS DSC Header comments - no PS code!
+***************
+*** 2932,2958 ****
+ #endif
+
+ /* Search for external resources VIM supplies */
+! if (!prt_find_resource("prolog", &res_prolog))
+ {
+ EMSG(_("E456: Can't find PostScript resource file \"prolog.ps\""));
+ return FALSE;
+ }
+! if (!prt_open_resource(&res_prolog))
+ return FALSE;
+! if (!prt_check_resource(&res_prolog, PRT_PROLOG_VERSION))
+ return FALSE;
+ #ifdef FEAT_MBYTE
+ if (prt_out_mbyte)
+ {
+ /* Look for required version of multi-byte printing procset */
+! if (!prt_find_resource("cidfont", &res_cidfont))
+ {
+ EMSG(_("E456: Can't find PostScript resource file \"cidfont.ps\""));
+ return FALSE;
+ }
+! if (!prt_open_resource(&res_cidfont))
+ return FALSE;
+! if (!prt_check_resource(&res_cidfont, PRT_CID_PROLOG_VERSION))
+ return FALSE;
+ }
+ #endif
+--- 2957,2983 ----
+ #endif
+
+ /* Search for external resources VIM supplies */
+! if (!prt_find_resource("prolog", res_prolog))
+ {
+ EMSG(_("E456: Can't find PostScript resource file \"prolog.ps\""));
+ return FALSE;
+ }
+! if (!prt_open_resource(res_prolog))
+ return FALSE;
+! if (!prt_check_resource(res_prolog, PRT_PROLOG_VERSION))
+ return FALSE;
+ #ifdef FEAT_MBYTE
+ if (prt_out_mbyte)
+ {
+ /* Look for required version of multi-byte printing procset */
+! if (!prt_find_resource("cidfont", res_cidfont))
+ {
+ EMSG(_("E456: Can't find PostScript resource file \"cidfont.ps\""));
+ return FALSE;
+ }
+! if (!prt_open_resource(res_cidfont))
+ return FALSE;
+! if (!prt_check_resource(res_cidfont, PRT_CID_PROLOG_VERSION))
+ return FALSE;
+ }
+ #endif
+***************
+*** 2968,2974 ****
+ #endif
+ p_encoding = enc_skip(p_penc);
+ if (*p_encoding == NUL
+! || !prt_find_resource((char *)p_encoding, &res_encoding))
+ {
+ /* 'printencoding' not set or not supported - find alternate */
+ #ifdef FEAT_MBYTE
+--- 2993,2999 ----
+ #endif
+ p_encoding = enc_skip(p_penc);
+ if (*p_encoding == NUL
+! || !prt_find_resource((char *)p_encoding, res_encoding))
+ {
+ /* 'printencoding' not set or not supported - find alternate */
+ #ifdef FEAT_MBYTE
+***************
+*** 2977,2989 ****
+ p_encoding = enc_skip(p_enc);
+ props = enc_canon_props(p_encoding);
+ if (!(props & ENC_8BIT)
+! || !prt_find_resource((char *)p_encoding, &res_encoding))
+ /* 8-bit 'encoding' is not supported */
+ #endif
+ {
+ /* Use latin1 as default printing encoding */
+ p_encoding = (char_u *)"latin1";
+! if (!prt_find_resource((char *)p_encoding, &res_encoding))
+ {
+ EMSG2(_("E456: Can't find PostScript resource file \"%s.ps\""),
+ p_encoding);
+--- 3002,3014 ----
+ p_encoding = enc_skip(p_enc);
+ props = enc_canon_props(p_encoding);
+ if (!(props & ENC_8BIT)
+! || !prt_find_resource((char *)p_encoding, res_encoding))
+ /* 8-bit 'encoding' is not supported */
+ #endif
+ {
+ /* Use latin1 as default printing encoding */
+ p_encoding = (char_u *)"latin1";
+! if (!prt_find_resource((char *)p_encoding, res_encoding))
+ {
+ EMSG2(_("E456: Can't find PostScript resource file \"%s.ps\""),
+ p_encoding);
+***************
+*** 2991,2997 ****
+ }
+ }
+ }
+! if (!prt_open_resource(&res_encoding))
+ return FALSE;
+ /* For the moment there are no checks on encoding resource files to
+ * perform */
+--- 3016,3022 ----
+ }
+ }
+ }
+! if (!prt_open_resource(res_encoding))
+ return FALSE;
+ /* For the moment there are no checks on encoding resource files to
+ * perform */
+***************
+*** 3005,3017 ****
+ if (prt_use_courier)
+ {
+ /* Include ASCII range encoding vector */
+! if (!prt_find_resource(prt_ascii_encoding, &res_encoding))
+ {
+ EMSG2(_("E456: Can't find PostScript resource file \"%s.ps\""),
+ prt_ascii_encoding);
+ return FALSE;
+ }
+! if (!prt_open_resource(&res_encoding))
+ return FALSE;
+ /* For the moment there are no checks on encoding resource files to
+ * perform */
+--- 3030,3042 ----
+ if (prt_use_courier)
+ {
+ /* Include ASCII range encoding vector */
+! if (!prt_find_resource(prt_ascii_encoding, res_encoding))
+ {
+ EMSG2(_("E456: Can't find PostScript resource file \"%s.ps\""),
+ prt_ascii_encoding);
+ return FALSE;
+ }
+! if (!prt_open_resource(res_encoding))
+ return FALSE;
+ /* For the moment there are no checks on encoding resource files to
+ * perform */
+***************
+*** 3034,3077 ****
+ if (prt_out_mbyte && prt_custom_cmap)
+ {
+ /* Find user supplied CMap */
+! if (!prt_find_resource(prt_cmap, &res_cmap))
+ {
+ EMSG2(_("E456: Can't find PostScript resource file \"%s.ps\""),
+ prt_cmap);
+ return FALSE;
+ }
+! if (!prt_open_resource(&res_cmap))
+ return FALSE;
+ }
+ #endif
+
+ /* List resources supplied */
+! STRCPY(buffer, res_prolog.title);
+ STRCAT(buffer, " ");
+! STRCAT(buffer, res_prolog.version);
+ prt_dsc_resources("DocumentSuppliedResources", "procset", buffer);
+ #ifdef FEAT_MBYTE
+ if (prt_out_mbyte)
+ {
+! STRCPY(buffer, res_cidfont.title);
+ STRCAT(buffer, " ");
+! STRCAT(buffer, res_cidfont.version);
+ prt_dsc_resources(NULL, "procset", buffer);
+
+ if (prt_custom_cmap)
+ {
+! STRCPY(buffer, res_cmap.title);
+ STRCAT(buffer, " ");
+! STRCAT(buffer, res_cmap.version);
+ prt_dsc_resources(NULL, "cmap", buffer);
+ }
+ }
+ if (!prt_out_mbyte || prt_use_courier)
+ #endif
+ {
+! STRCPY(buffer, res_encoding.title);
+ STRCAT(buffer, " ");
+! STRCAT(buffer, res_encoding.version);
+ prt_dsc_resources(NULL, "encoding", buffer);
+ }
+ prt_dsc_requirements(prt_duplex, prt_tumble, prt_collate,
+--- 3059,3102 ----
+ if (prt_out_mbyte && prt_custom_cmap)
+ {
+ /* Find user supplied CMap */
+! if (!prt_find_resource(prt_cmap, res_cmap))
+ {
+ EMSG2(_("E456: Can't find PostScript resource file \"%s.ps\""),
+ prt_cmap);
+ return FALSE;
+ }
+! if (!prt_open_resource(res_cmap))
+ return FALSE;
+ }
+ #endif
+
+ /* List resources supplied */
+! STRCPY(buffer, res_prolog->title);
+ STRCAT(buffer, " ");
+! STRCAT(buffer, res_prolog->version);
+ prt_dsc_resources("DocumentSuppliedResources", "procset", buffer);
+ #ifdef FEAT_MBYTE
+ if (prt_out_mbyte)
+ {
+! STRCPY(buffer, res_cidfont->title);
+ STRCAT(buffer, " ");
+! STRCAT(buffer, res_cidfont->version);
+ prt_dsc_resources(NULL, "procset", buffer);
+
+ if (prt_custom_cmap)
+ {
+! STRCPY(buffer, res_cmap->title);
+ STRCAT(buffer, " ");
+! STRCAT(buffer, res_cmap->version);
+ prt_dsc_resources(NULL, "cmap", buffer);
+ }
+ }
+ if (!prt_out_mbyte || prt_use_courier)
+ #endif
+ {
+! STRCPY(buffer, res_encoding->title);
+ STRCAT(buffer, " ");
+! STRCAT(buffer, res_encoding->version);
+ prt_dsc_resources(NULL, "encoding", buffer);
+ }
+ prt_dsc_requirements(prt_duplex, prt_tumble, prt_collate,
+***************
+*** 3114,3128 ****
+ prt_dsc_noarg("BeginProlog");
+
+ /* Add required procsets - NOTE: order is important! */
+! if (!prt_add_resource(&res_prolog))
+ return FALSE;
+ #ifdef FEAT_MBYTE
+ if (prt_out_mbyte)
+ {
+ /* Add CID font procset, and any user supplied CMap */
+! if (!prt_add_resource(&res_cidfont))
+ return FALSE;
+! if (prt_custom_cmap && !prt_add_resource(&res_cmap))
+ return FALSE;
+ }
+ #endif
+--- 3139,3153 ----
+ prt_dsc_noarg("BeginProlog");
+
+ /* Add required procsets - NOTE: order is important! */
+! if (!prt_add_resource(res_prolog))
+ return FALSE;
+ #ifdef FEAT_MBYTE
+ if (prt_out_mbyte)
+ {
+ /* Add CID font procset, and any user supplied CMap */
+! if (!prt_add_resource(res_cidfont))
+ return FALSE;
+! if (prt_custom_cmap && !prt_add_resource(res_cmap))
+ return FALSE;
+ }
+ #endif
+***************
+*** 3132,3138 ****
+ #endif
+ /* There will be only one Roman font encoding to be included in the PS
+ * file. */
+! if (!prt_add_resource(&res_encoding))
+ return FALSE;
+
+ prt_dsc_noarg("EndProlog");
+--- 3157,3163 ----
+ #endif
+ /* There will be only one Roman font encoding to be included in the PS
+ * file. */
+! if (!prt_add_resource(res_encoding))
+ return FALSE;
+
+ prt_dsc_noarg("EndProlog");
+***************
+*** 3248,3254 ****
+ prt_dsc_noarg("EndSetup");
+
+ /* Fail if any problems writing out to the PS file */
+! return !prt_file_error;
+ }
+
+ void
+--- 3273,3289 ----
+ prt_dsc_noarg("EndSetup");
+
+ /* Fail if any problems writing out to the PS file */
+! retval = !prt_file_error;
+!
+! theend:
+! vim_free(res_prolog);
+! vim_free(res_encoding);
+! #ifdef FEAT_MBYTE
+! vim_free(res_cidfont);
+! vim_free(res_cmap);
+! #endif
+!
+! return retval;
+ }
+
+ void
+*** ../vim-7.3.160/src/quickfix.c 2010-12-02 15:33:10.000000000 +0100
+--- src/quickfix.c 2011-04-11 17:54:07.000000000 +0200
+***************
+*** 3049,3056 ****
+ int flags = 0;
+ colnr_T col;
+ long tomatch;
+! char_u dirname_start[MAXPATHL];
+! char_u dirname_now[MAXPATHL];
+ char_u *target_dir = NULL;
+ #ifdef FEAT_AUTOCMD
+ char_u *au_name = NULL;
+--- 3049,3056 ----
+ int flags = 0;
+ colnr_T col;
+ long tomatch;
+! char_u *dirname_start = NULL;
+! char_u *dirname_now = NULL;
+ char_u *target_dir = NULL;
+ #ifdef FEAT_AUTOCMD
+ char_u *au_name = NULL;
+***************
+*** 3128,3133 ****
+--- 3128,3138 ----
+ goto theend;
+ }
+
++ dirname_start = alloc(MAXPATHL);
++ dirname_now = alloc(MAXPATHL);
++ if (dirname_start == NULL || dirname_now == NULL)
++ goto theend;
++
+ /* Remember the current directory, because a BufRead autocommand that does
+ * ":lcd %:p:h" changes the meaning of short path names. */
+ mch_dirname(dirname_start, MAXPATHL);
+***************
+*** 3364,3369 ****
+--- 3369,3376 ----
+ }
+
+ theend:
++ vim_free(dirname_now);
++ vim_free(dirname_start);
+ vim_free(target_dir);
+ vim_free(regmatch.regprog);
+ }
+*** ../vim-7.3.160/src/main.c 2011-03-22 18:10:34.000000000 +0100
+--- src/main.c 2011-04-11 18:06:06.000000000 +0200
+***************
+*** 3814,3820 ****
+ int i;
+ char_u *inicmd = NULL;
+ char_u *p;
+! char_u cwd[MAXPATHL];
+
+ if (filec > 0 && filev[0][0] == '+')
+ {
+--- 3814,3820 ----
+ int i;
+ char_u *inicmd = NULL;
+ char_u *p;
+! char_u *cwd;
+
+ if (filec > 0 && filev[0][0] == '+')
+ {
+***************
+*** 3827,3841 ****
+ mainerr_arg_missing((char_u *)filev[-1]);
+
+ /* Temporarily cd to the current directory to handle relative file names. */
+ if (mch_dirname(cwd, MAXPATHL) != OK)
+ return NULL;
+! if ((p = vim_strsave_escaped_ext(cwd,
+ #ifdef BACKSLASH_IN_FILENAME
+ "", /* rem_backslash() will tell what chars to escape */
+ #else
+ PATH_ESC_CHARS,
+ #endif
+! '\\', TRUE)) == NULL)
+ return NULL;
+ ga_init2(&ga, 1, 100);
+ ga_concat(&ga, (char_u *)"<C-\\><C-N>:cd ");
+--- 3827,3849 ----
+ mainerr_arg_missing((char_u *)filev[-1]);
+
+ /* Temporarily cd to the current directory to handle relative file names. */
++ cwd = alloc(MAXPATHL);
++ if (cwd == NULL)
++ return NULL;
+ if (mch_dirname(cwd, MAXPATHL) != OK)
++ {
++ vim_free(cwd);
+ return NULL;
+! }
+! p = vim_strsave_escaped_ext(cwd,
+ #ifdef BACKSLASH_IN_FILENAME
+ "", /* rem_backslash() will tell what chars to escape */
+ #else
+ PATH_ESC_CHARS,
+ #endif
+! '\\', TRUE);
+! vim_free(cwd);
+! if (p == NULL)
+ return NULL;
+ ga_init2(&ga, 1, 100);
+ ga_concat(&ga, (char_u *)"<C-\\><C-N>:cd ");
+*** ../vim-7.3.160/src/netbeans.c 2011-04-11 16:56:29.000000000 +0200
+--- src/netbeans.c 2011-04-11 18:27:08.000000000 +0200
+***************
+*** 2891,2897 ****
+ char_u *text;
+ linenr_T lnum;
+ int col;
+! char buf[MAXPATHL * 2 + 25];
+ char_u *p;
+
+ /* Don't do anything when 'ballooneval' is off, messages scrolled the
+--- 2891,2897 ----
+ char_u *text;
+ linenr_T lnum;
+ int col;
+! char *buf;
+ char_u *p;
+
+ /* Don't do anything when 'ballooneval' is off, messages scrolled the
+***************
+*** 2905,2919 ****
+ * length. */
+ if (text != NULL && text[0] != NUL && STRLEN(text) < MAXPATHL)
+ {
+! p = nb_quote(text);
+! if (p != NULL)
+ {
+! vim_snprintf(buf, sizeof(buf),
+! "0:balloonText=%d \"%s\"\n", r_cmdno, p);
+! vim_free(p);
+ }
+- nbdebug(("EVT: %s", buf));
+- nb_send(buf, "netbeans_beval_cb");
+ }
+ vim_free(text);
+ }
+--- 2905,2924 ----
+ * length. */
+ if (text != NULL && text[0] != NUL && STRLEN(text) < MAXPATHL)
+ {
+! buf = (char *)alloc(MAXPATHL * 2 + 25);
+! if (buf != NULL)
+ {
+! p = nb_quote(text);
+! if (p != NULL)
+! {
+! vim_snprintf(buf, MAXPATHL * 2 + 25,
+! "0:balloonText=%d \"%s\"\n", r_cmdno, p);
+! vim_free(p);
+! }
+! nbdebug(("EVT: %s", buf));
+! nb_send(buf, "netbeans_beval_cb");
+! vim_free(buf);
+ }
+ }
+ vim_free(text);
+ }
+*** ../vim-7.3.160/src/spell.c 2011-04-11 16:56:29.000000000 +0200
+--- src/spell.c 2011-04-11 18:00:49.000000000 +0200
+***************
+*** 8590,8596 ****
+ spellinfo_T *spin;
+ char_u *wfname;
+ {
+! char_u fname[MAXPATHL];
+ int len;
+ slang_T *slang;
+ int free_slang = FALSE;
+--- 8590,8596 ----
+ spellinfo_T *spin;
+ char_u *wfname;
+ {
+! char_u *fname = NULL;
+ int len;
+ slang_T *slang;
+ int free_slang = FALSE;
+***************
+*** 8654,8659 ****
+--- 8654,8662 ----
+ * Write the .sug file.
+ * Make the file name by changing ".spl" to ".sug".
+ */
++ fname = alloc(MAXPATHL);
++ if (fname == NULL)
++ goto theend;
+ vim_strncpy(fname, wfname, MAXPATHL - 1);
+ len = (int)STRLEN(fname);
+ fname[len - 2] = 'u';
+***************
+*** 8661,8666 ****
+--- 8664,8670 ----
+ sug_write(spin, fname);
+
+ theend:
++ vim_free(fname);
+ if (free_slang)
+ slang_free(slang);
+ free_blocks(spin->si_blocks);
+***************
+*** 9106,9113 ****
+ int overwrite; /* overwrite existing output file */
+ int added_word; /* invoked through "zg" */
+ {
+! char_u fname[MAXPATHL];
+! char_u wfname[MAXPATHL];
+ char_u **innames;
+ int incount;
+ afffile_T *(afile[8]);
+--- 9110,9117 ----
+ int overwrite; /* overwrite existing output file */
+ int added_word; /* invoked through "zg" */
+ {
+! char_u *fname = NULL;
+! char_u *wfname;
+ char_u **innames;
+ int incount;
+ afffile_T *(afile[8]);
+***************
+*** 9135,9140 ****
+--- 9139,9148 ----
+ innames = &fnames[1];
+ incount = fcount - 1;
+
++ wfname = alloc(MAXPATHL);
++ if (wfname == NULL)
++ return;
++
+ if (fcount >= 1)
+ {
+ len = (int)STRLEN(fnames[0]);
+***************
+*** 9144,9167 ****
+ * "path/en.latin1.add.spl". */
+ innames = &fnames[0];
+ incount = 1;
+! vim_snprintf((char *)wfname, sizeof(wfname), "%s.spl", fnames[0]);
+ }
+ else if (fcount == 1)
+ {
+ /* For ":mkspell path/vim" output file is "path/vim.latin1.spl". */
+ innames = &fnames[0];
+ incount = 1;
+! vim_snprintf((char *)wfname, sizeof(wfname), SPL_FNAME_TMPL,
+ fnames[0], spin.si_ascii ? (char_u *)"ascii" : spell_enc());
+ }
+ else if (len > 4 && STRCMP(fnames[0] + len - 4, ".spl") == 0)
+ {
+ /* Name ends in ".spl", use as the file name. */
+! vim_strncpy(wfname, fnames[0], sizeof(wfname) - 1);
+ }
+ else
+ /* Name should be language, make the file name from it. */
+! vim_snprintf((char *)wfname, sizeof(wfname), SPL_FNAME_TMPL,
+ fnames[0], spin.si_ascii ? (char_u *)"ascii" : spell_enc());
+
+ /* Check for .ascii.spl. */
+--- 9152,9175 ----
+ * "path/en.latin1.add.spl". */
+ innames = &fnames[0];
+ incount = 1;
+! vim_snprintf((char *)wfname, MAXPATHL, "%s.spl", fnames[0]);
+ }
+ else if (fcount == 1)
+ {
+ /* For ":mkspell path/vim" output file is "path/vim.latin1.spl". */
+ innames = &fnames[0];
+ incount = 1;
+! vim_snprintf((char *)wfname, MAXPATHL, SPL_FNAME_TMPL,
+ fnames[0], spin.si_ascii ? (char_u *)"ascii" : spell_enc());
+ }
+ else if (len > 4 && STRCMP(fnames[0] + len - 4, ".spl") == 0)
+ {
+ /* Name ends in ".spl", use as the file name. */
+! vim_strncpy(wfname, fnames[0], MAXPATHL - 1);
+ }
+ else
+ /* Name should be language, make the file name from it. */
+! vim_snprintf((char *)wfname, MAXPATHL, SPL_FNAME_TMPL,
+ fnames[0], spin.si_ascii ? (char_u *)"ascii" : spell_enc());
+
+ /* Check for .ascii.spl. */
+***************
+*** 9186,9199 ****
+ if (!overwrite && mch_stat((char *)wfname, &st) >= 0)
+ {
+ EMSG(_(e_exists));
+! return;
+ }
+ if (mch_isdir(wfname))
+ {
+ EMSG2(_(e_isadir2), wfname);
+! return;
+ }
+
+ /*
+ * Init the aff and dic pointers.
+ * Get the region names if there are more than 2 arguments.
+--- 9194,9211 ----
+ if (!overwrite && mch_stat((char *)wfname, &st) >= 0)
+ {
+ EMSG(_(e_exists));
+! goto theend;
+ }
+ if (mch_isdir(wfname))
+ {
+ EMSG2(_(e_isadir2), wfname);
+! goto theend;
+ }
+
++ fname = alloc(MAXPATHL);
++ if (fname == NULL)
++ goto theend;
++
+ /*
+ * Init the aff and dic pointers.
+ * Get the region names if there are more than 2 arguments.
+***************
+*** 9209,9215 ****
+ || innames[i][len - 3] != '_')
+ {
+ EMSG2(_("E755: Invalid region in %s"), innames[i]);
+! return;
+ }
+ spin.si_region_name[i * 2] = TOLOWER_ASC(innames[i][len - 2]);
+ spin.si_region_name[i * 2 + 1] =
+--- 9221,9227 ----
+ || innames[i][len - 3] != '_')
+ {
+ EMSG2(_("E755: Invalid region in %s"), innames[i]);
+! goto theend;
+ }
+ spin.si_region_name[i * 2] = TOLOWER_ASC(innames[i][len - 2]);
+ spin.si_region_name[i * 2 + 1] =
+***************
+*** 9226,9232 ****
+ || spin.si_prefroot == NULL)
+ {
+ free_blocks(spin.si_blocks);
+! return;
+ }
+
+ /* When not producing a .add.spl file clear the character table when
+--- 9238,9244 ----
+ || spin.si_prefroot == NULL)
+ {
+ free_blocks(spin.si_blocks);
+! goto theend;
+ }
+
+ /* When not producing a .add.spl file clear the character table when
+***************
+*** 9247,9253 ****
+ spin.si_conv.vc_type = CONV_NONE;
+ spin.si_region = 1 << i;
+
+! vim_snprintf((char *)fname, sizeof(fname), "%s.aff", innames[i]);
+ if (mch_stat((char *)fname, &st) >= 0)
+ {
+ /* Read the .aff file. Will init "spin->si_conv" based on the
+--- 9259,9265 ----
+ spin.si_conv.vc_type = CONV_NONE;
+ spin.si_region = 1 << i;
+
+! vim_snprintf((char *)fname, MAXPATHL, "%s.aff", innames[i]);
+ if (mch_stat((char *)fname, &st) >= 0)
+ {
+ /* Read the .aff file. Will init "spin->si_conv" based on the
+***************
+*** 9258,9264 ****
+ else
+ {
+ /* Read the .dic file and store the words in the trees. */
+! vim_snprintf((char *)fname, sizeof(fname), "%s.dic",
+ innames[i]);
+ if (spell_read_dic(&spin, fname, afile[i]) == FAIL)
+ error = TRUE;
+--- 9270,9276 ----
+ else
+ {
+ /* Read the .dic file and store the words in the trees. */
+! vim_snprintf((char *)fname, MAXPATHL, "%s.dic",
+ innames[i]);
+ if (spell_read_dic(&spin, fname, afile[i]) == FAIL)
+ error = TRUE;
+***************
+*** 9340,9345 ****
+--- 9352,9361 ----
+ spell_make_sugfile(&spin, wfname);
+
+ }
++
++ theend:
++ vim_free(fname);
++ vim_free(wfname);
+ }
+
+ /*
+***************
+*** 9392,9398 ****
+ buf_T *buf = NULL;
+ int new_spf = FALSE;
+ char_u *fname;
+! char_u fnamebuf[MAXPATHL];
+ char_u line[MAXWLEN * 2];
+ long fpos, fpos_next = 0;
+ int i;
+--- 9408,9414 ----
+ buf_T *buf = NULL;
+ int new_spf = FALSE;
+ char_u *fname;
+! char_u *fnamebuf = NULL;
+ char_u line[MAXWLEN * 2];
+ long fpos, fpos_next = 0;
+ int i;
+***************
+*** 9422,9427 ****
+--- 9438,9446 ----
+ EMSG2(_(e_notset), "spellfile");
+ return;
+ }
++ fnamebuf = alloc(MAXPATHL);
++ if (fnamebuf == NULL)
++ return;
+
+ for (spf = curwin->w_s->b_p_spf, i = 1; *spf != NUL; ++i)
+ {
+***************
+*** 9431,9436 ****
+--- 9450,9456 ----
+ if (*spf == NUL)
+ {
+ EMSGN(_("E765: 'spellfile' does not have %ld entries"), idx);
++ vim_free(fnamebuf);
+ return;
+ }
+ }
+***************
+*** 9442,9447 ****
+--- 9462,9468 ----
+ if (buf != NULL && bufIsChanged(buf))
+ {
+ EMSG(_(e_bufloaded));
++ vim_free(fnamebuf);
+ return;
+ }
+
+***************
+*** 9536,9541 ****
+--- 9557,9563 ----
+
+ redraw_all_later(SOME_VALID);
+ }
++ vim_free(fnamebuf);
+ }
+
+ /*
+***************
+*** 9544,9550 ****
+ static void
+ init_spellfile()
+ {
+! char_u buf[MAXPATHL];
+ int l;
+ char_u *fname;
+ char_u *rtp;
+--- 9566,9572 ----
+ static void
+ init_spellfile()
+ {
+! char_u *buf;
+ int l;
+ char_u *fname;
+ char_u *rtp;
+***************
+*** 9554,9559 ****
+--- 9576,9585 ----
+
+ if (*curwin->w_s->b_p_spl != NUL && curwin->w_s->b_langp.ga_len > 0)
+ {
++ buf = alloc(MAXPATHL);
++ if (buf == NULL)
++ return;
++
+ /* Find the end of the language name. Exclude the region. If there
+ * is a path separator remember the start of the tail. */
+ for (lend = curwin->w_s->b_p_spl; *lend != NUL
+***************
+*** 9597,9603 ****
+ "/%.*s", (int)(lend - lstart), lstart);
+ }
+ l = (int)STRLEN(buf);
+! fname = LANGP_ENTRY(curwin->w_s->b_langp, 0)->lp_slang->sl_fname;
+ vim_snprintf((char *)buf + l, MAXPATHL - l, ".%s.add",
+ fname != NULL
+ && strstr((char *)gettail(fname), ".ascii.") != NULL
+--- 9623,9630 ----
+ "/%.*s", (int)(lend - lstart), lstart);
+ }
+ l = (int)STRLEN(buf);
+! fname = LANGP_ENTRY(curwin->w_s->b_langp, 0)
+! ->lp_slang->sl_fname;
+ vim_snprintf((char *)buf + l, MAXPATHL - l, ".%s.add",
+ fname != NULL
+ && strstr((char *)gettail(fname), ".ascii.") != NULL
+***************
+*** 9607,9612 ****
+--- 9634,9641 ----
+ }
+ aspath = FALSE;
+ }
++
++ vim_free(buf);
+ }
+ }
+
+*** ../vim-7.3.160/src/tag.c 2011-04-11 16:56:29.000000000 +0200
+--- src/tag.c 2011-04-11 20:54:36.000000000 +0200
+***************
+*** 775,791 ****
+ {
+ list_T *list;
+ char_u tag_name[128 + 1];
+! char_u fname[MAXPATHL + 1];
+! char_u cmd[CMDBUFFSIZE + 1];
+
+ /*
+ * Add the matching tags to the location list for the current
+ * window.
+ */
+
+ list = list_alloc();
+! if (list == NULL)
+ goto end_do_tag;
+
+ for (i = 0; i < num_matches; ++i)
+ {
+--- 775,799 ----
+ {
+ list_T *list;
+ char_u tag_name[128 + 1];
+! char_u *fname;
+! char_u *cmd;
+
+ /*
+ * Add the matching tags to the location list for the current
+ * window.
+ */
+
++ fname = alloc(MAXPATHL + 1);
++ cmd = alloc(CMDBUFFSIZE + 1);
+ list = list_alloc();
+! if (list == NULL || fname == NULL || cmd == NULL)
+! {
+! vim_free(cmd);
+! vim_free(fname);
+! if (list != NULL)
+! list_free(list, TRUE);
+ goto end_do_tag;
++ }
+
+ for (i = 0; i < num_matches; ++i)
+ {
+***************
+*** 911,916 ****
+--- 919,926 ----
+ set_errorlist(curwin, list, ' ', IObuff);
+
+ list_free(list, TRUE);
++ vim_free(fname);
++ vim_free(cmd);
+
+ cur_match = 0; /* Jump to the first tag */
+ }
+***************
+*** 3777,3784 ****
+ char_u *start; /* start of the value */
+ char_u *end; /* after the value; can be NULL */
+ {
+! char_u buf[MAXPATHL];
+ int len = 0;
+
+ /* check that the field name doesn't exist yet */
+ if (dict_find(dict, (char_u *)field_name, -1) != NULL)
+--- 3787,3795 ----
+ char_u *start; /* start of the value */
+ char_u *end; /* after the value; can be NULL */
+ {
+! char_u *buf;
+ int len = 0;
++ int retval;
+
+ /* check that the field name doesn't exist yet */
+ if (dict_find(dict, (char_u *)field_name, -1) != NULL)
+***************
+*** 3791,3796 ****
+--- 3802,3810 ----
+ }
+ return FAIL;
+ }
++ buf = alloc(MAXPATHL);
++ if (buf == NULL)
++ return FAIL;
+ if (start != NULL)
+ {
+ if (end == NULL)
+***************
+*** 3800,3811 ****
+ --end;
+ }
+ len = (int)(end - start);
+! if (len > (int)sizeof(buf) - 1)
+! len = sizeof(buf) - 1;
+ vim_strncpy(buf, start, len);
+ }
+ buf[len] = NUL;
+! return dict_add_nr_str(dict, field_name, 0L, buf);
+ }
+
+ /*
+--- 3814,3827 ----
+ --end;
+ }
+ len = (int)(end - start);
+! if (len > MAXPATHL - 1)
+! len = MAXPATHL - 1;
+ vim_strncpy(buf, start, len);
+ }
+ buf[len] = NUL;
+! retval = dict_add_nr_str(dict, field_name, 0L, buf);
+! vim_free(buf);
+! return retval;
+ }
+
+ /*
+*** ../vim-7.3.160/src/vim.h 2010-12-30 12:30:26.000000000 +0100
+--- src/vim.h 2011-04-11 20:50:54.000000000 +0200
+***************
+*** 1435,1440 ****
+--- 1435,1442 ----
+
+ #define IOSIZE (1024+1) /* file i/o and sprintf buffer size */
+
++ #define DIALOG_MSG_SIZE 1000 /* buffer size for dialog_msg() */
++
+ #ifdef FEAT_MBYTE
+ # define MSG_BUF_LEN 480 /* length of buffer for small messages */
+ # define MSG_BUF_CLEN (MSG_BUF_LEN / 6) /* cell length (worst case: utf-8
+*** ../vim-7.3.160/src/xxd/xxd.c 2011-04-02 14:44:50.000000000 +0200
+--- src/xxd/xxd.c 2011-04-11 16:40:48.000000000 +0200
+***************
+*** 476,482 ****
+ int octspergrp = -1; /* number of octets grouped in output */
+ int grplen; /* total chars per octet group */
+ long length = -1, n = 0, seekoff = 0;
+! char l[LLEN+1];
+ char *pp;
+
+ #ifdef AMIGA
+--- 476,482 ----
+ int octspergrp = -1; /* number of octets grouped in output */
+ int grplen; /* total chars per octet group */
+ long length = -1, n = 0, seekoff = 0;
+! static char l[LLEN+1]; /* static because it may be too big for stack */
+ char *pp;
+
+ #ifdef AMIGA
+*** ../vim-7.3.160/src/version.c 2011-04-11 16:56:29.000000000 +0200
+--- src/version.c 2011-04-11 21:15:33.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 161,
+ /**/
+
+--
+The process for understanding customers primarily involves sitting around with
+other marketing people and talking about what you would to if you were dumb
+enough to be a customer.
+ (Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.162 b/source/ap/vim/patches/7.3.162
new file mode 100644
index 000000000..3f0173afb
--- /dev/null
+++ b/source/ap/vim/patches/7.3.162
@@ -0,0 +1,83 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.162
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.162
+Problem: No error message when assigning to a list with an index out of
+ range. (Yukihiro Nakadaira)
+Solution: Add the error message.
+Files: src/eval.c
+
+
+*** ../vim-7.3.161/src/eval.c 2011-04-11 21:35:03.000000000 +0200
+--- src/eval.c 2011-04-21 13:40:38.000000000 +0200
+***************
+*** 2794,2799 ****
+--- 2794,2801 ----
+ {
+ if (lp->ll_range && !lp->ll_empty2)
+ clear_tv(&var2);
++ if (!quiet)
++ EMSGN(_(e_listidx), lp->ll_n1);
+ return NULL;
+ }
+
+***************
+*** 2811,2817 ****
+--- 2813,2823 ----
+ {
+ ni = list_find(lp->ll_list, lp->ll_n2);
+ if (ni == NULL)
++ {
++ if (!quiet)
++ EMSGN(_(e_listidx), lp->ll_n2);
+ return NULL;
++ }
+ lp->ll_n2 = list_idx_of_item(lp->ll_list, ni);
+ }
+
+***************
+*** 2819,2825 ****
+--- 2825,2835 ----
+ if (lp->ll_n1 < 0)
+ lp->ll_n1 = list_idx_of_item(lp->ll_list, lp->ll_li);
+ if (lp->ll_n2 < lp->ll_n1)
++ {
++ if (!quiet)
++ EMSGN(_(e_listidx), lp->ll_n2);
+ return NULL;
++ }
+ }
+
+ lp->ll_tv = &lp->ll_li->li_tv;
+*** ../vim-7.3.161/src/version.c 2011-04-11 21:35:03.000000000 +0200
+--- src/version.c 2011-04-21 13:44:46.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 162,
+ /**/
+
+--
+Far back in the mists of ancient time, in the great and glorious days of the
+former Galactic Empire, life was wild, rich and largely tax free.
+Mighty starships plied their way between exotic suns, seeking adventure and
+reward among the furthest reaches of Galactic space. In those days, spirits
+were brave, the stakes were high, men were real men, women were real women
+and small furry creatures from Alpha Centauri were real small furry creatures
+from Alpha Centauri. And all dared to brave unknown terrors, to do mighty
+deeds, to boldly split infinitives that no man had split before -- and thus
+was the Empire forged.
+ -- Douglas Adams, "The Hitchhiker's Guide to the Galaxy"
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.163 b/source/ap/vim/patches/7.3.163
new file mode 100644
index 000000000..b5f1cb4ad
--- /dev/null
+++ b/source/ap/vim/patches/7.3.163
@@ -0,0 +1,59 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.163
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.163
+Problem: For the default of 'shellpipe' "mksh" and "pdksh" are not
+ recognized.
+Solution: Recognize these shell names.
+Files: src/option.c
+
+
+*** ../vim-7.3.162/src/option.c 2011-03-22 14:35:01.000000000 +0100
+--- src/option.c 2011-04-15 20:49:54.000000000 +0200
+***************
+*** 3846,3851 ****
+--- 3846,3853 ----
+ # ifndef OS2 /* Always use bourne shell style redirection if we reach this */
+ if ( fnamecmp(p, "sh") == 0
+ || fnamecmp(p, "ksh") == 0
++ || fnamecmp(p, "mksh") == 0
++ || fnamecmp(p, "pdksh") == 0
+ || fnamecmp(p, "zsh") == 0
+ || fnamecmp(p, "zsh-beta") == 0
+ || fnamecmp(p, "bash") == 0
+***************
+*** 3853,3858 ****
+--- 3855,3862 ----
+ || fnamecmp(p, "cmd") == 0
+ || fnamecmp(p, "sh.exe") == 0
+ || fnamecmp(p, "ksh.exe") == 0
++ || fnamecmp(p, "mksh.exe") == 0
++ || fnamecmp(p, "pdksh.exe") == 0
+ || fnamecmp(p, "zsh.exe") == 0
+ || fnamecmp(p, "zsh-beta.exe") == 0
+ || fnamecmp(p, "bash.exe") == 0
+*** ../vim-7.3.162/src/version.c 2011-04-21 14:27:21.000000000 +0200
+--- src/version.c 2011-04-28 12:56:03.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 163,
+ /**/
+
+--
+If you put 7 of the most talented OSS developers in a room for a week
+and asked them to fix a bug in a spreadsheet program, in 1 week
+you'd have 2 new mail readers and a text-based web browser.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.164 b/source/ap/vim/patches/7.3.164
new file mode 100644
index 000000000..9049f1b58
--- /dev/null
+++ b/source/ap/vim/patches/7.3.164
@@ -0,0 +1,181 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.164
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.164
+Problem: C-indenting: a preprocessor statement confuses detection of a
+ function delcaration.
+Solution: Ignore preprocessor lines. (Lech Lorens) Also recognize the style
+ to put a comma before the argument name.
+Files: src/misc1.c, src/testdir/test3.in, src/testdir/test3.ok
+
+
+*** ../vim-7.3.163/src/misc1.c 2011-04-11 16:56:29.000000000 +0200
+--- src/misc1.c 2011-04-28 12:49:55.000000000 +0200
+***************
+*** 5396,5403 ****
+ cin_ispreproc(s)
+ char_u *s;
+ {
+! s = skipwhite(s);
+! if (*s == '#')
+ return TRUE;
+ return FALSE;
+ }
+--- 5396,5402 ----
+ cin_ispreproc(s)
+ char_u *s;
+ {
+! if (*skipwhite(s) == '#')
+ return TRUE;
+ return FALSE;
+ }
+***************
+*** 5513,5518 ****
+--- 5512,5521 ----
+ else
+ s = *sp;
+
++ /* Ignore line starting with #. */
++ if (cin_ispreproc(s))
++ return FALSE;
++
+ while (*s && *s != '(' && *s != ';' && *s != '\'' && *s != '"')
+ {
+ if (cin_iscomment(s)) /* ignore comments */
+***************
+*** 5538,5550 ****
+ retval = TRUE;
+ goto done;
+ }
+! if (*s == ',' && cin_nocode(s + 1))
+ {
+! /* ',' at the end: continue looking in the next line */
+ if (lnum >= curbuf->b_ml.ml_line_count)
+ break;
+!
+! s = ml_get(++lnum);
+ }
+ else if (cin_iscomment(s)) /* ignore comments */
+ s = cin_skipcomment(s);
+--- 5541,5569 ----
+ retval = TRUE;
+ goto done;
+ }
+! if ((*s == ',' && cin_nocode(s + 1)) || s[1] == NUL || cin_nocode(s))
+ {
+! int comma = (*s == ',');
+!
+! /* ',' at the end: continue looking in the next line.
+! * At the end: check for ',' in the next line, for this style:
+! * func(arg1
+! * , arg2) */
+! for (;;)
+! {
+! if (lnum >= curbuf->b_ml.ml_line_count)
+! break;
+! s = ml_get(++lnum);
+! if (!cin_ispreproc(s))
+! break;
+! }
+ if (lnum >= curbuf->b_ml.ml_line_count)
+ break;
+! /* Require a comma at end of the line or a comma or ')' at the
+! * start of next line. */
+! s = skipwhite(s);
+! if (!comma && *s != ',' && *s != ')')
+! break;
+ }
+ else if (cin_iscomment(s)) /* ignore comments */
+ s = cin_skipcomment(s);
+*** ../vim-7.3.163/src/testdir/test3.in 2010-08-15 21:57:29.000000000 +0200
+--- src/testdir/test3.in 2011-04-28 12:15:12.000000000 +0200
+***************
+*** 1315,1320 ****
+--- 1315,1349 ----
+ }
+
+ STARTTEST
++ :set cino=(0,ts
++ 2kdd=][
++ ENDTEST
++
++ void func(int a
++ #if defined(FOO)
++ , int b
++ , int c
++ #endif
++ )
++ {
++ }
++
++ STARTTEST
++ :set cino=(0
++ 2kdd=][
++ ENDTEST
++
++ void
++ func(int a
++ #if defined(FOO)
++ , int b
++ , int c
++ #endif
++ )
++ {
++ }
++
++ STARTTEST
+ :g/^STARTTEST/.,/^ENDTEST/d
+ :1;/start of AUTO/,$wq! test.out
+ ENDTEST
+*** ../vim-7.3.163/src/testdir/test3.ok 2010-08-15 21:57:29.000000000 +0200
+--- src/testdir/test3.ok 2011-04-28 12:54:04.000000000 +0200
+***************
+*** 1183,1185 ****
+--- 1183,1206 ----
+ foo;
+ }
+
++
++ void func(int a
++ #if defined(FOO)
++ , int b
++ , int c
++ #endif
++ )
++ {
++ }
++
++
++ void
++ func(int a
++ #if defined(FOO)
++ , int b
++ , int c
++ #endif
++ )
++ {
++ }
++
+*** ../vim-7.3.163/src/version.c 2011-04-28 12:56:57.000000000 +0200
+--- src/version.c 2011-04-28 12:59:55.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 164,
+ /**/
+
+--
+Due knot trussed yore spell chequer two fined awl miss steaks.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.165 b/source/ap/vim/patches/7.3.165
new file mode 100644
index 000000000..2725259e3
--- /dev/null
+++ b/source/ap/vim/patches/7.3.165
@@ -0,0 +1,47 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.165
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.165
+Problem: ":find" completion does not escape spaces in a directory name.
+ (Isz)
+Solution: Add backslashes for EXPAND_FILES_IN_PATH. (Carlo Teubner)
+Files: src/ex_getln.c
+
+
+*** ../vim-7.3.164/src/ex_getln.c 2010-12-02 16:01:23.000000000 +0100
+--- src/ex_getln.c 2011-04-28 12:52:12.000000000 +0200
+***************
+*** 3702,3707 ****
+--- 3702,3708 ----
+ if (options & WILD_ESCAPE)
+ {
+ if (xp->xp_context == EXPAND_FILES
++ || xp->xp_context == EXPAND_FILES_IN_PATH
+ || xp->xp_context == EXPAND_SHELLCMD
+ || xp->xp_context == EXPAND_BUFFERS
+ || xp->xp_context == EXPAND_DIRECTORIES)
+*** ../vim-7.3.164/src/version.c 2011-04-28 13:01:59.000000000 +0200
+--- src/version.c 2011-04-28 17:17:53.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 165,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+38. You wake up at 3 a.m. to go to the bathroom and stop and check your e-mail
+ on the way back to bed.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.166 b/source/ap/vim/patches/7.3.166
new file mode 100644
index 000000000..93c6ed353
--- /dev/null
+++ b/source/ap/vim/patches/7.3.166
@@ -0,0 +1,70 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.166
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.166
+Problem: Buffer on the stack may be too big
+Solution: Allocate the space.
+Files: src/option.c
+
+
+*** ../vim-7.3.165/src/option.c 2011-04-28 12:56:57.000000000 +0200
+--- src/option.c 2011-04-15 20:49:54.000000000 +0200
+***************
+*** 9185,9191 ****
+ int expand;
+ {
+ char_u *s;
+! char_u buf[MAXPATHL];
+
+ if (fprintf(fd, "%s %s=", cmd, name) < 0)
+ return FAIL;
+--- 9185,9191 ----
+ int expand;
+ {
+ char_u *s;
+! char_u *buf;
+
+ if (fprintf(fd, "%s %s=", cmd, name) < 0)
+ return FAIL;
+***************
+*** 9203,9211 ****
+--- 9203,9218 ----
+ }
+ else if (expand)
+ {
++ buf = alloc(MAXPATHL);
++ if (buf == NULL)
++ return FAIL;
+ home_replace(NULL, *valuep, buf, MAXPATHL, FALSE);
+ if (put_escstr(fd, buf, 2) == FAIL)
++ {
++ vim_free(buf);
+ return FAIL;
++ }
++ vim_free(buf);
+ }
+ else if (put_escstr(fd, *valuep, 2) == FAIL)
+ return FAIL;
+*** ../vim-7.3.165/src/version.c 2011-04-28 17:21:49.000000000 +0200
+--- src/version.c 2011-04-28 17:23:24.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 166,
+ /**/
+
+--
+He who laughs last, thinks slowest.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.167 b/source/ap/vim/patches/7.3.167
new file mode 100644
index 000000000..4a6de89fb
--- /dev/null
+++ b/source/ap/vim/patches/7.3.167
@@ -0,0 +1,96 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.167
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.167
+Problem: When using the internal grep QuickFixCmdPost is not triggered.
+ (Yukihiro Nakadaira)
+Solution: Change the place where autocommands are triggered.
+Files: src/quickfix.c
+
+
+*** ../vim-7.3.166/src/quickfix.c 2011-04-11 21:35:03.000000000 +0200
+--- src/quickfix.c 2011-04-28 13:28:03.000000000 +0200
+***************
+*** 2742,2747 ****
+--- 2742,2754 ----
+ #ifdef FEAT_AUTOCMD
+ char_u *au_name = NULL;
+
++ /* Redirect ":grep" to ":vimgrep" if 'grepprg' is "internal". */
++ if (grep_internal(eap->cmdidx))
++ {
++ ex_vimgrep(eap);
++ return;
++ }
++
+ switch (eap->cmdidx)
+ {
+ case CMD_make: au_name = (char_u *)"make"; break;
+***************
+*** 2763,2775 ****
+ }
+ #endif
+
+- /* Redirect ":grep" to ":vimgrep" if 'grepprg' is "internal". */
+- if (grep_internal(eap->cmdidx))
+- {
+- ex_vimgrep(eap);
+- return;
+- }
+-
+ if (eap->cmdidx == CMD_lmake || eap->cmdidx == CMD_lgrep
+ || eap->cmdidx == CMD_lgrepadd)
+ wp = curwin;
+--- 2770,2775 ----
+***************
+*** 3057,3066 ****
+
+ switch (eap->cmdidx)
+ {
+! case CMD_vimgrep: au_name = (char_u *)"vimgrep"; break;
+! case CMD_lvimgrep: au_name = (char_u *)"lvimgrep"; break;
+! case CMD_vimgrepadd: au_name = (char_u *)"vimgrepadd"; break;
+ case CMD_lvimgrepadd: au_name = (char_u *)"lvimgrepadd"; break;
+ default: break;
+ }
+ if (au_name != NULL)
+--- 3057,3070 ----
+
+ switch (eap->cmdidx)
+ {
+! case CMD_vimgrep: au_name = (char_u *)"vimgrep"; break;
+! case CMD_lvimgrep: au_name = (char_u *)"lvimgrep"; break;
+! case CMD_vimgrepadd: au_name = (char_u *)"vimgrepadd"; break;
+ case CMD_lvimgrepadd: au_name = (char_u *)"lvimgrepadd"; break;
++ case CMD_grep: au_name = (char_u *)"grep"; break;
++ case CMD_lgrep: au_name = (char_u *)"lgrep"; break;
++ case CMD_grepadd: au_name = (char_u *)"grepadd"; break;
++ case CMD_lgrepadd: au_name = (char_u *)"lgrepadd"; break;
+ default: break;
+ }
+ if (au_name != NULL)
+*** ../vim-7.3.166/src/version.c 2011-04-28 17:24:54.000000000 +0200
+--- src/version.c 2011-04-28 17:26:17.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 167,
+ /**/
+
+--
+Micro$oft: where do you want to go today?
+ Linux: where do you want to go tomorrow?
+ FreeBSD: are you guys coming, or what?
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.168 b/source/ap/vim/patches/7.3.168
new file mode 100644
index 000000000..3d6fe9472
--- /dev/null
+++ b/source/ap/vim/patches/7.3.168
@@ -0,0 +1,82 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.168
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.168
+Problem: When the second argument of input() contains a CR the text up to
+ that is used without asking the user. (Yasuhiro Matsumoto)
+Solution: Change CR, NL and ESC in the text to a space.
+Files: src/getchar.c
+
+
+*** ../vim-7.3.167/src/getchar.c 2011-03-22 13:07:19.000000000 +0100
+--- src/getchar.c 2011-04-28 14:50:26.000000000 +0200
+***************
+*** 635,645 ****
+--- 635,648 ----
+ /*
+ * Stuff "s" into the stuff buffer, leaving special key codes unmodified and
+ * escaping other K_SPECIAL and CSI bytes.
++ * Change CR, LF and ESC into a space.
+ */
+ void
+ stuffReadbuffSpec(s)
+ char_u *s;
+ {
++ int c;
++
+ while (*s != NUL)
+ {
+ if (*s == K_SPECIAL && s[1] != NUL && s[2] != NUL)
+***************
+*** 649,659 ****
+ s += 3;
+ }
+ else
+ #ifdef FEAT_MBYTE
+! stuffcharReadbuff(mb_ptr2char_adv(&s));
+ #else
+! stuffcharReadbuff(*s++);
+ #endif
+ }
+ }
+ #endif
+--- 652,667 ----
+ s += 3;
+ }
+ else
++ {
+ #ifdef FEAT_MBYTE
+! c = mb_ptr2char_adv(&s);
+ #else
+! c = *s++;
+ #endif
++ if (c == CAR || c == NL || c == ESC)
++ c = ' ';
++ stuffcharReadbuff(c);
++ }
+ }
+ }
+ #endif
+*** ../vim-7.3.167/src/version.c 2011-04-28 17:27:05.000000000 +0200
+--- src/version.c 2011-04-28 17:28:36.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 168,
+ /**/
+
+--
+Everyone has a photographic memory. Some don't have film.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.169 b/source/ap/vim/patches/7.3.169
new file mode 100644
index 000000000..056ca99f6
--- /dev/null
+++ b/source/ap/vim/patches/7.3.169
@@ -0,0 +1,130 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.169
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.169
+Problem: Freeing memory already freed, warning from static code analyzer.
+Solution: Initialize pointers to NULL, correct use of "mustfree". (partly by
+ Dominique Pelle)
+Files: src/mis1.c
+
+
+*** ../vim-7.3.168/src/misc1.c 2011-04-28 13:01:59.000000000 +0200
+--- src/misc1.c 2011-04-28 17:42:00.000000000 +0200
+***************
+*** 3505,3511 ****
+ if (enc_utf8 && var != NULL)
+ {
+ int len;
+! char_u *pp;
+
+ /* Convert from active codepage to UTF-8. Other conversions are
+ * not done, because they would fail for non-ASCII characters. */
+--- 3505,3511 ----
+ if (enc_utf8 && var != NULL)
+ {
+ int len;
+! char_u *pp = NULL;
+
+ /* Convert from active codepage to UTF-8. Other conversions are
+ * not done, because they would fail for non-ASCII characters. */
+***************
+*** 3872,3882 ****
+ * Vim's version of getenv().
+ * Special handling of $HOME, $VIM and $VIMRUNTIME.
+ * Also does ACP to 'enc' conversion for Win32.
+ */
+ char_u *
+ vim_getenv(name, mustfree)
+ char_u *name;
+! int *mustfree; /* set to TRUE when returned is allocated */
+ {
+ char_u *p;
+ char_u *pend;
+--- 3872,3884 ----
+ * Vim's version of getenv().
+ * Special handling of $HOME, $VIM and $VIMRUNTIME.
+ * Also does ACP to 'enc' conversion for Win32.
++ * "mustfree" is set to TRUE when returned is allocated, it must be
++ * initialized to FALSE by the caller.
+ */
+ char_u *
+ vim_getenv(name, mustfree)
+ char_u *name;
+! int *mustfree;
+ {
+ char_u *p;
+ char_u *pend;
+***************
+*** 3898,3904 ****
+ if (enc_utf8)
+ {
+ int len;
+! char_u *pp;
+
+ /* Convert from active codepage to UTF-8. Other conversions are
+ * not done, because they would fail for non-ASCII characters. */
+--- 3900,3906 ----
+ if (enc_utf8)
+ {
+ int len;
+! char_u *pp = NULL;
+
+ /* Convert from active codepage to UTF-8. Other conversions are
+ * not done, because they would fail for non-ASCII characters. */
+***************
+*** 3942,3948 ****
+ if (enc_utf8)
+ {
+ int len;
+! char_u *pp;
+
+ /* Convert from active codepage to UTF-8. Other conversions
+ * are not done, because they would fail for non-ASCII
+--- 3944,3950 ----
+ if (enc_utf8)
+ {
+ int len;
+! char_u *pp = NULL;
+
+ /* Convert from active codepage to UTF-8. Other conversions
+ * are not done, because they would fail for non-ASCII
+***************
+*** 3950,3956 ****
+ acp_to_enc(p, (int)STRLEN(p), &pp, &len);
+ if (pp != NULL)
+ {
+! if (mustfree)
+ vim_free(p);
+ p = pp;
+ *mustfree = TRUE;
+--- 3952,3958 ----
+ acp_to_enc(p, (int)STRLEN(p), &pp, &len);
+ if (pp != NULL)
+ {
+! if (*mustfree)
+ vim_free(p);
+ p = pp;
+ *mustfree = TRUE;
+*** ../vim-7.3.168/src/version.c 2011-04-28 17:30:05.000000000 +0200
+--- src/version.c 2011-04-28 17:48:04.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 169,
+ /**/
+
+--
+A day without sunshine is like, well, night.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.170 b/source/ap/vim/patches/7.3.170
new file mode 100644
index 000000000..933173ea8
--- /dev/null
+++ b/source/ap/vim/patches/7.3.170
@@ -0,0 +1,70 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.170
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.170
+Problem: VMS Makefile for testing was not updated for test77.
+Solution: Add test77 to the Makefile.
+Files: src/testdir/Make_vms.mms
+
+
+*** ../vim-7.3.169/src/testdir/Make_vms.mms 2010-11-10 16:54:16.000000000 +0100
+--- src/testdir/Make_vms.mms 2011-03-03 17:04:56.000000000 +0100
+***************
+*** 4,10 ****
+ # Authors: Zoltan Arpadffy, <arpadffy@polarhome.com>
+ # Sandor Kopanyi, <sandor.kopanyi@mailbox.hu>
+ #
+! # Last change: 2010 Nov 10
+ #
+ # This has been tested on VMS 6.2 to 8.3 on DEC Alpha, VAX and IA64.
+ # Edit the lines in the Configuration section below to select.
+--- 4,10 ----
+ # Authors: Zoltan Arpadffy, <arpadffy@polarhome.com>
+ # Sandor Kopanyi, <sandor.kopanyi@mailbox.hu>
+ #
+! # Last change: 2011 Mar 03
+ #
+ # This has been tested on VMS 6.2 to 8.3 on DEC Alpha, VAX and IA64.
+ # Edit the lines in the Configuration section below to select.
+***************
+*** 74,80 ****
+ test56.out test57.out test60.out \
+ test61.out test62.out test63.out test64.out test65.out \
+ test66.out test67.out test68.out test69.out \
+! test71.out test72.out test74.out test75.out test76.out
+
+ # Known problems:
+ # Test 30: a problem around mac format - unknown reason
+--- 74,81 ----
+ test56.out test57.out test60.out \
+ test61.out test62.out test63.out test64.out test65.out \
+ test66.out test67.out test68.out test69.out \
+! test71.out test72.out test74.out test75.out test76.out \
+! test77.out
+
+ # Known problems:
+ # Test 30: a problem around mac format - unknown reason
+*** ../vim-7.3.169/src/version.c 2011-04-28 17:48:39.000000000 +0200
+--- src/version.c 2011-04-28 19:04:33.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 170,
+ /**/
+
+--
+The users that I support would double-click on a landmine to find out
+what happens. -- A system administrator
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.171 b/source/ap/vim/patches/7.3.171
new file mode 100644
index 000000000..f965e0a20
--- /dev/null
+++ b/source/ap/vim/patches/7.3.171
@@ -0,0 +1,142 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.171
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.171
+Problem: When the clipboard isn't supported: ":yank*" gives a confusing
+ error message.
+Solution: Specifically mention that the register name is invalid.
+ (Jean-Rene David)
+Files: runtime/doc/change.txt, src/ex_docmd.c, src/globals.h
+
+
+*** ../vim-7.3.170/runtime/doc/change.txt 2010-08-15 21:57:18.000000000 +0200
+--- runtime/doc/change.txt 2011-05-05 13:48:00.000000000 +0200
+***************
+*** 916,923 ****
+ {Visual}["x]Y Yank the highlighted lines [into register x] (for
+ {Visual} see |Visual-mode|). {not in Vi}
+
+! *:y* *:yank*
+! :[range]y[ank] [x] Yank [range] lines [into register x].
+
+ :[range]y[ank] [x] {count}
+ Yank {count} lines, starting with last line number
+--- 917,926 ----
+ {Visual}["x]Y Yank the highlighted lines [into register x] (for
+ {Visual} see |Visual-mode|). {not in Vi}
+
+! *:y* *:yank* *E850*
+! :[range]y[ank] [x] Yank [range] lines [into register x]. Yanking to the
+! "* or "+ registers is possible only in GUI versions or
+! when the |+xterm_clipboard| feature is included.
+
+ :[range]y[ank] [x] {count}
+ Yank {count} lines, starting with last line number
+*** ../vim-7.3.170/src/ex_docmd.c 2011-04-11 21:35:03.000000000 +0200
+--- src/ex_docmd.c 2011-05-05 13:48:57.000000000 +0200
+***************
+*** 2424,2448 ****
+ if ( (ea.argt & REGSTR)
+ && *ea.arg != NUL
+ #ifdef FEAT_USR_CMDS
+- && valid_yank_reg(*ea.arg, (ea.cmdidx != CMD_put
+- && USER_CMDIDX(ea.cmdidx)))
+ /* Do not allow register = for user commands */
+ && (!USER_CMDIDX(ea.cmdidx) || *ea.arg != '=')
+- #else
+- && valid_yank_reg(*ea.arg, ea.cmdidx != CMD_put)
+ #endif
+ && !((ea.argt & COUNT) && VIM_ISDIGIT(*ea.arg)))
+ {
+! ea.regname = *ea.arg++;
+! #ifdef FEAT_EVAL
+! /* for '=' register: accept the rest of the line as an expression */
+! if (ea.arg[-1] == '=' && ea.arg[0] != NUL)
+ {
+! set_expr_line(vim_strsave(ea.arg));
+! ea.arg += STRLEN(ea.arg);
+ }
+ #endif
+! ea.arg = skipwhite(ea.arg);
+ }
+
+ /*
+--- 2424,2462 ----
+ if ( (ea.argt & REGSTR)
+ && *ea.arg != NUL
+ #ifdef FEAT_USR_CMDS
+ /* Do not allow register = for user commands */
+ && (!USER_CMDIDX(ea.cmdidx) || *ea.arg != '=')
+ #endif
+ && !((ea.argt & COUNT) && VIM_ISDIGIT(*ea.arg)))
+ {
+! #ifndef FEAT_CLIPBOARD
+! /* check these explicitly for a more specific error message */
+! if (*ea.arg == '*' || *ea.arg == '+')
+ {
+! errormsg = (char_u *)_(e_invalidreg);
+! goto doend;
+ }
+ #endif
+! if (
+! #ifdef FEAT_USR_CMDS
+! valid_yank_reg(*ea.arg, (ea.cmdidx != CMD_put
+! && USER_CMDIDX(ea.cmdidx)))
+! #else
+! valid_yank_reg(*ea.arg, ea.cmdidx != CMD_put)
+! #endif
+! )
+! {
+! ea.regname = *ea.arg++;
+! #ifdef FEAT_EVAL
+! /* for '=' register: accept the rest of the line as an expression */
+! if (ea.arg[-1] == '=' && ea.arg[0] != NUL)
+! {
+! set_expr_line(vim_strsave(ea.arg));
+! ea.arg += STRLEN(ea.arg);
+! }
+! #endif
+! ea.arg = skipwhite(ea.arg);
+! }
+ }
+
+ /*
+*** ../vim-7.3.170/src/globals.h 2011-02-15 17:39:14.000000000 +0100
+--- src/globals.h 2011-05-05 13:47:44.000000000 +0200
+***************
+*** 1561,1566 ****
+--- 1561,1569 ----
+ (defined(FEAT_INS_EXPAND) && defined(FEAT_COMPL_FUNC))
+ EXTERN char_u e_notset[] INIT(= N_("E764: Option '%s' is not set"));
+ #endif
++ #ifndef FEAT_CLIPBOARD
++ EXTERN char_u e_invalidreg[] INIT(= N_("E850: Invalid register name"));
++ #endif
+
+ #ifdef MACOS_X_UNIX
+ EXTERN short disallow_gui INIT(= FALSE);
+*** ../vim-7.3.170/src/version.c 2011-04-28 19:05:01.000000000 +0200
+--- src/version.c 2011-05-05 14:24:39.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 171,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+53. To find out what time it is, you send yourself an e-mail and check the
+ "Date:" field.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.172 b/source/ap/vim/patches/7.3.172
new file mode 100644
index 000000000..66a785217
--- /dev/null
+++ b/source/ap/vim/patches/7.3.172
@@ -0,0 +1,268 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.172
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.172
+Problem: MS-Windows: rename() might delete the file if the name differs but
+ it's actually the same file.
+Solution: Use the file handle to check if it's the same file. (Yukihiro
+ Nakadaira)
+Files: src/if_cscope.c, src/fileio.c, src/os_win32.c,
+ src/proto/os_win32.pro, src/vim.h
+
+
+*** ../vim-7.3.171/src/if_cscope.c 2011-03-03 15:01:25.000000000 +0100
+--- src/if_cscope.c 2011-05-05 16:16:38.000000000 +0200
+***************
+*** 1412,1428 ****
+ {
+ short i, j;
+ #ifndef UNIX
+- HANDLE hFile;
+ BY_HANDLE_FILE_INFORMATION bhfi;
+
+- vim_memset(&bhfi, 0, sizeof(bhfi));
+ /* On windows 9x GetFileInformationByHandle doesn't work, so skip it */
+ if (!mch_windows95())
+ {
+! hFile = CreateFile(fname, FILE_READ_ATTRIBUTES, 0, NULL, OPEN_EXISTING,
+! FILE_ATTRIBUTE_NORMAL, NULL);
+! if (hFile == INVALID_HANDLE_VALUE)
+ {
+ if (p_csverbose)
+ {
+ char *cant_msg = _("E625: cannot open cscope database: %s");
+--- 1412,1426 ----
+ {
+ short i, j;
+ #ifndef UNIX
+ BY_HANDLE_FILE_INFORMATION bhfi;
+
+ /* On windows 9x GetFileInformationByHandle doesn't work, so skip it */
+ if (!mch_windows95())
+ {
+! switch (win32_fileinfo(fname, &bhfi))
+ {
++ case FILEINFO_ENC_FAIL: /* enc_to_utf16() failed */
++ case FILEINFO_READ_FAIL: /* CreateFile() failed */
+ if (p_csverbose)
+ {
+ char *cant_msg = _("E625: cannot open cscope database: %s");
+***************
+*** 1438,1452 ****
+ (void)EMSG2(cant_msg, fname);
+ }
+ return -1;
+! }
+! if (!GetFileInformationByHandle(hFile, &bhfi))
+! {
+! CloseHandle(hFile);
+ if (p_csverbose)
+ (void)EMSG(_("E626: cannot get cscope database information"));
+ return -1;
+ }
+- CloseHandle(hFile);
+ }
+ #endif
+
+--- 1436,1447 ----
+ (void)EMSG2(cant_msg, fname);
+ }
+ return -1;
+!
+! case FILEINFO_INFO_FAIL: /* GetFileInformationByHandle() failed */
+ if (p_csverbose)
+ (void)EMSG(_("E626: cannot get cscope database information"));
+ return -1;
+ }
+ }
+ #endif
+
+*** ../vim-7.3.171/src/fileio.c 2011-04-11 21:35:03.000000000 +0200
+--- src/fileio.c 2011-05-05 16:22:22.000000000 +0200
+***************
+*** 6555,6560 ****
+--- 6555,6575 ----
+ use_tmp_file = TRUE;
+ }
+ #endif
++ #ifdef WIN3264
++ {
++ BY_HANDLE_FILE_INFORMATION info1, info2;
++
++ /* It's possible for the source and destination to be the same file.
++ * In that case go through a temp file name. This makes rename("foo",
++ * "./foo") a no-op (in a complicated way). */
++ if (win32_fileinfo(from, &info1) == FILEINFO_OK
++ && win32_fileinfo(to, &info2) == FILEINFO_OK
++ && info1.dwVolumeSerialNumber == info2.dwVolumeSerialNumber
++ && info1.nFileIndexHigh == info2.nFileIndexHigh
++ && info1.nFileIndexLow == info2.nFileIndexLow)
++ use_tmp_file = TRUE;
++ }
++ #endif
+
+ #if defined(UNIX) || defined(CASE_INSENSITIVE_FILENAME)
+ if (use_tmp_file)
+*** ../vim-7.3.171/src/os_win32.c 2011-02-01 13:48:47.000000000 +0100
+--- src/os_win32.c 2011-05-05 16:24:17.000000000 +0200
+***************
+*** 2645,2669 ****
+ int
+ mch_is_linked(char_u *fname)
+ {
+ HANDLE hFile;
+! int res = 0;
+! BY_HANDLE_FILE_INFORMATION inf;
+ #ifdef FEAT_MBYTE
+ WCHAR *wn = NULL;
+
+ if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
+ wn = enc_to_utf16(fname, NULL);
+ if (wn != NULL)
+ {
+ hFile = CreateFileW(wn, /* file name */
+ GENERIC_READ, /* access mode */
+! 0, /* share mode */
+ NULL, /* security descriptor */
+ OPEN_EXISTING, /* creation disposition */
+! 0, /* file attributes */
+ NULL); /* handle to template file */
+ if (hFile == INVALID_HANDLE_VALUE
+! && GetLastError() == ERROR_CALL_NOT_IMPLEMENTED)
+ {
+ /* Retry with non-wide function (for Windows 98). */
+ vim_free(wn);
+--- 2645,2688 ----
+ int
+ mch_is_linked(char_u *fname)
+ {
++ BY_HANDLE_FILE_INFORMATION info;
++
++ return win32_fileinfo(fname, &info) == FILEINFO_OK
++ && info.nNumberOfLinks > 1;
++ }
++
++ /*
++ * Get the by-handle-file-information for "fname".
++ * Returns FILEINFO_OK when OK.
++ * returns FILEINFO_ENC_FAIL when enc_to_utf16() failed.
++ * Returns FILEINFO_READ_FAIL when CreateFile() failed.
++ * Returns FILEINFO_INFO_FAIL when GetFileInformationByHandle() failed.
++ */
++ int
++ win32_fileinfo(char_u *fname, BY_HANDLE_FILE_INFORMATION *info)
++ {
+ HANDLE hFile;
+! int res = FILEINFO_READ_FAIL;
+ #ifdef FEAT_MBYTE
+ WCHAR *wn = NULL;
+
+ if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
++ {
+ wn = enc_to_utf16(fname, NULL);
++ if (wn == NULL)
++ res = FILEINFO_ENC_FAIL;
++ }
+ if (wn != NULL)
+ {
+ hFile = CreateFileW(wn, /* file name */
+ GENERIC_READ, /* access mode */
+! FILE_SHARE_READ | FILE_SHARE_WRITE, /* share mode */
+ NULL, /* security descriptor */
+ OPEN_EXISTING, /* creation disposition */
+! FILE_FLAG_BACKUP_SEMANTICS, /* file attributes */
+ NULL); /* handle to template file */
+ if (hFile == INVALID_HANDLE_VALUE
+! && GetLastError() == ERROR_CALL_NOT_IMPLEMENTED)
+ {
+ /* Retry with non-wide function (for Windows 98). */
+ vim_free(wn);
+***************
+*** 2674,2690 ****
+ #endif
+ hFile = CreateFile(fname, /* file name */
+ GENERIC_READ, /* access mode */
+! 0, /* share mode */
+ NULL, /* security descriptor */
+ OPEN_EXISTING, /* creation disposition */
+! 0, /* file attributes */
+ NULL); /* handle to template file */
+
+ if (hFile != INVALID_HANDLE_VALUE)
+ {
+! if (GetFileInformationByHandle(hFile, &inf) != 0
+! && inf.nNumberOfLinks > 1)
+! res = 1;
+ CloseHandle(hFile);
+ }
+
+--- 2693,2710 ----
+ #endif
+ hFile = CreateFile(fname, /* file name */
+ GENERIC_READ, /* access mode */
+! FILE_SHARE_READ | FILE_SHARE_WRITE, /* share mode */
+ NULL, /* security descriptor */
+ OPEN_EXISTING, /* creation disposition */
+! FILE_FLAG_BACKUP_SEMANTICS, /* file attributes */
+ NULL); /* handle to template file */
+
+ if (hFile != INVALID_HANDLE_VALUE)
+ {
+! if (GetFileInformationByHandle(hFile, info) != 0)
+! res = FILEINFO_OK;
+! else
+! res = FILEINFO_INFO_FAIL;
+ CloseHandle(hFile);
+ }
+
+*** ../vim-7.3.171/src/proto/os_win32.pro 2010-10-23 14:02:48.000000000 +0200
+--- src/proto/os_win32.pro 2011-05-05 16:17:42.000000000 +0200
+***************
+*** 21,26 ****
+--- 21,27 ----
+ void mch_hide __ARGS((char_u *name));
+ int mch_isdir __ARGS((char_u *name));
+ int mch_is_linked __ARGS((char_u *fname));
++ int win32_fileinfo __ARGS((char_u *name, BY_HANDLE_FILE_INFORMATION *lpFileInfo));
+ int mch_writable __ARGS((char_u *name));
+ int mch_can_exe __ARGS((char_u *name));
+ int mch_nodetype __ARGS((char_u *name));
+*** ../vim-7.3.171/src/vim.h 2011-04-11 21:35:03.000000000 +0200
+--- src/vim.h 2011-05-05 16:16:57.000000000 +0200
+***************
+*** 2217,2220 ****
+--- 2217,2226 ----
+ #define KEYLEN_PART_MAP -2 /* keylen value for incomplete mapping */
+ #define KEYLEN_REMOVED 9999 /* keylen value for removed sequence */
+
++ /* Return values from win32_fileinfo(). */
++ #define FILEINFO_OK 0
++ #define FILEINFO_ENC_FAIL 1 /* enc_to_utf16() failed */
++ #define FILEINFO_READ_FAIL 2 /* CreateFile() failed */
++ #define FILEINFO_INFO_FAIL 3 /* GetFileInformationByHandle() failed */
++
+ #endif /* VIM__H */
+*** ../vim-7.3.171/src/version.c 2011-05-05 14:26:37.000000000 +0200
+--- src/version.c 2011-05-05 16:39:35.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 172,
+ /**/
+
+--
+Q: What is a patch 22?
+A: A patch you need to include to make it possible to include patches.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.173 b/source/ap/vim/patches/7.3.173
new file mode 100644
index 000000000..ac8cffb93
--- /dev/null
+++ b/source/ap/vim/patches/7.3.173
@@ -0,0 +1,79 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.173
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.173
+Problem: After using setqflist() to make the quickfix list empty ":cwindow"
+ may open the window anyway. Also after ":vimgrep".
+Solution: Correctly check whether the list is empty. (Ingo Karkat)
+Files: src/quickfix.c
+
+
+*** ../vim-7.3.172/src/quickfix.c 2011-04-28 17:27:05.000000000 +0200
+--- src/quickfix.c 2011-05-05 16:55:47.000000000 +0200
+***************
+*** 1164,1170 ****
+
+ /* When no valid entries are present in the list, qf_ptr points to
+ * the first item in the list */
+! if (to_qfl->qf_nonevalid == TRUE)
+ to_qfl->qf_ptr = to_qfl->qf_start;
+ }
+
+--- 1164,1170 ----
+
+ /* When no valid entries are present in the list, qf_ptr points to
+ * the first item in the list */
+! if (to_qfl->qf_nonevalid)
+ to_qfl->qf_ptr = to_qfl->qf_start;
+ }
+
+***************
+*** 2243,2248 ****
+--- 2243,2249 ----
+ * it if we have errors; otherwise, leave it closed.
+ */
+ if (qi->qf_lists[qi->qf_curlist].qf_nonevalid
++ || qi->qf_lists[qi->qf_curlist].qf_count == 0
+ || qi->qf_curlist >= qi->qf_listcount)
+ {
+ if (win != NULL)
+***************
+*** 3711,3717 ****
+ }
+
+ if (qi->qf_lists[qi->qf_curlist].qf_index == 0)
+! /* empty list or no valid entry */
+ qi->qf_lists[qi->qf_curlist].qf_nonevalid = TRUE;
+ else
+ qi->qf_lists[qi->qf_curlist].qf_nonevalid = FALSE;
+--- 3712,3718 ----
+ }
+
+ if (qi->qf_lists[qi->qf_curlist].qf_index == 0)
+! /* no valid entry */
+ qi->qf_lists[qi->qf_curlist].qf_nonevalid = TRUE;
+ else
+ qi->qf_lists[qi->qf_curlist].qf_nonevalid = FALSE;
+*** ../vim-7.3.172/src/version.c 2011-05-05 16:41:19.000000000 +0200
+--- src/version.c 2011-05-05 17:11:57.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 173,
+ /**/
+
+--
+"I can't complain, but sometimes I still do." (Joe Walsh)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.174 b/source/ap/vim/patches/7.3.174
new file mode 100644
index 000000000..33d600350
--- /dev/null
+++ b/source/ap/vim/patches/7.3.174
@@ -0,0 +1,109 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.174
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.174
+Problem: When Exuberant ctags binary is exctags it's not found.
+Solution: Add configure check for exctags. (Hong Xu)
+Files: src/configure.in, src/auto/configure
+
+
+*** ../vim-7.3.173/src/configure.in 2011-02-09 17:42:53.000000000 +0100
+--- src/configure.in 2011-05-05 17:18:21.000000000 +0200
+***************
+*** 2619,2625 ****
+ dnl On HP-UX 10.10 termcap or termlib should be used instead of
+ dnl curses, because curses is much slower.
+ dnl Newer versions of ncurses are preferred over anything, except
+! dnl when tinfo has been split off, it conains all we need.
+ dnl Older versions of ncurses have bugs, get a new one!
+ dnl Digital Unix (OSF1) should use curses (Ronald Schild).
+ dnl On SCO Openserver should prefer termlib (Roger Cornelius).
+--- 2619,2625 ----
+ dnl On HP-UX 10.10 termcap or termlib should be used instead of
+ dnl curses, because curses is much slower.
+ dnl Newer versions of ncurses are preferred over anything, except
+! dnl when tinfo has been split off, it contains all we need.
+ dnl Older versions of ncurses have bugs, get a new one!
+ dnl Digital Unix (OSF1) should use curses (Ronald Schild).
+ dnl On SCO Openserver should prefer termlib (Roger Cornelius).
+***************
+*** 3370,3376 ****
+ AC_CHECK_LIB(xpg4, _xpg4_setrunelocale, [LIBS="$LIBS -lxpg4"],,)
+
+ dnl Check how we can run ctags. Default to "ctags" when nothing works.
+! dnl --version for Exuberant ctags (preferred)
+ dnl Add --fields=+S to get function signatures for omni completion.
+ dnl -t for typedefs (many ctags have this)
+ dnl -s for static functions (Elvis ctags only?)
+--- 3370,3376 ----
+ AC_CHECK_LIB(xpg4, _xpg4_setrunelocale, [LIBS="$LIBS -lxpg4"],,)
+
+ dnl Check how we can run ctags. Default to "ctags" when nothing works.
+! dnl Use --version to detect Exuberant ctags (preferred)
+ dnl Add --fields=+S to get function signatures for omni completion.
+ dnl -t for typedefs (many ctags have this)
+ dnl -s for static functions (Elvis ctags only?)
+***************
+*** 3378,3384 ****
+ dnl -i+m to test for older Exuberant ctags
+ AC_MSG_CHECKING(how to create tags)
+ test -f tags && mv tags tags.save
+! if (eval ctags --version /dev/null | grep Exuberant) < /dev/null 1>&AC_FD_CC 2>&1; then
+ TAGPRG="ctags -I INIT+ --fields=+S"
+ else
+ TAGPRG="ctags"
+--- 3378,3386 ----
+ dnl -i+m to test for older Exuberant ctags
+ AC_MSG_CHECKING(how to create tags)
+ test -f tags && mv tags tags.save
+! if (eval exctags --version /dev/null | grep Exuberant) < /dev/null 1>&AC_FD_CC 2>&1; then
+! TAGPRG="exctags -I INIT+ --fields=+S"
+! elif (eval ctags --version /dev/null | grep Exuberant) < /dev/null 1>&AC_FD_CC 2>&1; then
+ TAGPRG="ctags -I INIT+ --fields=+S"
+ else
+ TAGPRG="ctags"
+*** ../vim-7.3.173/src/auto/configure 2011-02-09 17:42:53.000000000 +0100
+--- src/auto/configure 2011-05-05 17:19:26.000000000 +0200
+***************
+*** 12031,12037 ****
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to create tags" >&5
+ $as_echo_n "checking how to create tags... " >&6; }
+ test -f tags && mv tags tags.save
+! if (eval ctags --version /dev/null | grep Exuberant) < /dev/null 1>&5 2>&1; then
+ TAGPRG="ctags -I INIT+ --fields=+S"
+ else
+ TAGPRG="ctags"
+--- 12031,12039 ----
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to create tags" >&5
+ $as_echo_n "checking how to create tags... " >&6; }
+ test -f tags && mv tags tags.save
+! if (eval exctags --version /dev/null | grep Exuberant) < /dev/null 1>&5 2>&1; then
+! TAGPRG="exctags -I INIT+ --fields=+S"
+! elif (eval ctags --version /dev/null | grep Exuberant) < /dev/null 1>&5 2>&1; then
+ TAGPRG="ctags -I INIT+ --fields=+S"
+ else
+ TAGPRG="ctags"
+*** ../vim-7.3.173/src/version.c 2011-05-05 17:14:07.000000000 +0200
+--- src/version.c 2011-05-05 17:19:37.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 174,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+54. You start tilting your head sideways to smile. :-)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.175 b/source/ap/vim/patches/7.3.175
new file mode 100644
index 000000000..57fbc4a79
--- /dev/null
+++ b/source/ap/vim/patches/7.3.175
@@ -0,0 +1,50 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.175
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.175
+Problem: When 'colorcolumn' is set locally to a window, ":new" opens a
+ window with the same highlighting but 'colorcolumn' is empty.
+ (Tyru)
+Solution: Call check_colorcolumn() after clearing and copying options.
+ (Christian Brabandt)
+Files: src/buffer.c
+
+
+*** ../vim-7.3.174/src/buffer.c 2011-04-11 16:56:29.000000000 +0200
+--- src/buffer.c 2011-05-05 17:28:24.000000000 +0200
+***************
+*** 2527,2532 ****
+--- 2527,2535 ----
+ if (p_fdls >= 0)
+ curwin->w_p_fdl = p_fdls;
+ #endif
++ #ifdef FEAT_SYN_HL
++ check_colorcolumn(curwin);
++ #endif
+ }
+
+ /*
+*** ../vim-7.3.174/src/version.c 2011-05-05 17:23:58.000000000 +0200
+--- src/version.c 2011-05-05 17:30:32.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 175,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+55. You ask your doctor to implant a gig in your brain.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.176 b/source/ap/vim/patches/7.3.176
new file mode 100644
index 000000000..fcf4880d2
--- /dev/null
+++ b/source/ap/vim/patches/7.3.176
@@ -0,0 +1,165 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.176
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.176
+Problem: Ruby linking doesn't work properly on Mac OS X.
+Solution: Fix the configure check for Ruby. (Bjorn Winckler)
+Files: src/configure.in, src/auto/configure
+
+
+*** ../vim-7.3.175/src/configure.in 2011-05-05 17:23:58.000000000 +0200
+--- src/configure.in 2011-05-05 18:03:38.000000000 +0200
+***************
+*** 1387,1396 ****
+ AC_MSG_RESULT($enable_rubyinterp)
+ if test "$enable_rubyinterp" = "yes" -o "$enable_rubyinterp" = "dynamic"; then
+ AC_MSG_CHECKING(--with-ruby-command argument)
+ AC_ARG_WITH(ruby-command, [ --with-ruby-command=RUBY name of the Ruby command (default: ruby)],
+! RUBY_CMD="$withval"; AC_MSG_RESULT($RUBY_CMD),
+ RUBY_CMD="ruby"; AC_MSG_RESULT(defaulting to $RUBY_CMD))
+- AC_SUBST(vi_cv_path_ruby)
+ AC_PATH_PROG(vi_cv_path_ruby, $RUBY_CMD)
+ if test "X$vi_cv_path_ruby" != "X"; then
+ AC_MSG_CHECKING(Ruby version)
+--- 1387,1396 ----
+ AC_MSG_RESULT($enable_rubyinterp)
+ if test "$enable_rubyinterp" = "yes" -o "$enable_rubyinterp" = "dynamic"; then
+ AC_MSG_CHECKING(--with-ruby-command argument)
++ AC_SUBST(vi_cv_path_ruby)
+ AC_ARG_WITH(ruby-command, [ --with-ruby-command=RUBY name of the Ruby command (default: ruby)],
+! RUBY_CMD="$withval"; vi_cv_path_ruby="$withval"; AC_MSG_RESULT($RUBY_CMD),
+ RUBY_CMD="ruby"; AC_MSG_RESULT(defaulting to $RUBY_CMD))
+ AC_PATH_PROG(vi_cv_path_ruby, $RUBY_CMD)
+ if test "X$vi_cv_path_ruby" != "X"; then
+ AC_MSG_CHECKING(Ruby version)
+***************
+*** 1412,1429 ****
+ RUBY_LIBS="$rubylibs"
+ fi
+ librubyarg=`$vi_cv_path_ruby -r rbconfig -e 'print Config.expand(Config::CONFIG[["LIBRUBYARG"]])'`
+! if test -f "$rubyhdrdir/$librubyarg"; then
+! librubyarg="$rubyhdrdir/$librubyarg"
+! else
+! rubylibdir=`$vi_cv_path_ruby -r rbconfig -e 'print Config.expand(Config::CONFIG[["libdir"]])'`
+! if test -f "$rubylibdir/$librubyarg"; then
+! librubyarg="$rubylibdir/$librubyarg"
+! elif test "$librubyarg" = "libruby.a"; then
+! dnl required on Mac OS 10.3 where libruby.a doesn't exist
+! librubyarg="-lruby"
+! else
+! librubyarg=`$vi_cv_path_ruby -r rbconfig -e "print '$librubyarg'.gsub(/-L\./, %'-L#{Config.expand(Config::CONFIG[\"libdir\"])}')"`
+! fi
+ fi
+
+ if test "X$librubyarg" != "X"; then
+--- 1412,1426 ----
+ RUBY_LIBS="$rubylibs"
+ fi
+ librubyarg=`$vi_cv_path_ruby -r rbconfig -e 'print Config.expand(Config::CONFIG[["LIBRUBYARG"]])'`
+! librubya=`$vi_cv_path_ruby -r rbconfig -e 'print Config.expand(Config::CONFIG[["LIBRUBY_A"]])'`
+! rubylibdir=`$vi_cv_path_ruby -r rbconfig -e 'print Config.expand(Config::CONFIG[["libdir"]])'`
+! if test -f "$rubylibdir/$librubya"; then
+! librubyarg="$librubyarg"
+! RUBY_LIBS="$RUBY_LIBS -L$rubylibdir"
+! elif test "$librubyarg" = "libruby.a"; then
+! dnl required on Mac OS 10.3 where libruby.a doesn't exist
+! librubyarg="-lruby"
+! RUBY_LIBS="$RUBY_LIBS -L$rubylibdir"
+ fi
+
+ if test "X$librubyarg" != "X"; then
+*** ../vim-7.3.175/src/auto/configure 2011-05-05 17:23:58.000000000 +0200
+--- src/auto/configure 2011-05-05 18:06:47.000000000 +0200
+***************
+*** 6218,6233 ****
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking --with-ruby-command argument" >&5
+ $as_echo_n "checking --with-ruby-command argument... " >&6; }
+
+ # Check whether --with-ruby-command was given.
+ if test "${with_ruby_command+set}" = set; then :
+! withval=$with_ruby_command; RUBY_CMD="$withval"; { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RUBY_CMD" >&5
+ $as_echo "$RUBY_CMD" >&6; }
+ else
+ RUBY_CMD="ruby"; { $as_echo "$as_me:${as_lineno-$LINENO}: result: defaulting to $RUBY_CMD" >&5
+ $as_echo "defaulting to $RUBY_CMD" >&6; }
+ fi
+
+-
+ # Extract the first word of "$RUBY_CMD", so it can be a program name with args.
+ set dummy $RUBY_CMD; ac_word=$2
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+--- 6218,6233 ----
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking --with-ruby-command argument" >&5
+ $as_echo_n "checking --with-ruby-command argument... " >&6; }
+
++
+ # Check whether --with-ruby-command was given.
+ if test "${with_ruby_command+set}" = set; then :
+! withval=$with_ruby_command; RUBY_CMD="$withval"; vi_cv_path_ruby="$withval"; { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RUBY_CMD" >&5
+ $as_echo "$RUBY_CMD" >&6; }
+ else
+ RUBY_CMD="ruby"; { $as_echo "$as_me:${as_lineno-$LINENO}: result: defaulting to $RUBY_CMD" >&5
+ $as_echo "defaulting to $RUBY_CMD" >&6; }
+ fi
+
+ # Extract the first word of "$RUBY_CMD", so it can be a program name with args.
+ set dummy $RUBY_CMD; ac_word=$2
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+***************
+*** 6292,6308 ****
+ RUBY_LIBS="$rubylibs"
+ fi
+ librubyarg=`$vi_cv_path_ruby -r rbconfig -e 'print Config.expand(Config::CONFIG["LIBRUBYARG"])'`
+! if test -f "$rubyhdrdir/$librubyarg"; then
+! librubyarg="$rubyhdrdir/$librubyarg"
+! else
+! rubylibdir=`$vi_cv_path_ruby -r rbconfig -e 'print Config.expand(Config::CONFIG["libdir"])'`
+! if test -f "$rubylibdir/$librubyarg"; then
+! librubyarg="$rubylibdir/$librubyarg"
+! elif test "$librubyarg" = "libruby.a"; then
+! librubyarg="-lruby"
+! else
+! librubyarg=`$vi_cv_path_ruby -r rbconfig -e "print '$librubyarg'.gsub(/-L\./, %'-L#{Config.expand(Config::CONFIG[\"libdir\"])}')"`
+! fi
+ fi
+
+ if test "X$librubyarg" != "X"; then
+--- 6292,6305 ----
+ RUBY_LIBS="$rubylibs"
+ fi
+ librubyarg=`$vi_cv_path_ruby -r rbconfig -e 'print Config.expand(Config::CONFIG["LIBRUBYARG"])'`
+! librubya=`$vi_cv_path_ruby -r rbconfig -e 'print Config.expand(Config::CONFIG["LIBRUBY_A"])'`
+! rubylibdir=`$vi_cv_path_ruby -r rbconfig -e 'print Config.expand(Config::CONFIG["libdir"])'`
+! if test -f "$rubylibdir/$librubya"; then
+! librubyarg="$librubyarg"
+! RUBY_LIBS="$RUBY_LIBS -L$rubylibdir"
+! elif test "$librubyarg" = "libruby.a"; then
+! librubyarg="-lruby"
+! RUBY_LIBS="$RUBY_LIBS -L$rubylibdir"
+ fi
+
+ if test "X$librubyarg" != "X"; then
+*** ../vim-7.3.175/src/version.c 2011-05-05 17:32:40.000000000 +0200
+--- src/version.c 2011-05-05 18:08:52.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 176,
+ /**/
+
+--
+"I simultaneously try to keep my head in the clouds and my feet on the
+ground. Sometimes it's a stretch, though." -- Larry Wall
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.177 b/source/ap/vim/patches/7.3.177
new file mode 100644
index 000000000..895b3b134
--- /dev/null
+++ b/source/ap/vim/patches/7.3.177
@@ -0,0 +1,97 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.177
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.177
+Problem: MS-Windows: mkdir() doesn't work properly when 'encoding' is
+ "utf-8".
+Solution: Convert to utf-16. (Yukihiro Nakadaira)
+Files: src/os_win32.c, src/os_win32.h, src/proto/os_win32.pro
+
+
+*** ../vim-7.3.176/src/os_win32.c 2011-05-05 16:41:19.000000000 +0200
+--- src/os_win32.c 2011-05-05 18:24:36.000000000 +0200
+***************
+*** 2640,2645 ****
+--- 2640,2669 ----
+ }
+
+ /*
++ * Create directory "name".
++ * Return 0 on success, -1 on error.
++ */
++ int
++ mch_mkdir(char_u *name)
++ {
++ #ifdef FEAT_MBYTE
++ if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
++ {
++ WCHAR *p;
++ int retval;
++
++ p = enc_to_utf16(name, NULL);
++ if (p == NULL)
++ return -1;
++ retval = _wmkdir(p);
++ vim_free(p);
++ return retval;
++ }
++ #endif
++ return _mkdir(name);
++ }
++
++ /*
+ * Return TRUE if file "fname" has more than one link.
+ */
+ int
+*** ../vim-7.3.176/src/os_win32.h 2010-08-15 21:57:30.000000000 +0200
+--- src/os_win32.h 2011-05-05 18:25:44.000000000 +0200
+***************
+*** 191,195 ****
+ #ifdef __BORLANDC__
+ # define vim_mkdir(x, y) mkdir(x)
+ #else
+! # define vim_mkdir(x, y) _mkdir(x)
+ #endif
+--- 191,195 ----
+ #ifdef __BORLANDC__
+ # define vim_mkdir(x, y) mkdir(x)
+ #else
+! # define vim_mkdir(x, y) mch_mkdir(x)
+ #endif
+*** ../vim-7.3.176/src/proto/os_win32.pro 2011-05-05 16:41:19.000000000 +0200
+--- src/proto/os_win32.pro 2011-05-05 18:26:20.000000000 +0200
+***************
+*** 20,25 ****
+--- 20,26 ----
+ int mch_setperm __ARGS((char_u *name, long perm));
+ void mch_hide __ARGS((char_u *name));
+ int mch_isdir __ARGS((char_u *name));
++ int mch_mkdir __ARGS((char_u *name));
+ int mch_is_linked __ARGS((char_u *fname));
+ int win32_fileinfo __ARGS((char_u *name, BY_HANDLE_FILE_INFORMATION *lpFileInfo));
+ int mch_writable __ARGS((char_u *name));
+*** ../vim-7.3.176/src/version.c 2011-05-05 18:10:11.000000000 +0200
+--- src/version.c 2011-05-05 18:27:56.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 177,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+56. You leave the modem speaker on after connecting because you think it
+ sounds like the ocean wind...the perfect soundtrack for "surfing the net".
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.178 b/source/ap/vim/patches/7.3.178
new file mode 100644
index 000000000..9b6ca7c3a
--- /dev/null
+++ b/source/ap/vim/patches/7.3.178
@@ -0,0 +1,163 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.178
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.178
+Problem: C-indent doesn't handle code right after { correctly.
+Solution: Fix detecting unterminated line. (Lech Lorens)
+Files: src/misc1.c, src/testdir/test3.in, src/testdir/test3.ok
+
+
+*** ../vim-7.3.177/src/misc1.c 2011-04-28 17:48:39.000000000 +0200
+--- src/misc1.c 2011-05-10 11:35:09.000000000 +0200
+***************
+*** 4983,4989 ****
+ }
+
+ /*
+! * Return TRUE if there there is no code at *s. White space and comments are
+ * not considered code.
+ */
+ static int
+--- 4983,4989 ----
+ }
+
+ /*
+! * Return TRUE if there is no code at *s. White space and comments are
+ * not considered code.
+ */
+ static int
+***************
+*** 5458,5465 ****
+ }
+
+ /*
+! * Recognize a line that starts with '{' or '}', or ends with ';', '{' or '}'.
+ * Don't consider "} else" a terminated line.
+ * Return the character terminating the line (ending char's have precedence if
+ * both apply in order to determine initializations).
+ */
+--- 5458,5468 ----
+ }
+
+ /*
+! * Recognize a line that starts with '{' or '}', or ends with ';', ',', '{' or
+! * '}'.
+ * Don't consider "} else" a terminated line.
++ * Don't consider a line where there are unmatched opening braces before '}',
++ * ';' or ',' a terminated line.
+ * Return the character terminating the line (ending char's have precedence if
+ * both apply in order to determine initializations).
+ */
+***************
+*** 5470,5475 ****
+--- 5473,5479 ----
+ int incl_comma; /* recognize a trailing comma */
+ {
+ char_u found_start = 0;
++ unsigned n_open = 0;
+
+ s = cin_skipcomment(s);
+
+***************
+*** 5480,5489 ****
+ {
+ /* skip over comments, "" strings and 'c'haracters */
+ s = skip_string(cin_skipcomment(s));
+! if ((*s == ';' || (incl_open && *s == '{') || *s == '}'
+! || (incl_comma && *s == ','))
+ && cin_nocode(s + 1))
+ return *s;
+
+ if (*s)
+ s++;
+--- 5484,5502 ----
+ {
+ /* skip over comments, "" strings and 'c'haracters */
+ s = skip_string(cin_skipcomment(s));
+! if (*s == '}' && n_open > 0)
+! --n_open;
+! if (n_open == 0
+! && (*s == ';' || *s == '}' || (incl_comma && *s == ','))
+ && cin_nocode(s + 1))
+ return *s;
++ else if (*s == '{')
++ {
++ if (incl_open && cin_nocode(s + 1))
++ return *s;
++ else
++ ++n_open;
++ }
+
+ if (*s)
+ s++;
+*** ../vim-7.3.177/src/testdir/test3.in 2011-04-28 13:01:59.000000000 +0200
+--- src/testdir/test3.in 2011-05-10 11:34:13.000000000 +0200
+***************
+*** 1344,1349 ****
+--- 1344,1365 ----
+ }
+
+ STARTTEST
++ :set cino&
++ 2kdd=][
++ ENDTEST
++
++ void func(void)
++ {
++ if(x==y)
++ if(y==z)
++ foo=1;
++ else { bar=1;
++ baz=2;
++ }
++ printf("Foo!\n");
++ }
++
++ STARTTEST
+ :g/^STARTTEST/.,/^ENDTEST/d
+ :1;/start of AUTO/,$wq! test.out
+ ENDTEST
+*** ../vim-7.3.177/src/testdir/test3.ok 2011-04-28 13:01:59.000000000 +0200
+--- src/testdir/test3.ok 2011-05-10 11:34:13.000000000 +0200
+***************
+*** 1204,1206 ****
+--- 1204,1218 ----
+ {
+ }
+
++
++ void func(void)
++ {
++ if(x==y)
++ if(y==z)
++ foo=1;
++ else { bar=1;
++ baz=2;
++ }
++ printf("Foo!\n");
++ }
++
+*** ../vim-7.3.177/src/version.c 2011-05-05 18:31:54.000000000 +0200
+--- src/version.c 2011-05-10 11:37:43.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 178,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+69. Yahoo welcomes you with your own start page
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.179 b/source/ap/vim/patches/7.3.179
new file mode 100644
index 000000000..f175b264e
--- /dev/null
+++ b/source/ap/vim/patches/7.3.179
@@ -0,0 +1,95 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.179
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.179
+Problem: C-indent doesn't handle colon in string correctly.
+Solution: Skip the string. (Lech Lorens)
+Files: src/misc1.c, src/testdir/test3.in, src/testdir/test3.ok
+
+
+*** ../vim-7.3.178/src/misc1.c 2011-05-10 11:39:13.000000000 +0200
+--- src/misc1.c 2011-05-10 11:50:14.000000000 +0200
+***************
+*** 5801,5807 ****
+ continue;
+ }
+
+! if (s[0] == ':')
+ {
+ if (s[1] == ':')
+ {
+--- 5801,5809 ----
+ continue;
+ }
+
+! if (s[0] == '"')
+! s = skip_string(s) + 1;
+! else if (s[0] == ':')
+ {
+ if (s[1] == ':')
+ {
+*** ../vim-7.3.178/src/testdir/test3.in 2011-05-10 11:39:13.000000000 +0200
+--- src/testdir/test3.in 2011-05-10 11:53:02.000000000 +0200
+***************
+*** 1360,1365 ****
+--- 1360,1378 ----
+ }
+
+ STARTTEST
++ :set cino&
++ 2kdd=][
++ ENDTEST
++
++ void func(void)
++ {
++ cout << "a"
++ << "b"
++ << ") :"
++ << "c";
++ }
++
++ STARTTEST
+ :g/^STARTTEST/.,/^ENDTEST/d
+ :1;/start of AUTO/,$wq! test.out
+ ENDTEST
+*** ../vim-7.3.178/src/testdir/test3.ok 2011-05-10 11:39:13.000000000 +0200
+--- src/testdir/test3.ok 2011-05-10 11:50:14.000000000 +0200
+***************
+*** 1216,1218 ****
+--- 1216,1227 ----
+ printf("Foo!\n");
+ }
+
++
++ void func(void)
++ {
++ cout << "a"
++ << "b"
++ << ") :"
++ << "c";
++ }
++
+*** ../vim-7.3.178/src/version.c 2011-05-10 11:39:13.000000000 +0200
+--- src/version.c 2011-05-10 11:53:36.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 179,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+71. You wonder how people walk
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.180 b/source/ap/vim/patches/7.3.180
new file mode 100644
index 000000000..5997bfbe8
--- /dev/null
+++ b/source/ap/vim/patches/7.3.180
@@ -0,0 +1,295 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.180
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.180
+Problem: When both a middle part of 'comments' matches and an end part, the
+ middle part was used errornously.
+Solution: After finding the middle part match continue looking for a better
+ end part match. (partly by Lech Lorens)
+Files: src/misc1.c, src/testdir/test3.in, src/testdir/test3.ok
+
+
+*** ../vim-7.3.179/src/misc1.c 2011-05-10 11:56:26.000000000 +0200
+--- src/misc1.c 2011-05-10 13:24:38.000000000 +0200
+***************
+*** 1561,1566 ****
+--- 1561,1569 ----
+ char_u part_buf[COM_MAX_LEN]; /* buffer for one option part */
+ char_u *string; /* pointer to comment string */
+ char_u *list;
++ int middle_match_len = 0;
++ char_u *prev_list;
++ char_u *saved_flags;
+
+ i = 0;
+ while (vim_iswhite(line[i])) /* leading white space is ignored */
+***************
+*** 1569,1575 ****
+ /*
+ * Repeat to match several nested comment strings.
+ */
+! while (line[i])
+ {
+ /*
+ * scan through the 'comments' option for a match
+--- 1572,1578 ----
+ /*
+ * Repeat to match several nested comment strings.
+ */
+! while (line[i] != NUL)
+ {
+ /*
+ * scan through the 'comments' option for a match
+***************
+*** 1577,1658 ****
+ found_one = FALSE;
+ for (list = curbuf->b_p_com; *list; )
+ {
+! /*
+! * Get one option part into part_buf[]. Advance list to next one.
+! * put string at start of string.
+! */
+! if (!got_com && flags != NULL) /* remember where flags started */
+! *flags = list;
+ (void)copy_option_part(&list, part_buf, COM_MAX_LEN, ",");
+ string = vim_strchr(part_buf, ':');
+ if (string == NULL) /* missing ':', ignore this part */
+ continue;
+ *string++ = NUL; /* isolate flags from string */
+
+! /*
+! * When already found a nested comment, only accept further
+! * nested comments.
+! */
+ if (got_com && vim_strchr(part_buf, COM_NEST) == NULL)
+ continue;
+
+! /* When 'O' flag used don't use for "O" command */
+ if (backward && vim_strchr(part_buf, COM_NOBACK) != NULL)
+ continue;
+
+! /*
+! * Line contents and string must match.
+ * When string starts with white space, must have some white space
+ * (but the amount does not need to match, there might be a mix of
+! * TABs and spaces).
+! */
+ if (vim_iswhite(string[0]))
+ {
+ if (i == 0 || !vim_iswhite(line[i - 1]))
+! continue;
+ while (vim_iswhite(string[0]))
+ ++string;
+ }
+ for (j = 0; string[j] != NUL && string[j] == line[i + j]; ++j)
+ ;
+ if (string[j] != NUL)
+! continue;
+
+! /*
+! * When 'b' flag used, there must be white space or an
+! * end-of-line after the string in the line.
+! */
+ if (vim_strchr(part_buf, COM_BLANK) != NULL
+ && !vim_iswhite(line[i + j]) && line[i + j] != NUL)
+ continue;
+
+! /*
+! * We have found a match, stop searching.
+! */
+! i += j;
+! got_com = TRUE;
+ found_one = TRUE;
+ break;
+ }
+
+! /*
+! * No match found, stop scanning.
+! */
+ if (!found_one)
+ break;
+
+! /*
+! * Include any trailing white space.
+! */
+ while (vim_iswhite(line[i]))
+ ++i;
+
+! /*
+! * If this comment doesn't nest, stop here.
+! */
+ if (vim_strchr(part_buf, COM_NEST) == NULL)
+ break;
+ }
+ return (got_com ? i : 0);
+ }
+ #endif
+--- 1580,1683 ----
+ found_one = FALSE;
+ for (list = curbuf->b_p_com; *list; )
+ {
+! /* Get one option part into part_buf[]. Advance "list" to next
+! * one. Put "string" at start of string. */
+! if (!got_com && flags != NULL)
+! *flags = list; /* remember where flags started */
+! prev_list = list;
+ (void)copy_option_part(&list, part_buf, COM_MAX_LEN, ",");
+ string = vim_strchr(part_buf, ':');
+ if (string == NULL) /* missing ':', ignore this part */
+ continue;
+ *string++ = NUL; /* isolate flags from string */
+
+! /* If we found a middle match previously, use that match when this
+! * is not a middle or end. */
+! if (middle_match_len != 0
+! && vim_strchr(part_buf, COM_MIDDLE) == NULL
+! && vim_strchr(part_buf, COM_END) == NULL)
+! break;
+!
+! /* When we already found a nested comment, only accept further
+! * nested comments. */
+ if (got_com && vim_strchr(part_buf, COM_NEST) == NULL)
+ continue;
+
+! /* When 'O' flag present and using "O" command skip this one. */
+ if (backward && vim_strchr(part_buf, COM_NOBACK) != NULL)
+ continue;
+
+! /* Line contents and string must match.
+ * When string starts with white space, must have some white space
+ * (but the amount does not need to match, there might be a mix of
+! * TABs and spaces). */
+ if (vim_iswhite(string[0]))
+ {
+ if (i == 0 || !vim_iswhite(line[i - 1]))
+! continue; /* missing shite space */
+ while (vim_iswhite(string[0]))
+ ++string;
+ }
+ for (j = 0; string[j] != NUL && string[j] == line[i + j]; ++j)
+ ;
+ if (string[j] != NUL)
+! continue; /* string doesn't match */
+
+! /* When 'b' flag used, there must be white space or an
+! * end-of-line after the string in the line. */
+ if (vim_strchr(part_buf, COM_BLANK) != NULL
+ && !vim_iswhite(line[i + j]) && line[i + j] != NUL)
+ continue;
+
+! /* We have found a match, stop searching unless this is a middle
+! * comment. The middle comment can be a substring of the end
+! * comment in which case it's better to return the length of the
+! * end comment and its flags. Thus we keep searching with middle
+! * and end matches and use an end match if it matches better. */
+! if (vim_strchr(part_buf, COM_MIDDLE) != NULL)
+! {
+! if (middle_match_len == 0)
+! {
+! middle_match_len = j;
+! saved_flags = prev_list;
+! }
+! continue;
+! }
+! if (middle_match_len != 0 && j > middle_match_len)
+! /* Use this match instead of the middle match, since it's a
+! * longer thus better match. */
+! middle_match_len = 0;
+!
+! if (middle_match_len == 0)
+! i += j;
+ found_one = TRUE;
+ break;
+ }
+
+! if (middle_match_len != 0)
+! {
+! /* Use the previously found middle match after failing to find a
+! * match with an end. */
+! if (!got_com && flags != NULL)
+! *flags = saved_flags;
+! i += middle_match_len;
+! found_one = TRUE;
+! }
+!
+! /* No match found, stop scanning. */
+ if (!found_one)
+ break;
+
+! /* Include any trailing white space. */
+ while (vim_iswhite(line[i]))
+ ++i;
+
+! /* If this comment doesn't nest, stop here. */
+! got_com = TRUE;
+ if (vim_strchr(part_buf, COM_NEST) == NULL)
+ break;
+ }
++
+ return (got_com ? i : 0);
+ }
+ #endif
+*** ../vim-7.3.179/src/testdir/test3.in 2011-05-10 11:56:26.000000000 +0200
+--- src/testdir/test3.in 2011-05-10 12:05:50.000000000 +0200
+***************
+*** 1373,1378 ****
+--- 1373,1390 ----
+ }
+
+ STARTTEST
++ :set com=s1:/*,m:*,ex:*/
++ ]]3jofoo();
++ ENDTEST
++
++ void func(void)
++ {
++ /*
++ * This is a comment.
++ */
++ }
++
++ STARTTEST
+ :g/^STARTTEST/.,/^ENDTEST/d
+ :1;/start of AUTO/,$wq! test.out
+ ENDTEST
+*** ../vim-7.3.179/src/testdir/test3.ok 2011-05-10 11:56:26.000000000 +0200
+--- src/testdir/test3.ok 2011-05-10 12:05:50.000000000 +0200
+***************
+*** 1225,1227 ****
+--- 1225,1236 ----
+ << "c";
+ }
+
++
++ void func(void)
++ {
++ /*
++ * This is a comment.
++ */
++ foo();
++ }
++
+*** ../vim-7.3.179/src/version.c 2011-05-10 11:56:26.000000000 +0200
+--- src/version.c 2011-05-10 13:37:28.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 180,
+ /**/
+
+--
+"Thou shalt not follow the Null Pointer, for at its end Chaos and
+Madness lie."
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.181 b/source/ap/vim/patches/7.3.181
new file mode 100644
index 000000000..3151d4455
--- /dev/null
+++ b/source/ap/vim/patches/7.3.181
@@ -0,0 +1,171 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.181
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.181
+Problem: When repeating the insert of CTRL-V or a digraph the display may
+ not be updated correctly.
+Solution: Only call edit_unputchar() after edit_putchar(). (Lech Lorens)
+Files: src/edit.c
+
+
+*** ../vim-7.3.180/src/edit.c 2010-11-10 17:11:29.000000000 +0100
+--- src/edit.c 2011-05-10 14:16:41.000000000 +0200
+***************
+*** 1553,1564 ****
+--- 1553,1568 ----
+ ins_ctrl_v()
+ {
+ int c;
++ int did_putchar = FALSE;
+
+ /* may need to redraw when no more chars available now */
+ ins_redraw(FALSE);
+
+ if (redrawing() && !char_avail())
++ {
+ edit_putchar('^', TRUE);
++ did_putchar = TRUE;
++ }
+ AppendToRedobuff((char_u *)CTRL_V_STR); /* CTRL-V */
+
+ #ifdef FEAT_CMDL_INFO
+***************
+*** 1566,1573 ****
+ #endif
+
+ c = get_literal();
+! edit_unputchar(); /* when line fits in 'columns' the '^' is at the start
+! of the next line and will not be redrawn */
+ #ifdef FEAT_CMDL_INFO
+ clear_showcmd();
+ #endif
+--- 1570,1579 ----
+ #endif
+
+ c = get_literal();
+! if (did_putchar)
+! /* when the line fits in 'columns' the '^' is at the start of the next
+! * line and will not removed by the redraw */
+! edit_unputchar();
+ #ifdef FEAT_CMDL_INFO
+ clear_showcmd();
+ #endif
+***************
+*** 9637,9642 ****
+--- 9643,9649 ----
+ {
+ int c;
+ int cc;
++ int did_putchar = FALSE;
+
+ pc_status = PC_STATUS_UNSET;
+ if (redrawing() && !char_avail())
+***************
+*** 9645,9650 ****
+--- 9652,9658 ----
+ ins_redraw(FALSE);
+
+ edit_putchar('?', TRUE);
++ did_putchar = TRUE;
+ #ifdef FEAT_CMDL_INFO
+ add_to_showcmd_c(Ctrl_K);
+ #endif
+***************
+*** 9661,9668 ****
+ c = plain_vgetc();
+ --no_mapping;
+ --allow_keys;
+! edit_unputchar(); /* when line fits in 'columns' the '?' is at the start
+! of the next line and will not be redrawn */
+
+ if (IS_SPECIAL(c) || mod_mask) /* special key */
+ {
+--- 9669,9678 ----
+ c = plain_vgetc();
+ --no_mapping;
+ --allow_keys;
+! if (did_putchar)
+! /* when the line fits in 'columns' the '?' is at the start of the next
+! * line and will not be removed by the redraw */
+! edit_unputchar();
+
+ if (IS_SPECIAL(c) || mod_mask) /* special key */
+ {
+***************
+*** 9674,9679 ****
+--- 9684,9690 ----
+ }
+ if (c != ESC)
+ {
++ did_putchar = FALSE;
+ if (redrawing() && !char_avail())
+ {
+ /* may need to redraw when no more chars available now */
+***************
+*** 9681,9691 ****
+
+ if (char2cells(c) == 1)
+ {
+- /* first remove the '?', otherwise it's restored when typing
+- * an ESC next */
+- edit_unputchar();
+ ins_redraw(FALSE);
+ edit_putchar(c, TRUE);
+ }
+ #ifdef FEAT_CMDL_INFO
+ add_to_showcmd_c(c);
+--- 9692,9700 ----
+
+ if (char2cells(c) == 1)
+ {
+ ins_redraw(FALSE);
+ edit_putchar(c, TRUE);
++ did_putchar = TRUE;
+ }
+ #ifdef FEAT_CMDL_INFO
+ add_to_showcmd_c(c);
+***************
+*** 9696,9703 ****
+ cc = plain_vgetc();
+ --no_mapping;
+ --allow_keys;
+! edit_unputchar(); /* when line fits in 'columns' the '?' is at the
+! start of the next line and will not be redrawn */
+ if (cc != ESC)
+ {
+ AppendToRedobuff((char_u *)CTRL_V_STR);
+--- 9705,9714 ----
+ cc = plain_vgetc();
+ --no_mapping;
+ --allow_keys;
+! if (did_putchar)
+! /* when the line fits in 'columns' the '?' is at the start of the
+! * next line and will not be removed by a redraw */
+! edit_unputchar();
+ if (cc != ESC)
+ {
+ AppendToRedobuff((char_u *)CTRL_V_STR);
+*** ../vim-7.3.180/src/version.c 2011-05-10 13:38:23.000000000 +0200
+--- src/version.c 2011-05-10 14:20:40.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 181,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+74. Your most erotic dreams are about cybersex
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.182 b/source/ap/vim/patches/7.3.182
new file mode 100644
index 000000000..509b68b54
--- /dev/null
+++ b/source/ap/vim/patches/7.3.182
@@ -0,0 +1,53 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.182
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.182 (after 7.3.180)
+Problem: Compiler warning for uninitialized variable.
+Solution: Add dummy initializer.
+Files: src/misc1.c
+
+
+*** ../vim-7.3.181/src/misc1.c 2011-05-10 13:38:23.000000000 +0200
+--- src/misc1.c 2011-05-10 14:37:39.000000000 +0200
+***************
+*** 1563,1569 ****
+ char_u *list;
+ int middle_match_len = 0;
+ char_u *prev_list;
+! char_u *saved_flags;
+
+ i = 0;
+ while (vim_iswhite(line[i])) /* leading white space is ignored */
+--- 1563,1569 ----
+ char_u *list;
+ int middle_match_len = 0;
+ char_u *prev_list;
+! char_u *saved_flags = NULL;
+
+ i = 0;
+ while (vim_iswhite(line[i])) /* leading white space is ignored */
+*** ../vim-7.3.181/src/version.c 2011-05-10 14:22:10.000000000 +0200
+--- src/version.c 2011-05-10 14:38:39.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 182,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+75. You start wondering whether you could actually upgrade your brain
+ with a Pentium Pro microprocessor 80. The upgrade works just fine.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.183 b/source/ap/vim/patches/7.3.183
new file mode 100644
index 000000000..23178c0b5
--- /dev/null
+++ b/source/ap/vim/patches/7.3.183
@@ -0,0 +1,87 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.183
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.183 (after 7.3.174)
+Problem: When Exuberant ctags binary is exuberant-ctags it's not found.
+Solution: Add configure check for exuberant-ctags.
+Files: src/configure.in, src/auto/configure
+
+
+*** ../vim-7.3.182/src/configure.in 2011-05-05 18:10:11.000000000 +0200
+--- src/configure.in 2011-05-10 15:39:38.000000000 +0200
+***************
+*** 3375,3384 ****
+ dnl -i+m to test for older Exuberant ctags
+ AC_MSG_CHECKING(how to create tags)
+ test -f tags && mv tags tags.save
+! if (eval exctags --version /dev/null | grep Exuberant) < /dev/null 1>&AC_FD_CC 2>&1; then
+! TAGPRG="exctags -I INIT+ --fields=+S"
+! elif (eval ctags --version /dev/null | grep Exuberant) < /dev/null 1>&AC_FD_CC 2>&1; then
+ TAGPRG="ctags -I INIT+ --fields=+S"
+ else
+ TAGPRG="ctags"
+ (eval etags /dev/null) < /dev/null 1>&AC_FD_CC 2>&1 && TAGPRG="etags"
+--- 3375,3386 ----
+ dnl -i+m to test for older Exuberant ctags
+ AC_MSG_CHECKING(how to create tags)
+ test -f tags && mv tags tags.save
+! if (eval ctags --version /dev/null | grep Exuberant) < /dev/null 1>&AC_FD_CC 2>&1; then
+ TAGPRG="ctags -I INIT+ --fields=+S"
++ elif (eval exctags --version /dev/null | grep Exuberant) < /dev/null 1>&AC_FD_CC 2>&1; then
++ TAGPRG="exctags -I INIT+ --fields=+S"
++ elif (eval exuberant-ctags --version /dev/null | grep Exuberant) < /dev/null 1>&AC_FD_CC 2>&1; then
++ TAGPRG="exuberant-ctags -I INIT+ --fields=+S"
+ else
+ TAGPRG="ctags"
+ (eval etags /dev/null) < /dev/null 1>&AC_FD_CC 2>&1 && TAGPRG="etags"
+*** ../vim-7.3.182/src/auto/configure 2011-05-05 18:10:11.000000000 +0200
+--- src/auto/configure 2011-05-10 15:39:41.000000000 +0200
+***************
+*** 12028,12037 ****
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to create tags" >&5
+ $as_echo_n "checking how to create tags... " >&6; }
+ test -f tags && mv tags tags.save
+! if (eval exctags --version /dev/null | grep Exuberant) < /dev/null 1>&5 2>&1; then
+! TAGPRG="exctags -I INIT+ --fields=+S"
+! elif (eval ctags --version /dev/null | grep Exuberant) < /dev/null 1>&5 2>&1; then
+ TAGPRG="ctags -I INIT+ --fields=+S"
+ else
+ TAGPRG="ctags"
+ (eval etags /dev/null) < /dev/null 1>&5 2>&1 && TAGPRG="etags"
+--- 12028,12039 ----
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to create tags" >&5
+ $as_echo_n "checking how to create tags... " >&6; }
+ test -f tags && mv tags tags.save
+! if (eval ctags --version /dev/null | grep Exuberant) < /dev/null 1>&5 2>&1; then
+ TAGPRG="ctags -I INIT+ --fields=+S"
++ elif (eval exctags --version /dev/null | grep Exuberant) < /dev/null 1>&5 2>&1; then
++ TAGPRG="exctags -I INIT+ --fields=+S"
++ elif (eval exuberant-ctags --version /dev/null | grep Exuberant) < /dev/null 1>&5 2>&1; then
++ TAGPRG="exuberant-ctags -I INIT+ --fields=+S"
+ else
+ TAGPRG="ctags"
+ (eval etags /dev/null) < /dev/null 1>&5 2>&1 && TAGPRG="etags"
+*** ../vim-7.3.182/src/version.c 2011-05-10 14:44:07.000000000 +0200
+--- src/version.c 2011-05-10 15:40:48.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 183,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+78. You find yourself dialing IP numbers on the phone.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.184 b/source/ap/vim/patches/7.3.184
new file mode 100644
index 000000000..3b0cfc692
--- /dev/null
+++ b/source/ap/vim/patches/7.3.184
@@ -0,0 +1,86 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.184
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.184
+Problem: Static code analysis errors in riscOS.
+Solution: Make buffer size bigger. (Dominique Pelle)
+Files: src/gui_riscos.c
+
+
+*** ../vim-7.3.183/src/gui_riscos.c 2010-08-15 21:57:28.000000000 +0200
+--- src/gui_riscos.c 2011-05-10 15:49:56.000000000 +0200
+***************
+*** 1756,1762 ****
+
+ if (button & 0x444)
+ {
+! int front_block[10];
+ /* Dragging with Select - bring window to front first */
+ front_block[0] = gui.window_handle;
+ swi(Wimp_GetWindowState, 0, front_block);
+--- 1756,1762 ----
+
+ if (button & 0x444)
+ {
+! int front_block[64];
+ /* Dragging with Select - bring window to front first */
+ front_block[0] = gui.window_handle;
+ swi(Wimp_GetWindowState, 0, front_block);
+***************
+*** 1874,1880 ****
+
+ if (ro_dragging == DRAG_RESIZE_WINDOW)
+ {
+! /* Resizeing the main window. */
+ block[2] = y;
+ block[3] = x;
+ ro_open_main(block);
+--- 1874,1880 ----
+
+ if (ro_dragging == DRAG_RESIZE_WINDOW)
+ {
+! /* Resizing the main window. */
+ block[2] = y;
+ block[3] = x;
+ ro_open_main(block);
+***************
+*** 2651,2657 ****
+ long_u length;
+
+ block[0] = 48; /* Size of block. */
+! block[3] = 0; /* Orinial message. */
+ block[4] = 0x10; /* Data request. */
+ block[5] = gui.window_handle;
+ block[6] = RO_LOAD_CLIPBOARD; /* Internal handle. */
+--- 2651,2657 ----
+ long_u length;
+
+ block[0] = 48; /* Size of block. */
+! block[3] = 0; /* Original message. */
+ block[4] = 0x10; /* Data request. */
+ block[5] = gui.window_handle;
+ block[6] = RO_LOAD_CLIPBOARD; /* Internal handle. */
+*** ../vim-7.3.183/src/version.c 2011-05-10 15:41:59.000000000 +0200
+--- src/version.c 2011-05-10 15:51:29.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 184,
+ /**/
+
+--
+If bankers can count, how come they have eight windows and
+only four tellers?
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.185 b/source/ap/vim/patches/7.3.185
new file mode 100644
index 000000000..7b3ed1899
--- /dev/null
+++ b/source/ap/vim/patches/7.3.185
@@ -0,0 +1,77 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.185
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.185
+Problem: ":windo g/pattern/q" closes windows and reports "N more lines".
+ (Tim Chase)
+Solution: Remember what buffer ":global" started in. (Jean-Rene David)
+Files: src/ex_cmds.c
+
+
+*** ../vim-7.3.184/src/ex_cmds.c 2011-04-11 21:35:03.000000000 +0200
+--- src/ex_cmds.c 2011-05-10 15:58:48.000000000 +0200
+***************
+*** 5365,5372 ****
+ global_exe(cmd)
+ char_u *cmd;
+ {
+! linenr_T old_lcount; /* b_ml.ml_line_count before the command */
+! linenr_T lnum; /* line number according to old situation */
+
+ /*
+ * Set current position only once for a global command.
+--- 5365,5373 ----
+ global_exe(cmd)
+ char_u *cmd;
+ {
+! linenr_T old_lcount; /* b_ml.ml_line_count before the command */
+! buf_T *old_buf = curbuf; /* remember what buffer we started in */
+! linenr_T lnum; /* line number according to old situation */
+
+ /*
+ * Set current position only once for a global command.
+***************
+*** 5410,5417 ****
+ msg_didout = FALSE;
+
+ /* If substitutes done, report number of substitutes, otherwise report
+! * number of extra or deleted lines. */
+! if (!do_sub_msg(FALSE))
+ msgmore(curbuf->b_ml.ml_line_count - old_lcount);
+ }
+
+--- 5411,5420 ----
+ msg_didout = FALSE;
+
+ /* If substitutes done, report number of substitutes, otherwise report
+! * number of extra or deleted lines.
+! * Don't report extra or deleted lines in the edge case where the buffer
+! * we are in after execution is different from the buffer we started in. */
+! if (!do_sub_msg(FALSE) && curbuf == old_buf)
+ msgmore(curbuf->b_ml.ml_line_count - old_lcount);
+ }
+
+*** ../vim-7.3.184/src/version.c 2011-05-10 15:52:10.000000000 +0200
+--- src/version.c 2011-05-10 15:57:40.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 185,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+79. All of your most erotic dreams have a scrollbar at the right side.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.186 b/source/ap/vim/patches/7.3.186
new file mode 100644
index 000000000..d834c370d
--- /dev/null
+++ b/source/ap/vim/patches/7.3.186
@@ -0,0 +1,59 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.186
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.186
+Problem: When 'clipboard' contains "unnamed" or "unnamedplus" the value of
+ v:register is wrong for operators without a specific register.
+Solution: Adjust the register according to 'clipboard'. (Ingo Karkat)
+Files: src/normal.c
+
+
+*** ../vim-7.3.185/src/normal.c 2010-12-17 18:52:56.000000000 +0100
+--- src/normal.c 2011-05-10 16:07:49.000000000 +0200
+***************
+*** 1202,1208 ****
+ {
+ clearop(oap);
+ #ifdef FEAT_EVAL
+! set_reg_var('"');
+ #endif
+ }
+
+--- 1202,1214 ----
+ {
+ clearop(oap);
+ #ifdef FEAT_EVAL
+! {
+! int regname = 0;
+! /* Adjust the register according to 'clipboard', so that when
+! * "unnamed" is present it becomes '*' or '+' instead of '"'. */
+! adjust_clip_reg(&regname);
+! set_reg_var(regname);
+! }
+ #endif
+ }
+
+*** ../vim-7.3.185/src/version.c 2011-05-10 16:00:43.000000000 +0200
+--- src/version.c 2011-05-10 16:10:10.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 186,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+80. At parties, you introduce your spouse as your "service provider."
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.187 b/source/ap/vim/patches/7.3.187
new file mode 100644
index 000000000..7bf82ce4d
--- /dev/null
+++ b/source/ap/vim/patches/7.3.187
@@ -0,0 +1,6621 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.187
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.187
+Problem: The RISC OS port has obvious errors and is not being maintained.
+Solution: Remove the RISC OS files and code.
+Files: src/ascii.h, src/eval.c, src/ex_cmds.c, src/ex_cmds2.c,
+ src/ex_docmd.c, src/fileio.c, src/globals.h, src/gui.c, src/gui.h,
+ src/main.c, src/memfile.c, src/memline.c, src/misc1.c,
+ src/proto.h, src/quickfix.c, src/search.c, src/structs.h,
+ src/term.c, src/termlib.c, src/version.c, src/vim.h,
+ src/gui_riscos.h, src/os_riscos.h, src/gui_riscos.c,
+ src/os_riscos.c, runtime/doc/os_risc.txt
+
+
+*** ../vim-7.3.186/src/ascii.h 2010-08-15 21:57:25.000000000 +0200
+--- src/ascii.h 2011-05-10 16:22:08.000000000 +0200
+***************
+*** 183,193 ****
+ # define PATHSEP psepc
+ # define PATHSEPSTR pseps
+ #else
+! # ifdef RISCOS
+! # define PATHSEP '.'
+! # define PATHSEPSTR "."
+! # else
+! # define PATHSEP '/'
+! # define PATHSEPSTR "/"
+! # endif
+ #endif
+--- 183,188 ----
+ # define PATHSEP psepc
+ # define PATHSEPSTR pseps
+ #else
+! # define PATHSEP '/'
+! # define PATHSEPSTR "/"
+ #endif
+*** ../vim-7.3.186/src/eval.c 2011-04-21 14:27:21.000000000 +0200
+--- src/eval.c 2011-05-10 16:22:21.000000000 +0200
+***************
+*** 11818,11826 ****
+ #ifdef __QNX__
+ "qnx",
+ #endif
+- #ifdef RISCOS
+- "riscos",
+- #endif
+ #ifdef UNIX
+ "unix",
+ #endif
+--- 11818,11823 ----
+*** ../vim-7.3.186/src/ex_cmds.c 2011-05-10 16:00:43.000000000 +0200
+--- src/ex_cmds.c 2011-05-10 16:23:22.000000000 +0200
+***************
+*** 899,907 ****
+ * Handle the ":!cmd" command. Also for ":r !cmd" and ":w !cmd"
+ * Bangs in the argument are replaced with the previously entered command.
+ * Remember the argument.
+- *
+- * RISCOS: Bangs only replaced when followed by a space, since many
+- * pathnames contain one.
+ */
+ void
+ do_bang(addr_count, eap, forceit, do_in, do_out)
+--- 899,904 ----
+***************
+*** 980,990 ****
+ trailarg = NULL;
+ while (*p)
+ {
+! if (*p == '!'
+! #ifdef RISCOS
+! && (p[1] == ' ' || p[1] == NUL)
+! #endif
+! )
+ {
+ if (p > newcmd && p[-1] == '\\')
+ STRMOVE(p - 1, p);
+--- 977,983 ----
+ trailarg = NULL;
+ while (*p)
+ {
+! if (*p == '!')
+ {
+ if (p > newcmd && p[-1] == '\\')
+ STRMOVE(p - 1, p);
+***************
+*** 1578,1591 ****
+ if (p != NULL)
+ *p = NUL;
+ }
+- # ifdef RISCOS
+- STRCAT(buf, " { < "); /* Use RISC OS notation for input. */
+- STRCAT(buf, itmp);
+- STRCAT(buf, " } ");
+- # else
+ STRCAT(buf, " <"); /* " < " causes problems on Amiga */
+ STRCAT(buf, itmp);
+- # endif
+ if (*p_shq == NUL)
+ {
+ p = vim_strchr(cmd, '|');
+--- 1571,1578 ----
+***************
+*** 1634,1649 ****
+ else
+ vim_snprintf((char *)end, (size_t)(buflen - (end - buf)),
+ #ifdef FEAT_QUICKFIX
+- # ifndef RISCOS
+- opt != p_sp ? " %s%s" :
+- # endif
+ " %s %s",
+ #else
+- # ifndef RISCOS
+ " %s%s", /* " > %s" causes problems on Amiga */
+- # else
+- " %s %s", /* But is needed for 'shellpipe' and RISC OS */
+- # endif
+ #endif
+ (char *)opt, (char *)fname);
+ }
+--- 1621,1629 ----
+***************
+*** 1844,1854 ****
+ #ifdef VMS
+ (char_u *)"-tmp",
+ #else
+- # ifdef RISCOS
+- (char_u *)"/tmp",
+- # else
+ (char_u *)".tmp",
+- # endif
+ #endif
+ FALSE);
+ if (tempname == NULL) /* out of memory */
+--- 1824,1830 ----
+*** ../vim-7.3.186/src/ex_cmds2.c 2011-04-11 21:35:03.000000000 +0200
+--- src/ex_cmds2.c 2011-05-10 16:23:47.000000000 +0200
+***************
+*** 500,517 ****
+ /* Expand the file name in the same way as do_source(). This means
+ * doing it twice, so that $DIR/file gets expanded when $DIR is
+ * "~/dir". */
+- #ifdef RISCOS
+- q = mch_munge_fname(p);
+- #else
+ q = expand_env_save(p);
+- #endif
+ if (q == NULL)
+ return FAIL;
+- #ifdef RISCOS
+- p = mch_munge_fname(q);
+- #else
+ p = expand_env_save(q);
+- #endif
+ vim_free(q);
+ if (p == NULL)
+ return FAIL;
+--- 500,509 ----
+***************
+*** 2940,2950 ****
+ proftime_T wait_start;
+ #endif
+
+- #ifdef RISCOS
+- p = mch_munge_fname(fname);
+- #else
+ p = expand_env_save(fname);
+- #endif
+ if (p == NULL)
+ return retval;
+ fname_exp = fix_fname(p);
+--- 2932,2938 ----
+*** ../vim-7.3.186/src/ex_docmd.c 2011-05-05 14:26:37.000000000 +0200
+--- src/ex_docmd.c 2011-05-10 16:24:18.000000000 +0200
+***************
+*** 9702,9715 ****
+ valid = 0; /* Must have ":p:h" to be valid */
+ }
+ else
+- #ifdef RISCOS
+- /* Always use the full path for RISC OS if possible. */
+- result = curbuf->b_ffname;
+- if (result == NULL)
+- result = curbuf->b_fname;
+- #else
+ result = curbuf->b_fname;
+- #endif
+ break;
+
+ case SPEC_HASH: /* '#' or "#99": alternate file */
+--- 9702,9708 ----
+***************
+*** 9854,9864 ****
+ if (src[*usedlen] == '<') /* remove the file name extension */
+ {
+ ++*usedlen;
+- #ifdef RISCOS
+- if ((s = vim_strrchr(result, '/')) != NULL && s >= gettail(result))
+- #else
+ if ((s = vim_strrchr(result, '.')) != NULL && s >= gettail(result))
+- #endif
+ resultlen = (int)(s - result);
+ }
+ #ifdef FEAT_MODIFY_FNAME
+--- 9847,9853 ----
+***************
+*** 10875,10882 ****
+ else if (vim_ispathsep(*p))
+ {
+ *s++ = '=';
+! #if defined(BACKSLASH_IN_FILENAME) || defined(AMIGA) || defined(RISCOS) \
+! || defined(VMS)
+ if (*p == ':')
+ *s++ = '-';
+ else
+--- 10864,10870 ----
+ else if (vim_ispathsep(*p))
+ {
+ *s++ = '=';
+! #if defined(BACKSLASH_IN_FILENAME) || defined(AMIGA) || defined(VMS)
+ if (*p == ':')
+ *s++ = '-';
+ else
+*** ../vim-7.3.186/src/fileio.c 2011-05-05 16:41:19.000000000 +0200
+--- src/fileio.c 2011-05-10 16:26:06.000000000 +0200
+***************
+*** 504,521 ****
+
+ if (newfile && !read_stdin && !read_buffer)
+ {
+! /* Remember time of file.
+! * For RISCOS, also remember the filetype.
+! */
+ if (mch_stat((char *)fname, &st) >= 0)
+ {
+ buf_store_time(curbuf, &st, fname);
+ curbuf->b_mtime_read = curbuf->b_mtime;
+-
+- #if defined(RISCOS) && defined(FEAT_OSFILETYPE)
+- /* Read the filetype into the buffer local filetype option. */
+- mch_read_filetype(fname);
+- #endif
+ #ifdef UNIX
+ /*
+ * Use the protection bits of the original file for the swap file.
+--- 504,514 ----
+
+ if (newfile && !read_stdin && !read_buffer)
+ {
+! /* Remember time of file. */
+ if (mch_stat((char *)fname, &st) >= 0)
+ {
+ buf_store_time(curbuf, &st, fname);
+ curbuf->b_mtime_read = curbuf->b_mtime;
+ #ifdef UNIX
+ /*
+ * Use the protection bits of the original file for the swap file.
+***************
+*** 557,563 ****
+
+ /*
+ * for UNIX: check readonly with perm and mch_access()
+- * for RISCOS: same as Unix, otherwise file gets re-datestamped!
+ * for MSDOS and Amiga: check readonly by trying to open the file for writing
+ */
+ file_readonly = FALSE;
+--- 550,555 ----
+***************
+*** 3804,3816 ****
+
+ /* make sure we have a valid backup extension to use */
+ if (*p_bex == NUL)
+- {
+- #ifdef RISCOS
+- backup_ext = (char_u *)"/bak";
+- #else
+ backup_ext = (char_u *)".bak";
+- #endif
+- }
+ else
+ backup_ext = p_bex;
+
+--- 3796,3802 ----
+***************
+*** 4724,4734 ****
+ #endif
+ if (perm >= 0) /* set perm. of new file same as old file */
+ (void)mch_setperm(wfname, perm);
+- #ifdef RISCOS
+- if (!append && !filtering)
+- /* Set the filetype after writing the file. */
+- mch_set_filetype(wfname, buf->b_p_oft);
+- #endif
+ #ifdef HAVE_ACL
+ /* Probably need to set the ACL before changing the user (can't set the
+ * ACL on a file the user doesn't own). */
+--- 4710,4715 ----
+***************
+*** 6262,6280 ****
+ */
+ for (ptr = retval + fnamelen; ptr > retval; mb_ptr_back(retval, ptr))
+ {
+- #ifndef RISCOS
+ if (*ext == '.'
+! # ifdef USE_LONG_FNAME
+ && (!USE_LONG_FNAME || shortname)
+! # else
+! # ifndef SHORT_FNAME
+ && shortname
+- # endif
+ # endif
+ )
+ if (*ptr == '.') /* replace '.' by '_' */
+ *ptr = '_';
+- #endif
+ if (vim_ispathsep(*ptr))
+ {
+ ++ptr;
+--- 6243,6259 ----
+ */
+ for (ptr = retval + fnamelen; ptr > retval; mb_ptr_back(retval, ptr))
+ {
+ if (*ext == '.'
+! #ifdef USE_LONG_FNAME
+ && (!USE_LONG_FNAME || shortname)
+! #else
+! # ifndef SHORT_FNAME
+ && shortname
+ # endif
++ #endif
+ )
+ if (*ptr == '.') /* replace '.' by '_' */
+ *ptr = '_';
+ if (vim_ispathsep(*ptr))
+ {
+ ++ptr;
+***************
+*** 6309,6331 ****
+ if (fname == NULL || *fname == NUL
+ || vim_ispathsep(fname[STRLEN(fname) - 1]))
+ {
+- #ifdef RISCOS
+- if (*ext == '/')
+- #else
+ if (*ext == '.')
+- #endif
+ *s++ = '_';
+ }
+ /*
+ * If the extension starts with '.', truncate the base name at 8
+ * characters
+ */
+- #ifdef RISCOS
+- /* We normally use '/', but swap files are '_' */
+- else if (*ext == '/' || *ext == '_')
+- #else
+ else if (*ext == '.')
+- #endif
+ {
+ if ((size_t)(s - ptr) > (size_t)8)
+ {
+--- 6288,6301 ----
+***************
+*** 6337,6349 ****
+ * If the extension doesn't start with '.', and the file name
+ * doesn't have an extension yet, append a '.'
+ */
+- #ifdef RISCOS
+- else if ((e = vim_strchr(ptr, '/')) == NULL)
+- *s++ = '/';
+- #else
+ else if ((e = vim_strchr(ptr, '.')) == NULL)
+ *s++ = '.';
+- #endif
+ /*
+ * If the extension doesn't start with '.', and there already is an
+ * extension, it may need to be truncated
+--- 6307,6314 ----
+***************
+*** 6371,6393 ****
+ /*
+ * Prepend the dot.
+ */
+! if (prepend_dot && !shortname && *(e = gettail(retval)) !=
+! #ifdef RISCOS
+! '/'
+! #else
+! '.'
+! #endif
+ #ifdef USE_LONG_FNAME
+ && USE_LONG_FNAME
+ #endif
+ )
+ {
+ STRMOVE(e + 1, e);
+- #ifdef RISCOS
+- *e = '/';
+- #else
+ *e = '.';
+- #endif
+ }
+ #endif
+
+--- 6336,6349 ----
+ /*
+ * Prepend the dot.
+ */
+! if (prepend_dot && !shortname && *(e = gettail(retval)) != '.'
+ #ifdef USE_LONG_FNAME
+ && USE_LONG_FNAME
+ #endif
+ )
+ {
+ STRMOVE(e + 1, e);
+ *e = '.';
+ }
+ #endif
+
+***************
+*** 10205,10223 ****
+ ++p;
+ break;
+ case '.':
+- #ifdef RISCOS
+- if (allow_dirs != NULL)
+- *allow_dirs = TRUE;
+- /* FALLTHROUGH */
+- #endif
+ case '~':
+ reg_pat[i++] = '\\';
+ reg_pat[i++] = *p;
+ break;
+ case '?':
+- #ifdef RISCOS
+- case '#':
+- #endif
+ reg_pat[i++] = '.';
+ break;
+ case '\\':
+--- 10161,10171 ----
+*** ../vim-7.3.186/src/globals.h 2011-05-05 14:26:37.000000000 +0200
+--- src/globals.h 2011-05-10 16:26:13.000000000 +0200
+***************
+*** 1513,1519 ****
+ EXTERN char_u e_sandbox[] INIT(= N_("E48: Not allowed in sandbox"));
+ #endif
+ EXTERN char_u e_secure[] INIT(= N_("E523: Not allowed here"));
+! #if defined(AMIGA) || defined(MACOS) || defined(MSWIN) || defined(RISCOS) \
+ || defined(UNIX) || defined(VMS) || defined(OS2)
+ EXTERN char_u e_screenmode[] INIT(= N_("E359: Screen mode setting not supported"));
+ #endif
+--- 1513,1519 ----
+ EXTERN char_u e_sandbox[] INIT(= N_("E48: Not allowed in sandbox"));
+ #endif
+ EXTERN char_u e_secure[] INIT(= N_("E523: Not allowed here"));
+! #if defined(AMIGA) || defined(MACOS) || defined(MSWIN) \
+ || defined(UNIX) || defined(VMS) || defined(OS2)
+ EXTERN char_u e_screenmode[] INIT(= N_("E359: Screen mode setting not supported"));
+ #endif
+*** ../vim-7.3.186/src/gui.c 2011-01-17 20:08:03.000000000 +0100
+--- src/gui.c 2011-05-10 16:26:53.000000000 +0200
+***************
+*** 2156,2162 ****
+
+ if (highlight_mask & (HL_INVERSE | HL_STANDOUT))
+ {
+! #if defined(AMIGA) || defined(RISCOS)
+ gui_mch_set_colors(bg_color, fg_color);
+ #else
+ gui_mch_set_fg_color(bg_color);
+--- 2156,2162 ----
+
+ if (highlight_mask & (HL_INVERSE | HL_STANDOUT))
+ {
+! #if defined(AMIGA)
+ gui_mch_set_colors(bg_color, fg_color);
+ #else
+ gui_mch_set_fg_color(bg_color);
+***************
+*** 2165,2171 ****
+ }
+ else
+ {
+! #if defined(AMIGA) || defined(RISCOS)
+ gui_mch_set_colors(fg_color, bg_color);
+ #else
+ gui_mch_set_fg_color(fg_color);
+--- 2165,2171 ----
+ }
+ else
+ {
+! #if defined(AMIGA)
+ gui_mch_set_colors(fg_color, bg_color);
+ #else
+ gui_mch_set_fg_color(fg_color);
+***************
+*** 2193,2199 ****
+ if (back != 0 && ((draw_flags & DRAW_BOLD) || (highlight_mask & HL_ITALIC)))
+ return FAIL;
+
+! #if defined(RISCOS) || defined(FEAT_GUI_GTK)
+ /* If there's no italic font, then fake it.
+ * For GTK2, we don't need a different font for italic style. */
+ if (hl_mask_todo & HL_ITALIC)
+--- 2193,2199 ----
+ if (back != 0 && ((draw_flags & DRAW_BOLD) || (highlight_mask & HL_ITALIC)))
+ return FAIL;
+
+! #if defined(FEAT_GUI_GTK)
+ /* If there's no italic font, then fake it.
+ * For GTK2, we don't need a different font for italic style. */
+ if (hl_mask_todo & HL_ITALIC)
+***************
+*** 2985,3010 ****
+ did_clip = TRUE;
+ }
+ /* Allow the left button to start the selection */
+- else if (button ==
+- # ifdef RISCOS
+- /* Only start a drag on a drag event. Otherwise
+- * we don't get a release event. */
+- MOUSE_DRAG
+- # else
+- MOUSE_LEFT
+- # endif
+- )
+- {
+- clip_start_selection(X_2_COL(x), Y_2_ROW(y), repeated_click);
+- did_clip = TRUE;
+- }
+- # ifdef RISCOS
+ else if (button == MOUSE_LEFT)
+ {
+! clip_clear_selection();
+ did_clip = TRUE;
+ }
+- # endif
+
+ /* Always allow pasting */
+ if (button != MOUSE_MIDDLE)
+--- 2985,2995 ----
+ did_clip = TRUE;
+ }
+ /* Allow the left button to start the selection */
+ else if (button == MOUSE_LEFT)
+ {
+! clip_start_selection(X_2_COL(x), Y_2_ROW(y), repeated_click);
+ did_clip = TRUE;
+ }
+
+ /* Always allow pasting */
+ if (button != MOUSE_MIDDLE)
+*** ../vim-7.3.186/src/gui.h 2010-08-15 21:57:25.000000000 +0200
+--- src/gui.h 2011-05-10 16:27:19.000000000 +0200
+***************
+*** 52,61 ****
+ # include <SegLoad.h>*/
+ #endif
+
+- #ifdef RISCOS
+- # include "gui_riscos.h"
+- #endif
+-
+ #ifdef FEAT_GUI_PHOTON
+ # include <Ph.h>
+ # include <Pt.h>
+--- 52,57 ----
+***************
+*** 151,157 ****
+ #define DRAW_BOLD 0x02 /* draw bold text */
+ #define DRAW_UNDERL 0x04 /* draw underline text */
+ #define DRAW_UNDERC 0x08 /* draw undercurl text */
+! #if defined(RISCOS) || defined(FEAT_GUI_GTK)
+ # define DRAW_ITALIC 0x10 /* draw italic text */
+ #endif
+ #define DRAW_CURSOR 0x20 /* drawing block cursor (win32) */
+--- 147,153 ----
+ #define DRAW_BOLD 0x02 /* draw bold text */
+ #define DRAW_UNDERL 0x04 /* draw underline text */
+ #define DRAW_UNDERC 0x08 /* draw undercurl text */
+! #if defined(FEAT_GUI_GTK)
+ # define DRAW_ITALIC 0x10 /* draw italic text */
+ #endif
+ #define DRAW_CURSOR 0x20 /* drawing block cursor (win32) */
+***************
+*** 219,227 ****
+ #ifdef FEAT_GUI_MAC
+ ControlHandle id; /* A handle to the scrollbar */
+ #endif
+- #ifdef RISCOS
+- int id; /* Window handle of scrollbar window */
+- #endif
+ #ifdef FEAT_GUI_PHOTON
+ PtWidget_t *id;
+ #endif
+--- 215,220 ----
+***************
+*** 450,463 ****
+ int visibility; /* Is window partially/fully obscured? */
+ #endif
+
+- #ifdef RISCOS
+- int window_handle;
+- char_u *window_title;
+- int window_title_size;
+- int fg_colour; /* in 0xBBGGRR format */
+- int bg_colour;
+- #endif
+-
+ #ifdef FEAT_GUI_PHOTON
+ PtWidget_t *vimWindow; /* PtWindow */
+ PtWidget_t *vimTextArea; /* PtRaw */
+--- 443,448 ----
+*** ../vim-7.3.186/src/main.c 2011-04-11 21:35:03.000000000 +0200
+--- src/main.c 2011-05-10 16:27:33.000000000 +0200
+***************
+*** 3276,3286 ****
+ main_msg(_("+reverse\t\tDon't use reverse video (also: +rv)"));
+ main_msg(_("-xrm <resource>\tSet the specified resource"));
+ #endif /* FEAT_GUI_X11 */
+- #if defined(FEAT_GUI) && defined(RISCOS)
+- mch_msg(_("\nArguments recognised by gvim (RISC OS version):\n"));
+- main_msg(_("--columns <number>\tInitial width of window in columns"));
+- main_msg(_("--rows <number>\tInitial height of window in rows"));
+- #endif
+ #ifdef FEAT_GUI_GTK
+ mch_msg(_("\nArguments recognised by gvim (GTK+ version):\n"));
+ main_msg(_("-font <font>\t\tUse <font> for normal text (also: -fn)"));
+--- 3276,3281 ----
+*** ../vim-7.3.186/src/memfile.c 2011-03-22 18:10:34.000000000 +0100
+--- src/memfile.c 2011-05-10 16:27:38.000000000 +0200
+***************
+*** 1307,1313 ****
+ * fname cannot be NameBuff, because it must have been allocated.
+ */
+ mf_set_ffname(mfp);
+! #if defined(MSDOS) || defined(MSWIN) || defined(RISCOS)
+ /*
+ * A ":!cd e:xxx" may change the directory without us knowning, use the
+ * full pathname always. Careful: This frees fname!
+--- 1307,1313 ----
+ * fname cannot be NameBuff, because it must have been allocated.
+ */
+ mf_set_ffname(mfp);
+! #if defined(MSDOS) || defined(MSWIN)
+ /*
+ * A ":!cd e:xxx" may change the directory without us knowning, use the
+ * full pathname always. Careful: This frees fname!
+*** ../vim-7.3.186/src/memline.c 2011-02-15 11:56:56.000000000 +0100
+--- src/memline.c 2011-05-10 16:28:40.000000000 +0200
+***************
+*** 748,754 ****
+ continue;
+ if (mf_open_file(mfp, fname) == OK) /* consumes fname! */
+ {
+! #if defined(MSDOS) || defined(MSWIN) || defined(RISCOS)
+ /*
+ * set full pathname for swap file now, because a ":!cd dir" may
+ * change directory without us knowing it.
+--- 748,754 ----
+ continue;
+ if (mf_open_file(mfp, fname) == OK) /* consumes fname! */
+ {
+! #if defined(MSDOS) || defined(MSWIN)
+ /*
+ * set full pathname for swap file now, because a ":!cd dir" may
+ * change directory without us knowing it.
+***************
+*** 933,939 ****
+ b0p->b0_fname[0] = NUL;
+ else
+ {
+! #if defined(MSDOS) || defined(MSWIN) || defined(AMIGA) || defined(RISCOS)
+ /* Systems that cannot translate "~user" back into a path: copy the
+ * file name unmodified. Do use slashes instead of backslashes for
+ * portability. */
+--- 933,939 ----
+ b0p->b0_fname[0] = NUL;
+ else
+ {
+! #if defined(MSDOS) || defined(MSWIN) || defined(AMIGA)
+ /* Systems that cannot translate "~user" back into a path: copy the
+ * file name unmodified. Do use slashes instead of backslashes for
+ * portability. */
+***************
+*** 1103,1109 ****
+ fname = (char_u *)"";
+ len = (int)STRLEN(fname);
+ if (len >= 4 &&
+! #if defined(VMS) || defined(RISCOS)
+ STRNICMP(fname + len - 4, "_s" , 2)
+ #else
+ STRNICMP(fname + len - 4, ".s" , 2)
+--- 1103,1109 ----
+ fname = (char_u *)"";
+ len = (int)STRLEN(fname);
+ if (len >= 4 &&
+! #if defined(VMS)
+ STRNICMP(fname + len - 4, "_s" , 2)
+ #else
+ STRNICMP(fname + len - 4, ".s" , 2)
+***************
+*** 1773,1783 ****
+ #ifdef VMS
+ names[0] = vim_strsave((char_u *)"*_sw%");
+ #else
+- # ifdef RISCOS
+- names[0] = vim_strsave((char_u *)"*_sw#");
+- # else
+ names[0] = vim_strsave((char_u *)"*.sw?");
+- # endif
+ #endif
+ #if defined(UNIX) || defined(WIN3264)
+ /* For Unix names starting with a dot are special. MS-Windows
+--- 1773,1779 ----
+***************
+*** 1804,1814 ****
+ #ifdef VMS
+ names[0] = concat_fnames(dir_name, (char_u *)"*_sw%", TRUE);
+ #else
+- # ifdef RISCOS
+- names[0] = concat_fnames(dir_name, (char_u *)"*_sw#", TRUE);
+- # else
+ names[0] = concat_fnames(dir_name, (char_u *)"*.sw?", TRUE);
+- # endif
+ #endif
+ #if defined(UNIX) || defined(WIN3264)
+ /* For Unix names starting with a dot are special. MS-Windows
+--- 1800,1806 ----
+***************
+*** 1877,1883 ****
+ char_u *swapname;
+
+ swapname = modname(fname_res,
+! #if defined(VMS) || defined(RISCOS)
+ (char_u *)"_swp", FALSE
+ #else
+ (char_u *)".swp", TRUE
+--- 1869,1875 ----
+ char_u *swapname;
+
+ swapname = modname(fname_res,
+! #if defined(VMS)
+ (char_u *)"_swp", FALSE
+ #else
+ (char_u *)".swp", TRUE
+***************
+*** 2176,2186 ****
+ #ifdef VMS
+ names[num_names] = concat_fnames(path, (char_u *)"_sw%", FALSE);
+ #else
+- # ifdef RISCOS
+- names[num_names] = concat_fnames(path, (char_u *)"_sw#", FALSE);
+- # else
+ names[num_names] = concat_fnames(path, (char_u *)".sw?", FALSE);
+- # endif
+ #endif
+ if (names[num_names] == NULL)
+ goto end;
+--- 2168,2174 ----
+***************
+*** 2207,2217 ****
+ #ifdef VMS
+ names[num_names] = modname(path, (char_u *)"_sw%", FALSE);
+ #else
+- # ifdef RISCOS
+- names[num_names] = modname(path, (char_u *)"_sw#", FALSE);
+- # else
+ names[num_names] = modname(path, (char_u *)".sw?", FALSE);
+- # endif
+ #endif
+ if (names[num_names] == NULL)
+ goto end;
+--- 2195,2201 ----
+***************
+*** 3205,3211 ****
+ mf_free(mfp, hp); /* free the data block */
+ buf->b_ml.ml_locked = NULL;
+
+! for (stack_idx = buf->b_ml.ml_stack_top - 1; stack_idx >= 0; --stack_idx)
+ {
+ buf->b_ml.ml_stack_top = 0; /* stack is invalid when failing */
+ ip = &(buf->b_ml.ml_stack[stack_idx]);
+--- 3189,3196 ----
+ mf_free(mfp, hp); /* free the data block */
+ buf->b_ml.ml_locked = NULL;
+
+! for (stack_idx = buf->b_ml.ml_stack_top - 1; stack_idx >= 0;
+! --stack_idx)
+ {
+ buf->b_ml.ml_stack_top = 0; /* stack is invalid when failing */
+ ip = &(buf->b_ml.ml_stack[stack_idx]);
+***************
+*** 3956,3969 ****
+ #else
+ (buf->b_p_sn || buf->b_shortname),
+ #endif
+- #ifdef RISCOS
+- /* Avoid problems if fname has special chars, eg <Wimp$Scrap> */
+- ffname,
+- #else
+ fname_res,
+- #endif
+ (char_u *)
+! #if defined(VMS) || defined(RISCOS)
+ "_swp",
+ #else
+ ".swp",
+--- 3941,3949 ----
+ #else
+ (buf->b_p_sn || buf->b_shortname),
+ #endif
+ fname_res,
+ (char_u *)
+! #if defined(VMS)
+ "_swp",
+ #else
+ ".swp",
+***************
+*** 4427,4440 ****
+ }
+ close(fd);
+ }
+- #ifdef RISCOS
+- else
+- /* Can't open swap file, though it does exist.
+- * Assume that the user is editing two files with
+- * the same name in different directories. No error.
+- */
+- differ = TRUE;
+- #endif
+
+ /* give the ATTENTION message when there is an old swap file
+ * for the current file, and the buffer was not recovered. */
+--- 4407,4412 ----
+*** ../vim-7.3.186/src/misc1.c 2011-05-10 14:44:07.000000000 +0200
+--- src/misc1.c 2011-05-10 16:29:29.000000000 +0200
+***************
+*** 4589,4613 ****
+ vim_ispathsep(c)
+ int c;
+ {
+! #ifdef RISCOS
+! return (c == '.' || c == ':');
+! #else
+! # ifdef UNIX
+ return (c == '/'); /* UNIX has ':' inside file names */
+! # else
+! # ifdef BACKSLASH_IN_FILENAME
+ return (c == ':' || c == '/' || c == '\\');
+! # else
+! # ifdef VMS
+ /* server"user passwd"::device:[full.path.name]fname.extension;version" */
+ return (c == ':' || c == '[' || c == ']' || c == '/'
+ || c == '<' || c == '>' || c == '"' );
+! # else /* Amiga */
+ return (c == ':' || c == '/');
+! # endif /* VMS */
+! # endif
+ # endif
+! #endif /* RISC OS */
+ }
+
+ #if defined(FEAT_SEARCHPATH) || defined(PROTO)
+--- 4589,4609 ----
+ vim_ispathsep(c)
+ int c;
+ {
+! #ifdef UNIX
+ return (c == '/'); /* UNIX has ':' inside file names */
+! #else
+! # ifdef BACKSLASH_IN_FILENAME
+ return (c == ':' || c == '/' || c == '\\');
+! # else
+! # ifdef VMS
+ /* server"user passwd"::device:[full.path.name]fname.extension;version" */
+ return (c == ':' || c == '[' || c == ']' || c == '/'
+ || c == '<' || c == '>' || c == '"' );
+! # else
+ return (c == ':' || c == '/');
+! # endif /* VMS */
+ # endif
+! #endif
+ }
+
+ #if defined(FEAT_SEARCHPATH) || defined(PROTO)
+*** ../vim-7.3.186/src/proto.h 2010-08-15 21:57:29.000000000 +0200
+--- src/proto.h 2011-05-10 16:29:45.000000000 +0200
+***************
+*** 62,70 ****
+ # ifdef __BEOS__
+ # include "os_beos.pro"
+ # endif
+- # ifdef RISCOS
+- # include "os_riscos.pro"
+- # endif
+ # ifdef __QNX__
+ # include "os_qnx.pro"
+ # endif
+--- 62,67 ----
+***************
+*** 245,253 ****
+ # ifdef FEAT_GUI_X11
+ # include "gui_x11.pro"
+ # endif
+- # ifdef RISCOS
+- # include "gui_riscos.pro"
+- # endif
+ # ifdef FEAT_GUI_PHOTON
+ # include "gui_photon.pro"
+ # endif
+--- 242,247 ----
+*** ../vim-7.3.186/src/quickfix.c 2011-05-05 17:14:07.000000000 +0200
+--- src/quickfix.c 2011-05-10 16:30:18.000000000 +0200
+***************
+*** 1182,1202 ****
+ if (fname == NULL || *fname == NUL) /* no file name */
+ return 0;
+ {
+- #ifdef RISCOS
+- /* Name is reported as `main.c', but file is `c.main' */
+- return ro_buflist_add(fname);
+- #else
+ char_u *ptr;
+ int fnum;
+
+! # ifdef VMS
+ vms_remove_version(fname);
+! # endif
+! # ifdef BACKSLASH_IN_FILENAME
+ if (directory != NULL)
+ slash_adjust(directory);
+ slash_adjust(fname);
+! # endif
+ if (directory != NULL && !vim_isAbsName(fname)
+ && (ptr = concat_fnames(directory, fname, TRUE)) != NULL)
+ {
+--- 1182,1198 ----
+ if (fname == NULL || *fname == NUL) /* no file name */
+ return 0;
+ {
+ char_u *ptr;
+ int fnum;
+
+! #ifdef VMS
+ vms_remove_version(fname);
+! #endif
+! #ifdef BACKSLASH_IN_FILENAME
+ if (directory != NULL)
+ slash_adjust(directory);
+ slash_adjust(fname);
+! #endif
+ if (directory != NULL && !vim_isAbsName(fname)
+ && (ptr = concat_fnames(directory, fname, TRUE)) != NULL)
+ {
+***************
+*** 1221,1227 ****
+ return fnum;
+ }
+ return buflist_add(fname, 0);
+- #endif
+ }
+ }
+
+--- 1217,1222 ----
+*** ../vim-7.3.186/src/search.c 2011-02-25 18:38:29.000000000 +0100
+--- src/search.c 2011-05-10 16:30:38.000000000 +0200
+***************
+*** 4581,4589 ****
+ char_u *already = NULL;
+ char_u *startp = NULL;
+ char_u *inc_opt = NULL;
+- #ifdef RISCOS
+- int previous_munging = __riscosify_control;
+- #endif
+ #if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX)
+ win_T *curwin_save = NULL;
+ #endif
+--- 4581,4586 ----
+***************
+*** 4596,4606 ****
+ if (file_line == NULL)
+ return;
+
+- #ifdef RISCOS
+- /* UnixLib knows best how to munge c file names - turn munging back on. */
+- int __riscosify_control = 0;
+- #endif
+-
+ if (type != CHECK_PATH && type != FIND_DEFINE
+ #ifdef FEAT_INS_EXPAND
+ /* when CONT_SOL is set compare "ptr" with the beginning of the line
+--- 4593,4598 ----
+***************
+*** 5228,5238 ****
+ vim_free(regmatch.regprog);
+ vim_free(incl_regmatch.regprog);
+ vim_free(def_regmatch.regprog);
+-
+- #ifdef RISCOS
+- /* Restore previous file munging state. */
+- __riscosify_control = previous_munging;
+- #endif
+ }
+
+ static void
+--- 5220,5225 ----
+*** ../vim-7.3.186/src/structs.h 2011-03-22 18:10:34.000000000 +0100
+--- src/structs.h 2011-05-10 16:30:49.000000000 +0200
+***************
+*** 2366,2376 ****
+ MenuHandle menu_handle;
+ MenuHandle submenu_handle;
+ #endif
+- #ifdef RISCOS
+- int *id; /* Not used, but gui.c needs it */
+- int greyed_out; /* Flag */
+- int hidden;
+- #endif
+ #ifdef FEAT_GUI_PHOTON
+ PtWidget_t *id;
+ PtWidget_t *submenu_id;
+--- 2366,2371 ----
+*** ../vim-7.3.186/src/term.c 2010-12-30 14:47:32.000000000 +0100
+--- src/term.c 2011-05-10 16:31:41.000000000 +0200
+***************
+*** 52,58 ****
+
+ /*
+ * Here are the builtin termcap entries. They are not stored as complete
+! * Tcarr structures, as such a structure is too big.
+ *
+ * The entries are compact, therefore they normally are included even when
+ * HAVE_TGETENT is defined. When HAVE_TGETENT is defined, the builtin entries
+--- 52,58 ----
+
+ /*
+ * Here are the builtin termcap entries. They are not stored as complete
+! * structures with all entries, as such a structure is too big.
+ *
+ * The entries are compact, therefore they normally are included even when
+ * HAVE_TGETENT is defined. When HAVE_TGETENT is defined, the builtin entries
+***************
+*** 199,269 ****
+ #endif
+
+ #ifndef NO_BUILTIN_TCAPS
+- # if defined(RISCOS) || defined(ALL_BUILTIN_TCAPS)
+- /*
+- * Default for the Acorn.
+- */
+- {(int)KS_NAME, "riscos"},
+- {(int)KS_CL, "\014"}, /* Cls and Home Cursor */
+- {(int)KS_CM, "\001%d\001%d\002"}, /* Position cursor */
+-
+- {(int)KS_CCO, "16"}, /* Allow 16 colors */
+-
+- {(int)KS_CAF, "\001%d\021"}, /* Set foreground colour */
+- {(int)KS_CAB, "\001%d\022"}, /* Set background colour */
+-
+-
+- {(int)KS_ME, "\004"}, /* Normal mode */
+- {(int)KS_MR, "\005"}, /* Reverse */
+-
+- {(int)KS_VI, "\016"}, /* Cursor invisible */
+- {(int)KS_VE, "\017"}, /* Cursor visible */
+- {(int)KS_VS, "\020"}, /* Cursor very visible */
+-
+- {(int)KS_CS, "\001%d\001%d\003"}, /* Set scroll region */
+- {(int)KS_SR, "\023"}, /* Scroll text down */
+- {K_UP, "\217"},
+- {K_DOWN, "\216"},
+- {K_LEFT, "\214"},
+- {K_RIGHT, "\215"},
+- {K_S_UP, "\237"},
+- {K_S_DOWN, "\236"},
+- {K_S_LEFT, "\234"},
+- {K_S_RIGHT, "\235"},
+-
+- {K_F1, "\201"},
+- {K_F2, "\202"},
+- {K_F3, "\203"},
+- {K_F4, "\204"},
+- {K_F5, "\205"},
+- {K_F6, "\206"},
+- {K_F7, "\207"},
+- {K_F8, "\210"},
+- {K_F9, "\211"},
+- {K_F10, "\312"},
+- {K_F11, "\313"},
+- {K_F12, "\314"},
+- {K_S_F1, "\221"},
+- {K_S_F2, "\222"},
+- {K_S_F3, "\223"},
+- {K_S_F4, "\224"},
+- {K_S_F5, "\225"},
+- {K_S_F6, "\226"},
+- {K_S_F7, "\227"},
+- {K_S_F8, "\230"},
+- {K_S_F9, "\231"},
+- {K_S_F10, "\332"},
+- {K_S_F11, "\333"},
+- {K_S_F12, "\334"},
+- {K_BS, "\010"},
+- {K_INS, "\315"},
+- {K_DEL, "\177"},
+- {K_HOME, "\036"},
+- {K_END, "\213"},
+- {K_PAGEUP, "\237"},
+- {K_PAGEDOWN, "\236"},
+- # endif /* Acorn terminal */
+-
+
+ # if defined(AMIGA) || defined(ALL_BUILTIN_TCAPS)
+ /*
+--- 199,204 ----
+***************
+*** 1399,1408 ****
+ /*
+ * DEFAULT_TERM is used, when no terminal is specified with -T option or $TERM.
+ */
+- #ifdef RISCOS
+- # define DEFAULT_TERM (char_u *)"riscos"
+- #endif
+-
+ #ifdef AMIGA
+ # define DEFAULT_TERM (char_u *)"amiga"
+ #endif
+--- 1334,1339 ----
+*** ../vim-7.3.186/src/termlib.c 2010-08-15 21:57:30.000000000 +0200
+--- src/termlib.c 2011-05-10 16:31:58.000000000 +0200
+***************
+*** 13,19 ****
+ #include "vim.h"
+ #include "termlib.pro"
+
+! #if !defined(AMIGA) && !defined(VMS) && !defined(MACOS) && !defined(RISCOS)
+ # include <sgtty.h>
+ #endif
+
+--- 13,19 ----
+ #include "vim.h"
+ #include "termlib.pro"
+
+! #if !defined(AMIGA) && !defined(VMS) && !defined(MACOS)
+ # include <sgtty.h>
+ #endif
+
+*** ../vim-7.3.186/src/version.c 2011-05-10 16:12:40.000000000 +0200
+--- src/version.c 2011-05-10 16:37:20.000000000 +0200
+***************
+*** 1205,1213 ****
+ # endif
+ #endif
+
+- #ifdef RISCOS
+- MSG_PUTS(_("\nRISC OS version"));
+- #endif
+ #ifdef VMS
+ MSG_PUTS(_("\nOpenVMS version"));
+ # ifdef HAVE_PATHDEF
+--- 1207,1212 ----
+*** ../vim-7.3.186/src/vim.h 2011-05-05 16:41:19.000000000 +0200
+--- src/vim.h 2011-05-10 16:32:40.000000000 +0200
+***************
+*** 184,192 ****
+ # define SIZEOF_INT 2
+ # endif
+ #endif
+- #ifdef RISCOS
+- # define SIZEOF_INT 4
+- #endif
+
+
+ #include "feature.h" /* #defines for optionals and features */
+--- 184,189 ----
+***************
+*** 340,349 ****
+ # include "os_mac.h"
+ #endif
+
+- #ifdef RISCOS
+- # include "os_riscos.h"
+- #endif
+-
+ #ifdef __QNX__
+ # include "os_qnx.h"
+ #endif
+--- 337,342 ----
+*** ../vim-7.3.186/src/gui_riscos.h 2010-08-15 21:57:28.000000000 +0200
+--- src/gui_riscos.h 1970-01-01 01:00:00.000000000 +0100
+***************
+*** 1,32 ****
+- /* vi:set ts=8 sts=4 sw=4:
+- *
+- * VIM - Vi IMproved by Bram Moolenaar
+- *
+- * Do ":help uganda" in Vim to read copying and usage conditions.
+- * Do ":help credits" in Vim to see a list of people who contributed.
+- */
+-
+- #define FEAT_BROWSE
+-
+- #define TASK 0x4b534154
+-
+- /* Nested wimp flags: */
+- #define CHILD_FIX_TO_WORKAREA 0
+- #define CHILD_FIX_TO_LEFT 1
+- #define CHILD_FIX_TO_BOTTOM 1
+- #define CHILD_FIX_TO_RIGHT 2
+- #define CHILD_FIX_TO_TOP 2
+-
+- #define CHILD_SELF_SCROLL 0
+- #define CHILD_PARENT_SCROLL 1
+-
+- #define CHILD_LEFT 16
+- #define CHILD_BOTTOM 18
+- #define CHILD_RIGHT 20
+- #define CHILD_TOP 22
+- #define CHILD_SCROLL_X 24
+- #define CHILD_SCROLL_Y 26
+-
+- int wimp_poll(int mask, int *block);
+- int wimp_poll_idle(int mask, int *block, int end_time);
+- void ro_open_main(int *block);
+--- 0 ----
+*** ../vim-7.3.186/src/os_riscos.h 2010-08-15 21:57:30.000000000 +0200
+--- src/os_riscos.h 1970-01-01 01:00:00.000000000 +0100
+***************
+*** 1,166 ****
+- /* vi:set ts=8 sts=4 sw=4:
+- *
+- * VIM - Vi IMproved by Bram Moolenaar
+- *
+- * Do ":help uganda" in Vim to read copying and usage conditions.
+- * Do ":help credits" in Vim to see a list of people who contributed.
+- */
+-
+- #include <sys/types.h>
+- #include <sys/stat.h>
+- #include <sys/ioctl.h>
+- #include <termios.h>
+- #include <stdlib.h>
+- #include <unixlib/local.h>
+- #include <errno.h>
+- #include <fcntl.h>
+-
+- #define CASE_INSENSITIVE_FILENAME
+- #define FEAT_MODIFY_FNAME
+- #define FEAT_OSFILETYPE
+- #define DFLT_OFT "Text"
+- #define USE_TERM_CONSOLE
+- #define HAVE_AVAIL_MEM
+-
+- /* Longer filenames now accessible to all */
+- #ifndef BASENAMELEN
+- # define BASENAMELEN 64 /* Same length as unzip */
+- #endif
+-
+- #ifndef TEMNAME
+- # define TEMPNAME "<Wimp$ScrapDir>.v?XXXXXX"
+- # define TEMPNAMELEN 25
+- #endif
+-
+- #ifndef DFLT_HELPFILE
+- # define DFLT_HELPFILE "Vim:doc.help"
+- #endif
+-
+- #ifndef DFLT_BDIR
+- # define DFLT_BDIR ".,<Wimp$ScrapDir>." /* default for 'backupdir' */
+- #endif
+-
+- /* Paths to try putting swap file in. */
+- #ifndef DFLT_DIR
+- # define DFLT_DIR "<Wimp$ScrapDir>.,." /* default for 'directory' */
+- #endif
+-
+- #ifndef DFLT_VDIR
+- # define DFLT_VDIR "Choices:Vim.view" /* default for 'viewdir' */
+- #endif
+-
+- #ifndef TERMCAPFILE
+- # define TERMCAPFILE "Vim:TermCap"
+- #endif
+- #define HAVE_TGETENT
+-
+- #ifndef SYNTAX_FNAME
+- # define SYNTAX_FNAME "Vim:Syntax.%s"
+- #endif
+-
+- #ifndef EVIM_FILE
+- # define EVIM_FILE "Vim:Evim"
+- #endif
+-
+- #define FEAT_VIMINFO
+-
+- #ifndef VIMINFO_FILE
+- # define VIMINFO_FILE "<Choices$Write>.Vim.VimInfo"
+- #endif
+- #ifndef VIMINFO_FILE2
+- # define VIMINFO_FILE2 "Choices:Vim.VimInfo"
+- #endif
+-
+- #ifndef VIMRC_FILE
+- # define VIMRC_FILE "/vimrc"
+- #endif
+- #ifndef EXRC_FILE
+- # define EXRC_FILE "/exrc"
+- #endif
+- #ifndef GVIMRC_FILE
+- # define GVIMRC_FILE "/gvimrc"
+- #endif
+- #ifndef USR_VIMRC_FILE
+- # define USR_VIMRC_FILE "Vim:Evim"
+- #endif
+- #ifndef SESSION_FILE
+- # define SESSION_FILE "/Session.vim"
+- #endif
+- #ifndef USR_VIMRC_FILE
+- # define USR_VIMRC_FILE "Choices:Vim.VimRC"
+- #endif
+- #ifndef USR_GVIMRC_FILE
+- # define USR_GVIMRC_FILE "Choices:Vim.GVimRC"
+- #endif
+- #ifndef USR_EXRC_FILE
+- # define USR_EXRC_FILE "Choices:Vim.ExRC"
+- #endif
+- #ifndef SYS_VIMRC_FILE
+- # define SYS_VIMRC_FILE "Vim:VimRC"
+- #endif
+- #ifndef SYS_GVIMRC_FILE
+- # define SYS_GVIMRC_FILE "Vim:GVimRC"
+- #endif
+- #ifndef SYS_MENU_FILE
+- # define SYS_MENU_FILE "Vim:Menu"
+- #endif
+- #ifndef SYS_OPTWIN_FILE
+- # define SYS_OPTWIN_FILE "Vim:Optwin"
+- #endif
+- #ifndef FILETYPE_FILE
+- # define FILETYPE_FILE "Vim:Filetype"
+- #endif
+- #ifndef FTPLUGIN_FILE
+- # define FTPLUGIN_FILE "Vim:Ftplugin/vim"
+- #endif
+- #ifndef INDENT_FILE
+- # define INDENT_FILE "Vim:Indent/vim"
+- #endif
+- #ifndef FTOFF_FILE
+- # define FTOFF_FILE "Vim:Ftoff"
+- #endif
+- #ifndef FTPLUGOF_FILE
+- # define FTPLUGOF_FILE "Vim:Ftplugof"
+- #endif
+- #ifndef INDOFF_FILE
+- # define INDOFF_FILE "Vim:Indoff"
+- #endif
+-
+- #define DFLT_ERRORFILE "errors/vim"
+- #define DFLT_RUNTIMEPATH "Choices:Vim,Vim:,Choices:Vim.after"
+-
+- /*
+- * RISC PCs have plenty of memory, use large buffers
+- */
+- #define CMDBUFFSIZE 1024 /* size of the command processing buffer */
+- #define MAXPATHL 256 /* paths are always quite short though */
+-
+- #ifndef DFLT_MAXMEM
+- # define DFLT_MAXMEM (5*1024) /* use up to 5 Mbyte for a buffer */
+- #endif
+-
+- #ifndef DFLT_MAXMEMTOT
+- # define DFLT_MAXMEMTOT (10*1024) /* use up to 10 Mbyte for Vim */
+- #endif
+-
+- #ifdef HAVE_SIGSET
+- # define signal sigset
+- #endif
+-
+- #define n_flag (1<<31)
+- #define z_flag (1<<30)
+- #define c_flag (1<<29)
+- #define v_flag (1<<28)
+-
+- /* These take r0-r7 as inputs, returns r0-r7 in global variables. */
+- void swi(int swinum, ...); /* Handles errors itself */
+- int xswi(int swinum, ...); /* Returns errors using v flag */
+- extern int r0, r1, r2, r3, r4, r5, r6, r7; /* For return values */
+-
+- #include <kernel.h>
+- #include <swis.h>
+-
+- #define mch_memmove(to, from, len) memmove((char *)(to), (char *)(from), len)
+- #define mch_rename(src, dst) rename(src, dst)
+- #define mch_getenv(x) (char_u *)getenv((char *)x)
+- #define mch_setenv(name, val, x) setenv(name, val, x)
+--- 0 ----
+*** ../vim-7.3.186/src/gui_riscos.c 2011-05-10 15:52:10.000000000 +0200
+--- src/gui_riscos.c 1970-01-01 01:00:00.000000000 +0100
+***************
+*** 1,3558 ****
+- /* vi:set ts=8 sts=4 sw=4:
+- *
+- * VIM - Vi IMproved by Bram Moolenaar
+- *
+- * Do ":help uganda" in Vim to read copying and usage conditions.
+- * Do ":help credits" in Vim to see a list of people who contributed.
+- * See README.txt for an overview of the Vim source code.
+- */
+-
+- #include "vim.h"
+- #include <string.h>
+-
+- /*
+- * gui_riscos.c
+- *
+- * Thomas Leonard <tal197@ecs.soton.ac.uk>
+- * Updated by Andy Wingate <andy@sparse.net>
+- */
+-
+- extern int time_of_last_poll;
+-
+- int task_handle = 0; /* Zero means we are not yet a Wimp task */
+- int child_handle = 0; /* Task handle of our child process (zero if none). */
+- int *wimp_menu = (int *) -1; /* Pointer to a Wimp menu structure (or -1) */
+- int save_window = -1; /* Save As window handle */
+-
+- int *redraw_block = NULL; /* NULL means not in a redraw loop. */
+- int ro_return_early = FALSE; /* Break out of gui_mch_wait_for_chars() */
+-
+- int leaf_ref = 0; /* Wimp message number - send via Wimp$Scrap */
+- char_u *leaf_name = NULL; /* Leaf name from DataSave */
+-
+- int default_columns = 120; /* These values are used if the --rows and --columns */
+- int default_rows = 32; /* options aren't used on startup. */
+-
+- #define DRAG_FALSE 0
+- #define DRAG_SELECTION 1
+- #define DRAG_RESIZE_WINDOW 2
+- int ro_dragging = DRAG_FALSE;
+- int drag_button;
+- int drag_modifiers;
+- int drag_x_offset;
+- int drag_y_offset;
+-
+- int nested_wimp = FALSE; /* Bool - can we use the new wimp? */
+-
+- int changed_mode = FALSE;
+- int x_eigen_factor;
+- int y_eigen_factor;
+-
+- /* If ro_current_font is non-zero then use the outline font with that handle,
+- * otherwise, if zap_redraw is TRUE then use ZapRedraw, otherwise use the
+- * system font.
+- *
+- * If zap_redraw is TRUE then zap_file[] contains valid Zap font file
+- * pointers (or NULLs).
+- */
+- int ro_current_font = 0; /* 0 is system font, or ZapRedraw */
+- int font_x_offset = 0; /* Where to position each char in its box */
+- int font_y_offset = 0;
+-
+- int zap_redraw = FALSE;
+- int double_height = FALSE; /* Plot each line twice? */
+-
+- #define grgb(r,g,b) ((b<<16) + (g<<8) + (r))
+- #define UNUSED_COLOUR (gui.back_pixel)
+-
+- #define RO_LOAD_CLIPBOARD -2 /* Internal handle for DataSave message. */
+-
+- /* Changes by John Kortink, 22-23 July 1998
+- *
+- * Stuff to make redraw a lot faster. Almost all of it is right here below,
+- * elsewhere changes are marked with 'JK230798'. Apart from a small change in
+- * 'gui.c' all changes are limited to this file, 'gui_riscos.c'. The change in
+- * 'gui.c' is to make Vim stop being 'smart' not redrawing characters that are
+- * 'already there' (i.e. from the previous line, by coincidence). This caused a
+- * lot more calls to the redraw code, which we want to avoid because a few nice
+- * big strings at a time is a lot faster than a truckload of small ones. ('Dear
+- * Bram ...').
+- */
+-
+- /* The ZapRedraw structure */
+-
+- static struct
+- {
+- int r_flags;
+- int r_minx;
+- int r_miny;
+- int r_maxx;
+- int r_maxy;
+- int r_screen;
+- int r_bpl;
+- int r_bpp;
+- int r_charw;
+- int r_charh;
+- char *r_caddr;
+- int r_cbpl;
+- int r_cbpc;
+- int r_linesp;
+- int r_data;
+- int r_scrollx;
+- int r_scrolly;
+- int *r_palette;
+- int r_for;
+- int r_bac;
+- char *r_workarea;
+- int r_magx;
+- int r_magy;
+- int r_xsize;
+- int r_ysize;
+- int r_mode;
+- }
+- zap_redraw_block;
+-
+- /* Other globals */
+-
+- static int zap_redraw_initialised = FALSE;
+- static int zap_redraw_update_colours;
+- static int zap_redraw_colours[2];
+- static int zap_redraw_palette[16];
+-
+- /* Holds the current Zap font file(s).
+- * The font is recreated from this block on a mode change.
+- * When using zap, element ZAP_NORMAL is always valid, but
+- * the others can be NULL.
+- */
+-
+- #define ZAP_NORMAL 0
+- #define ZAP_BOLD 1
+- #define ZAP_ITALIC 2
+- #define ZAP_BITALIC 3
+- #define ZAP_STYLES 4
+-
+- /* Zap font file format data */
+- static char *zap_file[ZAP_STYLES] = {NULL, NULL, NULL, NULL};
+-
+- /* r_caddr format for current mode */
+- static char *zap_caddr[ZAP_STYLES] = {NULL, NULL, NULL, NULL};
+-
+- static void ro_remove_menu(int *menu);
+-
+- /*
+- * Initialise all the ZapRedraw stuff.
+- * Call this when changing font and after each mode change.
+- * zap_redraw_bitmap must contain a valid Zap font file (possibly
+- * created from the system font).
+- *
+- * Return FAIL to revert to system font (if we can't use ZapRedraw).
+- */
+- int
+- ro_zap_redraw_initialise()
+- {
+- int bytes_per_bitmap_char;
+- int first, last;
+- int i;
+-
+- /* Can't have initialisers for struct members :-(, ok, this way then ... */
+- if (!zap_redraw_initialised)
+- {
+- zap_redraw_block.r_workarea = NULL;
+- zap_redraw_initialised = TRUE;
+- }
+-
+- /* We redraw in DSA mode */
+- zap_redraw_block.r_flags = 0x0;
+-
+- /* Let ZapRedraw get the screen address for us */
+- zap_redraw_block.r_screen = 0;
+-
+- /* Read the font width and height from the font file header.
+- * Assume that all styles are the same size.
+- * ZAP_NORMAL is always present.
+- */
+- zap_redraw_block.r_charw = ((int *) zap_file[ZAP_NORMAL])[2];
+- zap_redraw_block.r_charh = ((int *) zap_file[ZAP_NORMAL])[3];
+-
+- /* We have no linespacing */
+- zap_redraw_block.r_linesp = 0;
+-
+- /* Fix foreground = colour 1 */
+- zap_redraw_block.r_for = 1;
+-
+- /* Fix background = colour 0 */
+- zap_redraw_block.r_bac = 0;
+-
+- /* Colour mask buffer */
+- zap_redraw_block.r_palette = zap_redraw_palette;
+-
+- /* Allocate local workspace (for the few calls following here) */
+- if (zap_redraw_block.r_workarea != NULL)
+- free(zap_redraw_block.r_workarea);
+- zap_redraw_block.r_workarea = (char*) malloc(128);
+- if (!zap_redraw_block.r_workarea)
+- return FAIL; /* Out of memory */
+-
+- /* Fill in VDU variables */
+- if (xswi(ZapRedraw_ReadVduVars, 0, &zap_redraw_block) & v_flag)
+- return FAIL; /* Can't find ZapRedraw module - use VDU instead */
+-
+- /* Determine cbpl and cbpc */
+- swi(ZapRedraw_CachedCharSize, zap_redraw_block.r_bpp, 0,
+- zap_redraw_block.r_charw, zap_redraw_block.r_charh);
+- zap_redraw_block.r_cbpl = r2;
+- zap_redraw_block.r_cbpc = r3;
+-
+- /* Allocate general workspace (for the calls outside) */
+- if (zap_redraw_block.r_workarea != NULL)
+- free(zap_redraw_block.r_workarea);
+- zap_redraw_block.r_workarea = (char*) malloc(128 + zap_redraw_block.r_cbpl);
+- if (!zap_redraw_block.r_workarea)
+- return FAIL; /* Out of memory */
+-
+- /* Now convert the 1 bpp character data ready for the current mode */
+-
+- bytes_per_bitmap_char = (zap_redraw_block.r_charw * zap_redraw_block.r_charh + 7) / 8;
+-
+- /* Convert the fonts from 1bpp to a format suitable for the
+- * current mode.
+- */
+- for (i = 0; i < ZAP_STYLES; i++)
+- {
+- first = ((int *) zap_file[i])[4];
+- last = ((int *) zap_file[i])[5];
+-
+- if (last > 255)
+- last = 255; /* Don't convert cursors (overwrites memory!) */
+-
+- /* Allocate the font cache */
+- vim_free(zap_caddr[i]);
+- if (zap_file[i])
+- zap_caddr[i] = (char*) malloc(zap_redraw_block.r_cbpc * 256);
+- else
+- zap_caddr[i] = NULL; /* No file for this style */
+-
+- if (zap_caddr[i])
+- {
+- zap_redraw_block.r_caddr = zap_caddr[i];
+-
+- swi(ZapRedraw_ConvertBitmap, 0, &zap_redraw_block,
+- first, last, /* Range of characters to convert */
+- zap_file[i] + 0x20 /* Addr of first char provided by font */
+- - first * bytes_per_bitmap_char);
+- }
+- }
+-
+- if (!zap_caddr[ZAP_NORMAL])
+- {
+- zap_redraw = FALSE; /* Out of memory */
+- return FAIL;
+- }
+-
+- /* Next time we need them, we have to update the colour masks */
+- zap_redraw_update_colours = TRUE;
+-
+- return OK;
+- }
+-
+- /*
+- * Redraw a string at OS coordinates <x,y> (top-left, x inclusive, y exclusive).
+- * Graphics clip window is window[0..3] as in R1+28..40 of Wimp_RedrawWindow.
+- * Returns (possibly modified) flags.
+- */
+- int
+- ro_zap_redraw_draw_string(x, y, string, length, flags, clip)
+- int x;
+- int y;
+- char *string;
+- int length;
+- int flags; /* DRAW_TRANSP, DRAW_BOLD, DRAW_UNDERL, DRAW_ITALIC */
+- int *clip;
+- {
+- char redraw_data[1024];
+- int clip_minx;
+- int clip_miny;
+- int clip_maxx;
+- int clip_maxy;
+- int os_xshift = zap_redraw_block.r_magx;
+- int os_yshift = zap_redraw_block.r_magy;
+-
+- if (flags & DRAW_TRANSP)
+- return flags; /* We don't do transparent plotting yet. */
+-
+- if (flags & DRAW_BOLD)
+- {
+- if (flags & DRAW_ITALIC && zap_caddr[ZAP_BITALIC])
+- zap_redraw_block.r_caddr = zap_caddr[ZAP_BITALIC];
+- else
+- zap_redraw_block.r_caddr = zap_caddr[ZAP_BOLD];
+- }
+- else
+- {
+- if (flags & DRAW_ITALIC)
+- zap_redraw_block.r_caddr = zap_caddr[ZAP_ITALIC];
+- else
+- zap_redraw_block.r_caddr = zap_caddr[ZAP_NORMAL];
+- }
+- if (!zap_redraw_block.r_caddr)
+- {
+- zap_redraw_block.r_caddr = zap_caddr[ZAP_NORMAL];
+- flags |= DRAW_UNDERL; /* Style missing - we can always underline */
+- }
+-
+- /* Set the vertical scaling flag */
+- if (double_height)
+- zap_redraw_block.r_flags = 1 << 1;
+- else
+- zap_redraw_block.r_flags = 0;
+-
+- /* Update the colour masks (if needed) */
+- if (zap_redraw_update_colours)
+- {
+- swi(ZapRedraw_CreatePalette, 2,
+- &zap_redraw_block,
+- zap_redraw_colours,
+- zap_redraw_block.r_palette, 2);
+- zap_redraw_update_colours = FALSE;
+- }
+-
+- /* Target rectangle in ZapRedraw rectangle coordinates (pixels, Y-min/max reversed !!!) */
+- zap_redraw_block.r_minx = x >> os_xshift; /* inclusive */
+- zap_redraw_block.r_miny = zap_redraw_block.r_ysize - (y >> os_yshift); /* inclusive */
+- zap_redraw_block.r_maxx = (x + length * gui.char_width) >> os_xshift; /* exclusive */
+- zap_redraw_block.r_maxy = zap_redraw_block.r_ysize - ((y - gui.char_height) >> os_yshift);
+- /* exclusive */
+-
+- /* Clip rectangle in ZapRedraw rectangle coordinates (pixels, Y-min/max reversed !!!) */
+- clip_minx = clip[0] >> os_xshift; /* inclusive */
+- clip_miny = zap_redraw_block.r_ysize - (clip[3] >> os_yshift); /* inclusive */
+- clip_maxx = clip[2] >> os_xshift; /* exclusive */
+- clip_maxy = zap_redraw_block.r_ysize - (clip[1] >> os_yshift); /* exclusive */
+-
+- /* Clip target rectangle against the current graphics window */
+- if (zap_redraw_block.r_minx < clip_minx)
+- {
+- zap_redraw_block.r_scrollx = clip_minx - zap_redraw_block.r_minx;
+- zap_redraw_block.r_minx = clip_minx;
+- }
+- else
+- zap_redraw_block.r_scrollx = 0;
+- if (zap_redraw_block.r_miny < clip_miny)
+- {
+- zap_redraw_block.r_scrolly = clip_miny - zap_redraw_block.r_miny;
+- zap_redraw_block.r_miny = clip_miny;
+- }
+- else
+- zap_redraw_block.r_scrolly = 0;
+- if (zap_redraw_block.r_maxx > clip_maxx)
+- zap_redraw_block.r_maxx = clip_maxx;
+- if (zap_redraw_block.r_maxy > clip_maxy)
+- zap_redraw_block.r_maxy = clip_maxy;
+-
+- /* Fill in the character data structure */
+- if (length > (sizeof(redraw_data) - 2 * 4 - 2))
+- length = sizeof(redraw_data) - 2 * 4 - 2;
+- ((int*) redraw_data)[0] = 2 * 4;
+- ((int*) redraw_data)[1] = 0;
+- strncpy(redraw_data + 2 * 4, string, length);
+- redraw_data[2 * 4 + length + 0] = '\0';
+- redraw_data[2 * 4 + length + 1] = '\x2';
+- zap_redraw_block.r_data = (int) redraw_data;
+-
+- /* Perform the draw */
+- swi(ZapRedraw_RedrawArea, 0, &zap_redraw_block);
+-
+- return flags;
+- }
+-
+- /*
+- * Okay that was it from me, back to Thomas ...
+- */
+-
+- /*
+- * Parse the GUI related command-line arguments. Any arguments used are
+- * deleted from argv, and *argc is decremented accordingly. This is called
+- * when vim is started, whether or not the GUI has been started.
+- */
+- void
+- gui_mch_prepare(int *argc, char **argv)
+- {
+- int arg = 1;
+-
+- while (arg < *argc - 1)
+- {
+- if (strcmp(argv[arg], "--rows") == 0 || strcmp(argv[arg], "--columns") == 0)
+- {
+- int value;
+-
+- value = atoi(argv[arg + 1]);
+-
+- if (argv[arg][2] == 'r')
+- default_rows = value;
+- else
+- default_columns = value;
+-
+- /* Delete argument from argv[]. (hope this is read/write!) */
+-
+- *argc -= 2;
+- if (*argc > arg)
+- mch_memmove(&argv[arg], &argv[arg + 2], (*argc - arg)
+- * sizeof(char *));
+- }
+- else
+- arg++;
+- }
+- }
+-
+- /* Fatal error on initialisation - report it and die. */
+- void
+- ro_die(error)
+- char_u *error; /* RISC OS error block */
+- {
+- swi(Wimp_ReportError, error, 5, "GVim");
+- exit(EXIT_FAILURE);
+- }
+-
+- /* Find the sizes of the window tools:
+- *
+- * Create a test window.
+- * Find inner and outer sizes.
+- * Find the difference.
+- * Delete window.
+- *
+- * While we're here, find the eigen values too.
+- */
+- void
+- ro_measure_tools()
+- {
+- int block[10];
+- int vdu[] = { 4, 5, -1};
+- int test_window[] =
+- {
+- -100, -100, /* Visible area : min X,Y */
+- -50, -50, /* max X,Y */
+- 0, 0, /* Scroll offsets */
+- -1, /* Window in front */
+- 0xd0800150, /* Window flags */
+- 0xff070207, /* Colours */
+- 0x000c0103, /* More colours */
+- 0, -0x4000, /* Workarea extent */
+- 0x4000, 0, /* max X,Y */
+- 0x00000000, /* No title */
+- 0 << 12, /* No workarea button type */
+- 1, /* Wimp sprite area */
+- 0x00010001, /* Minimum width, height */
+- 0, 0, 0, /* Title data (none) */
+- 0 /* No icons */
+- };
+- int inner_max_x, inner_min_y;
+-
+- swi(Wimp_CreateWindow, 0, test_window);
+-
+- block[0] = r0;
+- /* Open the window (and read state).
+- * GetWindowOutline needs it too if the wimp isn't nested.
+- */
+- swi(Wimp_OpenWindow, 0, block);
+- inner_max_x = block[3];
+- inner_min_y = block[2];
+-
+- swi(Wimp_GetWindowOutline, 0, block);
+-
+- gui.scrollbar_width = block[3] - inner_max_x;
+- gui.scrollbar_height = inner_min_y - block[2];
+-
+- swi(Wimp_DeleteWindow, 0, block);
+-
+- /* Read the size of one pixel. */
+- swi(OS_ReadVduVariables, vdu, vdu);
+- x_eigen_factor = vdu[0];
+- y_eigen_factor = vdu[1];
+- }
+-
+- /* Load a template from the current templates file.
+- * Create the window and return its handle.
+- */
+- int
+- ro_load_template(str_name, title, title_size)
+- char_u *str_name; /* Identifier of window in file (max 12 chars) */
+- char_u **title; /* If not NULL then return pointer to title here */
+- int *title_size; /* If not NULL then return the title length here */
+- {
+- int *window;
+- char *data;
+- int name[4];
+-
+- strcpy( (char *) name, str_name);
+-
+- /* Find how big we must make the buffers */
+-
+- if (xswi(Wimp_LoadTemplate, 0, 0, 0, 0, -1, name, 0) & v_flag)
+- ro_die( (char *) r0);
+-
+- window = malloc(r1); /* Don't print text messages from alloc() */
+- data = malloc(r2);
+- if (window == NULL || data == NULL)
+- ro_die("\0\0\0\0Out of memory - Can't load templates");
+-
+- /* Load the template into the buffers */
+-
+- swi(Wimp_LoadTemplate, 0,
+- window, /* Temp block */
+- data, /* Icon data */
+- data + r2 + 1, /* End of icon data */
+- -1, /* No fonts */
+- name, 0); /* First match */
+- if (r6 == 0)
+- ro_die("\0\0\0\0Can't find window in Templates file");
+-
+- /* Create the window */
+-
+- if (xswi(Wimp_CreateWindow, 0, window) & v_flag)
+- ro_die( (char *) r0);
+-
+- if (title)
+- *title = (char_u *) window[18];
+- if (title_size)
+- *title_size = window[20];
+-
+- free(window); /* Free temp block */
+- return r0; /* Return the window handle */
+- }
+-
+- /*
+- * Check if the GUI can be started. Called before gvimrc is sourced.
+- * Return OK or FAIL.
+- */
+- int
+- gui_mch_init_check()
+- {
+- return OK; /* TODO: GUI can always be started? */
+- }
+-
+- /*
+- * Initialise the RISC OS GUI.
+- * Create all the windows.
+- * Returns OK for success, FAIL when the GUI can't be started.
+- */
+- int
+- gui_mch_init()
+- {
+- int messages[] = {
+- 1, 2, 3, 4, /* DataSave, DataSaveAck, DataLoad, DataLoadAck */
+- 8, /* PreQuit */
+- 0xf, /* ClaimEntity (for clipboard) */
+- 0x10, /* DataRequest (for clipboard) */
+- 0x400c1, /* Mode change */
+- 0x400c3, /* TaskCloseDown */
+- 0x400c9, /* MenusDeleted */
+- 0x808c1, /* TW_Output */
+- 0x808c2, /* TW_Ego */
+- 0x808c3, /* TW_Morio */
+- 0x808c4, /* TW_Morite */
+- 0}; /* End-of-list. */
+-
+-
+- /* There may have been some errors reported in the
+- * command window before we get here. Wait if so.
+- */
+- swi(Wimp_ReadSysInfo, 3);
+- if (r0 == 0)
+- swi(Wimp_CommandWindow, 0); /* Window opened - close with prompt */
+-
+- if (xswi(Wimp_Initialise, 310, 0x4b534154, "GVim", messages) & v_flag)
+- return FAIL;
+- nested_wimp = r0 >= 397;
+- task_handle = r1;
+-
+- /* Load the templates. */
+-
+- if (xswi(Wimp_OpenTemplate, 0, "Vim:Templates") & v_flag)
+- ro_die( (char *) r0);
+-
+- gui.window_handle = ro_load_template("editor",
+- &gui.window_title,
+- &gui.window_title_size);
+-
+- save_window = ro_load_template("save", NULL, NULL);
+-
+- swi(Wimp_CloseTemplate);
+-
+- /* Set default foreground and background colours. */
+-
+- gui.norm_pixel = gui.def_norm_pixel;
+- gui.back_pixel = gui.def_back_pixel;
+-
+- /* Get the colours from the "Normal" and "Menu" group (set in syntax.c or
+- * in a vimrc file) */
+-
+- set_normal_colors();
+-
+- /*
+- * Check that none of the colors are the same as the background color
+- */
+-
+- gui_check_colors();
+-
+- /* Get the colours for the highlight groups (gui_check_colors() might have
+- * changed them) */
+-
+- highlight_gui_started(); /* re-init colours and fonts */
+-
+- /* Set geometry based on values read on initialisation. */
+-
+- gui.num_cols = Columns = default_columns;
+- gui.num_rows = Rows = default_rows;
+-
+- /* Get some information about our environment. */
+-
+- ro_measure_tools();
+-
+- return OK;
+- }
+-
+- /*
+- * Called when the foreground or background colour has been changed.
+- */
+- void
+- gui_mch_new_colors()
+- {
+- }
+-
+- /*
+- * Open the GUI window which was created by a call to gui_mch_init().
+- */
+- int
+- gui_mch_open(void)
+- {
+- int block[10];
+-
+- block[0] = gui.window_handle;
+- swi(Wimp_GetWindowState, 0, block);
+- block[7] = -1; /* Open at the top of the stack */
+- swi(Wimp_OpenWindow, 0, block);
+-
+- /* Give the new window the input focus */
+- swi(Wimp_SetCaretPosition, gui.window_handle, -1, 0, 0, -1, -1);
+-
+- if (gui_win_x != -1 && gui_win_y != -1)
+- gui_mch_set_winpos(gui_win_x, gui_win_y);
+-
+- return OK;
+- }
+-
+- void
+- gui_mch_exit(int rc)
+- {
+- int block[64];
+-
+- /* Close window. Stops us from getting troublesome events
+- * if we take a while to die.
+- */
+- block[0] = gui.window_handle;
+- swi(Wimp_CloseWindow, 0, block);
+-
+- if (child_handle)
+- {
+- /* We still have a sub-task running - kill it */
+- block[0] = 20;
+- block[3] = 0;
+- block[4] = 0; /* Quit */
+- if ((xswi(Wimp_SendMessage, 17, block, child_handle) & v_flag) == 0)
+- {
+- /* Idle until child dies. */
+- while (child_handle)
+- {
+- process_event(wimp_poll(1, block), block);
+- }
+- }
+- }
+-
+- exit(rc);
+- }
+-
+- /*
+- * Get the position of the top left corner of the window.
+- */
+- int
+- gui_mch_get_winpos(int *x, int *y)
+- {
+- /* TODO */
+- return FAIL;
+- }
+-
+- /*
+- * Set the position of the top left corner of the window to the given
+- * coordinates.
+- */
+- void
+- gui_mch_set_winpos(int x, int y)
+- {
+- /* TODO */
+- }
+-
+- void
+- gui_mch_set_shellsize(width, height, min_width, min_height, base_width, base_height, direction)
+- int width; /* In OS units */
+- int height;
+- int min_width; /* Smallest permissible window size (ignored) */
+- int min_height;
+- int base_width; /* Space for scroll bars, etc */
+- int base_height;
+- int direction;
+- {
+- int s_width, s_height;
+- int block[] = {
+- gui.window_handle,
+- 0,
+- -height + 1,
+- width,
+- 1};
+-
+- gui_mch_get_screen_dimensions(&s_width, &s_height);
+- s_width -= base_width;
+- s_height -= base_height; /* Underestimate - ignores titlebar */
+-
+- swi(Wimp_GetWindowState, 0, block);
+- block[3] = block[1] + width;
+- block[2] = block[4] - height;
+- if (block[3] > s_width)
+- {
+- block[3] = s_width;
+- block[1] = block[3] - width;
+- }
+- if (block[2] < gui.scrollbar_height)
+- {
+- block[2] = gui.scrollbar_height;
+- block[4] = block[2] + height;
+- }
+- swi(Wimp_OpenWindow, 0, block);
+- swi(Wimp_ForceRedraw, gui.window_handle, 0, -height, width, 0);
+- }
+-
+- void
+- gui_mch_get_screen_dimensions(int *screen_w, int *screen_h)
+- {
+- int block[] = {4, 5, 11, 12, -1};
+-
+- swi(OS_ReadVduVariables, block, block);
+- *screen_w = (block[2] + 1) << block[0];
+- *screen_h = (block[3] + 1) << block[1];
+- }
+-
+- /* Take a font name with options and return a font handle, or
+- * zero for failure.
+- * Replace extension with 'Bold' or 'Italic' depending on modifiers.
+- */
+- int
+- ro_get_font(fullname, weight)
+- char_u *fullname;
+- int weight; /* Initial weights:
+- * BIT MEANING
+- * 0 bold
+- * 1 italic
+- */
+- {
+- char_u *arg;
+- char_u font[41];
+- int width = -1;
+- int height = -1;
+- int name_len;
+- int i;
+- char_u c;
+-
+- for (i = 0; i < 39;)
+- {
+- c = fullname[i];
+- if (c == ':' || c == NUL || c == '.')
+- break;
+- font[i++] = c;
+- }
+-
+- /* find the first modifier, NULL if none */
+- arg = strchr(fullname + i, ':');
+-
+- while (arg)
+- {
+- switch (*++arg)
+- {
+- case 'h':
+- height = strtol(arg + 1, (char **) &arg, 10);
+- break;
+- case 'w':
+- width = strtol(arg + 1, (char **) &arg, 10);
+- break;
+- case 'b':
+- weight |= 1;
+- break;
+- case 'i':
+- weight |= 2;
+- break;
+- default:
+- return 0;
+- }
+- arg = strchr(arg, ':');
+- }
+-
+- if ((weight & 1) && i < 35)
+- {
+- /* Bold goes instead of given suffix */
+- strncpy(font + i, ".Bold", 5);
+- i += 5;
+- }
+- else
+- {
+- /* Copy rest of name unless we are using Bold */
+- while (i < 39)
+- {
+- c = fullname[i];
+- if (c == ':' || c == NUL)
+- break;
+- font[i++] = c;
+- }
+- }
+- if ((weight & 2) && i < 32)
+- {
+- strncpy(font + i, ".Oblique", 8);
+- i += 8;
+- }
+-
+- font[i] = 0;
+-
+- if (height < 1 && width < 1)
+- height = width = 10; /* Default to 10pt */
+- else if (height < 1)
+- height = width;
+- else if (width < 1)
+- width = height;
+-
+- if (xswi(Font_FindFont, 0, font, width << 4, height << 4, 0, 0) & v_flag)
+- return NOFONT; /* Can't find font */
+-
+- return r0;
+- }
+-
+- /* Load a file into allocated memory and check it is valid.
+- * Return a pointer to the allocated block on success.
+- */
+- char *
+- zap_load_file(name, style)
+- char_u *name; /* Name of directory containing styles */
+- char_u *style; /* Name of style within directory */
+- {
+- char_u fname[256];
+- char_u *file;
+-
+- if (strlen(name) + strlen(style) > 254)
+- return NULL; /* Names too long */
+-
+- sprintf(fname, "%s.%s", name, style);
+-
+- /* Load the named font in 1bpp format. */
+- if (xswi(OS_File, 13, fname, 0, 0, "VimFonts:") & v_flag || r0 != 1)
+- return NULL; /* Error reading file info, or not a file */
+-
+- /* Allocate enough memory to load the whole file */
+- file = (char *) alloc(r4);
+- if (!file)
+- return NULL; /* Out of memory */
+-
+- if (xswi(OS_File, 12, fname, file, 0, "VimFonts:") & v_flag)
+- return NULL; /* Unable to load file */
+-
+- if (strncmp(file, "ZapFont\015", 8) == 0)
+- return file; /* Loaded OK! */
+-
+- vim_free(file);
+- return NULL; /* Not a valid font file */
+- }
+-
+- /* Load and convert the named font.
+- * If name is NULL or a null string then convert the system font.
+- * Return OK on success; FAIL and we revert to using the VDU drivers.
+- *
+- * 'name' is the name of a directory.
+- * Tries to load 'name.0', 'name.B', 'name.I' and 'name.IB'.
+- */
+- int
+- zap_load_font(name)
+- char_u *name;
+- {
+- int i;
+-
+- /* Free the existing font files, if any */
+- for (i = 0; i < ZAP_STYLES; i++)
+- {
+- vim_free(zap_file[i]);
+- zap_file[i] = NULL;
+- }
+-
+- if (name && *name == '!')
+- {
+- name++;
+- double_height = TRUE;
+- }
+- else
+- double_height = FALSE;
+-
+- if (name && *name)
+- {
+- zap_file[ZAP_NORMAL] = zap_load_file(name, "0");
+- if (!zap_file[ZAP_NORMAL])
+- return FAIL; /* Can't load the 'normal' style - error */
+-
+- zap_file[ZAP_BOLD] = zap_load_file(name, "B");
+- zap_file[ZAP_ITALIC] = zap_load_file(name, "I");
+- zap_file[ZAP_BITALIC] = zap_load_file(name, "IB");
+- }
+- else
+- {
+- int *header;
+- char workarea[16];
+- char *old_wa;
+-
+- /* Allocate memory for system font (8 x 8 x 256 bits, plus header) */
+- header = (int *) alloc(0x20 + 8 * 256);
+- if (header == NULL)
+- return FAIL;
+- zap_file[ZAP_NORMAL] = (char *) header;
+-
+- /* Store details about the system font */
+- header[2] = 8; /* Width */
+- header[3] = 8; /* Height */
+- header[4] = 0; /* First char */
+- header[5] = 255; /* Last char */
+- header[6] = header[7] = 0; /* Reserved */
+-
+- /* Get system font bitmap */
+- old_wa = zap_redraw_block.r_workarea;
+- zap_redraw_block.r_workarea = workarea;
+- swi(ZapRedraw_ReadSystemChars, zap_file[ZAP_NORMAL] + 0x20, &zap_redraw_block);
+- zap_redraw_block.r_workarea = old_wa;
+- }
+-
+- return ro_zap_redraw_initialise();
+- }
+-
+- /*
+- * Initialise vim to use the font with the given name.
+- * Return FAIL if the font could not be loaded, OK otherwise.
+- */
+- int
+- gui_mch_init_font(char_u *font_name, int fontset)
+- {
+- int new_handle = 0; /* Use the system font by default */
+-
+- if (font_name[0] == '!')
+- {
+- /* Select a ZapRedraw font */
+- if (zap_load_font(font_name + 1))
+- zap_redraw = TRUE;
+- else
+- {
+- EMSG2(_("E610: Can't load Zap font '%s'"), font_name);
+- font_name = "System"; /* Error - use system font */
+- zap_redraw = FALSE;
+- }
+- }
+- else
+- {
+- zap_redraw = FALSE;
+-
+- if (font_name)
+- {
+- /* Extract any extra details about the font */
+- new_handle = ro_get_font(font_name, 0);
+- if (!new_handle)
+- return FAIL;
+- }
+- else
+- font_name = "System";
+- }
+-
+- /* Free the previous font, if any */
+- gui_mch_free_font(gui.norm_font);
+- gui.norm_font = new_handle;
+- gui.char_ascent = 0;
+-
+- if (new_handle)
+- {
+- /* Read details about the chosen font */
+- swi(Font_ReadInfo, new_handle);
+-
+- gui.char_width = r3 - r1;
+- gui.char_height = r4 - r2;
+-
+- font_x_offset = -r1; /* Where to position each char in its box */
+- font_y_offset = -r4;
+-
+- /* Try to load other fonts for bold, italic, and bold-italic */
+- gui_mch_free_font(gui.bold_font);
+- gui.bold_font = ro_get_font(font_name, 1);
+- gui_mch_free_font(gui.ital_font);
+- gui.ital_font = ro_get_font(font_name, 2);
+- gui_mch_free_font(gui.boldital_font);
+- gui.boldital_font = ro_get_font(font_name, 3);
+- }
+- else
+- {
+- /* Use the system font or ZapRedraw. */
+- if (zap_redraw)
+- {
+- gui.char_width = zap_redraw_block.r_charw << zap_redraw_block.r_magx;
+- gui.char_height = zap_redraw_block.r_charh << zap_redraw_block.r_magy;
+- if (double_height)
+- gui.char_height <<= 1;
+- }
+- else
+- {
+- gui.char_width = 16;
+- gui.char_height = 32;
+- }
+-
+- gui_mch_free_font(gui.bold_font);
+- gui.bold_font = 0;
+- gui_mch_free_font(gui.ital_font);
+- gui.ital_font = 0;
+- gui_mch_free_font(gui.boldital_font);
+- gui.boldital_font = 0;
+- }
+- hl_set_font_name(font_name);
+-
+- must_redraw = CLEAR;
+- return OK;
+- }
+-
+- /*
+- * Adjust gui.char_height (after 'linespace' was changed).
+- */
+- int
+- gui_mch_adjust_charheight()
+- {
+- return FAIL;
+- }
+-
+- /*
+- * Get a font structure for highlighting.
+- */
+- GuiFont
+- gui_mch_get_font(name, giveErrorIfMissing)
+- char_u *name;
+- int giveErrorIfMissing;
+- {
+- int handle;
+-
+- if (!name)
+- return NOFONT; /* System font if no name */
+-
+- handle = ro_get_font(name, 0);
+- if (!handle)
+- {
+- if (giveErrorIfMissing)
+- EMSG2(_("E611: Can't use font %s"), name);
+- return NOFONT;
+- }
+-
+- return handle;
+- }
+-
+- #if defined(FEAT_EVAL) || defined(PROTO)
+- /*
+- * Return the name of font "font" in allocated memory.
+- * Don't know how to get the actual name, thus use the provided name.
+- */
+- char_u *
+- gui_mch_get_fontname(font, name)
+- GuiFont font;
+- char_u *name;
+- {
+- if (name == NULL)
+- return NULL;
+- return vim_strsave(name);
+- }
+- #endif
+-
+- /*
+- * Set the current text font.
+- */
+- void
+- gui_mch_set_font(GuiFont font)
+- {
+- ro_current_font = font;
+-
+- if (font)
+- {
+- /* Not the system font or ZapRedraw font - select it */
+- swi(Font_SetFont, font);
+- }
+- }
+-
+- /*
+- * If a font is not going to be used, free its structure.
+- */
+- void
+- gui_mch_free_font(GuiFont font)
+- {
+- if (font)
+- swi(Font_LoseFont, font);
+- }
+-
+- /*
+- * Return the Pixel value (colour) for the given colour name.
+- * Return INVALCOLOR for error.
+- * NB: I've changed Green for now, since it looked really sick
+- */
+- guicolor_T
+- gui_mch_get_color(char_u *name)
+- {
+- int i;
+- struct colour
+- {
+- char_u *name;
+- guicolor_T value;
+- } colours[] =
+- {
+- { "Red", grgb(255, 0, 0) },
+- { "LightRed", grgb(255, 0, 0) },
+- { "DarkRed", grgb(139, 0, 0) },
+-
+- { "Green", grgb(50, 200, 50) },
+- { "LightGreen", grgb(144, 238, 144) },
+- { "DarkGreen", grgb(0, 100, 0) },
+- { "SeaGreen", grgb(46, 139, 87) },
+-
+- { "Blue", grgb(0, 0, 255) },
+- { "LightBlue", grgb(173, 216, 230) },
+- { "DarkBlue", grgb(0, 0, 139) },
+- { "SlateBlue", grgb(160, 90, 205) },
+-
+- { "Cyan", grgb(0, 255, 255) },
+- { "LightCyan", grgb(224, 255, 255) },
+- { "DarkCyan", grgb(0, 139, 139) },
+-
+- { "Magenta", grgb(255, 0, 255) },
+- { "LightMagenta", grgb(255, 224, 255) },
+- { "DarkMagenta", grgb(139, 0, 139) },
+-
+- { "Yellow", grgb(255, 255, 0) },
+- { "LightYellow", grgb(255, 255, 224) },
+- { "DarkYellow", grgb(139, 139, 0) },
+- { "Brown", grgb(165, 42, 42) },
+-
+- { "Gray", grgb(190, 190, 190) },
+- { "Grey", grgb(190, 190, 190) },
+- { "LightGray", grgb(211, 211, 211) },
+- { "LightGrey", grgb(211, 211, 211) },
+- { "DarkGray", grgb(169, 169, 169) },
+- { "DarkGrey", grgb(169, 169, 169) },
+- { "Gray10", grgb(26, 26, 26) },
+- { "Grey10", grgb(26, 26, 26) },
+- { "Gray20", grgb(51, 51, 51) },
+- { "Grey20", grgb(51, 51, 51) },
+- { "Gray30", grgb(77, 77, 77) },
+- { "Grey30", grgb(77, 77, 77) },
+- { "Gray40", grgb(102, 102, 102) },
+- { "Grey40", grgb(102, 102, 102) },
+- { "Gray50", grgb(127, 127, 127) },
+- { "Grey50", grgb(127, 127, 127) },
+- { "Gray60", grgb(153, 153, 153) },
+- { "Grey60", grgb(153, 153, 153) },
+- { "Gray70", grgb(179, 179, 179) },
+- { "Grey70", grgb(179, 179, 179) },
+- { "Gray80", grgb(204, 204, 204) },
+- { "Grey80", grgb(204, 204, 204) },
+- { "Gray90", grgb(229, 229, 229) },
+- { "Grey90", grgb(229, 229, 229) },
+-
+- { "Black", grgb(0, 0, 0) },
+- { "White", grgb(255, 255, 255) },
+-
+- { "Orange", grgb(255, 165, 0) },
+- { "Purple", grgb(160, 32, 240) },
+- { "Violet", grgb(238, 130, 238) },
+- {NULL, 0}
+- };
+-
+- if (name[0] == '#')
+- {
+- char *end;
+- int c;
+-
+- c = strtol(name + 1, &end, 16);
+- return (guicolor_T) ((c >> 16) & 0xff) | (c & 0xff00) | ((c & 0xff) << 16);
+- }
+-
+- for (i = 0; colours[i].name != NULL; i++)
+- {
+- if (STRICMP(name, colours[i].name) == 0)
+- return colours[i].value;
+- }
+- if (strnicmp(name, "grey", 4) == 0 || strnicmp(name, "gray", 4) == 0)
+- {
+- int level = (255 * atoi(name + 4)) / 100;
+- return (guicolor_T) grgb(level, level, level);
+- }
+- return INVALCOLOR;
+- }
+-
+- /*
+- * Set the current text colours.
+- * If we are using fonts then set the antialiasing colours too.
+- */
+- void
+- gui_mch_set_colors(guicolor_T fg, guicolor_T bg)
+- {
+- zap_redraw_colours[0] = bg << 8; /* JK230798, register new background colour */
+- zap_redraw_colours[1] = fg << 8; /* JK230798, register new foreground colour */
+- zap_redraw_update_colours = TRUE; /* JK230798, need update of colour masks */
+-
+- swi(ColourTrans_ReturnGCOL, fg << 8);
+- gui.fg_colour = r0;
+- swi(ColourTrans_ReturnGCOL, bg << 8);
+- gui.bg_colour = r0;
+-
+- if (ro_current_font)
+- swi(ColourTrans_SetFontColours, 0, bg << 8, fg << 8, 14);
+- }
+-
+- void
+- ro_draw_string(x, y, s, len, flags, clip)
+- int x; /* Top-left coord to plot at (x incl, y excl) */
+- int y; /* (screen coords) */
+- char_u *s; /* String to plot */
+- int len; /* Length of string */
+- int flags; /* DRAW_TRANSP, DRAW_BOLD, DRAW_UNDERL */
+- int* clip; /* JK230798, added clip window */
+- {
+- if (ro_current_font)
+- {
+- int fx;
+- int flen = len; /* Preserve for underline */
+-
+- /* Use the Font manager to paint the string.
+- * Must do one char at a time to get monospacing.
+- */
+-
+- if (flags & DRAW_ITALIC && !gui.ital_font)
+- flags |= DRAW_UNDERL; /* No italic - underline instead */
+-
+- if ((flags & DRAW_TRANSP) == 0)
+- {
+- swi(ColourTrans_SetColour, gui.bg_colour, 0, 0, 0, 0);
+- swi(OS_Plot, 4, x, y - gui.char_height);
+- swi(OS_Plot, 96 + 5, x + len * gui.char_width - 1, y - 1);
+- }
+-
+- fx = x + font_x_offset;
+- while (flen--)
+- {
+- swi(Font_Paint, 0, s++, 0x90, fx, y + font_y_offset, 0, 0, 1);
+- fx += gui.char_width;
+- }
+- }
+- else
+- {
+- if (zap_redraw)
+- {
+- /* Using fast Zap redraw. */
+- flags = ro_zap_redraw_draw_string(x, y, s, len, flags, clip);
+- }
+- else
+- {
+- /* Using the system font */
+- if (flags & DRAW_ITALIC)
+- flags |= DRAW_UNDERL;
+-
+- if ((flags & DRAW_TRANSP) == 0)
+- {
+- swi(ColourTrans_SetColour, gui.bg_colour, 0, 0, 0, 0);
+- swi(OS_Plot, 4, x, y - gui.char_height);
+- swi(OS_Plot, 96 + 5, x + len * gui.char_width - 1, y - 1);
+- }
+- swi(OS_Plot, 4, /* Move the drawing cursor */
+- x,
+- y - 1);
+- swi(ColourTrans_SetColour, gui.fg_colour, 0, 0, 0, 0);
+- swi(OS_WriteN, s, len);
+-
+- if (flags & DRAW_BOLD)
+- {
+- swi(OS_Plot, 4, x + (1 << x_eigen_factor), y - 1);
+- swi(OS_WriteN, s, len);
+- }
+- }
+- }
+-
+- if (flags & DRAW_UNDERL)
+- {
+- if (ro_current_font || zap_redraw)
+- swi(ColourTrans_SetColour, gui.fg_colour, 0, 0, 0, 0);
+- /* Underlined is the same with all plotting methods */
+- swi(OS_Plot, 4, x, y - gui.char_height);
+- swi(OS_Plot, 1, gui.char_width * len, 0);
+- }
+- }
+-
+- void
+- gui_mch_draw_string(int row, int col, char_u *s, int len, int flags)
+- {
+- int x, y; /* Workarea x,y */
+- x = col * gui.char_width;
+- y = -row * gui.char_height;
+-
+- if (redraw_block)
+- {
+- ro_draw_string(x + redraw_block[1], y + redraw_block[4],
+- s, len, flags, &redraw_block[7]); /* JK230798, added clip window */
+- }
+- else
+- {
+- int block[44];
+- block[0] = gui.window_handle;
+- block[1] = x;
+- block[2] = y - gui.char_height;
+- block[3] = (col + len) * gui.char_width;
+- block[4] = y;
+- swi(Wimp_UpdateWindow, 0, block);
+- while (r0)
+- {
+- ro_draw_string(x + block[1], y + block[4],
+- s, len, flags, &block[7]); /* JK230798, added clip window */
+- swi(Wimp_GetRectangle, 0, block);
+- }
+- }
+- }
+-
+- /*
+- * Return OK if the key with the termcap name "name" is supported.
+- */
+- int
+- gui_mch_haskey(char_u *name)
+- {
+- return FAIL;
+- }
+-
+- void
+- gui_mch_beep(void)
+- {
+- swi(OS_WriteI + 7);
+- }
+-
+- /*
+- * Visual bell.
+- */
+- void
+- gui_mch_flash(int msec)
+- {
+- /* TODO */
+- }
+-
+-
+- /*
+- * Plot a solid rectangle using the given plot action and colour.
+- * Coordinates are inclusive and window-relative.
+- */
+- void
+- plot_rectangle(plot, colour, minx, miny, maxx, maxy)
+- int plot; /* OS_Plot action */
+- int colour;
+- int minx;
+- int miny;
+- int maxx;
+- int maxy;
+- {
+- if (redraw_block)
+- {
+- swi(ColourTrans_SetColour, colour, 0, 0, 0, 0);
+- swi(OS_Plot, 4, minx + redraw_block[1], miny + redraw_block[4]);
+- swi(OS_Plot, plot, maxx + redraw_block[1], maxy + redraw_block[4]);
+- }
+- else
+- {
+- int block[44];
+- block[0] = gui.window_handle;
+- block[1] = minx;
+- block[2] = miny;
+- block[3] = maxx + 1;
+- block[4] = maxy + 1;
+- swi(Wimp_UpdateWindow, 0, block);
+- while (r0)
+- {
+- swi(ColourTrans_SetColour, colour, 0, 0, 0, 0);
+- swi(OS_Plot, 4, minx + block[1], miny + block[4]);
+- swi(OS_Plot, plot, maxx + block[1], maxy + block[4]);
+- swi(Wimp_GetRectangle, 0, block);
+- }
+- }
+- }
+-
+- /*
+- * Invert a rectangle from row r, column c, for nr rows and nc columns.
+- */
+- void
+- gui_mch_invert_rectangle(int r, int c, int nr, int nc)
+- {
+- plot_rectangle(96 + 6, 0, FILL_X(c), -FILL_Y(r + nr), FILL_X(c + nc), -FILL_Y(r));
+- }
+-
+- /*
+- * Iconify the GUI window.
+- */
+- void
+- gui_mch_iconify(void)
+- {
+- }
+-
+- #if defined(FEAT_EVAL) || defined(PROTO)
+- /*
+- * Bring the Vim window to the foreground.
+- */
+- void
+- gui_mch_set_foreground()
+- {
+- /* TODO */
+- }
+- #endif
+-
+- /* Draw a hollow rectangle relative to the current
+- * graphics cursor position, with the given width
+- * and height. Start position is top-left.
+- */
+- void
+- draw_hollow(w, h)
+- int w;
+- int h;
+- {
+- swi(OS_Plot, 1, w - 1, 0);
+- swi(OS_Plot, 1, 0, 1 - h);
+- swi(OS_Plot, 1, 1 - w, 0);
+- swi(OS_Plot, 1, 0, h - 1);
+- }
+-
+- /*
+- * Draw a cursor without focus.
+- */
+- void
+- gui_mch_draw_hollow_cursor(guicolor_T colour)
+- {
+- int x = FILL_X(gui.cursor_col); /* Window relative, top-left */
+- int y = -FILL_Y(gui.cursor_row);
+- if (redraw_block == NULL)
+- {
+- int block[11];
+-
+- block[0] = gui.window_handle;
+- block[1] = x;
+- block[2] = y - gui.char_height;
+- block[3] = x + gui.char_width;
+- block[4] = y;
+- swi(Wimp_UpdateWindow, 0, block);
+- while (r0)
+- {
+- swi(ColourTrans_SetGCOL, colour << 8, 0, 0, 0, 0);
+-
+- swi(OS_Plot, 4, x + block[1], y + block[4] - 1);
+- draw_hollow(gui.char_width, gui.char_height);
+-
+- swi(Wimp_GetRectangle, 0, block);
+- }
+- }
+- else
+- {
+- swi(ColourTrans_SetGCOL, colour << 8, 0, 0, 0, 0);
+-
+- swi(OS_Plot, 4, x + redraw_block[1], y + redraw_block[4] - 1);
+- draw_hollow(gui.char_width, gui.char_height);
+- }
+- }
+-
+- /*
+- * Draw part of a cursor, "w" pixels wide, and "h" pixels high, using
+- * color "color".
+- */
+- void
+- gui_mch_draw_part_cursor(w, h, colour)
+- int w;
+- int h;
+- guicolor_T colour;
+- {
+- int x = FILL_X(gui.cursor_col);
+- int y = -FILL_Y(gui.cursor_row);
+- swi(ColourTrans_ReturnGCOL, colour << 8);
+- plot_rectangle(96 + 5, r0, x, y - h, x + w - 1, y - 1);
+- }
+-
+- /*
+- * Catch up with any queued events. This may put keyboard input into the
+- * input buffer, call resize call-backs, trigger timers etc.
+- * If there is nothing in the event queue(& no timers pending), then we return
+- * immediately (well, after a Wimp_Poll).
+- */
+- void
+- gui_mch_update(void)
+- {
+- int block[64];
+- int reason;
+-
+- swi(OS_ReadMonotonicTime);
+- if ((r0 - time_of_last_poll) < 50)
+- return; /* Don't return too often */
+-
+- reason = wimp_poll(0, block);
+- if (reason)
+- process_event(reason, block);
+- ro_return_early = FALSE; /* We're returning anyway. */
+- }
+-
+- void
+- redraw_window(block)
+- int *block;
+- {
+- int x, y; /* Vim workarea coords */
+- int width, height;
+- int blank_col;
+-
+- swi(ColourTrans_ReturnGCOL, UNUSED_COLOUR << 8, 0, 0, 1<<7, 0);
+- blank_col = r0;
+-
+- swi(Wimp_RedrawWindow, 0, block);
+- redraw_block = block;
+- while (r0)
+- {
+- x = block[7] - block[1];
+- y = block[4] - block[10];
+- width = block[9] - block[7];
+- height = block[10] - block[8];
+-
+- if (height + y > Rows * gui.char_height)
+- {
+- /* Blank everything off the bottom. */
+- plot_rectangle(96 + 5, blank_col,
+- 0, block[8] - block[4],
+- block[9] - block[1], -FILL_Y(Rows) - 1);
+- height = Rows * gui.char_height;
+- }
+- if (width + x> Columns * gui.char_width)
+- {
+- /* Blank everything off to the right. */
+- plot_rectangle(96 + 5, blank_col,
+- FILL_X(Columns), block[8] - block[4],
+- block[9] - block[1], 0);
+- width = Columns * gui.char_width;
+- }
+- gui_redraw(x , y, width, height);
+- swi(Wimp_GetRectangle, 0, block);
+- }
+- redraw_block = NULL;
+- }
+-
+- /* Check if we have modified data.
+- * If we do then ack the message to stop the shutdown.
+- * Otherwise, ignore the message.
+- */
+- void
+- ro_prequit(block)
+- int *block;
+- {
+- if (!ro_ok_to_quit())
+- {
+- /* Not OK to quit - stop shutdown */
+- block[3] = block[2];
+- swi(Wimp_SendMessage, 19, block, block[1]);
+- }
+- /* Do nothing. We may get a Message_Quit later. */
+- }
+-
+- /* If there is unsaved data then ask the user if they mind losing it.
+- * Return TRUE if we can quit without saving, FALSE to halt the
+- * shutdown.
+- */
+- int
+- ro_ok_to_quit()
+- {
+- int old_confirm = cmdmod.confirm;
+-
+- cmdmod.confirm = FALSE; /* Use our own, single tasking, box */
+-
+- if (check_changed_any(FALSE))
+- {
+- swi(Wimp_ReportError,
+- "\0\0\0\0Vim contains unsaved data - quit anyway?",
+- 0x17,
+- "Vim");
+- cmdmod.confirm = old_confirm;
+- if (r1 != 1)
+- return FALSE;
+- }
+- cmdmod.confirm = old_confirm;
+- return TRUE;
+- }
+-
+- /* Quit without checking for unsaved data. */
+- void
+- ro_quit()
+- {
+- exiting = TRUE;
+- getout(0);
+-
+- exiting = FALSE; /* probably can't get here */
+- setcursor(); /* position cursor */
+- out_flush();
+- }
+-
+- /* Insent the given vim special code into the input buffer */
+- void
+- ro_press(a, b, modifier)
+- char a;
+- char b;
+- int modifier; /* %<Ctrl><Shift> 0000 0000 */
+- {
+- char_u buf[6];
+- int vim_mod;
+- int key;
+-
+-
+- /* Convert RISC OS modifier to Vim modifier. */
+- vim_mod = ((modifier & 0x10) ? MOD_MASK_SHIFT : 0)
+- | ((modifier & 0x20) ? MOD_MASK_CTRL : 0);
+- key = simplify_key(TERMCAP2KEY(a, b), &vim_mod);
+-
+- buf[3] = CSI;
+- buf[4] = KEY2TERMCAP0(key);
+- buf[5] = KEY2TERMCAP1(key);
+- if (vim_mod)
+- {
+- buf[0] = CSI;
+- buf[1] = KS_MODIFIER;
+- buf[2] = vim_mod;
+- add_to_input_buf(buf, 6);
+- }
+- else
+- add_to_input_buf(buf + 3, 3);
+- }
+-
+- /* Take a wimp key code and insert the vim equivalent
+- * into vim's input buffer.
+- * CTRL-C also sets got_int.
+- */
+- void
+- ro_insert_key(code)
+- char_u *code; /* Wimp_ProcessKey code (4 bytes) */
+- {
+- char a = code[0];
+- char b = code[1];
+- int base, modifier;
+-
+- if (a == 3 && ctrl_c_interrupts)
+- got_int = TRUE;
+-
+- /* Is it a normal key? */
+- if (a > 31 && a < 127)
+- {
+- add_to_input_buf(code, 1);
+- return;
+- }
+-
+- /* We should pass any unrecognised keys on, but
+- * for now just pass on F12 combinations.
+- */
+- switch (b)
+- {
+- case 0:
+- /* Home and Delete are the only special cases */
+- switch (a)
+- {
+- case 0x1e:
+- ro_press('k','h', 0); /* Home */
+- return;
+- case 0x7f:
+- ro_press('k','D', 0); /* Delete */
+- return;
+- case CSI:
+- {
+- /* Turn CSI into K_CSI. Untested! */
+- char_u string[3] = {CSI, KS_EXTRA, KE_CSI};
+-
+- add_to_input_buf(string, 3);
+- return;
+- }
+- default:
+- add_to_input_buf(code, 1);
+- return;
+- }
+- case 1:
+- if ((a & 0xcf) == 0xcc)
+- {
+- /* F12 pressed - pass it on (quick hack) */
+- swi(Wimp_ProcessKey, a | 0x100);
+- return;
+- }
+- base = a & 0xcf;
+- modifier = a & 0x30;
+- switch (base)
+- {
+- case 0x8a: /* Tab */
+- add_to_input_buf("\011", 1);
+- return;
+- case 0x8b: /* Copy (End) */
+- return ro_press('@', '7', modifier);
+- case 0x8c: /* Left */
+- return ro_press('k', 'l', modifier);
+- case 0x8d: /* Right */
+- return ro_press('k', 'r', modifier);
+- case 0x8e: /* Down */
+- if (modifier & 0x10)
+- return ro_press('k', 'N', modifier ^ 0x10);
+- else
+- return ro_press('k', 'd', modifier);
+- case 0x8f: /* Up */
+- if (modifier & 0x10)
+- return ro_press('k', 'P', modifier ^ 0x10);
+- else
+- return ro_press('k', 'u', modifier);
+- case 0xca: /* F10 */
+- return ro_press('k', ';', modifier);
+- case 0xcb: /* F11 */
+- return ro_press('F', '1', modifier);
+- case 0xcd: /* Insert */
+- return ro_press('k', 'I', modifier);
+- default:
+- if (base > 0x80 && base < 0x18a)
+- {
+- /* One of the other function keys */
+- return ro_press('k', '0' + (base & 15), modifier);
+- }
+- }
+- }
+- }
+-
+- /* Process a mouse event. */
+- void
+- ro_mouse(block)
+- int *block;
+- {
+- int x, y, button, vim_button;
+- int modifiers = 0;
+- int min_x, min_y; /* Visible area of editor window */
+- int max_x, max_y;
+-
+- if (block[3] != gui.window_handle || ro_dragging)
+- return; /* Not our window or ignoring clicks*/
+-
+- x = block[0]; /* Click position - screen coords */
+- y = block[1];
+- button = block[2];
+-
+- block[0] = gui.window_handle;
+- swi(Wimp_GetWindowState, 0, block);
+- min_x = block[1];
+- min_y = block[2];
+- max_x = block[3];
+- max_y = block[4];
+-
+- if (block[3] - x < gui.scrollbar_width)
+- {
+- /* Click in that blank area under the scrollbars */
+-
+- if (button & 0x444)
+- {
+- int front_block[64];
+- /* Dragging with Select - bring window to front first */
+- front_block[0] = gui.window_handle;
+- swi(Wimp_GetWindowState, 0, front_block);
+- front_block[7] = -1;
+- ro_open_main(front_block);
+- }
+-
+- block[0] = gui.window_handle;
+- block[1] = 7; /* Drag point */
+- block[2] = block[4] = 0; /* Coords of point. */
+- block[3] = block[5] = 0;
+- drag_x_offset = max_x - x;
+- drag_y_offset = min_y - y;
+-
+- /* Parent box. */
+- block[6] = min_x +
+- gui.scrollbar_width * 2 +
+- MIN_COLUMNS * gui.char_width;
+- block[7] = 0;
+- gui_mch_get_screen_dimensions(&block[8], &block[9]);
+- block[9] = max_y -
+- 4 * gui.char_height -
+- gui.scrollbar_height;
+-
+- swi(Wimp_DragBox, 0, block);
+- ro_dragging = DRAG_RESIZE_WINDOW;
+- drag_button = vim_button;
+- drag_modifiers = modifiers;
+- return;
+- }
+-
+- if (button & 0x111)
+- vim_button = MOUSE_RIGHT;
+- else if (button & 0x222)
+- vim_button = MOUSE_MIDDLE;
+- else
+- vim_button = MOUSE_LEFT;
+-
+- swi(OS_Byte, 121, 0x80);
+- if (r1 == 0xff)
+- modifiers |= MOUSE_SHIFT;
+- swi(OS_Byte, 121, 0x81);
+- if (r1 == 0xff)
+- modifiers |= MOUSE_CTRL;
+- swi(OS_Byte, 121, 0x82);
+- if (r1 == 0xff)
+- modifiers |= MOUSE_ALT;
+-
+- if (button == 2)
+- {
+- /* Menu click:
+- * If shift was pressed then do the paste action.
+- * If not, then open the pop-up menu.
+- */
+- modifiers ^= MOUSE_SHIFT;
+- if (modifiers && MOUSE_SHIFT)
+- {
+- vimmenu_T main;
+- /* Shift was NOT pressed - show menu */
+- main.dname = (char_u *) "Vim";
+- main.children = root_menu;
+- gui_mch_show_popupmenu(&main);
+- return;
+- }
+- }
+-
+- /* Gain the input focus */
+- swi(Wimp_SetCaretPosition, gui.window_handle, -1, 0, 0, -1, -1);
+-
+- if (button & 0xf0)
+- {
+- /* Drag operation:
+- *
+- * Tell the Wimp to start a drag.
+- * Monitor null events.
+- */
+- block[1] = 7; /* Drag a point. */
+- block[2] = block[4] = x; /* Coords of point. */
+- block[3] = block[5] = y;
+- block[6] = 0; /* Coords of bounding box. */
+- block[7] = 0;
+- gui_mch_get_screen_dimensions(&block[8], &block[9]);
+-
+- drag_x_offset = drag_y_offset = 0;
+-
+- swi(Wimp_DragBox, 0, block);
+- ro_dragging = DRAG_SELECTION;
+- drag_button = vim_button;
+- drag_modifiers = modifiers;
+-
+- vim_button |= MOUSE_DRAG;
+- }
+-
+- gui_send_mouse_event(
+- vim_button,
+- x - min_x,
+- max_y - y,
+- button & 0xf ? TRUE : FALSE, /* dclick */
+- modifiers);
+- }
+-
+- void
+- ro_continue_drag(block)
+- int *block; /* Just used as scrap. */
+- {
+- int x, y;
+-
+- /* Get screen coords of pointer. */
+- swi(Wimp_GetPointerInfo, 0, block);
+- x = block[0] + drag_x_offset;
+- y = block[1] + drag_y_offset;
+-
+- block[0] = gui.window_handle;
+- swi(Wimp_GetWindowState, 0, block);
+-
+- if (ro_dragging == DRAG_RESIZE_WINDOW)
+- {
+- /* Resizing the main window. */
+- block[2] = y;
+- block[3] = x;
+- ro_open_main(block);
+- }
+- else
+- {
+- /* Selecting some text. */
+- gui_send_mouse_event(
+- drag_button | MOUSE_DRAG, /* Always report the same button */
+- x - block[1],
+- block[4] - y,
+- FALSE, /* Not a double click. */
+- drag_modifiers);
+- }
+- }
+-
+- /* User has released all mouse buttons, marking the end of a drag. */
+- void
+- ro_drag_finished(block)
+- int *block;
+- {
+- int x;
+- int y;
+- int width, height;
+-
+- /* I don't trust the box returned by Wimp_Poll; look at the pointer
+- * ourselves.
+- */
+- swi(Wimp_GetPointerInfo, 0, block);
+- x = block[0] + drag_x_offset;
+- y = block[1] + drag_y_offset;
+-
+- if (ro_dragging == DRAG_RESIZE_WINDOW)
+- {
+- block[0] = gui.window_handle;
+- swi(Wimp_GetWindowState, 0, block);
+- block[2] = y;
+- block[3] = x;
+- ro_open_main(block);
+-
+- width = (block[3] - block[1]);
+- height = (block[4] - block[2]);
+-
+- swi(Wimp_ForceRedraw, gui.window_handle, 0, -height, width, 0);
+- gui_resize_shell(width, height);
+- }
+- else
+- {
+- block[0] = gui.window_handle;
+- swi(Wimp_GetWindowState, 0, block);
+- gui_send_mouse_event(
+- MOUSE_RELEASE,
+- x - block[1],
+- block[4] - y,
+- FALSE, /* not a double click */
+- drag_modifiers);
+- }
+- ro_dragging = DRAG_FALSE;
+- }
+-
+- /* Load the file/pathname given in block into a [new] buffer.
+- *
+- * Modifier Action
+- *
+- * None :confirm e <file>
+- * Ctrl :sp <file>
+- * Shift <file>
+- *
+- * Insert into typebuf, at the start.
+- * If loading from !Scrap then use saved leafname instead, and
+- * delete the scrap file. Also, ignore shift key.
+- *
+- * NB: Doesn't send DataLoadAck (other app might delete temp file?).
+- */
+- void
+- ro_dataload(block)
+- int *block;
+- {
+- char_u new_path[MAXPATHL];
+- char_u *path = ((char_u *) block) + 44;
+- int scrap = FALSE;
+-
+- if (block[3] == leaf_ref && leaf_name)
+- scrap = TRUE;
+-
+- switch (get_real_state() & 0xff)
+- {
+- case INSERT:
+- case CMDLINE:
+- case CMDLINE+LANGMAP:
+- /* For insert mode we can only insert the pathname (currently)
+- * Make sure Shift is pressed.
+- */
+- swi(OS_Byte, 121, 0x80); /* Is Shift pressed? */
+- if (r1 == 0xff)
+- {
+- ins_typebuf(" ", REMAP_NONE, 0, TRUE, FALSE);
+- ins_typebuf(path, REMAP_NONE, 0, TRUE, FALSE);
+- ro_return_early = TRUE; /* Return even though nothing was typed. */
+- }
+- else
+- swi(Wimp_ReportError,
+- "\0\0\0\0Sorry, you can only load text in normal mode", 5, "Vim");
+- break;
+-
+- case NORMAL:
+- ro_return_early = TRUE; /* Return even though nothing was typed. */
+-
+- if (scrap) /* Remove <Wimp$Scrap>. Later. */
+- ins_typebuf(":!~remove <Wimp$Scrap>\r", REMAP_NONE, 0, TRUE, FALSE);
+-
+- /* Insert {:sp ,:confirm e }[+f\ <leaf> ]<file><CR> */
+- ins_typebuf("\r", REMAP_NONE, 0, TRUE, FALSE);
+- ins_typebuf(path, REMAP_NONE, 0, TRUE, FALSE);
+- ins_typebuf(" ", REMAP_NONE, 0, TRUE, FALSE);
+-
+- if (scrap)
+- {
+- /* Loading via !Scrap - change pathname to stored leafname */
+- ins_typebuf(leaf_name, REMAP_NONE, 0, TRUE, FALSE);
+- ins_typebuf(" +f\\ ", REMAP_NONE, 0, TRUE, FALSE);
+- leaf_ref = 0;
+- vim_free(leaf_name);
+- leaf_name = NULL;
+- }
+-
+- swi(OS_Byte, 121, 0x81); /* Is Ctrl pressed? */
+- if (r1 == 0xff)
+- /* Yes, split window */
+- ins_typebuf(":sp", REMAP_NONE, 0, TRUE, FALSE);
+- else
+- ins_typebuf(":confirm e", REMAP_NONE, 0, TRUE, FALSE);
+- break;
+-
+- default:
+- swi(Wimp_ReportError, "\0\0\0\0You can only load text in normal mode.", 5, "Vim");
+- }
+- /* Send DataSaveAck so other program doesn't think we died
+- * and delete <Wimp$Scrap>.
+- */
+- block[3] = block[2];
+- block[4] = 4;
+- swi(Wimp_SendMessage, 17, block, block[1]);
+- }
+-
+- void
+- ro_datasave(block)
+- int *block;
+- {
+- char_u *path = ((char_u *) block) + 44;
+-
+- /* Preserve the name given so we can use it, not <Wimp$Scrap> */
+- if (leaf_name)
+- vim_free(leaf_name);
+- leaf_name = vim_strsave(path);
+-
+- block[9] = -1; /* File is unsafe. */
+- strcpy(path, "<Wimp$Scrap>");
+- block[0] = 60;
+- block[3] = block[2];
+- block[4] = 2;
+- swi(Wimp_SendMessage, 17, block, block[1]);
+-
+- leaf_ref = block[2];
+- }
+-
+- void
+- ro_message(block)
+- int *block;
+- {
+- char_u *buffer;
+- long_u len;
+-
+- if (block[1] == task_handle)
+- return; /* Don't talk to ourself! */
+- switch (block[4])
+- {
+- case 0: /* Quit. */
+- if (block[4] == 0)
+- ro_quit();
+- break;
+- case 1: /* DataSave */
+- ro_datasave(block);
+- break;
+- case 2: /* DataSaveAck. */
+- if (clip_convert_selection(&buffer, &len, &clip_star) == -1)
+- return;
+-
+- /* Save the clipboard contents to a file. */
+- swi(OS_File, 10, ((char_u *) block) + 44, 0xfff, 0, buffer, buffer + len);
+-
+- /* Ack with DataLoad message. */
+- block[3] = block[2];
+- block[4] = 3;
+- block[9] = len;
+- swi(Wimp_SendMessage, 17, block, block[1]);
+-
+- vim_free(buffer);
+- break;
+- case 3: /* DataLoad */
+- ro_dataload(block);
+- break;
+- case 8: /* PreQuit */
+- ro_prequit(block);
+- break;
+- case 0xf: /* Lose clipboard. */
+- if (block[5] & 4)
+- {
+- clip_free_selection(&clip_star);
+- clip_star.owned = FALSE;
+- }
+- break;
+- case 0x10: /* DataRequest (clip_star) */
+- if (clip_star.owned)
+- {
+- int rows;
+-
+- /* Tell other program that we have the clipboard. */
+- block[0] = 52;
+- block[3] = block[2]; /* Copy myref to yourref. */
+- block[4] = 1; /* DataSave message. */
+- /* Create an estimate for the size (larger or same as true
+- * value) */
+- rows = clip_star.end.lnum - clip_star.start.lnum;
+- if (rows < 0)
+- rows = -rows;
+- block[9] = (rows + 1) * Columns + 1; /* Add one for possible
+- final newline. */
+- block[10] = 0xfff; /* Clipboard is text. */
+- strcpy( ((char_u *) block) + 44, "VimClip");
+- swi(Wimp_SendMessage, 17, block, block[1]);
+- }
+- break;
+- case 0x400c1: /* Mode change */
+- changed_mode = TRUE; /* Flag - update on next OpenWindow */
+- if (zap_redraw)
+- {
+- /* JK230798, re-initialise ZapRedraw stuff */
+- if (ro_zap_redraw_initialise() == FAIL)
+- zap_redraw = FALSE;
+- }
+- break;
+- case 0x400c3: /* TaskCloseDown */
+- if (block[1] == child_handle)
+- child_handle = 0;
+- break;
+- }
+- }
+-
+- /*
+- * Converts a scrollbar's window handle into a scrollbar pointer.
+- * NULL on failure.
+- */
+- scrollbar_T *
+- ro_find_sbar(id)
+- int id;
+- {
+- win_T *wp;
+-
+- if (gui.bottom_sbar.id == id)
+- return &gui.bottom_sbar;
+- FOR_ALL_WINDOWS(wp)
+- {
+- if (wp->w_scrollbars[SBAR_LEFT].id == id)
+- return &wp->w_scrollbars[SBAR_LEFT];
+- if (wp->w_scrollbars[SBAR_RIGHT].id == id)
+- return &wp->w_scrollbars[SBAR_RIGHT];
+- }
+- return NULL;
+- }
+-
+- void
+- scroll_to(line, sb)
+- int sb; /* Scrollbar number */
+- int line;
+- {
+- char_u code[8];
+-
+- /* Don't put events in the input queue now. */
+- if (hold_gui_events)
+- return;
+-
+- /* Send a scroll event:
+- *
+- * A scrollbar event is CSI (NOT K_SPECIAL), KS_VER_SCROLLBAR,
+- * KE_FILLER followed by:
+- * one byte representing the scrollbar number, and then four bytes
+- * representing a long_u which is the new value of the scrollbar.
+- */
+- code[0] = CSI;
+- code[1] = KS_VER_SCROLLBAR;
+- code[2] = KE_FILLER;
+- code[3] = sb;
+- code[4] = line >> 24;
+- code[5] = line >> 16;
+- code[6] = line >> 8;
+- code[7] = line;
+- add_to_input_buf(code, 8);
+- }
+-
+- void
+- h_scroll_to(col)
+- int col;
+- {
+- char_u code[8];
+-
+- /* Don't put events in the input queue now. */
+- if (hold_gui_events)
+- return;
+-
+- /* Send a scroll event:
+- *
+- * A scrollbar event is CSI (NOT K_SPECIAL)
+- *
+- * A horizontal scrollbar event is K_SPECIAL, KS_HOR_SCROLLBAR,
+- * KE_FILLER followed by four bytes representing a long_u which is the
+- * new value of the scrollbar.
+- */
+- code[0] = CSI;
+- code[1] = KS_HOR_SCROLLBAR;
+- code[2] = KE_FILLER;
+- code[4] = col >> 24;
+- code[5] = col >> 16;
+- code[6] = col >> 8;
+- code[7] = col;
+- add_to_input_buf(code, 8);
+- }
+-
+- void
+- ro_scroll(block)
+- int *block;
+- {
+- scrollbar_T *sb;
+- int offset;
+- win_T *wp;
+-
+- /* Block is ready for Wimp_OpenWindow, and also contains:
+- *
+- * +32 = scroll X direction (-2 .. +2)
+- * +36 = scroll Y direction (-2 .. +2)
+- */
+-
+- sb = ro_find_sbar(block[0]);
+- if (!sb)
+- return; /* Window not found (error). */
+-
+- wp = sb-> wp;
+-
+- if (wp == NULL)
+- {
+- /* Horizontal bar. */
+- offset = block[8];
+- if (offset == -2)
+- offset = (block[1] - block[3]) / gui.char_width;
+- else if (offset == 2)
+- offset = (block[3] - block[1]) / gui.char_width;
+-
+- block[5] += offset * gui.char_width;
+-
+- gui_drag_scrollbar(sb, block[5] / gui.char_width, FALSE);
+-
+- swi(Wimp_OpenWindow, 0, block);
+- }
+- else
+- {
+- offset = -block[9];
+- if (offset == -2)
+- offset = -(wp -> w_height - 1);
+- else if (offset == 2)
+- offset = wp -> w_height - 1;
+-
+- /* Possibly we should reposition the scrollbar?
+- * Vim seems to update the bar anyway...
+- */
+- gui_drag_scrollbar(sb, offset - (block[6] / gui.char_height), FALSE);
+- }
+- }
+-
+- /* Move a window by a given offset. Used to simulate the function of the
+- * nested wimp.
+- */
+- void
+- ro_move_child(window, x, y, pos_wanted, pos_got)
+- int window;
+- int x,y; /* offset to move by */
+- int pos_wanted, pos_got;
+- {
+- int block[10];
+-
+- block[0] = window;
+- swi(Wimp_GetWindowState, 0, block);
+- block[1] += x;
+- block[2] += y;
+- block[3] += x;
+- block[4] += y;
+- if (pos_wanted == -1)
+- block[7] = -1;
+- else if (pos_wanted == -2)
+- block[7] = pos_got;
+- swi(Wimp_OpenWindow, 0, block);
+- }
+-
+- /* Open the main window. Also updates scrollbars if we are not
+- * using the nested Wimp.
+- * If we have just changed mode then re-read all values.
+- */
+- void
+- ro_open_main(block)
+- int *block;
+- {
+- int toggle_size;
+-
+- /* Find out if the user clicked on the toggle size icon. */
+- block[20] = block[0];
+- swi(Wimp_GetWindowState, 0, block + 20);
+- toggle_size = block[28] & (1 << 19);
+-
+- if (nested_wimp)
+- {
+- swi(Wimp_OpenWindow, 0, block);
+- }
+- else
+- {
+- int old[10];
+- int x_offset, y_offset; /* Move children same as parent. */
+- int pos_wanted, pos_got;
+- int left_bar = gui.which_scrollbars[SBAR_LEFT];
+- int right_bar = gui.which_scrollbars[SBAR_RIGHT];
+- win_T *wp;
+-
+- /* Three cases to think about:
+- * 1) Move to top. Open each window at the top.
+- * 2) Same stack position. Open each with same position.
+- * 3) Open at bottom. Open children with parent's new position.
+- */
+-
+- old[0] = block[0];
+- swi(Wimp_GetWindowState, 0, old);
+- pos_wanted = block[7];
+- swi(Wimp_OpenWindow, 0, block);
+- /* Block updated by OpenWindow? I don't think so! */
+- swi(Wimp_GetWindowState, 0, block);
+- pos_got = block[7];
+-
+- x_offset = block[1] - old[1];
+- y_offset = block[4] - old[4];
+- if (x_offset || y_offset || pos_wanted == -1 || pos_wanted == -2)
+- {
+- /* If parent has moved, re-open all the child windows. */
+- FOR_ALL_WINDOWS(wp)
+- {
+- /* Reopen scrollbars for this window. */
+- if (left_bar)
+- ro_move_child(wp -> w_scrollbars[SBAR_LEFT].id,
+- x_offset, y_offset,
+- pos_wanted, pos_got);
+- if (right_bar)
+- ro_move_child(wp -> w_scrollbars[SBAR_RIGHT].id,
+- x_offset, y_offset,
+- pos_wanted, pos_got);
+- }
+- }
+- }
+- if (changed_mode || toggle_size)
+- {
+- int width, height;
+-
+- if (changed_mode)
+- ro_measure_tools();
+- block[0] = gui.window_handle;
+- swi(Wimp_GetWindowState, 0, block);
+-
+- width = block[3] - block[1];
+- height = block[4] - block[2];
+- swi(Wimp_ForceRedraw, gui.window_handle, 0, -height, width, 0);
+- gui_resize_shell(width, height);
+- changed_mode = FALSE;
+- }
+- }
+-
+- void
+- ro_open_window(block)
+- int *block;
+- {
+- int pos;
+- scrollbar_T *sb;
+-
+- if (block[0] == gui.window_handle)
+- ro_open_main(block);
+- else
+- {
+- swi(Wimp_OpenWindow, 0, block);
+- if (block[0] != gui.window_handle)
+- {
+- sb = ro_find_sbar(block[0]);
+- if (sb)
+- {
+- if (sb-> wp != NULL)
+- gui_drag_scrollbar(sb, -block[6] / gui.char_height, FALSE);
+- else
+- gui_drag_scrollbar(sb, block[5] / gui.char_width, FALSE);
+- }
+- }
+- }
+- }
+-
+- void
+- ro_menu_selection(block)
+- int *block;
+- {
+- int *item = wimp_menu + 7;
+- vimmenu_T *menu;
+- /* wimp_menu points to a wimp menu structure */
+-
+- for (;;)
+- {
+- while (block[0]--)
+- item += 6;
+- if (block[1] == -1)
+- break;
+- item = ((int *) item[1]) + 7;
+- block++;
+- }
+- /* item points to the wimp menu item structure chosen */
+- menu = (vimmenu_T *) item[5];
+-
+- swi(Wimp_GetPointerInfo, 0, block);
+- if (block[2] == 1)
+- /* Adjust used - keep menu open */
+- swi(Wimp_CreateMenu, 0, wimp_menu);
+-
+- if (menu-> cb)
+- menu-> cb(menu);
+- }
+-
+- void
+- ro_open_parent()
+- {
+- int head;
+- char_u *i = curbuf-> b_ffname;
+- char_u buffer[256];
+-
+- head = 0;
+- for (; *i; i++)
+- {
+- if (*i == '.')
+- head = i - curbuf-> b_ffname;
+- }
+-
+- /* Append head chars to buffer */
+- if (head < 240 && curbuf-> b_ffname && head)
+- {
+- strcpy(buffer, "%filer_opendir ");
+- strncpy(buffer + 15, curbuf-> b_ffname, head);
+- buffer[15 + head] = '\0';
+- swi(OS_CLI, buffer);
+- }
+- }
+-
+- void
+- process_event(event, block)
+- int event;
+- int *block;
+- {
+- switch (event)
+- {
+- case 0: /* Nothing - update drag state. */
+- if (ro_dragging)
+- ro_continue_drag(block);
+- break;
+- case 1: /* Redraw window. */
+- redraw_window(block);
+- break;
+- case 2: /* Open window. */
+- ro_open_window(block);
+- break;
+- case 3: /* Close window. */
+- swi(Wimp_GetPointerInfo, 0, block + 1);
+- if (block[3] == 1)
+- ro_open_parent();
+- else
+- if (ro_ok_to_quit())
+- ro_quit();
+- break;
+- case 6: /* Mouse click. */
+- ro_mouse(block);
+- break;
+- case 7: /* Finished drag. */
+- ro_drag_finished(block);
+- break;
+- case 8: /* Key pressed. */
+- ro_insert_key((char_u *) &block[6]);
+- break;
+- case 9:
+- ro_menu_selection(block);
+- break;
+- case 10: /* Scroll request. */
+- ro_scroll(block);
+- break;
+- case 11: /* Lose caret. */
+- if (block[0] == gui.window_handle)
+- gui_focus_change(FALSE);
+- break;
+- case 12: /* Gain caret. */
+- if (block[0] == gui.window_handle)
+- gui_focus_change(TRUE);
+- break;
+- case 17: /* User message. */
+- case 18: /* User message recorded. */
+- ro_message(block);
+- break;
+- }
+- }
+-
+- /*
+- * GUI input routine called by gui_wait_for_chars(). Waits for a character
+- * from the keyboard.
+- * wtime == -1 Wait forever.
+- * wtime == 0 This should never happen.
+- * wtime > 0 Wait wtime milliseconds for a character.
+- * Returns OK if a character was found to be available within the given time,
+- * or FAIL otherwise.
+- */
+- int
+- gui_mch_wait_for_chars(long wtime)
+- {
+- int block[64];
+- int reason;
+- int start_time = -1;
+- int ctime = wtime / 10; /* delay in cs */
+-
+- if (wtime != -1)
+- {
+- swi(OS_ReadMonotonicTime);
+- start_time = r0;
+- }
+-
+- for (;;)
+- {
+- if (ro_dragging)
+- reason = wimp_poll(0, block); /* Always return immediately */
+- else if (wtime == -1)
+- reason = wimp_poll(1, block);
+- else
+- reason = wimp_pollidle(0, block, start_time + ctime);
+-
+- process_event(reason, block);
+-
+- if (input_available() || ro_return_early)
+- {
+- ro_return_early = FALSE;
+- return OK; /* There is something to process (key / menu event) */
+- }
+-
+- if (wtime != -1)
+- {
+- swi(OS_ReadMonotonicTime);
+- if (r0 - start_time > ctime)
+- return FAIL; /* We've been waiting too long - return failure */
+- }
+- }
+- }
+-
+- /* Flush any output to the screen */
+- void
+- gui_mch_flush(void)
+- {
+- }
+-
+- /*
+- * Clear a rectangular region of the screen from text pos(row1, col1) to
+- * (row2, col2) inclusive.
+- */
+- void
+- gui_mch_clear_block(int row1, int col1, int row2, int col2)
+- {
+- swi(ColourTrans_ReturnGCOL, gui.back_pixel << 8, 0, 0, 1<<7, 0);
+- plot_rectangle(96 + 5, r0,
+- FILL_X(col1), -FILL_Y(row2 + 1),
+- FILL_X(col2 + 1), -FILL_Y(row1));
+- }
+-
+- void
+- gui_mch_clear_all(void)
+- {
+- if (redraw_block)
+- {
+- swi(ColourTrans_SetGCOL, gui.back_pixel << 8, 0, 0, 1<<7, 0);
+- swi(OS_WriteI + 16);
+- }
+- else
+- {
+- int block[44];
+- block[0] = gui.window_handle;
+- block[1] = 0;
+- block[2] = -gui.num_rows * gui.char_height;
+- block[3] = gui.num_cols * gui.char_width;
+- block[4] = 0;
+- swi(Wimp_UpdateWindow, 0, block);
+- while (r0)
+- {
+- swi(ColourTrans_SetGCOL, gui.back_pixel << 8, 0, 0, 1<<7, 0);
+- swi(OS_WriteI + 16);
+- swi(Wimp_GetRectangle, 0, block);
+- }
+- }
+- }
+-
+- /*
+- * Delete the given number of lines from the given row, scrolling up any
+- * text further down within the scroll region.
+- */
+- void
+- gui_mch_delete_lines(int row, int num_lines)
+- {
+- int top_from = -row - num_lines;
+- int bot_from = -gui.scroll_region_bot - 1;
+- int bot_to = bot_from + num_lines;
+-
+- swi(ColourTrans_SetGCOL, gui.back_pixel << 8, 0, 0, 0x80, 0);
+-
+- /* Changed without checking! */
+- swi(Wimp_BlockCopy, gui.window_handle,
+- gui.scroll_region_left * gui.char_width,
+- bot_from * gui.char_height,
+- (gui.scroll_region_right - gui.scroll_region_left
+- + 1) * gui.char_width,
+- top_from * gui.char_height,
+-
+- gui.scroll_region_left * gui.char_width,
+- bot_to * gui.char_height);
+-
+- gui_clear_block(gui.scroll_region_bot - num_lines + 1,
+- gui.scroll_region_left,
+- gui.scroll_region_bot, gui.scroll_region_right);
+- }
+-
+- /*
+- * Insert the given number of lines before the given row, scrolling down any
+- * following text within the scroll region.
+- */
+- void
+- gui_mch_insert_lines(int row, int num_lines)
+- {
+- int top_from = -row;
+- int bot_to = -gui.scroll_region_bot - 1;
+- int bot_from = bot_to + num_lines;
+-
+- swi(ColourTrans_SetGCOL, gui.back_pixel << 8, 0, 0, 0x80, 0);
+-
+- swi(Wimp_BlockCopy, gui.window_handle,
+- gui.scroll_region_left * gui.char_width,
+- bot_from * gui.char_height,
+- (gui.scroll_region_right - gui.scroll_region_left
+- + 1) * gui.char_width,
+- top_from * gui.char_height,
+-
+- gui.scroll_region_left * gui.char_width,
+- bot_to * gui.char_height);
+-
+- gui_clear_block(row, gui.scroll_region_left,
+- row + num_lines - 1, gui.scroll_region_right);
+- }
+-
+- /* Put selection in clipboard buffer.
+- * Should we become the new owner?
+- */
+- void
+- clip_mch_request_selection(VimClipboard *cbd)
+- {
+- int block[64]; /* Will be used in Wimp_Poll. */
+- int reason;
+- char_u *buffer;
+- long_u length;
+-
+- block[0] = 48; /* Size of block. */
+- block[3] = 0; /* Original message. */
+- block[4] = 0x10; /* Data request. */
+- block[5] = gui.window_handle;
+- block[6] = RO_LOAD_CLIPBOARD; /* Internal handle. */
+- block[7] = block[8] = 0; /* (x,y) not used. */
+- block[9] = 4;
+- block[10] = 0xfff; /* We want text files if possible, I think. */
+- block[11] = -1; /* End of list. */
+- swi(Wimp_SendMessage, 17, block, 0); /* Broadcast request. */
+-
+- /* OK, we've sent the request. Poll until we get a null poll (failure) or
+- * we load the clipboard.
+- * If we receive a DataSave event with icon handle = -2 then put it on the
+- * clipboard. RISC OS should ensure that key events will not be delivered
+- * until the clipboard operation completes (unless the owner starts idling
+- * - we can't wait forever!).
+- */
+- for (;;)
+- {
+- reason = wimp_poll(0, block);
+- if (reason == 0)
+- return; /* Failed to get clipboard. */
+- if ((reason == 17 || reason == 18) &&
+- block[4] == 1 && block[6] == RO_LOAD_CLIPBOARD)
+- break; /* Got it - stop waiting. */
+- process_event(reason, block);
+- if (ro_return_early)
+- return;
+- }
+- /* Tell owner to save data in <Wimp$Scrap>. */
+- block[0] = 60;
+- block[3] = block[2]; /* Copy myref -> yourref */
+- block[4] = 2; /* DataSaveAck. */
+- block[9] = -1; /* Data is unsafe. */
+- strcpy( ((char_u *) block) + 44, "<Wimp$Scrap>");
+- swi(Wimp_SendMessage, 17, block, block[1]);
+-
+- /* Wait again for reply. */
+- for (;;)
+- {
+- reason = wimp_poll(0, block);
+- if (reason == 0)
+- return; /* Other program has given up! */
+- if ((reason == 17 || reason == 18) && block[4] == 3 && block[6] == RO_LOAD_CLIPBOARD)
+- break; /* Clipboard data saved to <Wimp$Scrap> */
+- process_event(reason, block);
+- if (ro_return_early)
+- return;
+- }
+-
+- /* <Wimp$Scrap> contains clipboard - load it. */
+- if (xswi(OS_File, 17, "<Wimp$Scrap>") & v_flag)
+- return; /* Error! */
+- if (r0 != 1 && r0 != 3)
+- return;
+- length = r4;
+-
+- buffer = lalloc(length, TRUE); /* Claim memory (and report errors). */
+- if (buffer == NULL)
+- return;
+-
+- if (xswi(OS_File, 16, "<Wimp$Scrap>", buffer, 0) & v_flag)
+- return;
+-
+- clip_yank_selection(MCHAR, buffer, length, cbd);
+-
+- vim_free(buffer);
+-
+- swi(OS_FSControl, 27, "<Wimp$Scrap>", 0, 0); /* Delete temp file. */
+-
+- block[4] = 4; /* Send DataLoadAck. */
+- block[3] = block[2]; /* Copy myref -> yourref. */
+- swi(Wimp_SendMessage, 17, block, block[1]);
+- }
+-
+- /* Not sure what this means under RISC OS. */
+- void
+- clip_mch_lose_selection(VimClipboard *cbd)
+- {
+- }
+-
+- /* Tell everyone that we now own the clipboard.
+- * Return OK if our claim is accepted (always, under RISC OS)
+- */
+- int
+- clip_mch_own_selection(VimClipboard *cbd)
+- {
+- int block[6];
+- block[0] = 24; /* Length of block. */
+- block[3] = 0; /* Original message. */
+- block[4] = 0xf; /* ClaimEntity. */
+- block[5] = 0x4; /* Claim clipboard only. */
+- swi(Wimp_SendMessage, 17, block, 0);
+- return OK;
+- }
+-
+- /*
+- * Send the current selection to the clipboard. Do nothing for X because we
+- * will fill in the selection only when requested by another app. Sounds good
+- * for RISC OS too.
+- */
+- void
+- clip_mch_set_selection(VimClipboard *cbd)
+- {
+- clip_get_selection(cbd);
+- }
+-
+- /*
+- * Make a menu either grey or not grey.
+- */
+- void
+- gui_mch_menu_grey(vimmenu_T *menu, int grey)
+- {
+- menu-> greyed_out = grey;
+- }
+-
+- /*
+- * Make menu item hidden or not hidden
+- */
+- void
+- gui_mch_menu_hidden(vimmenu_T *menu, int hidden)
+- {
+- menu-> hidden = hidden;
+- }
+-
+- /*
+- * This is called after setting all the menus to grey/hidden or not.
+- */
+- void
+- gui_mch_draw_menubar(void)
+- {
+- swi(Wimp_CreateMenu, 0, -1);
+- if (wimp_menu != (int *) -1)
+- {
+- ro_remove_menu(wimp_menu);
+- wimp_menu = (int *) -1;
+- }
+- }
+-
+- /* Add or remove a scrollbar. Note that this is only called when
+- * the scrollbar state is changing.
+- * The scroll bar window has already been created.
+- * We can't do anything except remove the scroll bar
+- * until we know what size to use.
+- */
+- void
+- gui_mch_enable_scrollbar(sb, flag)
+- scrollbar_T *sb;
+- int flag;
+- {
+- if (!flag)
+- swi(Wimp_CloseWindow, 0, & (sb->id) );
+- return;
+- }
+-
+- void
+- gui_mch_set_blinking(long waittime, long on, long off)
+- {
+- }
+-
+- /*
+- * Stop the cursor blinking. Show the cursor if it wasn't shown.
+- */
+- void
+- gui_mch_stop_blink(void)
+- {
+- }
+-
+- /*
+- * Start the cursor blinking. If it was already blinking, this restarts the
+- * waiting time and shows the cursor.
+- */
+- void
+- gui_mch_start_blink(void)
+- {
+- }
+-
+- /*
+- * Return the RGB value of a pixel as a long.
+- */
+- long_u
+- gui_mch_get_rgb(guicolor_T pixel)
+- {
+- return (long_u)pixel;
+- }
+-
+- void
+- gui_mch_set_text_area_pos(int x, int y, int w, int h)
+- {
+- }
+-
+- void
+- gui_mch_enable_menu(int flag)
+- {
+- }
+-
+- void
+- gui_mch_set_menu_pos(int x, int y, int w, int h)
+- {
+- }
+-
+- void
+- gui_mch_add_menu(vimmenu_T *menu, int idx)
+- {
+- }
+-
+- void
+- gui_mch_add_menu_item(vimmenu_T *menu, int idx)
+- {
+- }
+-
+- void
+- gui_mch_new_menu_colors(void)
+- {
+- }
+-
+- void
+- gui_mch_destroy_menu(vimmenu_T *menu)
+- {
+- }
+-
+- /* Size of buffer has changed.
+- * Add one to max since gui.c subtracts one more than it should!
+- */
+- void
+- gui_mch_set_scrollbar_thumb(sb, val, size, max)
+- scrollbar_T *sb;
+- long val;
+- long size;
+- long max;
+- {
+- int block[10], width, height;
+-
+- width = (max + 1) * gui.char_width;
+- height = (max + 1 + W_STATUS_HEIGHT(sb->wp)) * gui.char_height;
+-
+- block[0] = block[3] = 0;
+- block[1] = -height + (1 << y_eigen_factor);
+- block[2] = width;
+-
+- swi(Wimp_SetExtent, sb -> id, block);
+-
+- block[0] = sb -> id;
+- swi(Wimp_GetWindowState, 0, block);
+- block[5] = val * gui.char_width;
+- block[6] = -val * gui.char_height;
+- swi(Wimp_OpenWindow, 0, block, 0x4b534154,
+- gui.window_handle, /* Parent window handle. */
+- (CHILD_FIX_TO_RIGHT << CHILD_LEFT ) |
+- (CHILD_FIX_TO_RIGHT << CHILD_RIGHT ) |
+- (CHILD_FIX_TO_BOTTOM << CHILD_TOP ) |
+- (CHILD_FIX_TO_BOTTOM << CHILD_BOTTOM) |
+- (CHILD_SELF_SCROLL << CHILD_SCROLL_X) |
+- (CHILD_SELF_SCROLL << CHILD_SCROLL_Y)
+- );
+- }
+-
+- /* Set the position of the scrollbar within the editor
+- * window. Note that, for vertical scrollbars, x and w
+- * are ignored. For horizontal bars y and h are ignored.
+- */
+- void
+- gui_mch_set_scrollbar_pos(sb, x, y, w, h)
+- scrollbar_T *sb;
+- int x; /* Horizontal sb position */
+- int y; /* Top of scroll bar */
+- int w; /* Width */
+- int h; /* Height */
+- {
+- int block[24];
+- int px1, py1; /* Parent window min coords */
+- int px2, py2; /* Parent window max coords */
+-
+- /* Find where the parent window is. */
+- block[0] = gui.window_handle;
+- swi(Wimp_GetWindowState, 0, block);
+- px1 = block[1];
+- py1 = block[2];
+- px2 = block[3];
+- py2 = block[4];
+-
+- block[0] = sb -> id;
+-
+- /* Find out how big the scroll window is at the moment. */
+- swi(Wimp_GetWindowInfo, 0, ((char_u *)block) + 1);
+-
+- if (block[13] < w || block[12] > -h)
+- {
+- /* Current window is too small! */
+- if (block[12] > -h)
+- block[12] = -h;
+- if (block[13] < w)
+- block[13] = w;
+- swi(Wimp_SetExtent, block[0], block + 11);
+- }
+-
+- /* This works better on the nested_wimp. */
+- if (sb-> wp)
+- {
+- /* This is a vertical scrollbar. */
+- block[1] = block[3] = px2 - gui.scrollbar_width + (1 << x_eigen_factor);
+- block[2] = 1 + py2 - (y + h) + (1 << y_eigen_factor);
+- block[4] = 1 + py2 - y;
+- }
+- else
+- {
+- /* This is a horizontal scrollbar. */
+- block[2] = block[4] = py1 + gui.scrollbar_height;
+- block[1] = px1;
+- block[3] = px2 - gui.scrollbar_width;
+- }
+-
+- block[5] = 0;
+- block[6] = 0;
+- block[7] = -1;
+-
+- swi(Wimp_OpenWindow, 0, block, 0x4b534154,
+- gui.window_handle, /* Parent window handle. */
+- (CHILD_FIX_TO_RIGHT << CHILD_LEFT ) |
+- (CHILD_FIX_TO_RIGHT << CHILD_RIGHT ) |
+- (CHILD_FIX_TO_BOTTOM << CHILD_TOP ) |
+- (CHILD_FIX_TO_BOTTOM << CHILD_BOTTOM) |
+- (CHILD_SELF_SCROLL << CHILD_SCROLL_X) |
+- (CHILD_SELF_SCROLL << CHILD_SCROLL_Y)
+- );
+- }
+-
+- /* Create a window with no workarea to place inside editor window.
+- * (what happens without the nested wimp?)
+- * Data for scrollbar is invalid.
+- */
+- void
+- gui_mch_create_scrollbar(sb, orient)
+- scrollbar_T *sb;
+- int orient; /* orient is SBAR_HORIZ or SBAR_VERT */
+- {
+- int bar[] =
+- {
+- 0, 0, /* Visible area : min X,Y */
+- 100, 100, /* max X,Y */
+- 0, 0, /* Scroll offsets */
+- -1, /* Window in front */
+- 0x80800150 | (orient == SBAR_HORIZ ? (1 << 30) : (1 << 28)),
+- 0xff070207, /* Colours */
+- 0x000c0103, /* More colours */
+- 0, -0x4000, /* Workarea extent */
+- 0x4000, 0, /* max X,Y */
+- 0x00000000, /* No title */
+- 0 << 12, /* No workarea button type */
+- 1, /* Wimp sprite area */
+- 0x00010001, /* Minimum width, height */
+- 0, 0, 0, /* Title data (none) */
+- 0 /* No icons */
+- };
+- swi(Wimp_CreateWindow, 0, bar);
+- sb -> id = r0;
+- }
+-
+- #if defined(FEAT_WINDOWS) || defined(PROTO)
+- void
+- gui_mch_destroy_scrollbar(scrollbar_T *sb)
+- {
+- swi(Wimp_DeleteWindow, 0, & (sb->id));
+- sb -> id = -1;
+- }
+- #endif
+-
+- void
+- gui_mch_set_scrollbar_colors(scrollbar_T *sb)
+- {
+- /* Always use default RO colour scheme. */
+- }
+-
+- /*
+- * Get current mouse coordinates in text window.
+- * Note: (0,0) is the bottom left corner, positive y is UP.
+- */
+- void
+- gui_mch_getmouse(x, y)
+- int *x;
+- int *y;
+- {
+- int left;
+- int top;
+- int block[10];
+-
+- block[0] = gui.window_handle;
+- swi(Wimp_GetWindowState, 0, block);
+- left = block[1];
+- top = block[4];
+-
+- swi(Wimp_GetPointerInfo, 0, block);
+- *x = block[0] - left;
+- *y = top - block[1];
+- }
+-
+- /* MouseTo(x, y) */
+- void
+- gui_mch_setmouse(x, y)
+- int x;
+- int y;
+- {
+- }
+-
+- void
+- gui_mch_toggle_tearoffs(enable)
+- int enable;
+- {
+- /* no tearoff menus */
+- }
+-
+- /* Redraw a window's title.
+- * For the nested wimp we use the new 'redraw-title-bar' reason code.
+- * For older wimps we mark the area of the screen where the title bar
+- * is as invalid.
+- */
+- void
+- ro_redraw_title(window)
+- int window;
+- {
+- if (nested_wimp)
+- {
+- swi(Wimp_ForceRedraw, window, 0x4b534154, 3);
+- }
+- else
+- {
+- int block[10];
+- int miny;
+-
+- block[0] = window;
+- swi(Wimp_GetWindowState, 0, block);
+- miny = block[4];
+- swi(Wimp_GetWindowOutline, 0, block);
+- swi(Wimp_ForceRedraw, -1,
+- block[1], miny,
+- block[3], block[4]);
+- }
+- }
+-
+- /* Turn a vimmenu_T structure into a wimp menu structure.
+- * -1 if resulting menu is empty.
+- * Only the children and dname items in the root menu are used.
+- */
+- int *
+- ro_build_menu(menu)
+- vimmenu_T *menu;
+- {
+- int *wimp_menu;
+- int width = 4;
+- int w;
+- int size = 28;
+- vimmenu_T *item;
+- int *wimp_item;
+-
+- /* Find out how big the menu is so we can allocate memory for it */
+- for (item = menu-> children; item; item = item-> next)
+- {
+- if (item-> hidden == FALSE && !menu_is_separator(item->name))
+- size += 24;
+- }
+-
+- if (size <= 28)
+- return (int *) -1; /* No children - shouldn't happen */
+-
+- wimp_menu = (int *) alloc(size);
+-
+- wimp_menu[0] = (int) menu-> dname;
+- wimp_menu[1] = -1;
+- wimp_menu[2] = 0;
+- wimp_menu[3] = 0x00070207;
+- wimp_menu[5] = 44;
+- wimp_menu[6] = 0;
+-
+- wimp_item = wimp_menu + 7;
+-
+- for (item = menu-> children; item; item = item-> next)
+- {
+- if (menu_is_separator(item-> name))
+- {
+- /* This menu entry is actually a separator. If it is not the first
+- * menu entry then mark the previous menu item as needing a dotted
+- * line after it.
+- */
+- if (wimp_item > wimp_menu + 7)
+- wimp_item[-6] |= 0x2;
+- }
+- else if (item-> hidden == FALSE)
+- {
+- wimp_item[0] = 0;
+- wimp_item[1] = item-> children ? (int) ro_build_menu(item) : -1;
+- wimp_item[2] = 0x07009131 | (item-> greyed_out << 22);
+- wimp_item[3] = (int) item-> dname;
+- wimp_item[4] = -1;
+- wimp_item[5] = (int) item; /* Stuff the menu address in this unused space */
+-
+- w = strlen(item-> dname) + 1;
+- if (w > width)
+- width = w;
+- wimp_item += 6;
+- }
+- }
+-
+- wimp_menu[4] = (width + 2) * 16;
+- wimp_menu[7] |= 0x100; /* Menu title is indirected */
+- wimp_item[-6] |= 0x080; /* Last entry in menu */
+- return wimp_menu;
+- }
+-
+- static void
+- ro_remove_menu(menu)
+- int *menu;
+- {
+- int *item = menu + 7;
+-
+- if (menu == NULL || menu == (int *) -1)
+- return;
+-
+- for (;;)
+- {
+- if (item[1] != -1)
+- ro_remove_menu((int *) item[1]); /* Remove sub-menu */
+- if (item[0] & 0x80)
+- break; /* This was the last entry */
+- item += 6;
+- }
+- vim_free(menu);
+- }
+-
+- void
+- gui_mch_show_popupmenu(menu)
+- vimmenu_T *menu;
+- {
+- int block[10];
+-
+- /* Remove the existing menu, if any */
+- if (wimp_menu != (int *) -1)
+- {
+- swi(Wimp_CreateMenu, 0, -1);
+- ro_remove_menu(wimp_menu);
+- wimp_menu = (int *) -1;
+- }
+-
+- wimp_menu = ro_build_menu(menu);
+- if (wimp_menu != (int *) -1)
+- {
+- swi(Wimp_GetPointerInfo, 0, block);
+- swi(Wimp_CreateMenu, 0, wimp_menu, block[0] - 64, block[1] + 64);
+- }
+- }
+-
+- /* Run a command using the TaskWindow module.
+- * If SHELL_FILTER is set then output is not echoed to the screen,
+- * If it is not set, then \r is not sent to the output file.
+- */
+- int
+- gui_mch_call_shell(cmd, options)
+- char_u *cmd;
+- int options; /* SHELL_FILTER if called by do_filter() */
+- /* SHELL_COOKED if term needs cooked mode */
+- {
+- char_u task_cmd[256]; /* Contains *TaskWindow command. */
+- int block[64];
+- int reason;
+- char_u *out;
+- char_u c;
+- int old_msg_col;
+- char_u *out_redir;
+- int length;
+- FILE *out_file = NULL;
+-
+- out_redir = strstr(cmd, " > ");
+- if (out_redir == NULL)
+- length = strlen(cmd); /* No redirection. */
+- else
+- {
+- length = out_redir - cmd;
+- out_file = fopen(out_redir + 3, "wb");
+- if (out_file == NULL)
+- smsg("WARNING : Can't open file %s for writing\n", out_redir + 3);
+- }
+-
+- if (length > 180)
+- {
+- if (out_file)
+- fclose(out_file);
+- return FAIL; /* Command too long. */
+- }
+-
+- strcpy(task_cmd, "TaskWindow \"");
+- strncpy(task_cmd + 12, cmd, length);
+- sprintf(task_cmd + 12 + length,
+- "\" -task &%08x -ctrl -quit -name \"Vim command\"",
+- task_handle);
+-
+- if (options & SHELL_COOKED)
+- settmode(TMODE_COOK);
+-
+- if (xswi(Wimp_StartTask, task_cmd) & v_flag)
+- {
+- /* Failed to even start a new task (out of memory?) */
+- settmode(TMODE_RAW);
+- if (out_file)
+- fclose(out_file);
+- return FAIL;
+- }
+-
+- /* Wait for the child process to initialise. */
+- child_handle = 0;
+- while (!child_handle)
+- {
+- reason = wimp_poll(0, block);
+- if ((reason == 17 || reason == 18) && block[4] == 0x808c2)
+- child_handle = block[1];
+- else
+- process_event(reason, block);
+- }
+-
+- /* Block until finished */
+- while (child_handle)
+- {
+- reason = wimp_poll(1, block);
+- if (reason == 3 || (reason == 8 && block[6] == 3))
+- {
+- /* Close window request or CTRL-C - kill child task. */
+- block[0] = 20;
+- block[3] = 0;
+- block[4] = 0x808c4; /* Morite */
+- swi(Wimp_SendMessage, 17, block, child_handle);
+- MSG_PUTS(_("\nSending message to terminate child process.\n"));
+- continue;
+- }
+- else if (reason == 8)
+- {
+- block[0] = 28;
+- block[3] = 0;
+- block[4] = 0x808c0; /* Input */
+- block[5] = 1;
+- /* Block[6] is OK as it is! */
+- swi(Wimp_SendMessage, 17, block, child_handle);
+- continue;
+- }
+- else if (reason == 17 || reason == 18)
+- {
+- if (block[4] == 0x808c1)
+- {
+- /* Ack message. */
+- block[3] = block[2];
+- swi(Wimp_SendMessage, 19, block, block[1]);
+- out = (char_u *)block + 24;
+- old_msg_col = msg_col;
+- while (block[5]--)
+- {
+- c = *out++;
+- if (out_file && (c != '\r' || (options & SHELL_FILTER)))
+- fputc(c, out_file);
+- if ((options & SHELL_FILTER) == 0)
+- {
+- if (c == 127)
+- msg_puts("\b \b");
+- else if (c > 31)
+- msg_putchar(c);
+- else if (c == 10)
+- {
+- lines_left = 8; /* Don't do More prompt! */
+- msg_putchar(10);
+- }
+- }
+- }
+- /* Flush output to the screen. */
+- windgoto(msg_row, msg_col);
+- out_flush();
+- continue;
+- }
+- }
+- process_event(reason, block);
+- }
+- msg_putchar('\n');
+- settmode(TMODE_RAW);
+- if (out_file)
+- fclose(out_file);
+- return OK;
+- }
+-
+- /* Like strsave(), but stops at any control char */
+- char_u *
+- wimp_strsave(str)
+- char *str;
+- {
+- int strlen = 0;
+- char_u *retval;
+- while (str[strlen] > 31)
+- strlen++;
+- retval = alloc(strlen + 1);
+- if (retval)
+- {
+- memcpy(retval, str, strlen);
+- retval[strlen] = '\0';
+- }
+- return retval;
+- }
+-
+- /* If we are saving then pop up a standard RISC OS save box.
+- * Otherwise, open a directory viewer on the given directory (and return NULL)
+- * The string we return will be freed later.
+- */
+- char_u *
+- gui_mch_browse(saving, title, dflt, ext, initdir, filter)
+- int saving; /* write action */
+- char_u *title; /* title for the window */
+- char_u *dflt; /* default file name */
+- char_u *ext; /* extension added */
+- char_u *initdir; /* initial directory, NULL for current dir */
+- char_u *filter; /* file name filter */
+- {
+- char command[256];
+- int length;
+-
+- if (saving)
+- {
+- int block[64];
+- int reason;
+- int done_save = FALSE;
+- char_u *retval = NULL;
+- char_u *sprname;
+- char_u *fname;
+- int dragging_icon = FALSE;
+- int filetype;
+-
+- if (!dflt)
+- dflt = "TextFile";
+-
+- block[0] = save_window;
+- block[1] = 0;
+- swi(Wimp_GetIconState, 0, block);
+- sprname = ((char_u *) block[7]);
+- block[1] = 1;
+- swi(Wimp_GetIconState, 0, block);
+- fname = ((char *) block[7]);
+- strncpy(fname, dflt, 255);
+-
+- if (xswi(OS_FSControl, 31, curbuf->b_p_oft) & v_flag)
+- {
+- filetype = 0xfff;
+- strcpy(sprname + 5, "xxx");
+- }
+- else
+- {
+- filetype = r2;
+- sprintf(sprname + 5, "%03x", filetype);
+- }
+-
+- /* Open the save box */
+-
+- swi(Wimp_GetPointerInfo, 0, block);
+- swi(Wimp_CreateMenu, 0, save_window, block[0] - 64, block[1] + 64);
+- swi(Wimp_SetCaretPosition, save_window, 1, 0, 0, -1, -1);
+-
+- while (!done_save)
+- {
+- reason = wimp_poll(1, block);
+- switch (reason)
+- {
+- case 1:
+- redraw_window(block);
+- break;
+- case 2:
+- if (block[0] == save_window)
+- swi(Wimp_OpenWindow, 0, block);
+- else
+- ro_open_window(block);
+- break;
+- case 3:
+- done_save = TRUE;
+- break;
+- case 6:
+- if (block[3] != save_window)
+- done_save = TRUE;
+- else
+- {
+- int drag_box[4];
+- int min_x, max_y;
+-
+- switch (block[4])
+- {
+- case 0: /* Start drag */
+- block[0] = save_window;
+- swi(Wimp_GetWindowState, 0, block);
+- min_x = block[1];
+- max_y = block[4];
+- block[1] = 0;
+- swi(Wimp_GetIconState, 0, block);
+- drag_box[0] = block[2] + min_x;
+- drag_box[1] = block[3] + max_y;
+- drag_box[2] = block[4] + min_x;
+- drag_box[3] = block[5] + max_y;
+-
+- swi(DragASprite_Start,
+- 0x45,
+- 1,
+- sprname,
+- drag_box);
+- dragging_icon = TRUE;
+- break;
+- case 2: /* OK */
+- retval = wimp_strsave(fname);
+- done_save = TRUE;
+- break;
+- case 3: /* Cancel */
+- done_save = TRUE;
+- break;
+- }
+- }
+- break;
+- case 7:
+- if (dragging_icon)
+- {
+- int len = 0;
+-
+- dragging_icon = FALSE;
+- swi(Wimp_GetPointerInfo, 0, block);
+- block[5] = block[3];
+- block[6] = block[4];
+- block[7] = block[0];
+- block[8] = block[1];
+- block[9] = 0; /* Don't know the size */
+- block[10] = filetype;
+-
+- while (fname[len] > 31)
+- {
+- if (fname[len] == '.')
+- {
+- fname += len + 1;
+- len = 0;
+- }
+- else
+- len++;
+- }
+- if (len > 211)
+- len = 211;
+-
+- memcpy(((char_u *) block) + 44, fname, len);
+- ((char_u *)block)[44 + len] = '\0';
+-
+- block[0] = (len + 48) & 0xfc;
+- block[3] = 0;
+- block[4] = 1; /* DataSave */
+-
+- swi(Wimp_SendMessage, 17, block, block[5], block[6]);
+- }
+- else
+- ro_drag_finished(block);
+- break;
+- case 8:
+- if (block[6] == 13)
+- {
+- retval = wimp_strsave(fname);
+- done_save = TRUE;
+- }
+- else if (block[6] == 0x1b)
+- done_save = TRUE;
+- else
+- swi(Wimp_ProcessKey, block[6]);
+- break;
+- case 17:
+- case 18:
+- if (block[4] == 2 && block[9] != -1)
+- {
+- /* DataSaveAck from dragging icon. */
+- retval = wimp_strsave(((char_u *) block) + 44);
+- done_save = TRUE;
+- }
+- else if (block[4] == 0x400c9)
+- {
+- /* MenusDeleted */
+- done_save = TRUE;
+- }
+- else
+- ro_message(block);
+- break;
+- }
+- }
+- block[0] = save_window;
+- swi(Wimp_CloseWindow, 0, block);
+- swi(Wimp_GetCaretPosition, 0, block);
+- if (block[0] == -1)
+- swi(Wimp_SetCaretPosition, gui.window_handle, -1, 0, 0, -1, -1);
+-
+- return retval;
+- }
+- else if (initdir)
+- {
+- /* Open a directory viewer */
+- length = strlen(initdir);
+-
+- if (length > 240)
+- return NULL; /* Path too long! */
+-
+- length = sprintf(command, "Filer_OpenDir %s", initdir);
+- while (command[length - 1] == '.')
+- length--;
+- command[length] = '\0';
+- swi(OS_CLI, command);
+- }
+- return NULL;
+- }
+--- 0 ----
+*** ../vim-7.3.186/src/os_riscos.c 2010-08-15 21:57:27.000000000 +0200
+--- src/os_riscos.c 1970-01-01 01:00:00.000000000 +0100
+***************
+*** 1,1292 ****
+- /* vi:set ts=8 sts=4 sw=4:
+- *
+- * VIM - Vi IMproved by Bram Moolenaar
+- *
+- * Do ":help uganda" in Vim to read copying and usage conditions.
+- * Do ":help credits" in Vim to see a list of people who contributed.
+- * See README.txt for an overview of the Vim source code.
+- */
+-
+- #include "vim.h"
+-
+- /*
+- * os_riscos.c
+- *
+- * Thomas Leonard <tal197@ecs.soton.ac.uk>
+- */
+-
+- const char *__dynamic_da_name = "Vim heap"; /* Enable and name our dynamic area */
+- int ro_line_mode = TRUE; /* For Ex mode we much echo chars to the screen ourselves */
+- int windowed; /* Flag - are we running inside a text window? */
+- int WinLeft, WinTop; /* We might be started inside a text window */
+- int ScrollTop; /* Make cursor movements relative to ScrollTop. */
+-
+- int old_escape_state = -1;
+- int old_cursor_state = -1;
+-
+- #define rgb(r,g,b) ((b<<24) + (g<<16) + (r<<8))
+- #define NORMAL_FG 0x00000000
+- #define NORMAL_BG 0xffffffff
+-
+- /* Convert a DOS colour number to an RGB palette entry.
+- * Mappings from X11 rgb/txt file.
+- */
+- static int
+- map_colour(dos)
+- int dos; /* Standard DOS colour number. */
+- {
+- switch (dos)
+- {
+- case 0: return 0; /* Black */
+- case 1: return rgb(0,0,139); /* DarkBlue */
+- case 2: return rgb(0,100,0); /* DarkGreen */
+- case 3: return rgb(0,139,139); /* DarkCyan */
+- case 4: return rgb(139,0,0); /* DarkRed */
+- case 5: return rgb(139,0,139); /* DarkMagenta */
+- case 6: return rgb(165,42,42); /* Brown, DarkYellow */
+- case 7: return rgb(211,211,211); /* LightGray, LightGrey, Gray, Grey */
+- case 8: return rgb(169,169,169); /* DarkGray, DarkGrey */
+- case 9: return rgb(173,216,230); /* Blue, LightBlue */
+- case 10: return rgb(144,238,144); /* Green, LightGreen */
+- case 11: return rgb(224,255,255); /* Cyan, LightCyan */
+- case 12: return rgb(255,0,0); /* Red, LightRed */
+- case 13: return rgb(255,0,255); /* Magenta, LightMagenta */
+- case 14: return rgb(255,255,0); /* Yellow, LightYellow */
+- case 15: return rgb(255,255,255); /* White */
+- }
+- return rgb(100,100,100);
+- }
+-
+- static void
+- text_fg(fg)
+- int fg; /* Foregound colour in the form &BBGGRR00 */
+- {
+- xswi(ColourTrans_SetTextColour, fg, 0, 0, 0);
+- }
+-
+- static void
+- text_bg(bg)
+- int bg; /* Backgound colour in the form &BBGGRR00 */
+- {
+- xswi(ColourTrans_SetTextColour, bg, 0, 0, 1 << 7);
+- }
+-
+- #define OUT_NORMAL 0
+- #define OUT_NUMBER 1 /* Reading in a number */
+-
+- void
+- mch_write(s, len)
+- char_u *s;
+- int len;
+- {
+- static int mode = OUT_NORMAL;
+- static int x, y; /* For reading numbers in. */
+-
+- if (!term_console)
+- {
+- /* Maybe we are running Vim remotely - don't interpret chars */
+- while (len--)
+- {
+- char_u c = *s++;
+- swi(OS_WriteC, c);
+- /* We might need to send a CR too. This shouldn't
+- * hurt if we don't need it, should it?
+- */
+- if (c == 10)
+- swi(OS_WriteI + 13);
+- }
+- return;
+- }
+-
+- while (len--)
+- {
+- char_u c = *s++;
+- switch (mode)
+- {
+- case OUT_NUMBER:
+- if (c < '0' || c > '9')
+- {
+- mode = OUT_NORMAL;
+- }
+- else
+- {
+- x = (x * 10) + c - '0';
+- continue;
+- }
+- /* note: no break here! */
+-
+- case OUT_NORMAL:
+- switch (c)
+- {
+- case 1:
+- /* Number (in decimal) follows. */
+- mode = OUT_NUMBER;
+- y = x;
+- x = 0;
+- break;
+- case 2:
+- /* Position cursor. */
+- swi(OS_WriteI + 31);
+- swi(OS_WriteC, x);
+- swi(OS_WriteC, y - ScrollTop);
+- break;
+- case 3:
+- /* Set scroll region. */
+- if (x == Rows -1 && y == 0 && !windowed)
+- {
+- /* Whole screen - remove text window.
+- * This is MUCH faster.
+- */
+- swi(OS_WriteI + 26);
+- }
+- else
+- {
+- /* Create a text window. */
+- swi(OS_WriteI + 28);
+- swi(OS_WriteC, WinLeft);
+- swi(OS_WriteC, WinTop + x);
+- swi(OS_WriteC, WinLeft + Columns - 1);
+- swi(OS_WriteC, WinTop + y);
+- }
+- ScrollTop = y;
+- break;
+- case 4:
+- /* Normal mode. */
+- text_fg(NORMAL_FG);
+- text_bg(NORMAL_BG);
+- break;
+- case 5:
+- /* Reverse mode. */
+- text_fg(NORMAL_BG);
+- text_bg(NORMAL_FG);
+- break;
+- case 10:
+- swi(OS_NewLine);
+- break;
+- case 14:
+- /* Cursor invisible. */
+- swi(OS_WriteN,
+- "\027\001\000\000\000\000\000\000\000\000",
+- 10);
+- break;
+- case 15:
+- /* Cursor visible. */
+- swi(OS_WriteN,
+- "\027\001\002\000\000\000\000\000\000\000",
+- 10);
+- break;
+- case 16:
+- /* Cursor very visible (flash) */
+- swi(OS_WriteN,
+- "\027\001\003\000\000\000\000\000\000\000",
+- 10);
+- case 17:
+- /* Set foreground colour. */
+- text_fg(map_colour(x));
+- break;
+- case 18:
+- /* Set background colour. */
+- text_bg(map_colour(x));
+- break;
+- case 19:
+- /* Scroll text down. */
+- swi(OS_WriteN,
+- "\027\007\000\002\000\000\000\000\000\000",
+- 10);
+- break;
+- default:
+- swi(OS_WriteC, c);
+- }
+- continue;
+-
+- default:
+- printf("[output error]");
+- mode = OUT_NORMAL;
+- }
+- }
+- }
+-
+- /*
+- * mch_inchar(): low level input funcion.
+- * Get a characters from the keyboard.
+- * Return the number of characters that are available.
+- * If wtime == 0 do not wait for characters.
+- * If wtime == n wait n msecs for characters.
+- * If wtime == -1 wait forever for characters.
+- *
+- * TODO: call convert_input() for 'fileencoding' to 'encoding' conversion.
+- */
+- int
+- mch_inchar(buf, maxlen, wtime, tb_change_cnt)
+- char_u *buf;
+- int maxlen;
+- long wtime;
+- int tb_change_cnt;
+- {
+- int got=0;
+- unsigned int start_time = clock();
+-
+- if (ro_line_mode)
+- {
+- /* We're probably in Ex mode - get whole lines at a time. */
+-
+- static char_u line_buffer[256];
+- static int remaining_chars = 0;
+- static int buf_pos = 0;
+-
+- /* Do we need to fetch another line? */
+- if (remaining_chars == 0)
+- {
+- int old_esc_state;
+- swi(OS_Byte, 200, 1, 0xfe);
+- old_esc_state = r1;
+-
+- buf_pos = 0;
+- if (xswi(OS_ReadLine, line_buffer, 255, 0, 255) & (c_flag | v_flag))
+- {
+- got_int = TRUE; /* ESC pressed */
+- r1 = 0;
+- }
+- line_buffer[r1] = 13;
+- remaining_chars = r1 + 1; /* Count CR as part of input */
+-
+- swi(OS_Byte, 200, old_esc_state, 0);
+- }
+-
+- /* Can we send the rest of the buffer back in one go? */
+- if (remaining_chars <= maxlen)
+- {
+- int got = remaining_chars;
+-
+- memcpy(buf, line_buffer + buf_pos, got);
+- remaining_chars = 0;
+- return got;
+- }
+-
+- /* Send as much as we can */
+- memcpy(buf, line_buffer + buf_pos, maxlen);
+- buf_pos += maxlen;
+- remaining_chars -= maxlen;
+-
+- return maxlen;
+- }
+-
+- if (!term_console)
+- {
+- /* Use OS_ReadC for all input.
+- * Avoids problems with remote access getting interference from
+- * the keyboard.
+- */
+- if (wtime == 0)
+- return 0; /* Ignore quick key checks */
+-
+- if (xswi(OS_ReadC) & c_flag)
+- {
+- got_int = TRUE; /* ESC pressed - can this happen? */
+- swi(OS_Byte, 124); /* Clear Escape state */
+- r0 = 0x1b; /* It *might* not have been Escape! */
+- }
+- buf[0] = r0;
+- return 1;
+- }
+-
+- /*
+- * OK, here's the plan:
+- *
+- * 1) Wait until wtime expires or we get a key
+- * 2) Get keys until the keyboard buffer is empty or buf is full
+- */
+-
+- while (xswi(OS_Byte,145,0) & c_flag)
+- {
+- /* Nothing at all in the keyboard buffer.
+- * Has our time expired yet?
+- */
+- if ( (wtime != -1) && (clock() - start_time) >= wtime )
+- return 0; /* Nothing read - giving up */
+- }
+-
+- /* We've got one char (in r2) - are there any more? */
+-
+- while (got < maxlen)
+- {
+- buf[got++] = r2;
+-
+- if (xswi(OS_Byte,145,0) & c_flag)
+- return got; /* Keyboard buffer empty */
+- }
+- return got; /* buf is full */
+- }
+-
+- /*
+- * return non-zero if a character is available
+- */
+- int
+- mch_char_avail()
+- {
+- if (!term_console)
+- return 0; /* Can't tell */
+- if (xswi(OS_Byte, 152, 0) & c_flag)
+- return 0;
+- return 1;
+- }
+-
+- /* Find out how much free memory we have.
+- * I don't know how to work this out exactly but, since we can claim
+- * more memory from the OS, let's just report the free pool size.
+- * Dynamic area 6 doesn't exist pre 3.6 according to StrongHelp, so
+- * we'll use Wimp_SlotSize. If that fails (outside the desktop?)
+- * then just return a big number and hope.
+- */
+- long_u
+- mch_avail_mem(special)
+- int special;
+- {
+- if (xswi(Wimp_SlotSize, -1, -1) & v_flag)
+- return 0x7fffffff;
+- return r2;
+- }
+-
+- void
+- mch_delay(msec, ignoreinput)
+- long msec;
+- int ignoreinput;
+- {
+- int start_time, time_now;
+- int csec = msec / 10;
+-
+- swi(OS_ReadMonotonicTime);
+- start_time = r0;
+-
+- for (;;)
+- {
+- swi(OS_ReadMonotonicTime);
+- time_now = r0;
+- if (time_now - start_time > csec)
+- return;
+- #ifdef FEAT_GUI
+- /* In the GUI, allow other programs to run while waiting. */
+- if (gui.in_use)
+- gui_mch_wait_for_chars(start_time + csec);
+- #endif
+- }
+- }
+-
+- /*
+- * If the machine has job control, use it to suspend the program,
+- * otherwise fake it by starting a new shell.
+- */
+- void
+- mch_suspend()
+- {
+- suspend_shell();
+- }
+-
+- void
+- mch_init()
+- {
+- /*
+- * Read window size first. Calls to mch_get_shellsize() will
+- * simply return these values in future so that setting the
+- * text window (used for scrolling) won't give strange results.
+- */
+-
+- int buf[7] = {132, 135, 256, 257, 1, 2, -1};
+-
+- /* Command windows are no longer forced open, since if we are
+- * in the desktop then we'll use the GUI version.
+- * Opening a command window here messes up the GUI version startup
+- */
+- #ifndef FEAT_GUI
+- swi(OS_WriteI);
+- #endif
+- swi(OS_ReadVduVariables, buf, buf);
+- WinLeft = buf[0];
+- WinTop = buf[1];
+- Columns = buf[2];
+- Rows = buf[3] + 1; /* Seems to be one off (VduVars wrong?) */
+- ScrollTop = 0;
+-
+- /* Are we running in a textwindow? */
+- if (Rows == buf[5] + 1 && Columns == buf[4] + 1)
+- windowed = 0;
+- else
+- windowed = 1;
+-
+- /* Choose a nice colour scheme. */
+- text_fg(NORMAL_FG);
+- text_bg(NORMAL_BG);
+- }
+-
+- /*
+- * Check_win checks whether we have an interactive stdout.
+- */
+- /* ARGSUSED */
+- int
+- mch_check_win(argc, argv)
+- int argc;
+- char **argv;
+- {
+- return OK;
+- }
+-
+- /*
+- * Return TRUE if the input comes from a terminal, FALSE otherwise.
+- */
+- int
+- mch_input_isatty()
+- {
+- if (xswi(OS_ChangeRedirection, -1, -1) & v_flag)
+- return TRUE; /* Error - TRUE is probably correct though */
+- if (r0 == 0)
+- return TRUE;
+- return FALSE;
+- }
+-
+- #ifdef FEAT_TITLE
+- int
+- mch_can_restore_title()
+- {
+- return FALSE;
+- }
+-
+- int
+- mch_can_restore_icon()
+- {
+- return FALSE;
+- }
+-
+-
+- /*
+- * Set the window title and icon.
+- */
+- void
+- mch_settitle(title, icon)
+- char_u *title;
+- char_u *icon;
+- {
+- if (title == NULL)
+- title = (char_u *) "<untitled>";
+- #ifdef FEAT_GUI
+- if (gui.in_use && strcmp(title, gui.window_title))
+- {
+- int length;
+- length = strlen(title);
+- if (length >= gui.window_title_size)
+- length = gui.window_title_size - 1;
+- strncpy(gui.window_title, title, length);
+- gui.window_title[length] = 0;
+- ro_redraw_title(gui.window_handle);
+- }
+- #endif
+- return;
+- }
+-
+- /*
+- * Restore the window/icon title.
+- * "which" is one of:
+- * 1 only restore title
+- * 2 only restore icon
+- * 3 restore title and icon
+- */
+- void
+- mch_restore_title(which)
+- int which;
+- {
+- return;
+- }
+- #endif
+-
+- /*
+- * Insert user name in s[len].
+- * Return OK if a name found.
+- */
+- int
+- mch_get_user_name(s, len)
+- char_u *s;
+- int len;
+- {
+- /* RISC OS doesn't support user names. */
+- *s = NUL;
+- return FAIL;
+- }
+-
+- /*
+- * Insert host name in s[len].
+- */
+-
+- void
+- mch_get_host_name(s, len)
+- char_u *s;
+- int len;
+- {
+- if (xswi(OS_ReadVarVal, "Machine$Name", s, len, 0, 3) & v_flag)
+- {
+- /* Variable does not exist (normal operation) */
+- vim_strncpy(s, "(unknown)", len - 1);
+- }
+- }
+-
+- /*
+- * return process ID
+- */
+- long
+- mch_get_pid()
+- {
+- if (xswi(Wimp_ReadSysInfo, 5) & v_flag)
+- return 0;
+- return r0;
+- }
+-
+- /*
+- * Get name of current directory into buffer 'buf' of length 'len' bytes.
+- * Return OK for success, FAIL for failure.
+- */
+- int
+- mch_dirname(buf, len)
+- char_u *buf;
+- int len;
+- {
+- if (xswi(OS_FSControl, 37, "@", buf, 0, 0, len) & v_flag)
+- return FAIL;
+- return OK;
+- }
+-
+- /*
+- * Get absolute file name into buffer 'buf' of length 'len' bytes.
+- *
+- * return FAIL for failure, OK for success
+- */
+- int
+- mch_FullName(fname, buf, len, force)
+- char_u *fname, *buf;
+- int len;
+- int force; /* Also expand when already absolute path name.
+- * Not used under RISC OS.
+- */
+- {
+- if (xswi(OS_FSControl, 37, fname, buf, 0, 0, len) & v_flag)
+- return FAIL;
+- return OK;
+- }
+-
+- /*
+- * Return TRUE if "fname" does not depend on the current directory.
+- */
+- int
+- mch_isFullName(fname)
+- char_u *fname;
+- {
+- if (strstr(fname, "::") && strstr(fname,".$."))
+- return TRUE;
+- return FALSE;
+- }
+-
+- /*
+- * Get file permissions for 'name'.
+- * Returns -1 when it doesn't exist.
+- */
+- long
+- mch_getperm(name)
+- char_u *name;
+- {
+- struct stat statb;
+-
+- if (stat((char *)name, &statb))
+- return -1;
+- return statb.st_mode;
+- }
+-
+- /*
+- * set file permission for 'name' to 'perm'
+- *
+- * return FAIL for failure, OK otherwise
+- */
+- int
+- mch_setperm(name, perm)
+- char_u *name;
+- long perm;
+- {
+- return (chmod((char *)name, (mode_t)perm) == 0 ? OK : FAIL);
+- }
+-
+- /*
+- * Set hidden flag for "name".
+- */
+- /* ARGSUSED */
+- void
+- mch_hide(name)
+- char_u *name;
+- {
+- /* can't hide a file */
+- }
+-
+- /*
+- * return TRUE if "name" is a directory
+- * return FALSE if "name" is not a directory
+- * return FALSE for error
+- */
+- int
+- mch_isdir(name)
+- char_u *name;
+- {
+- if (xswi(OS_File, 17, name) & v_flag)
+- return FALSE;
+- if (r0 == 2 || r0 == 3)
+- return TRUE; /* Count image files as directories. */
+- return FALSE;
+- }
+-
+- /*
+- * Return 1 if "name" can be executed, 0 if not.
+- * Return -1 if unknown. Requires which to work.
+- */
+- int
+- mch_can_exe(name)
+- char_u *name;
+- {
+- char_u *buf;
+- char_u *p;
+- int retval;
+-
+- buf = alloc((unsigned)STRLEN(name) + 7);
+- if (buf == NULL)
+- return -1;
+- sprintf((char *)buf, "which %s", name);
+- p = get_cmd_output(buf, NULL, SHELL_SILENT);
+- vim_free(buf);
+- if (p == NULL)
+- return -1;
+- /* result can be: "name: Command not found" */
+- retval = (*p != NUL && strstr((char *)p, "not found") == NULL);
+- vim_free(p);
+- return retval;
+- }
+-
+- /*
+- * Check what "name" is:
+- * NODE_NORMAL: file or directory (or doesn't exist)
+- * NODE_WRITABLE: writable device, socket, fifo, etc.
+- * NODE_OTHER: non-writable things
+- */
+- int
+- mch_nodetype(name)
+- char_u *name;
+- {
+- /* TODO */
+- return NODE_NORMAL;
+- }
+-
+- void
+- mch_early_init()
+- {
+- /* Turn off all the horrible filename munging in UnixLib. */
+- int __riscosify_control = __RISCOSIFY_NO_PROCESS;
+- }
+-
+- void
+- mch_exit(r)
+- int r;
+- {
+- settmode(TMODE_COOK);
+- exiting = TRUE;
+- out_flush();
+- ml_close_all(TRUE); /* remove all memfiles */
+-
+- #ifdef FEAT_GUI
+- if (gui.in_use)
+- gui_exit(r);
+- #endif
+- swi(OS_NewLine);
+- if (old_escape_state != -1)
+- swi(OS_Byte, 229, old_escape_state, 0);
+- if (old_cursor_state != -1)
+- swi(OS_Byte, 4, old_cursor_state);
+- exit(r);
+- }
+-
+- void
+- mch_settmode(tmode)
+- int tmode; /* TMODE_RAW or TMODE_COOK */
+- {
+- if (tmode == TMODE_COOK)
+- {
+- ro_line_mode = TRUE;
+- return;
+- }
+-
+- ro_line_mode = FALSE;
+-
+- if (term_console)
+- {
+- /* Block cursor. */
+- swi(OS_WriteN,
+- "\027\000\012\000\000\000\000\000\000\000",
+- 10);
+-
+- /* Disable the standard cursor key actions. */
+- swi(OS_Byte, 4, 1);
+- if (old_cursor_state == -1)
+- old_cursor_state = r1;
+- }
+-
+- /* Stop Escape from quitting Vim! */
+- swi(OS_Byte, 229, 1, 0);
+- if (old_escape_state == -1)
+- old_escape_state = r1;
+- }
+-
+- /*
+- * set mouse clicks on or off (only works for xterms)
+- */
+- void
+- mch_setmouse(on)
+- int on;
+- {
+- }
+-
+- /*
+- * set screen mode, always fails.
+- */
+- /* ARGSUSED */
+- int
+- mch_screenmode(arg)
+- char_u *arg;
+- {
+- EMSG(_(e_screenmode));
+- return FAIL;
+- }
+-
+- /*
+- * Try to get the current window size.
+- * Return OK when size could be determined, FAIL otherwise.
+- * Simply return results stored by mch_init() if we are the
+- * machine's console. If not, we don't know how big the screen is.
+- */
+- int
+- mch_get_shellsize()
+- {
+- /* if size changed: screenalloc will allocate new screen buffers */
+- return term_console ? OK : FAIL;
+- }
+-
+- /*
+- * Can't change the size.
+- * Assume the user knows what he's doing and use the new values.
+- */
+- void
+- mch_set_shellsize()
+- {
+- /* Assume the user knows what he's doing and use the new values. */
+- }
+-
+- /*
+- * Rows and/or Columns has changed.
+- */
+- void
+- mch_new_shellsize()
+- {
+- /* Nothing to do. */
+- }
+-
+- int
+- mch_call_shell(cmd, options)
+- char_u *cmd;
+- int options; /* SHELL_*, see vim.h */
+- {
+- int retval;
+- int tmode = cur_tmode;
+-
+- if (cmd == NULL)
+- cmd = (char_u *) "GOS";
+-
+- #ifdef FEAT_GUI
+- if (gui.in_use)
+- return gui_mch_call_shell(cmd, options);
+- #endif
+- if (options & SHELL_COOKED)
+- settmode(TMODE_COOK); /* set to normal mode */
+- MSG_PUTS("\n");
+-
+- /* I don't even want to think about what UnixLib must
+- * be doing to allow this to work...
+- */
+- retval = system(cmd);
+- if (retval && !(options & SHELL_SILENT))
+- EMSG(strerror(EOPSYS)); /* Doesn't seem to set errno? */
+-
+- swi(OS_Byte, 229, 1, 0); /* Re-disable escape */
+- if (tmode == TMODE_RAW)
+- settmode(TMODE_RAW); /* set to raw mode */
+- return retval ? FAIL : OK;
+- }
+-
+- /*
+- * Check for Escape being pressed right now.
+- * [ different if !term_console? ]
+- */
+- void
+- mch_breakcheck()
+- {
+- if (xswi(OS_Byte, 121, 0xf0) & v_flag)
+- return;
+- if (r1 == 0xff)
+- {
+- got_int = TRUE;
+- swi(OS_Byte, 15, 1); /* Flush input buffer */
+- }
+- }
+-
+- /*
+- * Recursively expand one path component into all matching files and/or
+- * directories.
+- * "path" has backslashes before chars that are not to be expanded.
+- * Return the number of matches found.
+- */
+- int
+- mch_expandpath(gap, path, flags)
+- garray_T *gap; /* Grow array for results. */
+- char_u *path;
+- int flags; /* EW_* flags */
+- {
+- int got; /* Number of matches. */
+- char_u *pattern;
+-
+- /* Plan:
+- *
+- * 1) Get first part of path - no wildcards
+- * 2) Get next path element (wildcarded)
+- * 3) Get rest of path
+- *
+- * If (3) is nothing then only the leaf is wildcarded - add to gap
+- * Otherwise call recursively for each path in (2), passing (3)
+- *
+- * This is just the header function.
+- */
+-
+- /* We must be able to modifiy path, so make a copy */
+- pattern = vim_strsave(path);
+- if (pattern == NULL)
+- return 0;
+- got = expand_section(gap, (char_u *)"", pattern, flags);
+- vim_free(pattern);
+- return got;
+- }
+-
+- /*
+- * expand_section(gap, "$.Dir1.Dir2", "ABBA*.myleaf##")
+- *
+- * calls expand_section(gap, "$.Dir1.Dir2.ABBA_Gold", "myleaf##")
+- * and expand_section(gap, "$.Dir1.Dir2.ABBA_Live", "myleaf##")
+- *
+- * If rest is just a leaf then all matches are added to gap.
+- *
+- * Returns number of items added to gap.
+- */
+- int
+- expand_section(gap, root, rest, flags)
+- garray_T *gap;
+- char_u *root; /* Non-wildcarded path to search */
+- char_u *rest; /* Wildcarded remainder of path */
+- int flags; /* Add dirs/files/missing objects. */
+- {
+- static char_u buf[MAXPATHL]; /* Temporary buffer. */
+- char_u dir[MAXPATHL];
+- int start_element = -1; /* Start of wildcarded element */
+- char_u c;
+- int i;
+- int got, dir_pos;
+- int buflen; /* Chars used in buf[] */
+- int colon = 0; /* Dir ends in ':' */
+-
+- buflen = strlen(root);
+- STRNCPY(buf, root, buflen); /* Copy root into buffer. */
+-
+- /*
+- * Find end of nonwildcarded section.
+- * Count ':' as a path sep since Vim:Bug* is a valid pathname.
+- */
+-
+- for (i = 0; c = rest[i]; i++)
+- {
+- if (c == PATHSEP)
+- {
+- start_element = i;
+- colon = 0;
+- }
+- if (c == ':')
+- {
+- start_element = i + 1;
+- colon = 1;
+- }
+- if (c == '#' || c == '*')
+- break;
+- }
+- if (c == 0)
+- start_element = i;
+-
+- /*
+- * start_element +> terminator for non-wildcarded section.
+- * Transfer this bit into buf.
+- */
+- if (buflen + start_element + 4 >= MAXPATHL)
+- return 0; /* Buffer full */
+- if (start_element >= 0)
+- {
+- if (*root && !colon)
+- buf[buflen++] = PATHSEP;
+- strncpy(buf + buflen, rest, start_element);
+- buflen += start_element;
+- }
+- buf[buflen] = 0;
+-
+- /*
+- * Did we reach the end of the string without hitting any wildcards?
+- */
+- if (c == 0)
+- {
+- /* Yes - add combined path to grow array and return. */
+- addfile(gap, buf, flags);
+- return 1;
+- }
+-
+- if (start_element < 0 || !colon)
+- start_element++;
+- rest += start_element;
+-
+- /*
+- * rest does contain wildcards if we get here.
+- *
+- * Now : have we reached the leaf names part yet?
+- * If so, add all matches (files and dirs) to gap.
+- * If not, get next path element and scan all matching directories.
+- */
+-
+- start_element = -1;
+- for (i = 0; rest[i]; i++)
+- {
+- if (rest[i] == '.')
+- {
+- start_element = i;
+- rest[i] = 0; /* Break string here. */
+- break;
+- }
+- }
+-
+- /* If start_element is -1 then we are matching leaf names */
+-
+- r3 = 0; /* Number of objs read. */
+- dir_pos = 0; /* Position through directory. */
+- got = 0; /* Files added so far. */
+- while (dir_pos != -1)
+- {
+- buf[buflen] = 0;
+- if (xswi(OS_GBPB, 9,
+- buf, /* Directory to scan. */
+- buf + buflen + (1 - colon), /* Buffer for result. */
+- 1, /* Number of objects to read. */
+- dir_pos, /* Search position. */
+- MAXPATHL - 2 - buflen, /* Size of result buffer. */
+- rest) /* Wildcarded leafname. */
+- & v_flag)
+- {
+- EMSG(r0 + 4);
+- r4 = -1;
+- }
+- dir_pos = r4; /* r4 corrupted by addfile() */
+- if (r3 > 0)
+- {
+- char_u *path = buf;
+- if (buflen == 0)
+- path++; /* Don't do '.File' */
+- else if (!colon)
+- buf[buflen] = '.'; /* Join path and leaf */
+-
+- /* Path -> full path of object found */
+- if (start_element == -1)
+- {
+- addfile(gap, path, flags);
+- got++;
+- }
+- else
+- {
+- /* Scan into subdirectories and images; ignore files */
+- swi(OS_File, 17, path);
+- if (r0 == 2 || r0 == 3)
+- got += expand_section(gap,
+- path,
+- rest + start_element + 1,
+- flags);
+- }
+- }
+- }
+-
+- /* Restore the dot if we removed it. */
+- if (start_element >= 0)
+- rest[start_element] = '.';
+- return got;
+- }
+-
+- /*
+- * mch_expand_wildcards() - this code does wild-card pattern matching using
+- * the shell. It isn't used under RISC OS.
+- *
+- * return OK for success, FAIL for error (you may lose some memory) and put
+- * an error message in *file.
+- *
+- * num_pat is number of input patterns
+- * pat is array of pointers to input patterns
+- * num_file is pointer to number of matched file names
+- * file is pointer to array of pointers to matched file names
+- */
+- int
+- mch_expand_wildcards(num_pat, pat, num_file, file, flags)
+- int num_pat;
+- char_u **pat;
+- int *num_file;
+- char_u ***file;
+- int flags; /* EW_* flags */
+- {
+- /* This doesn't get called unless SPECIAL_WILDCHAR is defined. */
+- return FAIL;
+- }
+-
+- /*
+- * Return TRUE if "p" contains wildcards which can be expanded by
+- * mch_expandpath().
+- */
+- int
+- mch_has_exp_wildcard(p)
+- char_u *p;
+- {
+- if (vim_strpbrk((char_u *)"*#", p))
+- return TRUE;
+- return FALSE;
+- }
+-
+- /* Return TRUE if "p" contains wildcards. */
+- int
+- mch_has_wildcard(p)
+- char_u *p;
+- {
+- if (vim_strpbrk((char_u *)"*#`", p))
+- return TRUE;
+- return FALSE;
+- }
+-
+- int /* see Unix unlink(2) */
+- mch_remove(file)
+- char_u *file; /* Name of file to delete. */
+- {
+- if (xswi(OS_FSControl, 27, file, 0, 0) & v_flag)
+- return EXIT_FAILURE;
+- return EXIT_SUCCESS;
+- }
+-
+- /* Try to make existing scripts work without modification.
+- * Return a pointer to the new string (freed by caller), or NULL
+- *
+- * Two main cases:
+- * - Absolute : $VIM/syntax/help.vim
+- * - Relative : Adfs::4.$.!Vim.Resources.Syntax/help.vim
+- */
+- char_u *
+- mch_munge_fname(fname)
+- char_u *fname;
+- {
+- char_u c;
+- int len;
+- char_u *retval;
+-
+- retval = fname = vim_strsave(fname);
+- if (fname == NULL)
+- return NULL;
+-
+- if (strncmp(fname, "$VIM/", 5) == 0)
+- {
+- strncpy(fname, "Vim:", 4);
+- for (fname += 5; c = *fname; fname++)
+- {
+- if (c == '.')
+- break;
+- if (c == '/')
+- fname[-1] = '.';
+- else
+- fname[-1] = c;
+- }
+- fname[-1] = '\0';
+- }
+- else
+- {
+- /* Check to see if the file exists without modification. */
+- if (xswi(OS_File, 17, fname) & v_flag)
+- r0 == 0; /* Invalid filename? */
+- if (r0)
+- return retval;
+-
+- len = strlen(fname);
+- if (strcmp(fname + len - 4, ".vim") == 0)
+- {
+- fname[len - 4] = '\0';
+- for (; c = *fname; fname++)
+- {
+- if (c == '/')
+- *fname = '.';
+- }
+- }
+- }
+- return retval;
+- }
+-
+- /* QuickFix reads munged names from the error file.
+- * Correct them.
+- */
+- int
+- ro_buflist_add(old_name)
+- char_u *old_name; /* Name of file found by quickfix */
+- {
+- char_u *fname;
+- char_u *leaf; /* Pointer to start of leaf in old_name */
+- char_u *ptr;
+- char_u c;
+- int retval;
+-
+- if (old_name == NULL)
+- return buflist_add(NULL, 0);
+-
+- /* Copy the name so we can mess around with it. */
+- fname = vim_strsave(old_name);
+- if (fname == NULL)
+- /* Out of memory - can't modify name */
+- return buflist_add(old_name, 0);
+-
+- /* Change `dir/main.c' into `dir.c.main' */
+- leaf = fname;
+- for (ptr = fname; c = *ptr; ptr++)
+- {
+- if (c == '/')
+- {
+- leaf = ptr + 1;
+- *ptr = '.';
+- }
+- else if (c == '.')
+- break;
+- }
+- if (c == '.')
+- {
+- /* Change `main.c' into `c.main'
+- * | |
+- * leaf ptr
+- */
+- ptr += old_name - fname;
+- *ptr = '\0';
+- sprintf(leaf,
+- "%s.%s",
+- ptr + 1,
+- leaf - fname + old_name);
+- }
+-
+- retval = buflist_add(fname, 0);
+- free(fname);
+- return retval;
+- }
+-
+- /* Change the current directory.
+- * Strip trailing dots to make it easier to use with filename completion.
+- * Return 0 for success, -1 for failure.
+- */
+- int
+- mch_chdir(dir)
+- char_u *dir;
+- {
+- int length;
+- int retval;
+- char_u *new_dir;
+-
+- if (p_verbose >= 5)
+- {
+- verbose_enter();
+- smsg((char_u *)"chdir(%s)", dir);
+- verbose_leave();
+- }
+- length = strlen(dir);
+- if (dir[length - 1] != '.')
+- return chdir(dir); /* No trailing dots - nothing to do. */
+- new_dir = vim_strsave(dir);
+- if (new_dir == NULL)
+- return chdir(dir); /* Can't allocate memory. */
+-
+- while (new_dir[--length] == '.')
+- new_dir[length] = '\0';
+-
+- retval = chdir(new_dir);
+- vim_free(new_dir);
+- return retval;
+- }
+-
+- /* Examine the named file, and set the 'osfiletype' option
+- * (in curbuf) to the file's type.
+- */
+- void
+- mch_read_filetype(file)
+- char_u *file;
+- {
+- int type;
+- char_u type_string[9];
+- int i;
+-
+- if (xswi(OS_File, 23, file) & v_flag)
+- type = 0xfff; /* Default to Text */
+- else
+- type = r6;
+-
+- /* Type is the numerical value - see if we have a textual equivalent */
+- swi(OS_FSControl, 18, 0, type);
+- ((int *) type_string)[0] = r2;
+- ((int *) type_string)[1] = r3;
+- type_string[8] = 0;
+- for (i = 0; type_string[i] > ' '; i++)
+- ;
+- type_string[i] = 0;
+-
+- set_string_option_direct("osfiletype", -1, type_string, OPT_FREE, 0);
+- return;
+- }
+-
+- void
+- mch_set_filetype(file, type)
+- char_u *file;
+- char_u *type;
+- {
+- if (xswi(OS_FSControl, 31, type) & v_flag)
+- {
+- EMSG(_("E366: Invalid 'osfiletype' option - using Text"));
+- r2 = 0xfff;
+- }
+-
+- swi(OS_File, 18, file, r2);
+- }
+-
+- /* Return TRUE if the file's type matches 'type'
+- * RISC OS types always start with '&'
+- */
+- int
+- mch_check_filetype(fname, type)
+- char_u *fname;
+- char_u *type;
+- {
+- int value;
+- char *end;
+-
+- if (*type != '&')
+- return FALSE;
+-
+- value = strtol(type + 1, &end, 16);
+- if (*end)
+- return FALSE; /* Invalid type (report error?) */
+-
+- if (xswi(OS_File, 23, fname) & v_flag)
+- return FALSE; /* Invalid filename? */
+-
+- return (r0 && r6 == value);
+- }
+--- 0 ----
+*** ../vim-7.3.186/runtime/doc/os_risc.txt 2010-08-15 21:57:16.000000000 +0200
+--- runtime/doc/os_risc.txt 2011-05-10 16:19:25.000000000 +0200
+***************
+*** 1,322 ****
+! *os_risc.txt* For Vim version 7.3. Last change: 2010 Aug 07
+
+
+ VIM REFERENCE MANUAL by Thomas Leonard
+
+
+ *riscos* *RISCOS* *RISC-OS*
+! This file contains the particularities for the RISC OS version of Vim.
+
+- The RISC OS port is a completely new port and is not based on the old "archi"
+- port.
+
+- 1. File locations |riscos-locations|
+- 2. Filename munging |riscos-munging|
+- 3. Command-line use |riscos-commandline|
+- 4. Desktop (GUI) use |riscos-gui|
+- 5. Remote use (telnet) |riscos-remote|
+- 6. Temporary files |riscos-temp-files|
+- 7. Interrupting |riscos-interrupt|
+- 8. Memory usage |riscos-memory|
+- 9. Filetypes |riscos-filetypes|
+- 10. The shell |riscos-shell|
+- 11. Porting new releases |riscos-porting|
+-
+- If I've missed anything, email me and I'll try to fix it. In fact, even if I
+- haven't missed anything then email me anyway to give me some confidence that it
+- actually works!
+-
+- Thomas Leonard <tal197@ecs.soton.ac.uk>
+-
+- [these URLs no longer work...]
+- Port homepage: http://www.ecs.soton.ac.uk/~tal197/
+- or try: http://www.soton.ac.uk/~tal197/
+-
+- ==============================================================================
+- *riscos-locations*
+- 1. File locations
+-
+- The Vim executable and shared resource files are all stored inside the !Vim
+- application directory.
+-
+- When !Vim is first seen by the filer, it aliases the *vi and *ex commands to
+- run the command-line versions of Vim (see |riscos-commandline|).
+-
+- !Vim.Resources and !Vim.Resources2 contain the files from the standard Vim
+- distribution, but modified slightly to work within the limits of ADFS, plus
+- some extra files such as the window templates.
+-
+- User choices are read from "Choices:*" and are saved to "<Choices$Write>.*".
+- If you have the new !Boot structure then these should be set up already. If
+- not, set Choices$Path to a list of directories to search when looking for
+- user configuration files. Set Choices$Write to the directory you want files
+- to be saved into (so your search patterns and marks can be remembered between
+- sessions).
+-
+- ==============================================================================
+- *riscos-munging*
+- 2. Filename munging
+-
+- All pathname munging is disabled by default, so Vim should behave like a
+- normal RISC OS application now. So, if you want to edit "doc/html" then you
+- actually type "*vi doc/html".
+-
+- The only times munging is done is when:
+-
+- - Searching included files from C programs, since these are always munged.
+- See |[I|.
+- Note: make sure you are in the right directory when you use this
+- command (i.e. the one with subdirectories "c" and "h").
+-
+- - Sourcing files using |:so|.
+- Paths starting "$VIM/" are munged like this:
+-
+- $VIM/syntax/help.vim -> Vim:syntax.help
+-
+- Also, files ending in ".vim" have their extensions removed, and slashes
+- replaced with dots.
+-
+- Some tag files and script files may have to be edited to work under this port.
+-
+- ==============================================================================
+- *riscos-commandline*
+- 3. Command-line use
+-
+- To use Vim from the command-line use the "*vi" command (or "*ex" for
+- |Ex-mode|).
+-
+- Type "*vi -h" for a list of options.
+-
+- Running the command-line version of Vim in a large high-color mode may cause
+- the scrolling to be very slow. Either change to a mode with fewer colors or
+- use the GUI version.
+-
+- Also, holding down Ctrl will slow it down even more, and Ctrl-Shift will
+- freeze it, as usual for text programs.
+-
+- ==============================================================================
+- *riscos-gui*
+- 4. Desktop use
+-
+- Limitations:
+-
+- - Left scrollbars don't work properly (right and bottom are fine).
+- - Doesn't increase scroll speed if it gets behind.
+-
+- You can resize the window by dragging the lower-right corner, even though
+- there is no icon shown there.
+-
+- You can use the --rows and --columns arguments to specify the initial size of
+- the Vim window, like this: >
+-
+- *Vi -g --rows 20 --columns 80
+-
+- The global clipboard is supported, so you can select some text and then
+- paste it directly into another application (provided it supports the
+- clipboard too).
+-
+- Clicking Menu now opens a menu like a normal RISC OS program. Hold down Shift
+- when clicking Menu to paste (from the global clipboard).
+-
+- Dragging a file to the window replaces the CURRENT buffer (the one with the
+- cursor, NOT the one you dragged to) with the file.
+-
+- Dragging with Ctrl held down causes a new Vim window to be opened for the
+- file (see |:sp|).
+-
+- Dragging a file in with Shift held down in insert mode inserts the pathname of
+- the file.
+-
+- :browse :w opens a standard RISC OS save box.
+- :browse :e opens a directory viewer.
+-
+- For fonts, you have the choice of the system font, an outline font, the system
+- font via ZapRedraw and any of the Zap fonts via ZapRedraw: >
+-
+- :set guifont=
+- < To use the system font via the VDU drivers. Supports
+- bold and underline.
+- >
+- :set guifont=Corpus.Medium
+- < Use the named outline font. You can use any font, but
+- only monospaced ones like Corpus look right.
+- >
+- :set guifont=Corpus.Medium:w8:h12:b:i
+- < As before, but with size of 8 point by 12 point, and
+- in bold italic.
+- If only one of width and height is given then that
+- value is used for both. If neither is given then 10
+- point is used.
+-
+- Thanks to John Kortink, Vim can use the ZapRedraw module. Start the font name
+- with "!" (or "!!" for double height), like this: >
+-
+- :set guifont=!!
+- < Use the system font, but via ZapRedraw. This gives a
+- faster redraw on StrongARM processors, but you can't
+- get bold or italic text. Double height.
+- >
+- :set guifont=!script
+- < Uses the named Zap font (a directory in VimFont$Path).
+- The redraw is the same speed as for "!!", but you get
+- a nicer looking font.
+- Only the "man+" and "script" fonts are supplied
+- currently, but you can use any of the Zap fonts if
+- they are in VimFont$Path.
+- Vim will try to load font files "0", "B", "I" and "IB"
+- from the named directory. Only "0" (normal style) MUST
+- be present. Link files are not currently supported.
+-
+- Note that when using ZapRedraw the edit bar is drawn in front of the character
+- you are on rather than behind it. Also redraw is incorrect for screen modes
+- with eigen values of 0. If the font includes control characters then you can
+- get Vim to display them by changing the 'isprint' option.
+-
+- If you find the scrolling is too slow on your machine, try experimenting
+- with the 'scrolljump' and 'ttyscroll' options.
+-
+- In particular, StrongARM users may find that: >
+-
+- :set ttyscroll=0
+-
+- makes scrolling faster in high-color modes.
+-
+- =============================================================================
+- *riscos-remote*
+- 5. Remote use (telnet)
+-
+- I have included a built-in termcap entry, but you can edit the termcap file to
+- allow other codes to be used if you want to use Vim from a remote terminal.
+-
+- Although I do not have an internet connection to my Acorn, I have managed to
+- run Vim in a FreeTerm window using the loopback connection.
+-
+- It seems to work pretty well now, using "*vi -T ansi".
+-
+- ==============================================================================
+- *riscos-temp-files*
+- 6. Temporary files
+-
+- If Vim crashes then the swap and backup files (if any) will be in the
+- directories set with the 'directory' and 'bdir' options. By default the swap
+- files are in <Wimp$ScrapDir> (i.e. inside !Scrap) and backups are in the
+- directory you were saving to. Vim will allow you to try and recover the file
+- when you next try to edit it.
+-
+- To see a list of swap files, press <F12> and type "*vi -r".
+-
+- Vim no longer brings up ATTENTION warnings if you try to edit two files with
+- the same name in different directories.
+-
+- However, it also no longer warns if you try to edit the same file twice (with
+- two copies of Vim), though you will still be warned when you save that the
+- datestamp has changed.
+-
+- ==============================================================================
+- *riscos-interrupt*
+- 7. Interrupting
+-
+- To break out of a looping macro, or similar, hold down Escape in the
+- command-line version, or press CTRL-C in the GUI version.
+-
+- ==============================================================================
+- *riscos-memory*
+- 8. Memory usage
+-
+- Vim will use dynamic areas on RISC OS 3.5 or later. If you can use them on
+- older machines then edit the !RunTxt and GVim files. I don't know what UnixLib
+- does by default on these machines so I'm playing safe.
+-
+- It doesn't work at all well without dynamic areas, since it can't change its
+- memory allocation once running. Hence you should edit "!Vim.GVim" and
+- "!Vim.!RunTxt" to choose the best size for you. You probably need at least
+- about 1400K.
+-
+- ==============================================================================
+- *riscos-filetypes*
+- 9. Filetypes
+-
+- You can now specify that autocommands are only executed for files of certain
+- types. The filetype is given in the form &xxx, when xxx is the filetype.
+-
+- Filetypes must be specified by number (e.g. &fff for Text).
+-
+- The system has changed from version 5.3. The new sequence of events is:
+-
+- - A file is loaded. |'osfiletype'| is set to the RISC OS filetype.
+- - Based on the filetype and pathname, Vim will try to set |'filetype'| to the
+- Vim-type of the file.
+- - Setting this option may load syntax files and perform other actions.
+- - Saving the file will give it a filetype of |'osfiletype'|.
+-
+- Some examples may make this clearer:
+-
+- Kind of file loaded osfiletype filetype ~
+- C code "c.hellow" Text (&fff) C
+- LaTeX document LaTeX (&2a8) TeX
+- Draw document DrawFile (&aff) (not changed)
+-
+- ==============================================================================
+- *riscos-shell*
+- 10. The shell
+-
+- - Bangs (!s) are only replaced if they are followed by a space or end-of-line,
+- since many pathnames contain them.
+-
+- - You can prefix the command with "~", which stops any output from being
+- displayed. This also means that you don't have to press <Enter> afterwards,
+- and stops the screen from being redrawn. {only in the GUI version}
+-
+- ==============================================================================
+- *riscos-porting*
+- 11. Porting new releases to RISC OS
+-
+- Downloading everything you need:
+-
+- - Get the latest source distribution (see www.vim.org)
+- - Get the runtime environment files (e.g. these help files)
+- - Get the RISC OS binary distribution (if possible)
+-
+-
+- Unarchiving:
+-
+- - Create a raFS disk and put the archives on it
+- - Un-gzip them
+- - Un-tar them (*tar xELf 50 archive/tar)
+-
+-
+- Recompiling the sources:
+-
+- - Create c, s, and h directories.
+- - Put all the header files in "h". \
+- - Put all the C files in "c". | And lose the extensions
+- - Put the assembler file ("swis/s") in "s". /
+- - Rename all the files in "proto" to "h", like this:
+- raFS::VimSrc.source.proto.file/pro
+- becomes
+- raFS::VimSrc.source.h.file_pro
+- - In the files "h.proto" and "c.termlib", search and replace
+- .pro"
+- with
+- _pro.h"
+- - Create a simple Makefile if desired and do "*make -k".
+- Use "CC = gcc -DRISCOS -DUSE_GUI -O2 -x c" in the Makefile.
+- - Save the binary as !Vim.Vim in the binary distribution.
+-
+-
+- Updating the run-time environment:
+-
+- - Replace old or missing files inside !Vim.Resources with the
+- new files.
+- - Remove files in "doc" not ending in "/txt", except for "tags".
+- - Lose the extensions from the files in "doc".
+- - Edit the "doc.tags" file. Remove extensions from the second column: >
+- :%s/^\(.[^\t]*\t.*\)\.txt\t/\1\t/
+- - Remove extensions from the syntax files. Split them into two directories
+- to avoid the 77 entry limit on old ADFS filesystems.
+- - Edit "Vim:FileType" to match "*.c.*" as well as "*/c" and so on.
+- Add filetype checking too.
+- - Edit "Vim:Menu" and remove all the keys from the menus: >
+- :%s/<Tab>[^ \t]*//
+- <
+ vim:tw=78:ts=8:ft=help:norl:
+--- 1,12 ----
+! *os_risc.txt* For Vim version 7.3. Last change: 2011 May 10
+
+
+ VIM REFERENCE MANUAL by Thomas Leonard
+
+
+ *riscos* *RISCOS* *RISC-OS*
+! The RISC OS support has been removed from Vim with patch 7.3.187.
+! If you would like to use Vim on RISC OS get the files from before that patch.
+
+
+ vim:tw=78:ts=8:ft=help:norl:
+*** ../vim-7.3.186/src/version.c 2011-05-10 16:12:40.000000000 +0200
+--- src/version.c 2011-05-10 16:37:20.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 187,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+81. At social functions you introduce your husband as "my domain server."
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.188 b/source/ap/vim/patches/7.3.188
new file mode 100644
index 000000000..f58454304
--- /dev/null
+++ b/source/ap/vim/patches/7.3.188
@@ -0,0 +1,184 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.188
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.188
+Problem: More RISC OS files to remove.
+Solution: Remove them. Update the file list.
+Files: src/proto/gui_riscos.pro, src/proto/os_riscos.pro, Filelist
+
+
+*** ../vim-7.3.187/src/proto/gui_riscos.pro 2010-08-15 21:57:28.000000000 +0200
+--- src/proto/gui_riscos.pro 1970-01-01 01:00:00.000000000 +0100
+***************
+*** 1,66 ****
+- /* Prototypes for gui_riscos.c
+- * Based on gui_x11_pro.h (10 March 2002 version)
+- */
+- void gui_mch_prepare __ARGS((int *argc, char **argv));
+- int gui_mch_init_check __ARGS((void));
+- int gui_mch_init __ARGS((void));
+- void gui_mch_uninit __ARGS((void));
+- void gui_mch_new_colors __ARGS((void));
+- int gui_mch_open __ARGS((void));
+- void gui_init_tooltip_font __ARGS((void));
+- void gui_init_menu_font __ARGS((void));void gui_mch_exit __ARGS((int rc));
+- int gui_mch_get_winpos __ARGS((int *x, int *y));
+- void gui_mch_set_winpos __ARGS((int x, int y));
+- void gui_mch_set_shellsize __ARGS((int width, int height, int min_width, int min_height, int base_width, int base_height));
+- void gui_mch_get_screen_dimensions __ARGS((int *screen_w, int *screen_h));
+- int gui_mch_init_font __ARGS((char_u *font_name, int do_fontset));
+- GuiFont gui_mch_get_font __ARGS((char_u *name, int giveErrorIfMissing));
+- int gui_mch_adjust_charheight __ARGS((void));
+- void gui_mch_set_font __ARGS((GuiFont font));
+- void gui_mch_set_fontset __ARGS((GuiFontset fontset));
+- void gui_mch_free_font __ARGS((GuiFont font));
+- void gui_mch_free_fontset __ARGS((GuiFontset fontset));
+- GuiFontset gui_mch_get_fontset __ARGS((char_u *name, int giveErrorIfMissing, int fixed_width));
+- guicolor_T gui_mch_get_color __ARGS((char_u *reqname));
+- void gui_mch_set_fg_color __ARGS((guicolor_T color));
+- void gui_mch_set_bg_color __ARGS((guicolor_T color));
+- void gui_mch_draw_string __ARGS((int row, int col, char_u *s, int len, int flags));
+- int gui_mch_haskey __ARGS((char_u *name));
+- void gui_mch_beep __ARGS((void));
+- void gui_mch_flash __ARGS((int msec));
+- void gui_mch_invert_rectangle __ARGS((int r, int c, int nr, int nc));
+- void gui_mch_iconify __ARGS((void));
+- void gui_mch_set_foreground __ARGS((void));
+- void gui_mch_draw_hollow_cursor __ARGS((guicolor_T color));
+- void gui_mch_draw_part_cursor __ARGS((int w, int h, guicolor_T color));
+- void gui_mch_update __ARGS((void));
+- int gui_mch_wait_for_chars __ARGS((long wtime));
+- void gui_mch_flush __ARGS((void));
+- void gui_mch_clear_block __ARGS((int row1, int col1, int row2, int col2));
+- void gui_mch_clear_all __ARGS((void));
+- void gui_mch_delete_lines __ARGS((int row, int num_lines));
+- void gui_mch_insert_lines __ARGS((int row, int num_lines));
+- void clip_mch_lose_selection __ARGS((VimClipboard *cbd));
+- int clip_mch_own_selection __ARGS((VimClipboard *cbd));
+- void clip_mch_request_selection __ARGS((VimClipboard *cbd));
+- void clip_mch_set_selection __ARGS((VimClipboard *cbd));
+- void gui_mch_menu_grey __ARGS((vimmenu_T *menu, int grey));
+- void gui_mch_menu_hidden __ARGS((vimmenu_T *menu, int hidden));
+- void gui_mch_draw_menubar __ARGS((void));
+- void gui_mch_set_blinking __ARGS((long waittime, long on, long off));
+- void gui_mch_stop_blink __ARGS((void));
+- void gui_mch_start_blink __ARGS((void));
+- void process_event __ARGS((int event, int *block));
+- void gui_mch_show_popupmenu __ARGS((vimmenu_T *menu));
+- long_u gui_mch_get_rgb __ARGS((guicolor_T pixel));
+- void gui_mch_getmouse __ARGS((int *x, int *y));
+- void gui_mch_setmouse __ARGS((int x, int y));
+- void gui_mch_drawsign __ARGS((int row, int col, int typenr));
+- void gui_mch_destroy_sign __ARGS((XImage *sign));
+- void gui_mch_mousehide __ARGS((int hide));
+- void mch_set_mouse_shape __ARGS((int shape));
+- void gui_mch_menu_set_tip __ARGS((vimmenu_T *menu));
+-
+- void ro_redraw_title __ARGS((int window));
+- int ro_ok_to_quit __ARGS((void));
+- /* vim: set ft=c : */
+--- 0 ----
+*** ../vim-7.3.187/src/proto/os_riscos.pro 2010-08-15 21:57:28.000000000 +0200
+--- src/proto/os_riscos.pro 1970-01-01 01:00:00.000000000 +0100
+***************
+*** 1,49 ****
+- /* os_riscos.c */
+- void mch_write __ARGS((char_u *s, int len));
+- int mch_inchar __ARGS((char_u *buf, int maxlen, long wtime, int tb_change_cnt));
+- int mch_char_avail __ARGS((void));
+- long_u mch_avail_mem __ARGS((int special));
+- void mch_delay __ARGS((long msec, int ignoreinput));
+- void mch_suspend __ARGS((void));
+- void mch_init __ARGS((void));
+- int mch_check_win __ARGS((int argc, char **argv));
+- int mch_input_isatty __ARGS((void));
+- int mch_can_restore_title __ARGS((void));
+- int mch_can_restore_icon __ARGS((void));
+- void mch_settitle __ARGS((char_u *title, char_u *icon));
+- void mch_restore_title __ARGS((int which));
+- int mch_get_user_name __ARGS((char_u *s, int len));
+- void mch_get_host_name __ARGS((char_u *s, int len));
+- long mch_get_pid __ARGS((void));
+- int mch_dirname __ARGS((char_u *buf, int len));
+- int mch_FullName __ARGS((char_u *fname, char_u *buf, int len, int force));
+- int mch_isFullName __ARGS((char_u *fname));
+- long mch_getperm __ARGS((char_u *name));
+- int mch_setperm __ARGS((char_u *name, long perm));
+- void mch_hide __ARGS((char_u *name));
+- int mch_isdir __ARGS((char_u *name));
+- int mch_can_exe __ARGS((char_u *name));
+- int mch_nodetype __ARGS((char_u *name));
+- void mch_early_init __ARGS((void));
+- void mch_exit __ARGS((int r));
+- void mch_settmode __ARGS((int tmode));
+- void mch_setmouse __ARGS((int on));
+- int mch_screenmode __ARGS((char_u *arg));
+- int mch_get_shellsize __ARGS((void));
+- void mch_set_shellsize __ARGS((void));
+- void mch_new_shellsize __ARGS((void));
+- int mch_call_shell __ARGS((char_u *cmd, int options));
+- void mch_breakcheck __ARGS((void));
+- int mch_expandpath __ARGS((garray_T *gap, char_u *path, int flags));
+- int expand_section __ARGS((garray_T *gap, char_u *root, char_u *rest, int flags));
+- int mch_expand_wildcards __ARGS((int num_pat, char_u **pat, int *num_file, char_u ***file, int flags));
+- int mch_has_exp_wildcard __ARGS((char_u *p));
+- int mch_has_wildcard __ARGS((char_u *p));
+- int mch_remove __ARGS((char_u *file));
+- char_u *mch_munge_fname __ARGS((char_u *fname));
+- int ro_buflist_add __ARGS((char_u *old_name));
+- int mch_chdir __ARGS((char_u *dir));
+- void mch_read_filetype __ARGS((char_u *file));
+- void mch_set_filetype __ARGS((char_u *file, char_u *type));
+- int mch_check_filetype __ARGS((char_u *fname, char_u *type));
+- /* vim: set ft=c : */
+--- 0 ----
+*** ../vim-7.3.187/Filelist 2011-03-22 18:10:34.000000000 +0100
+--- Filelist 2011-05-10 17:19:21.000000000 +0200
+***************
+*** 428,435 ****
+ README_os390.txt \
+ src/Make_mint.mak \
+ src/Make_ro.mak \
+- src/gui_riscos.c \
+- src/gui_riscos.h \
+ src/if_sniff.c \
+ src/infplist.xml \
+ src/link.390 \
+--- 428,433 ----
+***************
+*** 437,446 ****
+ src/os_beos.h \
+ src/os_beos.rsrc \
+ src/os_mint.h \
+- src/os_riscos.c \
+- src/os_riscos.h \
+- src/proto/gui_riscos.pro \
+- src/proto/os_riscos.pro \
+ src/os_vms_fix.com \
+ src/toolbar.phi \
+
+--- 435,440 ----
+*** ../vim-7.3.187/src/version.c 2011-05-10 16:41:13.000000000 +0200
+--- src/version.c 2011-05-10 17:20:50.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 188,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+83. Batteries in the TV remote now last for months.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.189 b/source/ap/vim/patches/7.3.189
new file mode 100644
index 000000000..f7a9667c7
--- /dev/null
+++ b/source/ap/vim/patches/7.3.189
@@ -0,0 +1,49 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.189
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.189 (after 7.3.186)
+Problem: Can't build without +clipboard feature. (Christian Ebert)
+Solution: Add the missing #ifdef.
+Files: src/normal.c
+
+
+*** ../vim-7.3.188/src/normal.c 2011-05-10 16:12:40.000000000 +0200
+--- src/normal.c 2011-05-10 17:25:26.000000000 +0200
+***************
+*** 1204,1212 ****
+--- 1204,1215 ----
+ #ifdef FEAT_EVAL
+ {
+ int regname = 0;
++
+ /* Adjust the register according to 'clipboard', so that when
+ * "unnamed" is present it becomes '*' or '+' instead of '"'. */
++ # ifdef FEAT_CLIPBOARD
+ adjust_clip_reg(&regname);
++ # endif
+ set_reg_var(regname);
+ }
+ #endif
+*** ../vim-7.3.188/src/version.c 2011-05-10 17:21:34.000000000 +0200
+--- src/version.c 2011-05-10 17:29:21.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 189,
+ /**/
+
+--
+If your nose runs, and your feet smell, you might be upside down.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.190 b/source/ap/vim/patches/7.3.190
new file mode 100644
index 000000000..4adef8ab0
--- /dev/null
+++ b/source/ap/vim/patches/7.3.190
@@ -0,0 +1,48 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.190
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.190
+Problem: When there is a "containedin" syntax argument highlighting may be
+ wrong. (Radek)
+Solution: Reset current_next_list. (Ben Schmidt)
+Files: src/syntax.c
+
+
+*** ../vim-7.3.189/src/syntax.c 2011-04-11 16:56:29.000000000 +0200
+--- src/syntax.c 2011-05-19 12:02:43.000000000 +0200
+***************
+*** 2566,2571 ****
+--- 2566,2574 ----
+ #endif
+ update_si_attr(current_state.ga_len - 1);
+
++ /* nextgroup= should not match in the end pattern */
++ current_next_list = NULL;
++
+ /* what matches next may be different now, clear it */
+ next_match_idx = 0;
+ next_match_col = MAXCOL;
+*** ../vim-7.3.189/src/version.c 2011-05-10 17:29:28.000000000 +0200
+--- src/version.c 2011-05-19 12:13:28.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 190,
+ /**/
+
+--
+From "know your smileys":
+ :'-D Laughing so much that they're crying
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.191 b/source/ap/vim/patches/7.3.191
new file mode 100644
index 000000000..14b63cea0
--- /dev/null
+++ b/source/ap/vim/patches/7.3.191
@@ -0,0 +1,526 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.191
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.191
+Problem: Still some RISC OS stuff to remove.
+Solution: Remove files and lines. (Hong Xu)
+ Remove the 'osfiletype' option code.
+Files: README_extra.txt, src/Make_ro.mak, src/INSTALL, src/Makefile,
+ src/buffer.c, src/eval.c, src/feature.h, src/option.c,
+ src/option.h, src/structs.h, src/version.c, src/pty.c, Filelist
+
+
+*** ../vim-7.3.190/README_extra.txt 2010-08-15 21:57:32.000000000 +0200
+--- README_extra.txt 2011-05-19 12:35:16.000000000 +0200
+***************
+*** 13,21 ****
+
+ src/os_amiga.* Files for the Amiga port.
+
+- src/gui_riscos.*
+- src/os_riscos.* Files for the RISC OS port.
+-
+ src/gui_beos.*
+ src/os_beos.* Files for the BeOS port.
+
+--- 13,18 ----
+*** ../vim-7.3.190/src/Make_ro.mak 2010-08-15 21:57:27.000000000 +0200
+--- src/Make_ro.mak 1970-01-01 01:00:00.000000000 +0100
+***************
+*** 1,135 ****
+- #
+- # Makefile for Vim on RISC OS - Andy Wingate
+- #
+-
+- GCC = gcc -mthrowback
+- CFLAGS = -DRISCOS -DFEAT_GUI
+- CC = $(GCC) $(CFLAGS) -O2
+- # -DUP_BC_PC_EXTERN for term.c needed as BC defined in termlib.c and term.c
+-
+- TERMFLAG = -DUP_BC_PC_EXTERN
+-
+- ASMFLAGS = -throwback -objasm -gcc
+-
+- OBJS = o.buffer o.charset o.diff o.digraph o.edit o.eval o.ex_cmds o.ex_cmds2 \
+- o.ex_docmd o.ex_eval o.ex_getln o.fileio o.fold o.getchar \
+- o.hardcopy o.hashtab o.main o.mark o.mbyte \
+- o.memfile o.memline o.menu o.message o.misc1 o.misc2 o.move \
+- o.normal o.ops o.option o.popupmnu o.quickfix o.regexp o.screen \
+- o.search \
+- o.spell o.syntax o.tag o.term o.termlib o.ui o.undo o.version \
+- o.window o.os_riscos o.swis o.gui o.gui_riscos
+-
+- Vim: $(OBJS)
+- $(GCC) -o Vim $(OBJS)
+-
+- install: Vim
+- squeeze -v Vim @.!Vim.Vim
+-
+- clean:
+- create o.!fake! 0
+- wipe o.* ~cf
+- remove Vim
+-
+- o.swis: s.swis
+- as $(ASMFLAGS) -o o.swis s.swis
+-
+- # Rules for object files
+-
+- o.%: c.%
+- $(CC) -c $< -o $@
+-
+- o.buffer: c.buffer
+-
+- o.charset: c.charset
+-
+- o.digraph: c.digraph
+-
+- o.diff: c.diff
+-
+- o.edit: c.edit
+-
+- o.eval: c.eval
+-
+- o.ex_cmds: c.ex_cmds
+-
+- o.ex_cmds2: c.ex_cmds2
+-
+- o.ex_docmd: c.ex_docmd
+-
+- o.ex_eval: c.ex_eval
+-
+- o.ex_getln: c.ex_getln
+-
+- o.fileio: c.fileio
+-
+- o.fold: c.fold
+-
+- o.getchar: c.getchar
+-
+- o.hardcopy: c.hardcopy
+-
+- o.hashtab: c.hashtab
+-
+- o.gui: c.gui
+-
+- o.gui_riscos: c.gui_riscos
+-
+- o.main: c.main
+-
+- o.mark: c.mark
+-
+- o.mbyte: c.mbyte
+-
+- o.memfile: c.memfile
+-
+- o.memline: c.memline
+-
+- o.menu: c.menu
+-
+- o.message: c.message
+-
+- o.misc1: c.misc1
+-
+- o.misc2: c.misc2
+-
+- o.move: c.move
+-
+- o.normal: c.normal
+-
+- o.ops: c.ops
+-
+- o.option: c.option
+-
+- o.os_riscos: c.os_riscos
+-
+- o.pty: c.pty
+-
+- o.popupmnu: c.popupmnu
+-
+- o.quickfix: c.quickfix
+-
+- o.regexp: c.regexp
+-
+- o.screen: c.screen
+-
+- o.search: c.search
+-
+- o.spell: c.spell
+-
+- o.syntax: c.syntax
+-
+- o.tag: c.tag
+-
+- o.term: c.term
+- $(CC) $(TERMFLAG) -c c.term -o o.term
+-
+- o.termlib: c.termlib
+-
+- o.ui: c.ui
+-
+- o.undo: c.undo
+-
+- o.version: c.version
+-
+- o.window: c.window
+--- 0 ----
+*** ../vim-7.3.190/src/INSTALL 2010-08-15 21:57:28.000000000 +0200
+--- src/INSTALL 2011-05-19 12:36:17.000000000 +0200
+***************
+*** 6,14 ****
+ Contents:
+ 1. Generic
+ 2. Unix
+! 3. RISC OS
+! 4. OS/2 (with EMX 0.9b)
+! 5. Atari MiNT
+
+ See INSTALLami.txt for Amiga
+ See INSTALLmac.txt for Macintosh
+--- 6,13 ----
+ Contents:
+ 1. Generic
+ 2. Unix
+! 3. OS/2 (with EMX 0.9b)
+! 4. Atari MiNT
+
+ See INSTALLami.txt for Amiga
+ See INSTALLmac.txt for Macintosh
+***************
+*** 174,198 ****
+ ./configure --without-local-dir
+
+
+! 3. RISC OS
+! =============
+!
+! Much file renaming is needed before you can compile anything.
+! You'll need UnixLib to link against, GCC and GNU make.
+!
+! I suggest you get the RISC OS binary distribution, which includes the
+! Templates file and the loader.
+!
+! Try here: http://www.ecs.soton.ac.uk/~tal197
+!
+! Do
+! :help riscos
+!
+! within the editor for more information, or read the
+! ../runtime/doc/os_risc.txt help file.
+!
+!
+! 4. OS/2
+ =======
+
+ Summary:
+--- 173,179 ----
+ ./configure --without-local-dir
+
+
+! 3. OS/2
+ =======
+
+ Summary:
+***************
+*** 237,243 ****
+ Check ../runtime/doc/os_os2.txt for additional info on running Vim.
+
+
+! 5. Atari MiNT
+ =============
+
+ [NOTE: this is quite old, it might not work anymore]
+--- 218,224 ----
+ Check ../runtime/doc/os_os2.txt for additional info on running Vim.
+
+
+! 4. Atari MiNT
+ =============
+
+ [NOTE: this is quite old, it might not work anymore]
+*** ../vim-7.3.190/src/Makefile 2011-04-01 13:05:37.000000000 +0200
+--- src/Makefile 2011-05-19 12:37:52.000000000 +0200
+***************
+*** 29,35 ****
+ # - Uncomment the line "CONF_OPT_X = --without-x" if you have X11 but
+ # want to disable using X11 libraries. This speeds up starting Vim,
+ # but the window title will not be set and the X11 selection can not
+! # used.
+ # - Uncomment the line "CONF_OPT_XSMP = --disable-xsmp" if you have the
+ # X11 Session Management Protocol (XSMP) library (libSM) but do not
+ # want to use it.
+--- 29,35 ----
+ # - Uncomment the line "CONF_OPT_X = --without-x" if you have X11 but
+ # want to disable using X11 libraries. This speeds up starting Vim,
+ # but the window title will not be set and the X11 selection can not
+! # be used.
+ # - Uncomment the line "CONF_OPT_XSMP = --disable-xsmp" if you have the
+ # X11 Session Management Protocol (XSMP) library (libSM) but do not
+ # want to use it.
+***************
+*** 730,741 ****
+ ### USL for Unix Systems Laboratories (SYSV 4.2)
+ #EXTRA_DEFS = -DUSL
+
+- ### RISCos on MIPS without X11
+- #EXTRA_DEFS = -DMIPS
+-
+- ### RISCos on MIPS with X11
+- #EXTRA_LIBS = -lsun
+-
+ ### (6) A/UX 3.1.1 with gcc (Jim Jagielski)
+ #CC= gcc -D_POSIX_SOURCE
+ #CFLAGS= -O2
+--- 730,735 ----
+***************
+*** 1633,1639 ****
+ RSRC_DIR = os_mac_rsrc
+
+ PRO_MANUAL = os_amiga.pro os_msdos.pro os_win16.pro os_win32.pro \
+! os_mswin.pro os_beos.pro os_vms.pro os_riscos.pro $(PERL_PRO)
+
+ # Default target is making the executable and tools
+ all: $(VIMTARGET) $(TOOLS) languages $(GUI_BUNDLE)
+--- 1627,1633 ----
+ RSRC_DIR = os_mac_rsrc
+
+ PRO_MANUAL = os_amiga.pro os_msdos.pro os_win16.pro os_win32.pro \
+! os_mswin.pro os_beos.pro os_vms.pro $(PERL_PRO)
+
+ # Default target is making the executable and tools
+ all: $(VIMTARGET) $(TOOLS) languages $(GUI_BUNDLE)
+*** ../vim-7.3.190/src/buffer.c 2011-05-05 17:32:40.000000000 +0200
+--- src/buffer.c 2011-05-19 13:09:25.000000000 +0200
+***************
+*** 1808,1816 ****
+ #ifdef FEAT_AUTOCMD
+ clear_string_option(&buf->b_p_ft);
+ #endif
+- #ifdef FEAT_OSFILETYPE
+- clear_string_option(&buf->b_p_oft);
+- #endif
+ #ifdef FEAT_CINDENT
+ clear_string_option(&buf->b_p_cink);
+ clear_string_option(&buf->b_p_cino);
+--- 1808,1813 ----
+*** ../vim-7.3.190/src/eval.c 2011-05-10 16:41:13.000000000 +0200
+--- src/eval.c 2011-05-19 13:09:43.000000000 +0200
+***************
+*** 12076,12084 ****
+ #ifdef FEAT_OLE
+ "ole",
+ #endif
+- #ifdef FEAT_OSFILETYPE
+- "osfiletype",
+- #endif
+ #ifdef FEAT_PATH_EXTRA
+ "path_extra",
+ #endif
+--- 12076,12081 ----
+*** ../vim-7.3.190/src/feature.h 2010-08-15 21:57:31.000000000 +0200
+--- src/feature.h 2011-05-19 13:09:56.000000000 +0200
+***************
+*** 506,520 ****
+ #endif
+
+ /*
+- * +osfiletype filetype checking in autocommand patterns.
+- * Only on systems that support filetypes (RISC OS).
+- */
+- #if 0
+- # define FEAT_OSFILETYPE
+- # define DFLT_OFT "Text"
+- #endif
+-
+- /*
+ * +viminfo reading/writing the viminfo file. Takes about 8Kbyte
+ * of code.
+ * VIMINFO_FILE Location of user .viminfo file (should start with $).
+--- 506,511 ----
+*** ../vim-7.3.190/src/option.c 2011-04-28 17:24:54.000000000 +0200
+--- src/option.c 2011-05-19 13:11:42.000000000 +0200
+***************
+*** 140,148 ****
+ #define PV_MOD OPT_BUF(BV_MOD)
+ #define PV_MPS OPT_BUF(BV_MPS)
+ #define PV_NF OPT_BUF(BV_NF)
+- #ifdef FEAT_OSFILETYPE
+- # define PV_OFT OPT_BUF(BV_OFT)
+- #endif
+ #ifdef FEAT_COMPL_FUNC
+ # define PV_OFU OPT_BUF(BV_OFU)
+ #endif
+--- 140,145 ----
+***************
+*** 337,345 ****
+ static int p_mod;
+ static char_u *p_mps;
+ static char_u *p_nf;
+- #ifdef FEAT_OSFILETYPE
+- static char_u *p_oft;
+- #endif
+ static int p_pi;
+ #ifdef FEAT_TEXTOBJ
+ static char_u *p_qe;
+--- 334,339 ----
+***************
+*** 1901,1914 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+ {"osfiletype", "oft", P_STRING|P_ALLOCED|P_VI_DEF,
+- #ifdef FEAT_OSFILETYPE
+- (char_u *)&p_oft, PV_OFT,
+- {(char_u *)DFLT_OFT, (char_u *)0L}
+- #else
+ (char_u *)NULL, PV_NONE,
+! {(char_u *)0L, (char_u *)0L}
+! #endif
+! SCRIPTID_INIT},
+ {"paragraphs", "para", P_STRING|P_VI_DEF,
+ (char_u *)&p_para, PV_NONE,
+ {(char_u *)"IPLPPPQPP TPHPLIPpLpItpplpipbp",
+--- 1895,1902 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+ {"osfiletype", "oft", P_STRING|P_ALLOCED|P_VI_DEF,
+ (char_u *)NULL, PV_NONE,
+! {(char_u *)0L, (char_u *)0L} SCRIPTID_INIT},
+ {"paragraphs", "para", P_STRING|P_VI_DEF,
+ (char_u *)&p_para, PV_NONE,
+ {(char_u *)"IPLPPPQPP TPHPLIPpLpItpplpipbp",
+***************
+*** 5282,5290 ****
+ #ifdef FEAT_AUTOCMD
+ check_string_option(&buf->b_p_ft);
+ #endif
+- #ifdef FEAT_OSFILETYPE
+- check_string_option(&buf->b_p_oft);
+- #endif
+ #if defined(FEAT_SMARTINDENT) || defined(FEAT_CINDENT)
+ check_string_option(&buf->b_p_cinw);
+ #endif
+--- 5270,5275 ----
+***************
+*** 9665,9673 ****
+ case PV_MA: return (char_u *)&(curbuf->b_p_ma);
+ case PV_MOD: return (char_u *)&(curbuf->b_changed);
+ case PV_NF: return (char_u *)&(curbuf->b_p_nf);
+- #ifdef FEAT_OSFILETYPE
+- case PV_OFT: return (char_u *)&(curbuf->b_p_oft);
+- #endif
+ case PV_PI: return (char_u *)&(curbuf->b_p_pi);
+ #ifdef FEAT_TEXTOBJ
+ case PV_QE: return (char_u *)&(curbuf->b_p_qe);
+--- 9650,9655 ----
+***************
+*** 10018,10026 ****
+ /* Don't copy 'filetype', it must be detected */
+ buf->b_p_ft = empty_option;
+ #endif
+- #ifdef FEAT_OSFILETYPE
+- buf->b_p_oft = vim_strsave(p_oft);
+- #endif
+ buf->b_p_pi = p_pi;
+ #if defined(FEAT_SMARTINDENT) || defined(FEAT_CINDENT)
+ buf->b_p_cinw = vim_strsave(p_cinw);
+--- 10000,10005 ----
+*** ../vim-7.3.190/src/option.h 2011-02-12 13:59:55.000000000 +0100
+--- src/option.h 2011-05-19 13:11:46.000000000 +0200
+***************
+*** 984,992 ****
+ , BV_MOD
+ , BV_MPS
+ , BV_NF
+- #ifdef FEAT_OSFILETYPE
+- , BV_OFT
+- #endif
+ #ifdef FEAT_COMPL_FUNC
+ , BV_OFU
+ #endif
+--- 984,989 ----
+*** ../vim-7.3.190/src/structs.h 2011-05-10 16:41:13.000000000 +0200
+--- src/structs.h 2011-05-19 13:11:58.000000000 +0200
+***************
+*** 1530,1538 ****
+ int b_p_ml_nobin; /* b_p_ml saved for binary mode */
+ int b_p_ma; /* 'modifiable' */
+ char_u *b_p_nf; /* 'nrformats' */
+- #ifdef FEAT_OSFILETYPE
+- char_u *b_p_oft; /* 'osfiletype' */
+- #endif
+ int b_p_pi; /* 'preserveindent' */
+ #ifdef FEAT_TEXTOBJ
+ char_u *b_p_qe; /* 'quoteescape' */
+--- 1530,1535 ----
+*** ../vim-7.3.190/src/version.c 2011-05-19 12:14:03.000000000 +0200
+--- src/version.c 2011-05-19 13:26:42.000000000 +0200
+***************
+*** 426,436 ****
+ "-ole",
+ # endif
+ #endif
+- #ifdef FEAT_OSFILETYPE
+- "+osfiletype",
+- #else
+- "-osfiletype",
+- #endif
+ #ifdef FEAT_PATH_EXTRA
+ "+path_extra",
+ #else
+--- 426,431 ----
+*** ../vim-7.3.190/src/pty.c 2011-04-11 14:24:33.000000000 +0200
+--- src/pty.c 2011-05-19 12:43:26.000000000 +0200
+***************
+*** 123,130 ****
+ static void initmaster __ARGS((int));
+
+ /*
+! * Open all ptys with O_NOCTTY, just to be on the safe side
+! * (RISCos mips breaks otherwise)
+ */
+ #ifndef O_NOCTTY
+ # define O_NOCTTY 0
+--- 123,129 ----
+ static void initmaster __ARGS((int));
+
+ /*
+! * Open all ptys with O_NOCTTY, just to be on the safe side.
+ */
+ #ifndef O_NOCTTY
+ # define O_NOCTTY 0
+*** ../vim-7.3.190/Filelist 2011-05-10 17:21:34.000000000 +0200
+--- Filelist 2011-05-19 13:37:25.000000000 +0200
+***************
+*** 427,433 ****
+ $(SRC_VMS) \
+ README_os390.txt \
+ src/Make_mint.mak \
+- src/Make_ro.mak \
+ src/if_sniff.c \
+ src/infplist.xml \
+ src/link.390 \
+--- 427,432 ----
+*** ../vim-7.3.190/src/version.c 2011-05-19 12:14:03.000000000 +0200
+--- src/version.c 2011-05-19 13:26:42.000000000 +0200
+***************
+*** 716,717 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 191,
+ /**/
+
+--
+From "know your smileys":
+ :-& Eating spaghetti
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.192 b/source/ap/vim/patches/7.3.192
new file mode 100644
index 000000000..5dab19b49
--- /dev/null
+++ b/source/ap/vim/patches/7.3.192
@@ -0,0 +1,61 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.192
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.192
+Problem: Ex command ":s/ \?/ /g" splits multi-byte characters into bytes.
+ (Dominique Pelle)
+Solution: Advance over whole character instead of one byte.
+Files: src/ex_cmds.c
+
+
+*** ../vim-7.3.191/src/ex_cmds.c 2011-05-10 16:41:13.000000000 +0200
+--- src/ex_cmds.c 2011-05-19 14:23:33.000000000 +0200
+***************
+*** 4625,4631 ****
+ * for a match in this line again. */
+ skip_match = TRUE;
+ else
+! ++matchcol; /* search for a match at next column */
+ goto skip;
+ }
+
+--- 4625,4639 ----
+ * for a match in this line again. */
+ skip_match = TRUE;
+ else
+! {
+! /* search for a match at next column */
+! #ifdef FEAT_MBYTE
+! if (has_mbyte)
+! matchcol += mb_ptr2len(sub_firstline + matchcol);
+! else
+! #endif
+! ++matchcol;
+! }
+ goto skip;
+ }
+
+*** ../vim-7.3.191/src/version.c 2011-05-19 13:40:47.000000000 +0200
+--- src/version.c 2011-05-19 14:28:44.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 192,
+ /**/
+
+--
+From "know your smileys":
+ :-F Bucktoothed vampire with one tooth missing
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.193 b/source/ap/vim/patches/7.3.193
new file mode 100644
index 000000000..acee9ec0e
--- /dev/null
+++ b/source/ap/vim/patches/7.3.193
@@ -0,0 +1,70 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.193
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.193
+Problem: In the command line window ":close" doesn't work properly. (Tony
+ Mechelynck)
+Solution: Use Ctrl_C instead of K_IGNORE for cmdwin_result. (Jean-Rene
+ David)
+Files: src/ex_docmd.c, src/ex_getln.c
+
+
+*** ../vim-7.3.192/src/ex_docmd.c 2011-05-10 16:41:13.000000000 +0200
+--- src/ex_docmd.c 2011-05-19 14:42:56.000000000 +0200
+***************
+*** 6472,6478 ****
+ {
+ # ifdef FEAT_CMDWIN
+ if (cmdwin_type != 0)
+! cmdwin_result = K_IGNORE;
+ else
+ # endif
+ if (!text_locked()
+--- 6472,6478 ----
+ {
+ # ifdef FEAT_CMDWIN
+ if (cmdwin_type != 0)
+! cmdwin_result = Ctrl_C;
+ else
+ # endif
+ if (!text_locked()
+*** ../vim-7.3.192/src/ex_getln.c 2011-04-28 17:21:49.000000000 +0200
+--- src/ex_getln.c 2011-05-19 14:42:56.000000000 +0200
+***************
+*** 6324,6329 ****
+--- 6324,6335 ----
+ ccline.cmdbuff = vim_strsave((char_u *)"qa");
+ cmdwin_result = CAR;
+ }
++ else if (cmdwin_result == Ctrl_C)
++ {
++ /* :q or :close, don't execute any command
++ * and don't modify the cmd window. */
++ ccline.cmdbuff = NULL;
++ }
+ else
+ ccline.cmdbuff = vim_strsave(ml_get_curline());
+ if (ccline.cmdbuff == NULL)
+*** ../vim-7.3.192/src/version.c 2011-05-19 14:30:07.000000000 +0200
+--- src/version.c 2011-05-19 14:48:12.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 193,
+ /**/
+
+--
+There's no place like $(HOME)!
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.194 b/source/ap/vim/patches/7.3.194
new file mode 100644
index 000000000..5a73c0098
--- /dev/null
+++ b/source/ap/vim/patches/7.3.194
@@ -0,0 +1,48 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.194
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.194
+Problem: When "b" is a symlink to directory "a", resolve("b/") doesn't
+ result in "a/". (ZyX)
+Solution: Remove the trailing slash. (Jean-Rene David)
+Files: src/eval.c
+
+
+*** ../vim-7.3.193/src/eval.c 2011-05-19 13:40:47.000000000 +0200
+--- src/eval.c 2011-05-19 14:55:27.000000000 +0200
+***************
+*** 14980,14986 ****
+--- 14980,14989 ----
+
+ len = STRLEN(p);
+ if (len > 0 && after_pathsep(p, p + len))
++ {
+ has_trailing_pathsep = TRUE;
++ p[len - 1] = NUL; /* the trailing slash breaks readlink() */
++ }
+
+ q = getnextcomp(p);
+ if (*q != NUL)
+*** ../vim-7.3.193/src/version.c 2011-05-19 14:50:49.000000000 +0200
+--- src/version.c 2011-05-19 14:54:40.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 194,
+ /**/
+
+--
+Momento mori, ergo carpe diem
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.195 b/source/ap/vim/patches/7.3.195
new file mode 100644
index 000000000..ba1fc2192
--- /dev/null
+++ b/source/ap/vim/patches/7.3.195
@@ -0,0 +1,199 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.195
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.195
+Problem: "} else" causes following lines to be indented too much. (Rouben
+ Rostamian)
+Solution: Better detection for the "else". (Lech Lorens)
+Files: src/misc1.c, src/testdir/test3.in, src/testdir/test3.ok
+
+
+*** ../vim-7.3.194/src/misc1.c 2011-05-10 16:41:13.000000000 +0200
+--- src/misc1.c 2011-05-19 16:30:28.000000000 +0200
+***************
+*** 5482,5489 ****
+ * Recognize a line that starts with '{' or '}', or ends with ';', ',', '{' or
+ * '}'.
+ * Don't consider "} else" a terminated line.
+! * Don't consider a line where there are unmatched opening braces before '}',
+! * ';' or ',' a terminated line.
+ * Return the character terminating the line (ending char's have precedence if
+ * both apply in order to determine initializations).
+ */
+--- 5482,5489 ----
+ * Recognize a line that starts with '{' or '}', or ends with ';', ',', '{' or
+ * '}'.
+ * Don't consider "} else" a terminated line.
+! * If a line begins with an "else", only consider it terminated if no unmatched
+! * opening braces follow (handle "else { foo();" correctly).
+ * Return the character terminating the line (ending char's have precedence if
+ * both apply in order to determine initializations).
+ */
+***************
+*** 5493,5513 ****
+ int incl_open; /* include '{' at the end as terminator */
+ int incl_comma; /* recognize a trailing comma */
+ {
+! char_u found_start = 0;
+! unsigned n_open = 0;
+
+ s = cin_skipcomment(s);
+
+ if (*s == '{' || (*s == '}' && !cin_iselse(s)))
+ found_start = *s;
+
+ while (*s)
+ {
+ /* skip over comments, "" strings and 'c'haracters */
+ s = skip_string(cin_skipcomment(s));
+ if (*s == '}' && n_open > 0)
+ --n_open;
+! if (n_open == 0
+ && (*s == ';' || *s == '}' || (incl_comma && *s == ','))
+ && cin_nocode(s + 1))
+ return *s;
+--- 5493,5517 ----
+ int incl_open; /* include '{' at the end as terminator */
+ int incl_comma; /* recognize a trailing comma */
+ {
+! char_u found_start = 0;
+! unsigned n_open = 0;
+! int is_else = FALSE;
+
+ s = cin_skipcomment(s);
+
+ if (*s == '{' || (*s == '}' && !cin_iselse(s)))
+ found_start = *s;
+
++ if (!found_start)
++ is_else = cin_iselse(s);
++
+ while (*s)
+ {
+ /* skip over comments, "" strings and 'c'haracters */
+ s = skip_string(cin_skipcomment(s));
+ if (*s == '}' && n_open > 0)
+ --n_open;
+! if ((!is_else || n_open == 0)
+ && (*s == ';' || *s == '}' || (incl_comma && *s == ','))
+ && cin_nocode(s + 1))
+ return *s;
+*** ../vim-7.3.194/src/testdir/test3.in 2011-05-10 13:38:23.000000000 +0200
+--- src/testdir/test3.in 2011-05-19 16:29:01.000000000 +0200
+***************
+*** 1345,1351 ****
+
+ STARTTEST
+ :set cino&
+! 2kdd=][
+ ENDTEST
+
+ void func(void)
+--- 1345,1351 ----
+
+ STARTTEST
+ :set cino&
+! 2kdd=4][
+ ENDTEST
+
+ void func(void)
+***************
+*** 1359,1364 ****
+--- 1359,1392 ----
+ printf("Foo!\n");
+ }
+
++ void func1(void)
++ {
++ char* tab[] = {"foo", "bar",
++ "baz", "quux",
++ "this line used", "to be indented incorrectly"};
++ foo();
++ }
++
++ void func2(void)
++ {
++ int tab[] =
++ {1, 2,
++ 3, 4,
++ 5, 6};
++
++ printf("This line used to be indented incorrectly.\n");
++ }
++
++ void func3(void)
++ {
++ int tab[] = {
++ 1, 2,
++ 3, 4,
++ 5, 6};
++
++ printf("Don't you dare indent this line incorrectly!\n);
++ }
++
+ STARTTEST
+ :set cino&
+ 2kdd=][
+*** ../vim-7.3.194/src/testdir/test3.ok 2011-05-10 13:38:23.000000000 +0200
+--- src/testdir/test3.ok 2011-05-19 16:29:01.000000000 +0200
+***************
+*** 1216,1221 ****
+--- 1216,1249 ----
+ printf("Foo!\n");
+ }
+
++ void func1(void)
++ {
++ char* tab[] = {"foo", "bar",
++ "baz", "quux",
++ "this line used", "to be indented incorrectly"};
++ foo();
++ }
++
++ void func2(void)
++ {
++ int tab[] =
++ {1, 2,
++ 3, 4,
++ 5, 6};
++
++ printf("This line used to be indented incorrectly.\n");
++ }
++
++ void func3(void)
++ {
++ int tab[] = {
++ 1, 2,
++ 3, 4,
++ 5, 6};
++
++ printf("Don't you dare indent this line incorrectly!\n);
++ }
++
+
+ void func(void)
+ {
+*** ../vim-7.3.194/src/version.c 2011-05-19 14:59:07.000000000 +0200
+--- src/version.c 2011-05-19 16:34:16.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 195,
+ /**/
+
+--
+I AM THANKFUL...
+...for the taxes that I pay because it means that I am employed.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.196 b/source/ap/vim/patches/7.3.196
new file mode 100644
index 000000000..0d6be8c9f
--- /dev/null
+++ b/source/ap/vim/patches/7.3.196
@@ -0,0 +1,224 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.196
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.196
+Problem: Can't intercept a character that is going to be inserted.
+Solution: Add the InsertCharPre autocommand event. (Jakson A. Aquino)
+Files: runtime/doc/autocmd.txt, runtime/doc/eval.txt,
+ runtime/doc/map.txt, src/edit.c, src/eval.c, src/fileio.c,
+ src/vim.h
+
+
+*** ../mercurial/vim73/runtime/doc/autocmd.txt 2011-04-28 19:01:26.000000000 +0200
+--- runtime/doc/autocmd.txt 2011-05-19 17:12:17.000000000 +0200
+***************
+*** 299,304 ****
+--- 299,306 ----
+ |InsertEnter| starting Insert mode
+ |InsertChange| when typing <Insert> while in Insert or Replace mode
+ |InsertLeave| when leaving Insert mode
++ |InsertCharPre| when a character was typed in Insert mode, before
++ inserting it
+
+ |ColorScheme| after loading a color scheme
+
+***************
+*** 657,662 ****
+--- 659,675 ----
+ indicates the new mode.
+ Be careful not to move the cursor or do
+ anything else that the user does not expect.
++ *InsertCharPre*
++ InsertCharPre When a character is typed in Insert mode,
++ before inserting the char.
++ The |v:char| variable indicates the char typed
++ and can be changed during the event to insert
++ a different character. When |v:char| is set
++ to more than one character this text is
++ inserted literally.
++ It is not allowed to change the text |textlock|.
++ The event is not triggered when 'paste' is
++ set.
+ *InsertEnter*
+ InsertEnter Just before starting Insert mode. Also for
+ Replace mode and Virtual Replace mode. The
+*** ../mercurial/vim73/runtime/doc/eval.txt 2011-05-19 12:22:41.000000000 +0200
+--- runtime/doc/eval.txt 2011-05-19 16:55:58.000000000 +0200
+***************
+*** 1293,1298 ****
+--- 1293,1299 ----
+ *v:char* *char-variable*
+ v:char Argument for evaluating 'formatexpr' and used for the typed
+ character when using <expr> in an abbreviation |:map-<expr>|.
++ It is also used by the |InsertPreChar| event.
+
+ *v:charconvert_from* *charconvert_from-variable*
+ v:charconvert_from
+*** ../mercurial/vim73/runtime/doc/map.txt 2011-05-10 17:17:38.000000000 +0200
+--- runtime/doc/map.txt 2011-05-19 16:40:34.000000000 +0200
+***************
+*** 226,232 ****
+
+ For abbreviations |v:char| is set to the character that was typed to trigger
+ the abbreviation. You can use this to decide how to expand the {lhs}. You
+! can't change v:char and you should not insert it.
+
+ Be very careful about side effects! The expression is evaluated while
+ obtaining characters, you may very well make the command dysfunctional.
+--- 226,232 ----
+
+ For abbreviations |v:char| is set to the character that was typed to trigger
+ the abbreviation. You can use this to decide how to expand the {lhs}. You
+! you should not either insert or change the v:char.
+
+ Be very careful about side effects! The expression is evaluated while
+ obtaining characters, you may very well make the command dysfunctional.
+*** ../mercurial/vim73/src/edit.c 2011-05-10 14:22:10.000000000 +0200
+--- src/edit.c 2011-05-19 17:20:53.000000000 +0200
+***************
+*** 1381,1390 ****
+ goto do_intr;
+ #endif
+
+ /*
+ * Insert a nomal character.
+ */
+! normalchar:
+ #ifdef FEAT_SMARTINDENT
+ /* Try to perform smart-indenting. */
+ ins_try_si(c);
+--- 1381,1425 ----
+ goto do_intr;
+ #endif
+
++ normalchar:
+ /*
+ * Insert a nomal character.
+ */
+! #ifdef FEAT_AUTOCMD
+! if (!p_paste)
+! {
+! /* Trigger the InsertCharPre event. Lock the text to avoid
+! * weird things from happening. */
+! set_vim_var_char(c);
+! ++textlock;
+! if (apply_autocmds(EVENT_INSERTCHARPRE, NULL, NULL,
+! FALSE, curbuf))
+! {
+! /* Get the new value of v:char. If it is more than one
+! * character insert it literally. */
+! char_u *s = get_vim_var_str(VV_CHAR);
+! if (MB_CHARLEN(s) > 1)
+! {
+! if (stop_arrow() != FAIL)
+! {
+! ins_str(s);
+! AppendToRedobuffLit(s, -1);
+! }
+! c = NUL;
+! }
+! else
+! c = PTR2CHAR(s);
+! }
+!
+! set_vim_var_string(VV_CHAR, NULL, -1);
+! --textlock;
+!
+! /* If the new value is an empty string then don't insert a
+! * char. */
+! if (c == NUL)
+! break;
+! }
+! #endif
+ #ifdef FEAT_SMARTINDENT
+ /* Try to perform smart-indenting. */
+ ins_try_si(c);
+***************
+*** 3491,3501 ****
+ return;
+ }
+ p += len;
+! #ifdef FEAT_MBYTE
+! c = mb_ptr2char(p);
+! #else
+! c = *p;
+! #endif
+ ins_compl_addleader(c);
+ }
+
+--- 3526,3532 ----
+ return;
+ }
+ p += len;
+! c = PTR2CHAR(p);
+ ins_compl_addleader(c);
+ }
+
+*** ../mercurial/vim73/src/eval.c 2011-05-19 14:59:07.000000000 +0200
+--- src/eval.c 2011-05-19 16:40:39.000000000 +0200
+***************
+*** 352,358 ****
+ {VV_NAME("swapname", VAR_STRING), VV_RO},
+ {VV_NAME("swapchoice", VAR_STRING), 0},
+ {VV_NAME("swapcommand", VAR_STRING), VV_RO},
+! {VV_NAME("char", VAR_STRING), VV_RO},
+ {VV_NAME("mouse_win", VAR_NUMBER), 0},
+ {VV_NAME("mouse_lnum", VAR_NUMBER), 0},
+ {VV_NAME("mouse_col", VAR_NUMBER), 0},
+--- 352,358 ----
+ {VV_NAME("swapname", VAR_STRING), VV_RO},
+ {VV_NAME("swapchoice", VAR_STRING), 0},
+ {VV_NAME("swapcommand", VAR_STRING), VV_RO},
+! {VV_NAME("char", VAR_STRING), 0},
+ {VV_NAME("mouse_win", VAR_NUMBER), 0},
+ {VV_NAME("mouse_lnum", VAR_NUMBER), 0},
+ {VV_NAME("mouse_col", VAR_NUMBER), 0},
+*** ../mercurial/vim73/src/fileio.c 2011-05-10 16:41:13.000000000 +0200
+--- src/fileio.c 2011-05-19 16:40:39.000000000 +0200
+***************
+*** 7662,7667 ****
+--- 7662,7668 ----
+ {"InsertChange", EVENT_INSERTCHANGE},
+ {"InsertEnter", EVENT_INSERTENTER},
+ {"InsertLeave", EVENT_INSERTLEAVE},
++ {"InsertCharPre", EVENT_INSERTCHARPRE},
+ {"MenuPopup", EVENT_MENUPOPUP},
+ {"QuickFixCmdPost", EVENT_QUICKFIXCMDPOST},
+ {"QuickFixCmdPre", EVENT_QUICKFIXCMDPRE},
+*** ../mercurial/vim73/src/vim.h 2011-05-10 16:41:13.000000000 +0200
+--- src/vim.h 2011-05-19 16:40:39.000000000 +0200
+***************
+*** 1274,1279 ****
+--- 1274,1280 ----
+ EVENT_WINENTER, /* after entering a window */
+ EVENT_WINLEAVE, /* before leaving a window */
+ EVENT_ENCODINGCHANGED, /* after changing the 'encoding' option */
++ EVENT_INSERTCHARPRE, /* before inserting a char */
+ EVENT_CURSORHOLD, /* cursor in same position for a while */
+ EVENT_CURSORHOLDI, /* idem, in Insert mode */
+ EVENT_FUNCUNDEFINED, /* if calling a function which doesn't exist */
+*** ../vim-7.3.195/src/version.c 2011-05-19 16:35:05.000000000 +0200
+--- src/version.c 2011-05-19 17:15:41.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 196,
+ /**/
+
+--
+I AM THANKFUL...
+...for the mess to clean after a party because it means I have
+been surrounded by friends.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.197 b/source/ap/vim/patches/7.3.197
new file mode 100644
index 000000000..c33a2cb29
--- /dev/null
+++ b/source/ap/vim/patches/7.3.197
@@ -0,0 +1,78 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.197
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.197
+Problem: When a QuickfixCmdPost event removes all errors, Vim still tries
+ to jump to the first error, resulting in E42.
+Solution: Get the number of error after the autocmd event. (Mike Lundy)
+Files: src/quickfix.c
+
+
+*** ../mercurial/vim73/src/quickfix.c 2011-05-10 16:41:13.000000000 +0200
+--- src/quickfix.c 2011-05-19 17:34:11.000000000 +0200
+***************
+*** 2813,2829 ****
+ (eap->cmdidx != CMD_grepadd
+ && eap->cmdidx != CMD_lgrepadd),
+ *eap->cmdlinep);
+ #ifdef FEAT_AUTOCMD
+ if (au_name != NULL)
+ apply_autocmds(EVENT_QUICKFIXCMDPOST, au_name,
+ curbuf->b_fname, TRUE, curbuf);
+ #endif
+ if (res > 0 && !eap->forceit)
+- {
+- if (wp != NULL)
+- qi = GET_LOC_LIST(wp);
+ qf_jump(qi, 0, 0, FALSE); /* display first error */
+- }
+
+ mch_remove(fname);
+ vim_free(fname);
+--- 2813,2833 ----
+ (eap->cmdidx != CMD_grepadd
+ && eap->cmdidx != CMD_lgrepadd),
+ *eap->cmdlinep);
++ if (wp != NULL)
++ qi = GET_LOC_LIST(wp);
+ #ifdef FEAT_AUTOCMD
+ if (au_name != NULL)
++ {
+ apply_autocmds(EVENT_QUICKFIXCMDPOST, au_name,
+ curbuf->b_fname, TRUE, curbuf);
++ if (qi->qf_curlist < qi->qf_listcount)
++ res = qi->qf_lists[qi->qf_curlist].qf_count;
++ else
++ res = 0;
++ }
+ #endif
+ if (res > 0 && !eap->forceit)
+ qf_jump(qi, 0, 0, FALSE); /* display first error */
+
+ mch_remove(fname);
+ vim_free(fname);
+*** ../vim-7.3.196/src/version.c 2011-05-19 17:25:36.000000000 +0200
+--- src/version.c 2011-05-19 17:41:50.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 197,
+ /**/
+
+--
+I AM THANKFUL...
+...for the clothes that fit a little too snug because it
+means I have more than enough to eat.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.198 b/source/ap/vim/patches/7.3.198
new file mode 100644
index 000000000..5ef4a8aad
--- /dev/null
+++ b/source/ap/vim/patches/7.3.198
@@ -0,0 +1,403 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.198
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.198
+Problem: No completion for ":lang".
+Solution: Get locales to complete from. (Dominique Pelle)
+Files: src/eval.c, src/ex_cmds2.c, src/ex_getln.c,
+ src/proto/ex_cmds2.pro, src/proto/ex_getln.pro, src/vim.h
+
+
+*** ../mercurial/vim73/src/eval.c 2011-05-19 17:25:36.000000000 +0200
+--- src/eval.c 2011-05-19 17:52:02.000000000 +0200
+***************
+*** 911,916 ****
+--- 911,917 ----
+ hash_clear(&compat_hashtab);
+
+ free_scriptnames();
++ free_locales();
+
+ /* global variables */
+ vars_clear(&globvarht);
+*** ../mercurial/vim73/src/ex_cmds2.c 2011-05-10 16:41:13.000000000 +0200
+--- src/ex_cmds2.c 2011-05-19 18:16:54.000000000 +0200
+***************
+*** 1476,1482 ****
+ #endif
+
+ /*
+! * Ask the user what to do when abondoning a changed buffer.
+ * Must check 'write' option first!
+ */
+ void
+--- 1476,1482 ----
+ #endif
+
+ /*
+! * Ask the user what to do when abandoning a changed buffer.
+ * Must check 'write' option first!
+ */
+ void
+***************
+*** 4153,4158 ****
+--- 4153,4234 ----
+ }
+
+ # if defined(FEAT_CMDL_COMPL) || defined(PROTO)
++
++ static char_u **locales = NULL; /* Array of all available locales */
++ static int did_init_locales = FALSE;
++
++ static void init_locales __ARGS((void));
++ static char_u **find_locales __ARGS((void));
++
++ /*
++ * Lazy initialization of all available locales.
++ */
++ static void
++ init_locales()
++ {
++ if (!did_init_locales)
++ {
++ did_init_locales = TRUE;
++ locales = find_locales();
++ }
++ }
++
++ /* Return an array of strings for all available locales + NULL for the
++ * last element. Return NULL in case of error. */
++ static char_u **
++ find_locales()
++ {
++ garray_T locales_ga;
++ char_u *loc;
++
++ /* Find all available locales by running command "locale -a". If this
++ * doesn't work we won't have completion. */
++ char_u *locale_a = get_cmd_output((char_u *)"locale -a",
++ NULL, SHELL_SILENT);
++ if (locale_a == NULL)
++ return NULL;
++ ga_init2(&locales_ga, sizeof(char_u *), 20);
++
++ /* Transform locale_a string where each locale is separated by "\n"
++ * into an array of locale strings. */
++ loc = (char_u *)strtok((char *)locale_a, "\n");
++
++ while (loc != NULL)
++ {
++ if (ga_grow(&locales_ga, 1) == FAIL)
++ break;
++ loc = vim_strsave(loc);
++ if (loc == NULL)
++ break;
++
++ ((char_u **)locales_ga.ga_data)[locales_ga.ga_len++] = loc;
++ loc = (char_u *)strtok(NULL, "\n");
++ }
++ vim_free(locale_a);
++ if (ga_grow(&locales_ga, 1) == FAIL)
++ {
++ ga_clear(&locales_ga);
++ return NULL;
++ }
++ ((char_u **)locales_ga.ga_data)[locales_ga.ga_len] = NULL;
++ return (char_u **)locales_ga.ga_data;
++ }
++
++ # if defined(EXITFREE) || defined(PROTO)
++ void
++ free_locales()
++ {
++ int i;
++ if (locales != NULL)
++ {
++ for (i = 0; locales[i] != NULL; i++)
++ vim_free(locales[i]);
++ vim_free(locales);
++ locales = NULL;
++ }
++ }
++ # endif
++
+ /*
+ * Function given to ExpandGeneric() to obtain the possible arguments of the
+ * ":language" command.
+***************
+*** 4168,4174 ****
+ return (char_u *)"ctype";
+ if (idx == 2)
+ return (char_u *)"time";
+! return NULL;
+ }
+ # endif
+
+--- 4244,4268 ----
+ return (char_u *)"ctype";
+ if (idx == 2)
+ return (char_u *)"time";
+!
+! init_locales();
+! if (locales == NULL)
+! return NULL;
+! return locales[idx - 3];
+! }
+!
+! /*
+! * Function given to ExpandGeneric() to obtain the available locales.
+! */
+! char_u *
+! get_locales(xp, idx)
+! expand_T *xp UNUSED;
+! int idx;
+! {
+! init_locales();
+! if (locales == NULL)
+! return NULL;
+! return locales[idx];
+ }
+ # endif
+
+*** ../mercurial/vim73/src/ex_getln.c 2011-05-19 14:50:49.000000000 +0200
+--- src/ex_getln.c 2011-05-19 18:18:49.000000000 +0200
+***************
+*** 4571,4618 ****
+ int context;
+ char_u *((*func)__ARGS((expand_T *, int)));
+ int ic;
+ } tab[] =
+ {
+! {EXPAND_COMMANDS, get_command_name, FALSE},
+! {EXPAND_BEHAVE, get_behave_arg, TRUE},
+ #ifdef FEAT_USR_CMDS
+! {EXPAND_USER_COMMANDS, get_user_commands, FALSE},
+! {EXPAND_USER_CMD_FLAGS, get_user_cmd_flags, FALSE},
+! {EXPAND_USER_NARGS, get_user_cmd_nargs, FALSE},
+! {EXPAND_USER_COMPLETE, get_user_cmd_complete, FALSE},
+ #endif
+ #ifdef FEAT_EVAL
+! {EXPAND_USER_VARS, get_user_var_name, FALSE},
+! {EXPAND_FUNCTIONS, get_function_name, FALSE},
+! {EXPAND_USER_FUNC, get_user_func_name, FALSE},
+! {EXPAND_EXPRESSION, get_expr_name, FALSE},
+ #endif
+ #ifdef FEAT_MENU
+! {EXPAND_MENUS, get_menu_name, FALSE},
+! {EXPAND_MENUNAMES, get_menu_names, FALSE},
+ #endif
+ #ifdef FEAT_SYN_HL
+! {EXPAND_SYNTAX, get_syntax_name, TRUE},
+ #endif
+! {EXPAND_HIGHLIGHT, get_highlight_name, TRUE},
+ #ifdef FEAT_AUTOCMD
+! {EXPAND_EVENTS, get_event_name, TRUE},
+! {EXPAND_AUGROUP, get_augroup_name, TRUE},
+ #endif
+ #ifdef FEAT_CSCOPE
+! {EXPAND_CSCOPE, get_cscope_name, TRUE},
+ #endif
+ #ifdef FEAT_SIGNS
+! {EXPAND_SIGN, get_sign_name, TRUE},
+ #endif
+ #ifdef FEAT_PROFILE
+! {EXPAND_PROFILE, get_profile_name, TRUE},
+ #endif
+ #if (defined(HAVE_LOCALE_H) || defined(X_LOCALE)) \
+ && (defined(FEAT_GETTEXT) || defined(FEAT_MBYTE))
+! {EXPAND_LANGUAGE, get_lang_arg, TRUE},
+ #endif
+! {EXPAND_ENV_VARS, get_env_name, TRUE},
+ };
+ int i;
+
+--- 4571,4620 ----
+ int context;
+ char_u *((*func)__ARGS((expand_T *, int)));
+ int ic;
++ int escaped;
+ } tab[] =
+ {
+! {EXPAND_COMMANDS, get_command_name, FALSE, TRUE},
+! {EXPAND_BEHAVE, get_behave_arg, TRUE, TRUE},
+ #ifdef FEAT_USR_CMDS
+! {EXPAND_USER_COMMANDS, get_user_commands, FALSE, TRUE},
+! {EXPAND_USER_CMD_FLAGS, get_user_cmd_flags, FALSE, TRUE},
+! {EXPAND_USER_NARGS, get_user_cmd_nargs, FALSE, TRUE},
+! {EXPAND_USER_COMPLETE, get_user_cmd_complete, FALSE, TRUE},
+ #endif
+ #ifdef FEAT_EVAL
+! {EXPAND_USER_VARS, get_user_var_name, FALSE, TRUE},
+! {EXPAND_FUNCTIONS, get_function_name, FALSE, TRUE},
+! {EXPAND_USER_FUNC, get_user_func_name, FALSE, TRUE},
+! {EXPAND_EXPRESSION, get_expr_name, FALSE, TRUE},
+ #endif
+ #ifdef FEAT_MENU
+! {EXPAND_MENUS, get_menu_name, FALSE, TRUE},
+! {EXPAND_MENUNAMES, get_menu_names, FALSE, TRUE},
+ #endif
+ #ifdef FEAT_SYN_HL
+! {EXPAND_SYNTAX, get_syntax_name, TRUE, TRUE},
+ #endif
+! {EXPAND_HIGHLIGHT, get_highlight_name, TRUE, TRUE},
+ #ifdef FEAT_AUTOCMD
+! {EXPAND_EVENTS, get_event_name, TRUE, TRUE},
+! {EXPAND_AUGROUP, get_augroup_name, TRUE, TRUE},
+ #endif
+ #ifdef FEAT_CSCOPE
+! {EXPAND_CSCOPE, get_cscope_name, TRUE, TRUE},
+ #endif
+ #ifdef FEAT_SIGNS
+! {EXPAND_SIGN, get_sign_name, TRUE, TRUE},
+ #endif
+ #ifdef FEAT_PROFILE
+! {EXPAND_PROFILE, get_profile_name, TRUE, TRUE},
+ #endif
+ #if (defined(HAVE_LOCALE_H) || defined(X_LOCALE)) \
+ && (defined(FEAT_GETTEXT) || defined(FEAT_MBYTE))
+! {EXPAND_LANGUAGE, get_lang_arg, TRUE, FALSE},
+! {EXPAND_LOCALES, get_locales, TRUE, FALSE},
+ #endif
+! {EXPAND_ENV_VARS, get_env_name, TRUE, TRUE},
+ };
+ int i;
+
+***************
+*** 4626,4632 ****
+ {
+ if (tab[i].ic)
+ regmatch.rm_ic = TRUE;
+! ret = ExpandGeneric(xp, &regmatch, num_file, file, tab[i].func);
+ break;
+ }
+ }
+--- 4628,4635 ----
+ {
+ if (tab[i].ic)
+ regmatch.rm_ic = TRUE;
+! ret = ExpandGeneric(xp, &regmatch, num_file, file,
+! tab[i].func, tab[i].escaped);
+ break;
+ }
+ }
+***************
+*** 4648,4660 ****
+ * Returns OK when no problems encountered, FAIL for error (out of memory).
+ */
+ int
+! ExpandGeneric(xp, regmatch, num_file, file, func)
+ expand_T *xp;
+ regmatch_T *regmatch;
+ int *num_file;
+ char_u ***file;
+ char_u *((*func)__ARGS((expand_T *, int)));
+ /* returns a string from the list */
+ {
+ int i;
+ int count = 0;
+--- 4651,4664 ----
+ * Returns OK when no problems encountered, FAIL for error (out of memory).
+ */
+ int
+! ExpandGeneric(xp, regmatch, num_file, file, func, escaped)
+ expand_T *xp;
+ regmatch_T *regmatch;
+ int *num_file;
+ char_u ***file;
+ char_u *((*func)__ARGS((expand_T *, int)));
+ /* returns a string from the list */
++ int escaped;
+ {
+ int i;
+ int count = 0;
+***************
+*** 4679,4685 ****
+ {
+ if (round)
+ {
+! str = vim_strsave_escaped(str, (char_u *)" \t\\.");
+ (*file)[count] = str;
+ #ifdef FEAT_MENU
+ if (func == get_menu_names && str != NULL)
+--- 4683,4692 ----
+ {
+ if (round)
+ {
+! if (escaped)
+! str = vim_strsave_escaped(str, (char_u *)" \t\\.");
+! else
+! str = vim_strsave(str);
+ (*file)[count] = str;
+ #ifdef FEAT_MENU
+ if (func == get_menu_names && str != NULL)
+*** ../mercurial/vim73/src/proto/ex_cmds2.pro 2010-05-15 21:22:11.000000000 +0200
+--- src/proto/ex_cmds2.pro 2011-05-19 17:53:52.000000000 +0200
+***************
+*** 83,87 ****
+--- 83,89 ----
+ char_u *get_mess_lang __ARGS((void));
+ void set_lang_var __ARGS((void));
+ void ex_language __ARGS((exarg_T *eap));
++ void free_locales __ARGS((void));
+ char_u *get_lang_arg __ARGS((expand_T *xp, int idx));
++ char_u *get_locales __ARGS((expand_T *xp, int idx));
+ /* vim: set ft=c : */
+*** ../mercurial/vim73/src/proto/ex_getln.pro 2010-08-16 21:23:30.000000000 +0200
+--- src/proto/ex_getln.pro 2011-05-19 17:54:00.000000000 +0200
+***************
+*** 31,37 ****
+ char_u *addstar __ARGS((char_u *fname, int len, int context));
+ void set_cmd_context __ARGS((expand_T *xp, char_u *str, int len, int col));
+ int expand_cmdline __ARGS((expand_T *xp, char_u *str, int col, int *matchcount, char_u ***matches));
+! int ExpandGeneric __ARGS((expand_T *xp, regmatch_T *regmatch, int *num_file, char_u ***file, char_u *((*func)(expand_T *, int))));
+ char_u *globpath __ARGS((char_u *path, char_u *file, int expand_options));
+ void init_history __ARGS((void));
+ int get_histtype __ARGS((char_u *name));
+--- 31,37 ----
+ char_u *addstar __ARGS((char_u *fname, int len, int context));
+ void set_cmd_context __ARGS((expand_T *xp, char_u *str, int len, int col));
+ int expand_cmdline __ARGS((expand_T *xp, char_u *str, int col, int *matchcount, char_u ***matches));
+! int ExpandGeneric __ARGS((expand_T *xp, regmatch_T *regmatch, int *num_file, char_u ***file, char_u *((*func)(expand_T *, int)), int escaped));
+ char_u *globpath __ARGS((char_u *path, char_u *file, int expand_options));
+ void init_history __ARGS((void));
+ int get_histtype __ARGS((char_u *name));
+*** ../mercurial/vim73/src/vim.h 2011-05-19 17:25:36.000000000 +0200
+--- src/vim.h 2011-05-19 17:52:02.000000000 +0200
+***************
+*** 779,784 ****
+--- 779,785 ----
+ #define EXPAND_FILETYPE 37
+ #define EXPAND_FILES_IN_PATH 38
+ #define EXPAND_OWNSYNTAX 39
++ #define EXPAND_LOCALES 40
+
+ /* Values for exmode_active (0 is no exmode) */
+ #define EXMODE_NORMAL 1
+*** ../vim-7.3.197/src/version.c 2011-05-19 17:42:54.000000000 +0200
+--- src/version.c 2011-05-19 18:24:58.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 198,
+ /**/
+
+--
+The primary purpose of the DATA statement is to give names to constants;
+instead of referring to pi as 3.141592653589793 at every appearance, the
+variable PI can be given that value with a DATA statement and used instead
+of the longer form of the constant. This also simplifies modifying the
+program, should the value of pi change.
+ -- FORTRAN manual for Xerox Computers
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.199 b/source/ap/vim/patches/7.3.199
new file mode 100644
index 000000000..8bdd97ab1
--- /dev/null
+++ b/source/ap/vim/patches/7.3.199
@@ -0,0 +1,57 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.199
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.199
+Problem: MS-Windows: Compilation problem of OLE with MingW compiler.
+Solution: Put #ifdef around declarations. (Guopeng Wen)
+Files: src/if_ole.h
+
+
+*** ../mercurial/vim73/src/if_ole.h 2010-05-15 21:22:11.000000000 +0200
+--- src/if_ole.h 2011-05-25 12:05:50.000000000 +0200
+***************
+*** 46,53 ****
+ /* header files for imported files */
+ #include "oaidl.h"
+
+! void __RPC_FAR * __RPC_USER MIDL_user_allocate(size_t);
+! void __RPC_USER MIDL_user_free( void __RPC_FAR * );
+
+ #ifndef __IVim_INTERFACE_DEFINED__
+ #define __IVim_INTERFACE_DEFINED__
+--- 46,56 ----
+ /* header files for imported files */
+ #include "oaidl.h"
+
+! #ifndef __MIDL_user_allocate_free_DEFINED__
+! #define __MIDL_user_allocate_free_DEFINED__
+! void __RPC_FAR * __RPC_USER MIDL_user_allocate(size_t);
+! void __RPC_USER MIDL_user_free( void __RPC_FAR * );
+! #endif
+
+ #ifndef __IVim_INTERFACE_DEFINED__
+ #define __IVim_INTERFACE_DEFINED__
+*** ../vim-7.3.198/src/version.c 2011-05-19 18:26:34.000000000 +0200
+--- src/version.c 2011-05-25 12:08:54.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 199,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+104. When people ask about the Presidential Election you ask "Which country?"
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.200 b/source/ap/vim/patches/7.3.200
new file mode 100644
index 000000000..601947119
--- /dev/null
+++ b/source/ap/vim/patches/7.3.200
@@ -0,0 +1,75 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.200
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.200 (after 7.3.198)
+Problem: CTRL-D doesn't complete :lang.
+Solution: Add the missing part of the change. (Dominique Pelle)
+Files: src/ex_docmd.c
+
+
+*** ../mercurial/vim73/src/ex_docmd.c 2011-05-19 14:50:49.000000000 +0200
+--- src/ex_docmd.c 2011-05-25 12:45:02.000000000 +0200
+***************
+*** 3861,3873 ****
+ #if (defined(HAVE_LOCALE_H) || defined(X_LOCALE)) \
+ && (defined(FEAT_GETTEXT) || defined(FEAT_MBYTE))
+ case CMD_language:
+! if (*skiptowhite(arg) == NUL)
+ {
+ xp->xp_context = EXPAND_LANGUAGE;
+ xp->xp_pattern = arg;
+ }
+ else
+! xp->xp_context = EXPAND_NOTHING;
+ break;
+ #endif
+ #if defined(FEAT_PROFILE)
+--- 3861,3884 ----
+ #if (defined(HAVE_LOCALE_H) || defined(X_LOCALE)) \
+ && (defined(FEAT_GETTEXT) || defined(FEAT_MBYTE))
+ case CMD_language:
+! p = skiptowhite(arg);
+! if (*p == NUL)
+ {
+ xp->xp_context = EXPAND_LANGUAGE;
+ xp->xp_pattern = arg;
+ }
+ else
+! {
+! if ( STRNCMP(arg, "messages", p - arg) == 0
+! || STRNCMP(arg, "ctype", p - arg) == 0
+! || STRNCMP(arg, "time", p - arg) == 0)
+! {
+! xp->xp_context = EXPAND_LOCALES;
+! xp->xp_pattern = skipwhite(p);
+! }
+! else
+! xp->xp_context = EXPAND_NOTHING;
+! }
+ break;
+ #endif
+ #if defined(FEAT_PROFILE)
+*** ../vim-7.3.199/src/version.c 2011-05-25 12:09:46.000000000 +0200
+--- src/version.c 2011-05-25 12:49:49.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 200,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+105. When someone asks you for your address, you tell them your URL.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.201 b/source/ap/vim/patches/7.3.201
new file mode 100644
index 000000000..0481afd85
--- /dev/null
+++ b/source/ap/vim/patches/7.3.201
@@ -0,0 +1,124 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.201
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.201 (after 7.3.195)
+Problem: "} else" still causes following lines to be indented too much.
+Solution: Better detection for the "else" block. (Lech Lorens)
+Files: src/misc1.c, src/testdir/test3.in, src/testdir/test3.ok
+
+
+*** ../mercurial/vim73/src/misc1.c 2011-05-19 16:35:05.000000000 +0200
+--- src/misc1.c 2011-05-25 13:29:45.000000000 +0200
+***************
+*** 7541,7557 ****
+
+ /*
+ * When searching for a terminated line, don't use the
+! * one between the "if" and the "else".
+ * Need to use the scope of this "else". XXX
+ * If whilelevel != 0 continue looking for a "do {".
+ */
+! if (cin_iselse(l)
+! && whilelevel == 0
+! && ((trypos = find_start_brace(ind_maxcomment))
+! == NULL
+ || find_match(LOOKFOR_IF, trypos->lnum,
+! ind_maxparen, ind_maxcomment) == FAIL))
+! break;
+ }
+
+ /*
+--- 7541,7565 ----
+
+ /*
+ * When searching for a terminated line, don't use the
+! * one between the "if" and the matching "else".
+ * Need to use the scope of this "else". XXX
+ * If whilelevel != 0 continue looking for a "do {".
+ */
+! if (cin_iselse(l) && whilelevel == 0)
+! {
+! /* If we're looking at "} else", let's make sure we
+! * find the opening brace of the enclosing scope,
+! * not the one from "if () {". */
+! if (*l == '}')
+! curwin->w_cursor.col =
+! (l - ml_get_curline()) + 1;
+!
+! if ((trypos = find_start_brace(ind_maxcomment))
+! == NULL
+ || find_match(LOOKFOR_IF, trypos->lnum,
+! ind_maxparen, ind_maxcomment) == FAIL)
+! break;
+! }
+ }
+
+ /*
+*** ../mercurial/vim73/src/testdir/test3.in 2011-05-19 16:35:05.000000000 +0200
+--- src/testdir/test3.in 2011-05-25 13:23:51.000000000 +0200
+***************
+*** 1413,1418 ****
+--- 1413,1433 ----
+ }
+
+ STARTTEST
++ :set cino&
++ 2kdd=][
++ ENDTEST
++
++ void func(void)
++ {
++ for (int i = 0; i < 10; ++i)
++ if (i & 1) {
++ foo(1);
++ } else
++ foo(0);
++ baz();
++ }
++
++ STARTTEST
+ :g/^STARTTEST/.,/^ENDTEST/d
+ :1;/start of AUTO/,$wq! test.out
+ ENDTEST
+*** ../mercurial/vim73/src/testdir/test3.ok 2011-05-19 16:35:05.000000000 +0200
+--- src/testdir/test3.ok 2011-05-25 13:23:51.000000000 +0200
+***************
+*** 1262,1264 ****
+--- 1262,1275 ----
+ foo();
+ }
+
++
++ void func(void)
++ {
++ for (int i = 0; i < 10; ++i)
++ if (i & 1) {
++ foo(1);
++ } else
++ foo(0);
++ baz();
++ }
++
+*** ../vim-7.3.200/src/version.c 2011-05-25 12:51:17.000000000 +0200
+--- src/version.c 2011-05-25 13:33:16.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 201,
+ /**/
+
+--
+Laughing helps. It's like jogging on the inside.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.202 b/source/ap/vim/patches/7.3.202
new file mode 100644
index 000000000..1289e0851
--- /dev/null
+++ b/source/ap/vim/patches/7.3.202
@@ -0,0 +1,868 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.202
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.202
+Problem: Cannot influence the indent inside a namespace.
+Solution: Add the "N" 'cino' parameter. (Konstantin Lepa)
+Files: runtime/doc/indent.txt, src/misc1.c, src/testdir/test3.in,
+ src/testdir/test3.ok
+
+
+*** ../mercurial/vim73/runtime/doc/indent.txt 2011-04-28 19:01:26.000000000 +0200
+--- runtime/doc/indent.txt 2011-05-25 14:35:37.000000000 +0200
+***************
+*** 128,140 ****
+ used CTRL-T or CTRL-D.
+
+ *cinoptions-values*
+! The 'cinoptions' option sets how Vim performs indentation. In the list below,
+ "N" represents a number of your choice (the number can be negative). When
+ there is an 's' after the number, Vim multiplies the number by 'shiftwidth':
+ "1s" is 'shiftwidth', "2s" is two times 'shiftwidth', etc. You can use a
+! decimal point, too: "-0.5s" is minus half a 'shiftwidth'. The examples below
+! assume a 'shiftwidth' of 4.
+!
+ >N Amount added for "normal" indent. Used after a line that should
+ increase the indent (lines starting with "if", an opening brace,
+ etc.). (default 'shiftwidth').
+--- 128,147 ----
+ used CTRL-T or CTRL-D.
+
+ *cinoptions-values*
+! The 'cinoptions' option sets how Vim performs indentation. The value after
+! the option character can be one of these (N is any number):
+! N indent N spaces
+! -N indent N spaces to the left
+! Ns N times 'shiftwidth spaces
+! -Ns N times 'shiftwidth spaces to the left
+!
+! In the list below,
+ "N" represents a number of your choice (the number can be negative). When
+ there is an 's' after the number, Vim multiplies the number by 'shiftwidth':
+ "1s" is 'shiftwidth', "2s" is two times 'shiftwidth', etc. You can use a
+! decimal point, too: "-0.5s" is minus half a 'shiftwidth'.
+! The examples below assume a 'shiftwidth' of 4.
+! *cino->*
+ >N Amount added for "normal" indent. Used after a line that should
+ increase the indent (lines starting with "if", an opening brace,
+ etc.). (default 'shiftwidth').
+***************
+*** 145,150 ****
+--- 152,158 ----
+ foo; foo; foo;
+ } } }
+ <
++ *cino-e*
+ eN Add N to the prevailing indent inside a set of braces if the
+ opening brace at the End of the line (more precise: is not the
+ first character in a line). This is useful if you want a
+***************
+*** 160,165 ****
+--- 168,174 ----
+ bar; bar; bar;
+ } } }
+ <
++ *cino-n*
+ nN Add N to the prevailing indent for a statement after an "if",
+ "while", etc., if it is NOT inside a set of braces. This is
+ useful if you want a different indent when there is no '{'
+***************
+*** 174,179 ****
+--- 183,189 ----
+ bar; bar; bar;
+ } } }
+ <
++ *cino-f*
+ fN Place the first opening brace of a function or other block in
+ column N. This applies only for an opening brace that is not
+ inside other braces and is at the start of the line. What comes
+***************
+*** 184,189 ****
+--- 194,200 ----
+ { { {
+ int foo; int foo; int foo;
+ <
++ *cino-{*
+ {N Place opening braces N characters from the prevailing indent.
+ This applies only for opening braces that are inside other
+ braces. (default 0).
+***************
+*** 193,198 ****
+--- 204,210 ----
+ { { {
+ foo; foo; foo;
+ <
++ *cino-}*
+ }N Place closing braces N characters from the matching opening
+ brace. (default 0).
+
+***************
+*** 202,207 ****
+--- 214,220 ----
+ foo; foo; foo;
+ } } }
+ <
++ *cino-^*
+ ^N Add N to the prevailing indent inside a set of braces if the
+ opening brace is in column 0. This can specify a different
+ indent for whole of a function (some may like to set it to a
+***************
+*** 216,221 ****
+--- 229,235 ----
+ } } }
+ } } }
+ <
++ *cino-L*
+ LN Controls placement of jump labels. If N is negative, the label
+ will be placed at column 1. If N is non-negative, the indent of
+ the label will be the prevailing indent minus N. (default -1).
+***************
+*** 229,234 ****
+--- 243,249 ----
+ } } }
+ } } }
+ <
++ *cino-:*
+ :N Place case labels N characters from the indent of the switch().
+ (default 'shiftwidth').
+
+***************
+*** 240,245 ****
+--- 255,261 ----
+ default: default:
+ } }
+ <
++ *cino-=*
+ =N Place statements occurring after a case label N characters from
+ the indent of the label. (default 'shiftwidth').
+
+***************
+*** 247,252 ****
+--- 263,269 ----
+ case 11: case 11: a = a + 1;
+ a = a + 1; b = b + 1;
+ <
++ *cino-l*
+ lN If N != 0 Vim will align with a case label instead of the
+ statement after it in the same line.
+
+***************
+*** 256,261 ****
+--- 273,279 ----
+ break; break;
+ } }
+ <
++ *cino-b*
+ bN If N != 0 Vim will align a final "break" with the case label,
+ so that case..break looks like a sort of block. (default: 0).
+ When using 1, consider adding "0=break" to 'cinkeys'.
+***************
+*** 272,277 ****
+--- 290,296 ----
+ break; break;
+ } }
+ <
++ *cino-g*
+ gN Place C++ scope declarations N characters from the indent of the
+ block they are in. (default 'shiftwidth'). A scope declaration
+ can be "public:", "protected:" or "private:".
+***************
+*** 283,288 ****
+--- 302,308 ----
+ private: private:
+ } }
+ <
++ *cino-h*
+ hN Place statements occurring after a C++ scope declaration N
+ characters from the indent of the label. (default
+ 'shiftwidth').
+***************
+*** 291,296 ****
+--- 311,331 ----
+ public: public: a = a + 1;
+ a = a + 1; b = b + 1;
+ <
++ *cino-N*
++ NN Indent inside C++ namespace N characters extra compared to a
++ normal block. (default 0).
++
++ cino= cino=N-s >
++ namespace { namespace {
++ void function(); void function();
++ } }
++
++ namespace my namespace my
++ { {
++ void function(); void function();
++ } }
++ <
++ *cino-p*
+ pN Parameter declarations for K&R-style function declarations will
+ be indented N characters from the margin. (default
+ 'shiftwidth').
+***************
+*** 300,305 ****
+--- 335,341 ----
+ int a; int a; int a;
+ char b; char b; char b;
+ <
++ *cino-t*
+ tN Indent a function return type declaration N characters from the
+ margin. (default 'shiftwidth').
+
+***************
+*** 307,312 ****
+--- 343,349 ----
+ int int int
+ func() func() func()
+ <
++ *cino-i*
+ iN Indent C++ base class declarations and constructor
+ initializations, if they start in a new line (otherwise they
+ are aligned at the right side of the ':').
+***************
+*** 330,335 ****
+--- 368,374 ----
+ a = b + 9 * a = b + 9 *
+ c; c;
+ <
++ *cino-c*
+ cN Indent comment lines after the comment opener, when there is no
+ other text with which to align, N characters from the comment
+ opener. (default 3). See also |format-comments|.
+***************
+*** 339,344 ****
+--- 378,384 ----
+ text. text.
+ */ */
+ <
++ *cino-C*
+ CN When N is non-zero, indent comment lines by the amount specified
+ with the c flag above even if there is other text behind the
+ comment opener. (default 0).
+***************
+*** 349,360 ****
+--- 389,402 ----
+ ********/ ********/
+ < (Example uses ":set comments& comments-=s1:/* comments^=s0:/*")
+
++ *cino-/*
+ /N Indent comment lines N characters extra. (default 0).
+ cino= cino=/4 >
+ a = b; a = b;
+ /* comment */ /* comment */
+ c = d; c = d;
+ <
++ *cino-(*
+ (N When in unclosed parentheses, indent N characters from the line
+ with the unclosed parentheses. Add a 'shiftwidth' for every
+ unclosed parentheses. When N is 0 or the unclosed parentheses
+***************
+*** 370,375 ****
+--- 412,418 ----
+ (c2 || c3)) (c2 || c3))
+ { {
+ <
++ *cino-u*
+ uN Same as (N, but for one level deeper. (default 'shiftwidth').
+
+ cino= cino=u2 >
+***************
+*** 377,382 ****
+--- 420,426 ----
+ && (c22345 && (c22345
+ || c3)) || c3))
+ <
++ *cino-U*
+ UN When N is non-zero, do not ignore the indenting specified by
+ ( or u in case that the unclosed parentheses is the first
+ non-white character in its line. (default 0).
+***************
+*** 388,393 ****
+--- 432,438 ----
+ c3 c3
+ ) && c4; ) && c4;
+ <
++ *cino-2*
+ wN When in unclosed parentheses and N is non-zero and either
+ using "(0" or "u0", respectively, or using "U0" and the unclosed
+ parentheses is the first non-white character in its line, line
+***************
+*** 400,405 ****
+--- 445,451 ----
+ || c3)) || c3))
+ foo; foo;
+ <
++ *cino-W*
+ WN When in unclosed parentheses and N is non-zero and either
+ using "(0" or "u0", respectively and the unclosed parentheses is
+ the last non-white character in its line and it is not the
+***************
+*** 414,419 ****
+--- 460,466 ----
+ a_short_line(argument, a_short_line(argument,
+ argument); argument);
+ <
++ *cino-m*
+ mN When N is non-zero, line up a line starting with a closing
+ parentheses with the first character of the line with the
+ matching opening parentheses. (default 0).
+***************
+*** 428,433 ****
+--- 475,481 ----
+ ) )
+ foo; foo;
+ <
++ *cino-M*
+ MN When N is non-zero, line up a line starting with a closing
+ parentheses with the first character of the previous line.
+ (default 0).
+***************
+*** 437,443 ****
+ cond2 cond2
+ ) )
+ <
+! *java-cinoptions* *java-indenting*
+ jN Indent java anonymous classes correctly. The value 'N' is
+ currently unused but must be non-zero (e.g. 'j1'). 'j1' will
+ indent for example the following code snippet correctly: >
+--- 485,491 ----
+ cond2 cond2
+ ) )
+ <
+! *java-cinoptions* *java-indenting* *cino-j*
+ jN Indent java anonymous classes correctly. The value 'N' is
+ currently unused but must be non-zero (e.g. 'j1'). 'j1' will
+ indent for example the following code snippet correctly: >
+***************
+*** 448,454 ****
+ }
+ });
+ <
+! *javascript-cinoptions* *javascript-indenting*
+ JN Indent JavaScript object declarations correctly by not confusing
+ them with labels. The value 'N' is currently unused but must be
+ non-zero (e.g. 'J1'). >
+--- 496,502 ----
+ }
+ });
+ <
+! *javascript-cinoptions* *javascript-indenting* *cino-J*
+ JN Indent JavaScript object declarations correctly by not confusing
+ them with labels. The value 'N' is currently unused but must be
+ non-zero (e.g. 'J1'). >
+***************
+*** 483,489 ****
+
+
+ The defaults, spelled out in full, are:
+! cinoptions=>s,e0,n0,f0,{0,}0,^0,L-1,:s,=s,l0,b0,gs,hs,ps,ts,is,+s,
+ c3,C0,/0,(2s,us,U0,w0,W0,m0,j0,J0,)20,*70,#0
+
+ Vim puts a line in column 1 if:
+--- 534,540 ----
+
+
+ The defaults, spelled out in full, are:
+! cinoptions=>s,e0,n0,f0,{0,}0,^0,L-1,:s,=s,l0,b0,gs,hs,N0,ps,ts,is,+s,
+ c3,C0,/0,(2s,us,U0,w0,W0,m0,j0,J0,)20,*70,#0
+
+ Vim puts a line in column 1 if:
+*** ../mercurial/vim73/src/misc1.c 2011-05-25 13:33:59.000000000 +0200
+--- src/misc1.c 2011-05-25 14:57:31.000000000 +0200
+***************
+*** 4959,4964 ****
+--- 4959,4965 ----
+ static int corr_ind_maxparen __ARGS((int ind_maxparen, pos_T *startpos));
+ static int find_last_paren __ARGS((char_u *l, int start, int end));
+ static int find_match __ARGS((int lookfor, linenr_T ourscope, int ind_maxparen, int ind_maxcomment));
++ static int cin_is_cpp_namespace __ARGS((char_u *));
+
+ static int ind_hash_comment = 0; /* # starts a comment */
+
+***************
+*** 5221,5226 ****
+--- 5222,5271 ----
+ return (*(s = cin_skipcomment(s + i)) == ':' && s[1] != ':');
+ }
+
++ /* Maximum number of lines to search back for a "namespace" line. */
++ #define FIND_NAMESPACE_LIM 20
++
++ /*
++ * Recognize a "namespace" scope declaration.
++ */
++ static int
++ cin_is_cpp_namespace(s)
++ char_u *s;
++ {
++ char_u *p;
++ int has_name = FALSE;
++
++ s = cin_skipcomment(s);
++ if (STRNCMP(s, "namespace", 9) == 0 && (s[9] == NUL || !vim_iswordc(s[9])))
++ {
++ p = cin_skipcomment(skipwhite(s + 9));
++ while (*p != NUL)
++ {
++ if (vim_iswhite(*p))
++ {
++ has_name = TRUE; /* found end of a name */
++ p = cin_skipcomment(skipwhite(p));
++ }
++ else if (*p == '{')
++ {
++ break;
++ }
++ else if (vim_iswordc(*p))
++ {
++ if (has_name)
++ return FALSE; /* word character after skipping past name */
++ ++p;
++ }
++ else
++ {
++ return FALSE;
++ }
++ }
++ return TRUE;
++ }
++ return FALSE;
++ }
++
+ /*
+ * Return a pointer to the first non-empty non-comment character after a ':'.
+ * Return NULL if not found.
+***************
+*** 6296,6301 ****
+--- 6341,6351 ----
+ */
+ int ind_keep_case_label = 0;
+
++ /*
++ * handle C++ namespace
++ */
++ int ind_cpp_namespace = 0;
++
+ pos_T cur_curpos;
+ int amount;
+ int scope_amount;
+***************
+*** 6336,6341 ****
+--- 6386,6392 ----
+ int n;
+ int iscase;
+ int lookfor_break;
++ int lookfor_cpp_namespace = FALSE;
+ int cont_amount = 0; /* amount for continuation line */
+ int original_line_islabel;
+
+***************
+*** 6409,6414 ****
+--- 6460,6466 ----
+ case 'J': ind_js = n; break;
+ case 'l': ind_keep_case_label = n; break;
+ case '#': ind_hash_comment = n; break;
++ case 'N': ind_cpp_namespace = n; break;
+ }
+ if (*options == ',')
+ ++options;
+***************
+*** 6976,6986 ****
+--- 7028,7051 ----
+ if (start_brace == BRACE_IN_COL0) /* '{' is in column 0 */
+ {
+ amount = ind_open_left_imag;
++ lookfor_cpp_namespace = TRUE;
++ }
++ else if (start_brace == BRACE_AT_START &&
++ lookfor_cpp_namespace) /* '{' is at start */
++ {
++
++ lookfor_cpp_namespace = TRUE;
+ }
+ else
+ {
+ if (start_brace == BRACE_AT_END) /* '{' is at end of line */
++ {
+ amount += ind_open_imag;
++
++ l = skipwhite(ml_get_curline());
++ if (cin_is_cpp_namespace(l))
++ amount += ind_cpp_namespace;
++ }
+ else
+ {
+ /* Compensate for adding ind_open_extra later. */
+***************
+*** 7151,7156 ****
+--- 7216,7261 ----
+ else
+ amount += ind_continuation;
+ }
++ else if (lookfor_cpp_namespace)
++ {
++ if (curwin->w_cursor.lnum == ourscope)
++ continue;
++
++ if (curwin->w_cursor.lnum == 0
++ || curwin->w_cursor.lnum
++ < ourscope - FIND_NAMESPACE_LIM)
++ break;
++
++ l = ml_get_curline();
++
++ /*
++ * If we're in a comment now, skip to the start of the
++ * comment.
++ */
++ trypos = find_start_comment(ind_maxcomment);
++ if (trypos != NULL)
++ {
++ curwin->w_cursor.lnum = trypos->lnum + 1;
++ curwin->w_cursor.col = 0;
++ continue;
++ }
++
++ /*
++ * Skip preprocessor directives and blank lines.
++ */
++ if (cin_ispreproc_cont(&l, &curwin->w_cursor.lnum))
++ continue;
++
++ if (cin_is_cpp_namespace(l))
++ {
++ amount += ind_cpp_namespace;
++ break;
++ }
++
++ if (cin_nocode(l))
++ continue;
++
++ }
+ else if (lookfor != LOOKFOR_TERM
+ && lookfor != LOOKFOR_CPP_BASECLASS)
+ {
+*** ../mercurial/vim73/src/testdir/test3.in 2011-05-25 13:33:59.000000000 +0200
+--- src/testdir/test3.in 2011-05-25 14:47:31.000000000 +0200
+***************
+*** 799,804 ****
+--- 799,867 ----
+ df */
+ hello
+ }
++
++ /* valid namespaces with normal indent */
++ namespace
++ {
++ {
++ 111111111111;
++ }
++ }
++ namespace /* test */
++ {
++ 11111111111111111;
++ }
++ namespace // test
++ {
++ 111111111111111111;
++ }
++ namespace
++ {
++ 111111111111111111;
++ }
++ namespace test
++ {
++ 111111111111111111;
++ }
++ namespace{
++ 111111111111111111;
++ }
++ namespace test{
++ 111111111111111111;
++ }
++ namespace {
++ 111111111111111111;
++ }
++ namespace test {
++ 111111111111111111;
++ namespace test2 {
++ 22222222222222222;
++ }
++ }
++
++ /* invalid namespaces use block indent */
++ namespace test test2 {
++ 111111111111111111111;
++ }
++ namespace11111111111 {
++ 111111111111;
++ }
++ namespace() {
++ 1111111111111;
++ }
++ namespace()
++ {
++ 111111111111111111;
++ }
++ namespace test test2
++ {
++ 1111111111111111111;
++ }
++ namespace111111111
++ {
++ 111111111111111111;
++ }
++
+ /* end of AUTO */
+
+ STARTTEST
+***************
+*** 1428,1433 ****
+--- 1491,1566 ----
+ }
+
+ STARTTEST
++ :set cino=N-s
++ /namespaces
++ =/^NAMESPACEEND
++ ENDTEST
++
++ /* valid namespaces with normal indent */
++ namespace
++ {
++ {
++ 111111111111;
++ }
++ }
++ namespace /* test */
++ {
++ 11111111111111111;
++ }
++ namespace // test
++ {
++ 111111111111111111;
++ }
++ namespace
++ {
++ 111111111111111111;
++ }
++ namespace test
++ {
++ 111111111111111111;
++ }
++ namespace{
++ 111111111111111111;
++ }
++ namespace test{
++ 111111111111111111;
++ }
++ namespace {
++ 111111111111111111;
++ }
++ namespace test {
++ 111111111111111111;
++ namespace test2 {
++ 22222222222222222;
++ }
++ }
++
++ /* invalid namespaces use block indent */
++ namespace test test2 {
++ 111111111111111111111;
++ }
++ namespace11111111111 {
++ 111111111111;
++ }
++ namespace() {
++ 1111111111111;
++ }
++ namespace()
++ {
++ 111111111111111111;
++ }
++ namespace test test2
++ {
++ 1111111111111111111;
++ }
++ namespace111111111
++ {
++ 111111111111111111;
++ }
++ NAMESPACEEND
++
++
++ STARTTEST
+ :g/^STARTTEST/.,/^ENDTEST/d
+ :1;/start of AUTO/,$wq! test.out
+ ENDTEST
+*** ../mercurial/vim73/src/testdir/test3.ok 2011-05-25 13:33:59.000000000 +0200
+--- src/testdir/test3.ok 2011-05-25 14:48:02.000000000 +0200
+***************
+*** 787,792 ****
+--- 787,855 ----
+ df */
+ hello
+ }
++
++ /* valid namespaces with normal indent */
++ namespace
++ {
++ {
++ 111111111111;
++ }
++ }
++ namespace /* test */
++ {
++ 11111111111111111;
++ }
++ namespace // test
++ {
++ 111111111111111111;
++ }
++ namespace
++ {
++ 111111111111111111;
++ }
++ namespace test
++ {
++ 111111111111111111;
++ }
++ namespace{
++ 111111111111111111;
++ }
++ namespace test{
++ 111111111111111111;
++ }
++ namespace {
++ 111111111111111111;
++ }
++ namespace test {
++ 111111111111111111;
++ namespace test2 {
++ 22222222222222222;
++ }
++ }
++
++ /* invalid namespaces use block indent */
++ namespace test test2 {
++ 111111111111111111111;
++ }
++ namespace11111111111 {
++ 111111111111;
++ }
++ namespace() {
++ 1111111111111;
++ }
++ namespace()
++ {
++ 111111111111111111;
++ }
++ namespace test test2
++ {
++ 1111111111111111111;
++ }
++ namespace111111111
++ {
++ 111111111111111111;
++ }
++
+ /* end of AUTO */
+
+
+***************
+*** 1273,1275 ****
+--- 1336,1403 ----
+ baz();
+ }
+
++
++ /* valid namespaces with normal indent */
++ namespace
++ {
++ {
++ 111111111111;
++ }
++ }
++ namespace /* test */
++ {
++ 11111111111111111;
++ }
++ namespace // test
++ {
++ 111111111111111111;
++ }
++ namespace
++ {
++ 111111111111111111;
++ }
++ namespace test
++ {
++ 111111111111111111;
++ }
++ namespace{
++ 111111111111111111;
++ }
++ namespace test{
++ 111111111111111111;
++ }
++ namespace {
++ 111111111111111111;
++ }
++ namespace test {
++ 111111111111111111;
++ namespace test2 {
++ 22222222222222222;
++ }
++ }
++
++ /* invalid namespaces use block indent */
++ namespace test test2 {
++ 111111111111111111111;
++ }
++ namespace11111111111 {
++ 111111111111;
++ }
++ namespace() {
++ 1111111111111;
++ }
++ namespace()
++ {
++ 111111111111111111;
++ }
++ namespace test test2
++ {
++ 1111111111111111111;
++ }
++ namespace111111111
++ {
++ 111111111111111111;
++ }
++ NAMESPACEEND
++
++
+*** ../vim-7.3.201/src/version.c 2011-05-25 13:33:59.000000000 +0200
+--- src/version.c 2011-05-25 15:14:20.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 202,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+107. When using your phone you forget that you don't have to use your
+ keyboard.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.203 b/source/ap/vim/patches/7.3.203
new file mode 100644
index 000000000..62c298972
--- /dev/null
+++ b/source/ap/vim/patches/7.3.203
@@ -0,0 +1,102 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.203
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.203
+Problem: MS-Windows: Can't run an external command without a console window.
+Solution: Support ":!start /b cmd". (Xaizek)
+Files: runtime/doc/os_win32.txt, src/os_win32.c
+
+
+*** ../mercurial/vim73/src/os_win32.c 2011-05-05 18:31:54.000000000 +0200
+--- src/os_win32.c 2011-05-25 16:45:31.000000000 +0200
+***************
+*** 3401,3406 ****
+--- 3401,3407 ----
+ {
+ STARTUPINFO si;
+ PROCESS_INFORMATION pi;
++ DWORD flags = CREATE_NEW_CONSOLE;
+
+ si.cb = sizeof(si);
+ si.lpReserved = NULL;
+***************
+*** 3418,3423 ****
+--- 3419,3440 ----
+ si.dwFlags = STARTF_USESHOWWINDOW;
+ si.wShowWindow = SW_SHOWMINNOACTIVE;
+ }
++ else if ((STRNICMP(cmdbase, "/b", 2) == 0)
++ && vim_iswhite(cmdbase[2]))
++ {
++ cmdbase = skipwhite(cmdbase + 2);
++ flags = CREATE_NO_WINDOW;
++ si.dwFlags = STARTF_USESTDHANDLES;
++ si.hStdInput = CreateFile("\\\\.\\NUL", // File name
++ GENERIC_READ, // Access flags
++ 0, // Share flags
++ NULL, // Security att.
++ OPEN_EXISTING, // Open flags
++ FILE_ATTRIBUTE_NORMAL, // File att.
++ NULL); // Temp file
++ si.hStdOutput = si.hStdInput;
++ si.hStdError = si.hStdInput;
++ }
+
+ /* When the command is in double quotes, but 'shellxquote' is
+ * empty, keep the double quotes around the command.
+***************
+*** 3445,3451 ****
+ NULL, // Process security attributes
+ NULL, // Thread security attributes
+ FALSE, // Inherit handles
+! CREATE_NEW_CONSOLE, // Creation flags
+ NULL, // Environment
+ NULL, // Current directory
+ &si, // Startup information
+--- 3462,3468 ----
+ NULL, // Process security attributes
+ NULL, // Thread security attributes
+ FALSE, // Inherit handles
+! flags, // Creation flags
+ NULL, // Environment
+ NULL, // Current directory
+ &si, // Startup information
+***************
+*** 3458,3463 ****
+--- 3475,3485 ----
+ EMSG(_("E371: Command not found"));
+ #endif
+ }
++ if (si.hStdInput != NULL)
++ {
++ /* Close the handle to \\.\NUL */
++ CloseHandle(si.hStdInput);
++ }
+ /* Close the handles to the subprocess, so that it goes away */
+ CloseHandle(pi.hThread);
+ CloseHandle(pi.hProcess);
+*** ../vim-7.3.202/src/version.c 2011-05-25 15:16:06.000000000 +0200
+--- src/version.c 2011-05-25 17:05:59.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 203,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+108. While reading a magazine, you look for the Zoom icon for a better
+ look at a photograph.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.204 b/source/ap/vim/patches/7.3.204
new file mode 100644
index 000000000..b2b63602e
--- /dev/null
+++ b/source/ap/vim/patches/7.3.204
@@ -0,0 +1,51 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.204
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.204 (after 7.3.201)
+Problem: Compiler warning.
+Solution: Add type cast. (Mike Williams)
+Files: src/misc1.c
+
+
+*** ../mercurial/vim73/src/misc1.c 2011-05-25 15:16:06.000000000 +0200
+--- src/misc1.c 2011-05-25 17:25:10.000000000 +0200
+***************
+*** 7657,7663 ****
+ * not the one from "if () {". */
+ if (*l == '}')
+ curwin->w_cursor.col =
+! (l - ml_get_curline()) + 1;
+
+ if ((trypos = find_start_brace(ind_maxcomment))
+ == NULL
+--- 7657,7663 ----
+ * not the one from "if () {". */
+ if (*l == '}')
+ curwin->w_cursor.col =
+! (colnr_T)(l - ml_get_curline()) + 1;
+
+ if ((trypos = find_start_brace(ind_maxcomment))
+ == NULL
+*** ../vim-7.3.203/src/version.c 2011-05-25 17:06:16.000000000 +0200
+--- src/version.c 2011-05-25 17:29:32.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 204,
+ /**/
+
+--
+In a world without walls and borders, who needs windows and gates?
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.205 b/source/ap/vim/patches/7.3.205
new file mode 100644
index 000000000..b49a040e4
--- /dev/null
+++ b/source/ap/vim/patches/7.3.205
@@ -0,0 +1,93 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.205
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.205
+Problem: Syntax "extend" doesn't work correctly.
+Solution: Avoid calling check_state_ends() recursively (Ben Schmidt)
+Files: src/syntax.c
+
+
+*** ../mercurial/vim73/src/syntax.c 2011-05-19 12:14:03.000000000 +0200
+--- src/syntax.c 2011-05-25 17:47:46.000000000 +0200
+***************
+*** 990,996 ****
+--- 990,999 ----
+ * previous line and regions that have "keepend".
+ */
+ if (current_state.ga_len > 0)
++ {
+ syn_update_ends(TRUE);
++ check_state_ends();
++ }
+
+ next_match_idx = -1;
+ ++current_line_id;
+***************
+*** 1064,1070 ****
+ }
+ }
+ check_keepend();
+- check_state_ends();
+ }
+
+ /****************************************
+--- 1067,1072 ----
+***************
+*** 2533,2539 ****
+ check_state_ends()
+ {
+ stateitem_T *cur_si;
+! int had_extend = FALSE;
+
+ cur_si = &CUR_STATE(current_state.ga_len - 1);
+ for (;;)
+--- 2535,2541 ----
+ check_state_ends()
+ {
+ stateitem_T *cur_si;
+! int had_extend;
+
+ cur_si = &CUR_STATE(current_state.ga_len - 1);
+ for (;;)
+***************
+*** 2586,2593 ****
+
+ /* When the ended item has "extend", another item with
+ * "keepend" now needs to check for its end. */
+! if (cur_si->si_flags & HL_EXTEND)
+! had_extend = TRUE;
+
+ pop_current_state();
+
+--- 2588,2594 ----
+
+ /* When the ended item has "extend", another item with
+ * "keepend" now needs to check for its end. */
+! had_extend = (cur_si->si_flags & HL_EXTEND);
+
+ pop_current_state();
+
+*** ../vim-7.3.204/src/version.c 2011-05-25 17:29:40.000000000 +0200
+--- src/version.c 2011-05-25 17:52:57.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 205,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+110. You actually volunteer to become your employer's webmaster.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.206 b/source/ap/vim/patches/7.3.206
new file mode 100644
index 000000000..8a91f0ae2
--- /dev/null
+++ b/source/ap/vim/patches/7.3.206
@@ -0,0 +1,54 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.206
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.206
+Problem: 64bit MS-Windows compiler warning.
+Solution: Use HandleToLong() instead of type cast. (Mike Williams)
+Files: src/gui_w32.c
+
+
+*** ../mercurial/vim73/src/gui_w32.c 2011-01-17 20:08:04.000000000 +0100
+--- src/gui_w32.c 2011-05-25 21:14:10.000000000 +0200
+***************
+*** 1575,1581 ****
+
+ #ifdef FEAT_EVAL
+ /* set the v:windowid variable */
+! set_vim_var_nr(VV_WINDOWID, (long)s_hwnd);
+ #endif
+
+ theend:
+--- 1575,1581 ----
+
+ #ifdef FEAT_EVAL
+ /* set the v:windowid variable */
+! set_vim_var_nr(VV_WINDOWID, HandleToLong(s_hwnd));
+ #endif
+
+ theend:
+*** ../vim-7.3.205/src/version.c 2011-05-25 17:56:23.000000000 +0200
+--- src/version.c 2011-05-25 21:16:17.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 206,
+ /**/
+
+--
+FIXME and XXX are two common keywords used to mark broken or incomplete code
+not only since XXX as a sex reference would grab everybody's attention but
+simply due to the fact that Vim would highlight these words.
+ -- Hendrik Scholz
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.207 b/source/ap/vim/patches/7.3.207
new file mode 100644
index 000000000..95b335ecc
--- /dev/null
+++ b/source/ap/vim/patches/7.3.207
@@ -0,0 +1,54 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.207
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.207
+Problem: Can't compile with MSVC with pentium4 and 64 bit.
+Solution: Only use SSE2 for 32 bit. (Mike Williams)
+Files: src/Make_mvc.mak
+
+
+*** ../mercurial/vim73/src/Make_mvc.mak 2011-02-15 18:06:11.000000000 +0100
+--- src/Make_mvc.mak 2011-06-04 11:59:38.000000000 +0200
+***************
+*** 409,416 ****
+ CPUARG =
+ !endif
+ !else
+! # VC8/9 only allows specifying SSE architecture
+! !if "$(CPUNR)" == "pentium4"
+ CPUARG = /arch:SSE2
+ !endif
+ !endif
+--- 409,416 ----
+ CPUARG =
+ !endif
+ !else
+! # VC8/9/10 only allows specifying SSE architecture but only for 32bit
+! !if "$(ASSEMBLY_ARCHITECTURE)" == "x86" && "$(CPUNR)" == "pentium4"
+ CPUARG = /arch:SSE2
+ !endif
+ !endif
+*** ../vim-7.3.206/src/version.c 2011-05-25 21:18:02.000000000 +0200
+--- src/version.c 2011-06-12 20:30:30.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 207,
+ /**/
+
+--
+"The question of whether computers can think is just like the question
+of whether submarines can swim." -- Edsger W. Dijkstra
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.208 b/source/ap/vim/patches/7.3.208
new file mode 100644
index 000000000..c5a792957
--- /dev/null
+++ b/source/ap/vim/patches/7.3.208
@@ -0,0 +1,51 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.208
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.208
+Problem: Early terminated if statement.
+Solution: Remove the semicolon. (Lech Lorens)
+Files: src/gui_mac.c
+
+
+*** ../mercurial/vim73/src/gui_mac.c 2011-01-17 20:08:04.000000000 +0100
+--- src/gui_mac.c 2011-06-06 05:35:46.000000000 +0200
+***************
+*** 1840,1846 ****
+ p.v -= gui.scrollbar_height;
+ p.v -= p.v % gui.char_height;
+ p.v += 2 * gui.border_width;
+! if (gui.which_scrollbars[SBAR_BOTTOM]);
+ p.v += gui.scrollbar_height;
+
+ ZoomWindowIdeal(whichWindow, thePart, &p);
+--- 1840,1846 ----
+ p.v -= gui.scrollbar_height;
+ p.v -= p.v % gui.char_height;
+ p.v += 2 * gui.border_width;
+! if (gui.which_scrollbars[SBAR_BOTTOM])
+ p.v += gui.scrollbar_height;
+
+ ZoomWindowIdeal(whichWindow, thePart, &p);
+*** ../vim-7.3.207/src/version.c 2011-06-12 20:31:25.000000000 +0200
+--- src/version.c 2011-06-12 20:33:00.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 208,
+ /**/
+
+--
+Keep America beautiful. Swallow your beer cans.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.209 b/source/ap/vim/patches/7.3.209
new file mode 100644
index 000000000..afd4ab825
--- /dev/null
+++ b/source/ap/vim/patches/7.3.209
@@ -0,0 +1,95 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.209
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.209
+Problem: MSVC Install instructions point to wrong batch file.
+Solution: Add a batch file for use with MSVC 10.
+Files: src/msvc2010.bat, src/INSTALLpc.txt, Filelist
+
+
+*** ../mercurial/vim73/src/msvc2010.bat 2011-06-12 20:35:31.000000000 +0200
+--- src/msvc2010.bat 2011-06-09 05:08:35.000000000 +0200
+***************
+*** 0 ****
+--- 1,7 ----
++ @echo off
++ rem To be used on MS-Windows for Visual C++ 2010 Express Edition
++ rem aka Microsoft Visual Studio 10.0.
++ rem See INSTALLpc.txt for information.
++ @echo on
++
++ call "%VS100COMNTOOLS%%vsvars32.bat"
+*** ../mercurial/vim73/src/INSTALLpc.txt 2010-08-16 21:23:30.000000000 +0200
+--- src/INSTALLpc.txt 2011-06-08 06:47:46.000000000 +0200
+***************
+*** 28,35 ****
+ 9. MS-DOS
+
+ The currently preferred method is using the free Visual C++ Toolkit 2008
+! |msvc-2008-express|. If you need the executable to run on Windows 98 or ME,
+! use the 2003 one |msvc-2003-toolkit|.
+
+
+ 1. Microsoft Visual C++
+--- 28,36 ----
+ 9. MS-DOS
+
+ The currently preferred method is using the free Visual C++ Toolkit 2008
+! |msvc-2008-express|, the produced binary runs on most MS-Windows systems. If
+! you need the executable to run on Windows 98 or ME, use the 2003 one
+! |msvc-2003-toolkit|.
+
+
+ 1. Microsoft Visual C++
+***************
+*** 176,182 ****
+ http://www.microsoft.com/express/vc/Default.aspx
+ This includes the IDE and the debugger.
+
+! To set the environment execute the msvc2008.bat script. You can then build
+ Vim with Make_mvc.mak.
+
+
+--- 177,183 ----
+ http://www.microsoft.com/express/vc/Default.aspx
+ This includes the IDE and the debugger.
+
+! To set the environment execute the msvc2010.bat script. You can then build
+ Vim with Make_mvc.mak.
+
+
+*** ../mercurial/vim73/Filelist 2011-05-19 13:40:47.000000000 +0200
+--- Filelist 2011-06-09 05:17:25.000000000 +0200
+***************
+*** 262,267 ****
+--- 262,268 ----
+ src/bigvim.bat \
+ src/msvcsetup.bat \
+ src/msvc2008.bat \
++ src/msvc2010.bat \
+ src/dimm.idl \
+ src/dlldata.c \
+ src/dosinst.c \
+*** ../vim-7.3.208/src/version.c 2011-06-12 20:33:30.000000000 +0200
+--- src/version.c 2011-06-12 20:34:44.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 209,
+ /**/
+
+--
+"Hit any key to continue" is a lie.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.210 b/source/ap/vim/patches/7.3.210
new file mode 100644
index 000000000..f02fe6fe6
--- /dev/null
+++ b/source/ap/vim/patches/7.3.210
@@ -0,0 +1,182 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.210
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.210
+Problem: Can't always find the file when using cscope.
+Solution: Add the 'cscoperelative' option. (Raghavendra D Prabhu)
+Files: runtime/doc/if_cscop.txt, runtime/doc/options.txt,
+ src/if_cscope.c, src/options.c, src/options.h
+
+
+*** ../mercurial/vim73/runtime/doc/if_cscop.txt 2010-09-30 21:38:08.000000000 +0200
+--- runtime/doc/if_cscop.txt 2011-06-12 19:54:26.000000000 +0200
+***************
+*** 271,276 ****
+--- 271,285 ----
+ :set cst
+ :set nocst
+ <
++ *cscoperelative* *csre*
++ If 'cscoperelative' set, then in absence of a prefix given to cscope (prefx
++ is the argument to -P option of cscope), basename of cscope.out location
++ (usually the project root directory) will be used as the prefix to construt
++ absolute path.The default is off. Note: This option is only effective when
++ cscope (cscopeprg) is initialized without a prefix path (-P). Examples: >
++ :set csre
++ :set nocsre
++ <
+ *cscopetagorder* *csto*
+ The value of 'csto' determines the order in which |:cstag| performs a search.
+ If 'csto' is set to zero, cscope database(s) are searched first, followed
+*** ../mercurial/vim73/runtime/doc/options.txt 2011-05-19 12:22:41.000000000 +0200
+--- runtime/doc/options.txt 2011-06-12 20:00:10.000000000 +0200
+***************
+*** 2209,2214 ****
+--- 2209,2224 ----
+ Specifies whether to use quickfix window to show cscope results.
+ See |cscopequickfix|.
+
++ *'cscoperelative'* *'csre'*
++ 'cscoperelative' 'csre' boolean (default off)
++ global
++ {not available when compiled without the |+cscope|
++ feature}
++ {not in Vi}
++ In the absence of a prefix (-P) for cscope. setting this option enables
++ to use the basename of cscope.out path as the prefix.
++ See |cscoperelative|.
++
+ *'cscopetag'* *'cst'* *'nocscopetag'* *'nocst'*
+ 'cscopetag' 'cst' boolean (default off)
+ global
+*** ../mercurial/vim73/src/if_cscope.c 2011-05-05 16:41:19.000000000 +0200
+--- src/if_cscope.c 2011-06-12 20:25:17.000000000 +0200
+***************
+*** 2471,2512 ****
+ */
+ static char *
+ cs_resolve_file(i, name)
+! int i;
+ char *name;
+ {
+! char *fullname;
+! int len;
+
+ /*
+! * ppath is freed when we destroy the cscope connection.
+! * fullname is freed after cs_make_vim_style_matches, after it's been
+! * copied into the tag buffer used by vim
+ */
+ len = (int)(strlen(name) + 2);
+ if (csinfo[i].ppath != NULL)
+ len += (int)strlen(csinfo[i].ppath);
+
+ if ((fullname = (char *)alloc(len)) == NULL)
+ return NULL;
+
+! /*
+! * note/example: this won't work if the cscope output already starts
+ * "../.." and the prefix path is also "../..". if something like this
+! * happens, you are screwed up and need to fix how you're using cscope.
+! */
+! if (csinfo[i].ppath != NULL &&
+! (strncmp(name, csinfo[i].ppath, strlen(csinfo[i].ppath)) != 0) &&
+! (name[0] != '/')
+ #ifdef WIN32
+! && name[0] != '\\' && name[1] != ':'
+ #endif
+! )
+ (void)sprintf(fullname, "%s/%s", csinfo[i].ppath, name);
+ else
+ (void)sprintf(fullname, "%s", name);
+
+ return fullname;
+! } /* cs_resolve_file */
+
+
+ /*
+--- 2471,2531 ----
+ */
+ static char *
+ cs_resolve_file(i, name)
+! int i;
+ char *name;
+ {
+! char *fullname;
+! int len;
+! char_u *csdir = NULL;
+
+ /*
+! * Ppath is freed when we destroy the cscope connection.
+! * Fullname is freed after cs_make_vim_style_matches, after it's been
+! * copied into the tag buffer used by Vim.
+ */
+ len = (int)(strlen(name) + 2);
+ if (csinfo[i].ppath != NULL)
+ len += (int)strlen(csinfo[i].ppath);
++ else if (p_csre && csinfo[i].fname != NULL)
++ {
++ /* If 'cscoperelative' is set and ppath is not set, use cscope.out
++ * path in path resolution. */
++ csdir = alloc(MAXPATHL);
++ if (csdir != NULL)
++ {
++ vim_strncpy(csdir, (char_u *)csinfo[i].fname,
++ gettail((char_u *)csinfo[i].fname) - 1 - (char_u *)csinfo[i].fname);
++ len += (int)STRLEN(csdir);
++ }
++ }
+
+ if ((fullname = (char *)alloc(len)) == NULL)
+ return NULL;
+
+! /* Note/example: this won't work if the cscope output already starts
+ * "../.." and the prefix path is also "../..". if something like this
+! * happens, you are screwed up and need to fix how you're using cscope. */
+! if (csinfo[i].ppath != NULL
+! && (strncmp(name, csinfo[i].ppath, strlen(csinfo[i].ppath)) != 0)
+! && (name[0] != '/')
+ #ifdef WIN32
+! && name[0] != '\\' && name[1] != ':'
+ #endif
+! )
+ (void)sprintf(fullname, "%s/%s", csinfo[i].ppath, name);
++ else if (csdir != NULL && csinfo[i].fname != NULL && STRLEN(csdir) > 0)
++ {
++ /* Check for csdir to be non empty to avoid empty path concatenated to
++ * cscope output. TODO: avoid the unnecessary alloc/free of fullname. */
++ vim_free(fullname);
++ fullname = concat_fnames(csdir, (char_u *)name, TRUE);
++ }
+ else
+ (void)sprintf(fullname, "%s", name);
+
++ vim_free(csdir);
+ return fullname;
+! }
+
+
+ /*
+*** ../vim-7.3.209/src/version.c 2011-06-12 20:36:00.000000000 +0200
+--- src/version.c 2011-06-12 20:37:48.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 210,
+ /**/
+
+--
+Apathy Error: Don't bother striking any key.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.211 b/source/ap/vim/patches/7.3.211
new file mode 100644
index 000000000..4760c106c
--- /dev/null
+++ b/source/ap/vim/patches/7.3.211
@@ -0,0 +1,51 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.211
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.211 (after 7.3.210)
+Problem: Compiler warning.
+Solution: Add type cast.
+Files: src/if_cscope.c
+
+
+*** ../mercurial/vim73/src/if_cscope.c 2011-06-12 20:42:17.000000000 +0200
+--- src/if_cscope.c 2011-06-12 21:22:53.000000000 +0200
+***************
+*** 2518,2524 ****
+ /* Check for csdir to be non empty to avoid empty path concatenated to
+ * cscope output. TODO: avoid the unnecessary alloc/free of fullname. */
+ vim_free(fullname);
+! fullname = concat_fnames(csdir, (char_u *)name, TRUE);
+ }
+ else
+ (void)sprintf(fullname, "%s", name);
+--- 2518,2524 ----
+ /* Check for csdir to be non empty to avoid empty path concatenated to
+ * cscope output. TODO: avoid the unnecessary alloc/free of fullname. */
+ vim_free(fullname);
+! fullname = (char *)concat_fnames(csdir, (char_u *)name, TRUE);
+ }
+ else
+ (void)sprintf(fullname, "%s", name);
+*** ../vim-7.3.210/src/version.c 2011-06-12 20:42:17.000000000 +0200
+--- src/version.c 2011-06-12 21:24:03.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 211,
+ /**/
+
+--
+Did you ever see a "Hit any key to continue" message in a music piece?
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.212 b/source/ap/vim/patches/7.3.212
new file mode 100644
index 000000000..d5086db0a
--- /dev/null
+++ b/source/ap/vim/patches/7.3.212
@@ -0,0 +1,243 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.212
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.212
+Problem: With Python 3.2 ":py3" fails.
+Solution: Move PyEval_InitThreads() to after Py_Initialize(). (Roland
+ Puntaier) Check abiflags in configure. (Andreas Behr)
+Files: src/if_python3.c, src/auto/configure, src/configure.in
+
+
+*** ../mercurial/vim73/src/if_python3.c 2011-02-25 15:18:46.000000000 +0100
+--- src/if_python3.c 2011-06-11 04:24:49.000000000 +0200
+***************
+*** 547,560 ****
+ Py_SetPythonHome(PYTHON3_HOME);
+ #endif
+
+- /* initialise threads */
+- PyEval_InitThreads();
+-
+ #if !defined(MACOS) || defined(MACOS_X_UNIX)
+ Py_Initialize();
+ #else
+ PyMac_Initialize();
+ #endif
+
+ #ifdef DYNAMIC_PYTHON3
+ get_py3_exceptions();
+--- 547,559 ----
+ Py_SetPythonHome(PYTHON3_HOME);
+ #endif
+
+ #if !defined(MACOS) || defined(MACOS_X_UNIX)
+ Py_Initialize();
+ #else
+ PyMac_Initialize();
+ #endif
++ /* initialise threads, must be after Py_Initialize() */
++ PyEval_InitThreads();
+
+ #ifdef DYNAMIC_PYTHON3
+ get_py3_exceptions();
+*** ../mercurial/vim73/src/auto/configure 2011-05-10 15:41:59.000000000 +0200
+--- src/auto/configure 2011-06-12 21:33:16.000000000 +0200
+***************
+*** 5505,5510 ****
+--- 5505,5527 ----
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $vi_cv_var_python3_version" >&5
+ $as_echo "$vi_cv_var_python3_version" >&6; }
+
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking Python's abiflags" >&5
++ $as_echo_n "checking Python's abiflags... " >&6; }
++ if test "${vi_cv_var_python3_abiflags+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++ else
++
++ vi_cv_var_python3_abiflags=
++ if ${vi_cv_path_python3} -c \
++ "import sys; sys.exit(${vi_cv_var_python3_version} < 3.2)"
++ then
++ vi_cv_var_python3_abiflags=`${vi_cv_path_python3} -c \
++ "import sys; print(sys.abiflags)"`
++ fi
++ fi
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $vi_cv_var_python3_abiflags" >&5
++ $as_echo "$vi_cv_var_python3_abiflags" >&6; }
++
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking Python's install prefix" >&5
+ $as_echo_n "checking Python's install prefix... " >&6; }
+ if test "${vi_cv_path_python3_pfx+set}" = set; then :
+***************
+*** 5555,5563 ****
+ else
+
+ vi_cv_path_python3_conf=
+ for path in "${vi_cv_path_python3_pfx}" "${vi_cv_path_python3_epfx}"; do
+ for subdir in lib64 lib share; do
+! d="${path}/${subdir}/python${vi_cv_var_python3_version}/config"
+ if test -d "$d" && test -f "$d/config.c"; then
+ vi_cv_path_python3_conf="$d"
+ fi
+--- 5572,5584 ----
+ else
+
+ vi_cv_path_python3_conf=
++ config_dir="config"
++ if test "${vi_cv_var_python3_abiflags}" != ""; then
++ config_dir="${config_dir}-${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags}"
++ fi
+ for path in "${vi_cv_path_python3_pfx}" "${vi_cv_path_python3_epfx}"; do
+ for subdir in lib64 lib share; do
+! d="${path}/${subdir}/python${vi_cv_var_python3_version}/${config_dir}"
+ if test -d "$d" && test -f "$d/config.c"; then
+ vi_cv_path_python3_conf="$d"
+ fi
+***************
+*** 5592,5598 ****
+ eval "`cd ${PYTHON3_CONFDIR} && make -f "${tmp_mkf}" __ | sed '/ directory /d'`"
+ rm -f -- "${tmp_mkf}"
+ vi_cv_path_python3_plibs="-L${PYTHON3_CONFDIR} -lpython${vi_cv_var_python3_version}"
+! vi_cv_path_python3_plibs="${vi_cv_path_python3_plibs} ${python3_BASEMODLIBS} ${python3_LIBS} ${python3_SYSLIBS} ${python3_LINKFORSHARED}"
+ vi_cv_path_python3_plibs=`echo $vi_cv_path_python3_plibs | sed s/-ltermcap//`
+ vi_cv_path_python3_plibs=`echo $vi_cv_path_python3_plibs | sed s/-lffi//`
+
+--- 5613,5619 ----
+ eval "`cd ${PYTHON3_CONFDIR} && make -f "${tmp_mkf}" __ | sed '/ directory /d'`"
+ rm -f -- "${tmp_mkf}"
+ vi_cv_path_python3_plibs="-L${PYTHON3_CONFDIR} -lpython${vi_cv_var_python3_version}"
+! vi_cv_path_python3_plibs="${vi_cv_path_python3_plibs} ${python3_BASEMODLIBS} ${python3_LIBS} ${python3_SYSLIBS}"
+ vi_cv_path_python3_plibs=`echo $vi_cv_path_python3_plibs | sed s/-ltermcap//`
+ vi_cv_path_python3_plibs=`echo $vi_cv_path_python3_plibs | sed s/-lffi//`
+
+***************
+*** 5601,5609 ****
+
+ PYTHON3_LIBS="${vi_cv_path_python3_plibs}"
+ if test "${vi_cv_path_python3_pfx}" = "${vi_cv_path_python3_epfx}"; then
+! PYTHON3_CFLAGS="-I${vi_cv_path_python3_pfx}/include/python${vi_cv_var_python3_version} -DPYTHON3_HOME=L\\\"${vi_cv_path_python3_pfx}\\\""
+ else
+! PYTHON3_CFLAGS="-I${vi_cv_path_python3_pfx}/include/python${vi_cv_var_python3_version} -I${vi_cv_path_python3_epfx}/include/python${vi_cv_var_python3_version} -DPYTHON3_HOME=L\\\"${vi_cv_path_python3_pfx}\\\""
+ fi
+ PYTHON3_SRC="if_python3.c"
+ if test "x$MACOSX" = "xyes"; then
+--- 5622,5630 ----
+
+ PYTHON3_LIBS="${vi_cv_path_python3_plibs}"
+ if test "${vi_cv_path_python3_pfx}" = "${vi_cv_path_python3_epfx}"; then
+! PYTHON3_CFLAGS="-I${vi_cv_path_python3_pfx}/include/python${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags} -DPYTHON3_HOME=L\\\"${vi_cv_path_python3_pfx}\\\""
+ else
+! PYTHON3_CFLAGS="-I${vi_cv_path_python3_pfx}/include/python${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags} -I${vi_cv_path_python3_epfx}/include/python${vi_cv_var_python3_version} -DPYTHON3_HOME=L\\\"${vi_cv_path_python3_pfx}\\\""
+ fi
+ PYTHON3_SRC="if_python3.c"
+ if test "x$MACOSX" = "xyes"; then
+*** ../mercurial/vim73/src/configure.in 2011-05-10 15:41:59.000000000 +0200
+--- src/configure.in 2011-06-12 21:31:18.000000000 +0200
+***************
+*** 992,997 ****
+--- 992,1008 ----
+ ${vi_cv_path_python3} -c 'import sys; print(sys.version[:3])'`
+ ]])
+
++ dnl -- get abiflags for python 3.2 or higher (PEP 3149)
++ AC_CACHE_CHECK(Python's abiflags,vi_cv_var_python3_abiflags,
++ [
++ vi_cv_var_python3_abiflags=
++ if ${vi_cv_path_python3} -c \
++ "import sys; sys.exit(${vi_cv_var_python3_version} < 3.2)"
++ then
++ vi_cv_var_python3_abiflags=`${vi_cv_path_python3} -c \
++ "import sys; print(sys.abiflags)"`
++ fi ])
++
+ dnl -- find where python3 thinks it was installed
+ AC_CACHE_CHECK(Python's install prefix,vi_cv_path_python3_pfx,
+ [ vi_cv_path_python3_pfx=`
+***************
+*** 1021,1029 ****
+ AC_CACHE_CHECK(Python's configuration directory,vi_cv_path_python3_conf,
+ [
+ vi_cv_path_python3_conf=
+ for path in "${vi_cv_path_python3_pfx}" "${vi_cv_path_python3_epfx}"; do
+ for subdir in lib64 lib share; do
+! d="${path}/${subdir}/python${vi_cv_var_python3_version}/config"
+ if test -d "$d" && test -f "$d/config.c"; then
+ vi_cv_path_python3_conf="$d"
+ fi
+--- 1032,1044 ----
+ AC_CACHE_CHECK(Python's configuration directory,vi_cv_path_python3_conf,
+ [
+ vi_cv_path_python3_conf=
++ config_dir="config"
++ if test "${vi_cv_var_python3_abiflags}" != ""; then
++ config_dir="${config_dir}-${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags}"
++ fi
+ for path in "${vi_cv_path_python3_pfx}" "${vi_cv_path_python3_epfx}"; do
+ for subdir in lib64 lib share; do
+! d="${path}/${subdir}/python${vi_cv_var_python3_version}/${config_dir}"
+ if test -d "$d" && test -f "$d/config.c"; then
+ vi_cv_path_python3_conf="$d"
+ fi
+***************
+*** 1055,1061 ****
+ eval "`cd ${PYTHON3_CONFDIR} && make -f "${tmp_mkf}" __ | sed '/ directory /d'`"
+ rm -f -- "${tmp_mkf}"
+ vi_cv_path_python3_plibs="-L${PYTHON3_CONFDIR} -lpython${vi_cv_var_python3_version}"
+! vi_cv_path_python3_plibs="${vi_cv_path_python3_plibs} ${python3_BASEMODLIBS} ${python3_LIBS} ${python3_SYSLIBS} ${python3_LINKFORSHARED}"
+ dnl remove -ltermcap, it can conflict with an earlier -lncurses
+ vi_cv_path_python3_plibs=`echo $vi_cv_path_python3_plibs | sed s/-ltermcap//`
+ vi_cv_path_python3_plibs=`echo $vi_cv_path_python3_plibs | sed s/-lffi//`
+--- 1070,1076 ----
+ eval "`cd ${PYTHON3_CONFDIR} && make -f "${tmp_mkf}" __ | sed '/ directory /d'`"
+ rm -f -- "${tmp_mkf}"
+ vi_cv_path_python3_plibs="-L${PYTHON3_CONFDIR} -lpython${vi_cv_var_python3_version}"
+! vi_cv_path_python3_plibs="${vi_cv_path_python3_plibs} ${python3_BASEMODLIBS} ${python3_LIBS} ${python3_SYSLIBS}"
+ dnl remove -ltermcap, it can conflict with an earlier -lncurses
+ vi_cv_path_python3_plibs=`echo $vi_cv_path_python3_plibs | sed s/-ltermcap//`
+ vi_cv_path_python3_plibs=`echo $vi_cv_path_python3_plibs | sed s/-lffi//`
+***************
+*** 1063,1071 ****
+
+ PYTHON3_LIBS="${vi_cv_path_python3_plibs}"
+ if test "${vi_cv_path_python3_pfx}" = "${vi_cv_path_python3_epfx}"; then
+! PYTHON3_CFLAGS="-I${vi_cv_path_python3_pfx}/include/python${vi_cv_var_python3_version} -DPYTHON3_HOME=L\\\"${vi_cv_path_python3_pfx}\\\""
+ else
+! PYTHON3_CFLAGS="-I${vi_cv_path_python3_pfx}/include/python${vi_cv_var_python3_version} -I${vi_cv_path_python3_epfx}/include/python${vi_cv_var_python3_version} -DPYTHON3_HOME=L\\\"${vi_cv_path_python3_pfx}\\\""
+ fi
+ PYTHON3_SRC="if_python3.c"
+ dnl For Mac OSX 10.2 config.o is included in the Python library.
+--- 1078,1086 ----
+
+ PYTHON3_LIBS="${vi_cv_path_python3_plibs}"
+ if test "${vi_cv_path_python3_pfx}" = "${vi_cv_path_python3_epfx}"; then
+! PYTHON3_CFLAGS="-I${vi_cv_path_python3_pfx}/include/python${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags} -DPYTHON3_HOME=L\\\"${vi_cv_path_python3_pfx}\\\""
+ else
+! PYTHON3_CFLAGS="-I${vi_cv_path_python3_pfx}/include/python${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags} -I${vi_cv_path_python3_epfx}/include/python${vi_cv_var_python3_version} -DPYTHON3_HOME=L\\\"${vi_cv_path_python3_pfx}\\\""
+ fi
+ PYTHON3_SRC="if_python3.c"
+ dnl For Mac OSX 10.2 config.o is included in the Python library.
+*** ../vim-7.3.211/src/version.c 2011-06-12 21:24:56.000000000 +0200
+--- src/version.c 2011-06-12 21:35:31.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 212,
+ /**/
+
+--
+In Joseph Heller's novel "Catch-22", the main character tries to get out of a
+war by proving he is crazy. But the mere fact he wants to get out of the war
+only shows he isn't crazy -- creating the original "Catch-22".
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.213 b/source/ap/vim/patches/7.3.213
new file mode 100644
index 000000000..d3ef325e1
--- /dev/null
+++ b/source/ap/vim/patches/7.3.213
@@ -0,0 +1,142 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.213
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.213
+Problem: Javascript object literal is not indented correctly.
+Solution: Make a special case for when "J1" is in 'cino'. (Luc Deschenaux)
+Files: src/misc1.c, src/testdir/test3.in, src/testdir/test3.ok
+
+
+*** ../mercurial/vim73/src/misc1.c 2011-05-25 17:29:40.000000000 +0200
+--- src/misc1.c 2011-06-10 04:58:10.000000000 +0200
+***************
+*** 6965,6971 ****
+ * ldfd) {
+ * }
+ */
+! if ((ind_keep_case_label
+ && cin_iscase(skipwhite(ml_get_curline()), FALSE)))
+ amount = get_indent();
+ else
+--- 6965,6971 ----
+ * ldfd) {
+ * }
+ */
+! if (ind_js || (ind_keep_case_label
+ && cin_iscase(skipwhite(ml_get_curline()), FALSE)))
+ amount = get_indent();
+ else
+*** ../mercurial/vim73/src/testdir/test3.in 2011-05-25 15:16:06.000000000 +0200
+--- src/testdir/test3.in 2011-06-12 21:44:12.000000000 +0200
+***************
+*** 1492,1501 ****
+
+ STARTTEST
+ :set cino=N-s
+! /namespaces
+ =/^NAMESPACEEND
+ ENDTEST
+
+ /* valid namespaces with normal indent */
+ namespace
+ {
+--- 1492,1502 ----
+
+ STARTTEST
+ :set cino=N-s
+! /^NAMESPACESTART
+ =/^NAMESPACEEND
+ ENDTEST
+
++ NAMESPACESTART
+ /* valid namespaces with normal indent */
+ namespace
+ {
+***************
+*** 1561,1566 ****
+--- 1562,1588 ----
+
+
+ STARTTEST
++ :set cino=J1
++ /^JSSTART
++ =/^JSEND
++ ENDTEST
++
++ JSSTART
++ var bar = {
++ foo: {
++ that: this,
++ some: ok,
++ },
++ "bar":{
++ a : 2,
++ b: "123abc",
++ x: 4,
++ "y": 5
++ }
++ }
++ JSEND
++
++ STARTTEST
+ :g/^STARTTEST/.,/^ENDTEST/d
+ :1;/start of AUTO/,$wq! test.out
+ ENDTEST
+*** ../mercurial/vim73/src/testdir/test3.ok 2011-05-25 15:16:06.000000000 +0200
+--- src/testdir/test3.ok 2011-06-12 21:44:26.000000000 +0200
+***************
+*** 1337,1342 ****
+--- 1337,1343 ----
+ }
+
+
++ NAMESPACESTART
+ /* valid namespaces with normal indent */
+ namespace
+ {
+***************
+*** 1401,1403 ****
+--- 1402,1420 ----
+ NAMESPACEEND
+
+
++
++ JSSTART
++ var bar = {
++ foo: {
++ that: this,
++ some: ok,
++ },
++ "bar":{
++ a : 2,
++ b: "123abc",
++ x: 4,
++ "y": 5
++ }
++ }
++ JSEND
++
+*** ../vim-7.3.212/src/version.c 2011-06-12 21:37:06.000000000 +0200
+--- src/version.c 2011-06-12 21:48:34.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 213,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+169. You hire a housekeeper for your home page.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.214 b/source/ap/vim/patches/7.3.214
new file mode 100644
index 000000000..a095bbc43
--- /dev/null
+++ b/source/ap/vim/patches/7.3.214
@@ -0,0 +1,55 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.214
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.214
+Problem: The text displayed by ":z-" isn't exactly like old Vi.
+Solution: Add one to the start line number. (ChangZhuo Chen)
+Files: src/ex_cmds.c
+
+
+*** ../mercurial/vim73/src/ex_cmds.c 2011-05-19 14:30:07.000000000 +0200
+--- src/ex_cmds.c 2011-05-19 14:23:33.000000000 +0200
+***************
+*** 4097,4104 ****
+ switch (*kind)
+ {
+ case '-':
+! start = lnum - bigness * (linenr_T)(x - kind);
+! end = start + bigness;
+ curs = end;
+ break;
+
+--- 4097,4104 ----
+ switch (*kind)
+ {
+ case '-':
+! start = lnum - bigness * (linenr_T)(x - kind) + 1;
+! end = start + bigness - 1;
+ curs = end;
+ break;
+
+*** ../vim-7.3.213/src/version.c 2011-06-12 21:51:01.000000000 +0200
+--- src/version.c 2011-06-12 22:02:20.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 214,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+170. You introduce your wife as "my_lady@home.wife" and refer to your
+ children as "forked processes."
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.215 b/source/ap/vim/patches/7.3.215
new file mode 100644
index 000000000..24d37fbfe
--- /dev/null
+++ b/source/ap/vim/patches/7.3.215
@@ -0,0 +1,63 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.215
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.215 (after 7.3.210)
+Problem: Wrong file names in previous patch. (Toothpik)
+Solution: Include the option changes.
+Files: src/option.c, src/option.h
+
+
+*** ../mercurial/vim73/src/option.c 2011-05-19 13:40:47.000000000 +0200
+--- src/option.c 2011-06-12 19:58:17.000000000 +0200
+***************
+*** 901,906 ****
+--- 901,913 ----
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+ SCRIPTID_INIT},
++ {"cscoperelative", "csre", P_BOOL|P_VI_DEF|P_VIM,
++ #ifdef FEAT_CSCOPE
++ (char_u *)&p_csre, PV_NONE,
++ #else
++ (char_u *)NULL, PV_NONE,
++ #endif
++ {(char_u *)0L, (char_u *)0L} SCRIPTID_INIT},
+ {"cscopetag", "cst", P_BOOL|P_VI_DEF|P_VIM,
+ #ifdef FEAT_CSCOPE
+ (char_u *)&p_cst, PV_NONE,
+*** ../mercurial/vim73/src/option.h 2011-05-19 13:40:47.000000000 +0200
+--- src/option.h 2011-06-12 19:58:49.000000000 +0200
+***************
+*** 391,396 ****
+--- 391,397 ----
+ EXTERN char_u *p_cpo; /* 'cpoptions' */
+ #ifdef FEAT_CSCOPE
+ EXTERN char_u *p_csprg; /* 'cscopeprg' */
++ EXTERN int p_csre; /* 'cscoperelative' */
+ # ifdef FEAT_QUICKFIX
+ EXTERN char_u *p_csqf; /* 'cscopequickfix' */
+ # define CSQF_CMDS "sgdctefi"
+*** ../vim-7.3.214/src/version.c 2011-06-12 22:03:15.000000000 +0200
+--- src/version.c 2011-06-12 22:12:34.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 215,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+171. You invent another person and chat with yourself in empty chat rooms.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.216 b/source/ap/vim/patches/7.3.216
new file mode 100644
index 000000000..a52bc936b
--- /dev/null
+++ b/source/ap/vim/patches/7.3.216
@@ -0,0 +1,263 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.216
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.216
+Problem: When recovering a file a range of lines is missing. (Charles Jie)
+Solution: Reset the index when advancing to the next pointer block. Add a
+ test to verify recovery works.
+Files: src/memline.c, src/testdir/test78.in, src/testdir/test78.ok,
+ src/testdir/Makefile, src/testdir/Make_amiga.mak,
+ src/testdir/Make_dos.mak, src/testdir/Make_ming.mak,
+ src/testdir/Make_os2.mak, src/testdir/Make_vms.mms
+
+
+*** ../mercurial/vim73/src/memline.c 2011-05-10 16:41:13.000000000 +0200
+--- src/memline.c 2011-06-13 00:56:09.000000000 +0200
+***************
+*** 1507,1512 ****
+--- 1507,1513 ----
+ bnum = pp->pb_pointer[idx].pe_bnum;
+ line_count = pp->pb_pointer[idx].pe_line_count;
+ page_count = pp->pb_pointer[idx].pe_page_count;
++ idx = 0;
+ continue;
+ }
+ }
+*** ../mercurial/vim73/src/testdir/test78.in 2011-06-13 01:05:54.000000000 +0200
+--- src/testdir/test78.in 2011-06-13 00:54:48.000000000 +0200
+***************
+*** 0 ****
+--- 1,46 ----
++ Inserts 10000 lines with text to fill the swap file with two levels of pointer
++ blocks. Then recovers from the swap file and checks all text is restored.
++
++ We need about 10000 lines of 100 characters to get two levels of pointer
++ blocks.
++
++ STARTTEST
++ :so small.vim
++ :set nocp fileformat=unix undolevels=-1
++ :e! Xtest
++ ggdG
++ :let text = "\tabcdefghijklmnoparstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnoparstuvwxyz0123456789"
++ :let i = 1
++ :let linecount = 10000
++ :while i <= linecount | call append(i - 1, i . text) | let i += 1 | endwhile
++ :preserve
++ :" get the name of the swap file
++ :redir => swapname
++ :swapname
++ :redir END
++ :let swapname = substitute(swapname, '[[:blank:][:cntrl:]]*\(.\{-}\)[[:blank:][:cntrl:]]*$', '\1', '')
++ :" make a copy of the swap file in Xswap
++ :set bin
++ :exe 'sp ' . swapname
++ :w! Xswap
++ :echo swapname
++ :set nobin
++ :new
++ :only!
++ :bwipe! Xtest
++ :call rename('Xswap', swapname)
++ :recover Xtest
++ :call delete(swapname)
++ :new
++ :call append(0, 'recovery start')
++ :wincmd w
++ :let linedollar = line('$')
++ :if linedollar < linecount | exe 'wincmd w' | call append(line('$'), "expected " . linecount . " lines but found only " . linedollar) | exe 'wincmd w' | let linecount = linedollar | endif
++ :let i = 1
++ :while i <= linecount | if getline(i) != i . text | exe 'wincmd w' | call append(line('$'), i . ' differs') | exe 'wincmd w' | endif | let i += 1 | endwhile
++ :q!
++ :call append(line('$'), 'recovery end')
++ :w! test.out
++ :qa!
++ ENDTEST
++
+*** ../mercurial/vim73/src/testdir/test78.ok 2011-06-13 01:05:54.000000000 +0200
+--- src/testdir/test78.ok 2011-06-13 00:25:05.000000000 +0200
+***************
+*** 0 ****
+--- 1,3 ----
++ recovery start
++
++ recovery end
+*** ../mercurial/vim73/src/testdir/Makefile 2011-03-22 18:10:34.000000000 +0100
+--- src/testdir/Makefile 2011-06-13 00:35:46.000000000 +0200
+***************
+*** 25,31 ****
+ test59.out test60.out test61.out test62.out test63.out \
+ test64.out test65.out test66.out test67.out test68.out \
+ test69.out test70.out test71.out test72.out test73.out \
+! test74.out test75.out test76.out test77.out
+
+ SCRIPTS_GUI = test16.out
+
+--- 25,31 ----
+ test59.out test60.out test61.out test62.out test63.out \
+ test64.out test65.out test66.out test67.out test68.out \
+ test69.out test70.out test71.out test72.out test73.out \
+! test74.out test75.out test76.out test77.out test78.out
+
+ SCRIPTS_GUI = test16.out
+
+***************
+*** 71,77 ****
+ fi \
+ else echo $* NO OUTPUT >>test.log; \
+ fi"
+! # -rm -rf X* test.ok viminfo
+
+ test49.out: test49.vim
+
+--- 71,77 ----
+ fi \
+ else echo $* NO OUTPUT >>test.log; \
+ fi"
+! -rm -rf X* test.ok viminfo
+
+ test49.out: test49.vim
+
+*** ../mercurial/vim73/src/testdir/Make_amiga.mak 2011-03-22 18:10:34.000000000 +0100
+--- src/testdir/Make_amiga.mak 2011-06-13 01:00:42.000000000 +0200
+***************
+*** 28,34 ****
+ test61.out test62.out test63.out test64.out test65.out \
+ test66.out test67.out test68.out test69.out test70.out \
+ test71.out test72.out test73.out test74.out test75.out \
+! test76.out test77.out
+
+ .SUFFIXES: .in .out
+
+--- 28,34 ----
+ test61.out test62.out test63.out test64.out test65.out \
+ test66.out test67.out test68.out test69.out test70.out \
+ test71.out test72.out test73.out test74.out test75.out \
+! test76.out test77.out test78.out
+
+ .SUFFIXES: .in .out
+
+***************
+*** 125,127 ****
+--- 125,128 ----
+ test75.out: test75.in
+ test76.out: test76.in
+ test77.out: test77.in
++ test78.out: test78.in
+*** ../mercurial/vim73/src/testdir/Make_dos.mak 2011-03-22 18:10:34.000000000 +0100
+--- src/testdir/Make_dos.mak 2011-06-13 01:00:55.000000000 +0200
+***************
+*** 28,34 ****
+ test37.out test38.out test39.out test40.out test41.out \
+ test42.out test52.out test65.out test66.out test67.out \
+ test68.out test69.out test71.out test72.out test73.out \
+! test74.out test75.out test76.out test77.out
+
+ SCRIPTS32 = test50.out test70.out
+
+--- 28,34 ----
+ test37.out test38.out test39.out test40.out test41.out \
+ test42.out test52.out test65.out test66.out test67.out \
+ test68.out test69.out test71.out test72.out test73.out \
+! test74.out test75.out test76.out test77.out test78.out
+
+ SCRIPTS32 = test50.out test70.out
+
+*** ../mercurial/vim73/src/testdir/Make_ming.mak 2011-03-22 18:10:34.000000000 +0100
+--- src/testdir/Make_ming.mak 2011-06-13 01:01:02.000000000 +0200
+***************
+*** 48,54 ****
+ test37.out test38.out test39.out test40.out test41.out \
+ test42.out test52.out test65.out test66.out test67.out \
+ test68.out test69.out test71.out test72.out test73.out \
+! test74.out test75.out test76.out test77.out
+
+ SCRIPTS32 = test50.out test70.out
+
+--- 48,54 ----
+ test37.out test38.out test39.out test40.out test41.out \
+ test42.out test52.out test65.out test66.out test67.out \
+ test68.out test69.out test71.out test72.out test73.out \
+! test74.out test75.out test76.out test77.out test78.out
+
+ SCRIPTS32 = test50.out test70.out
+
+*** ../mercurial/vim73/src/testdir/Make_os2.mak 2011-03-22 18:10:34.000000000 +0100
+--- src/testdir/Make_os2.mak 2011-06-13 01:01:08.000000000 +0200
+***************
+*** 28,34 ****
+ test61.out test62.out test63.out test64.out test65.out \
+ test66.out test67.out test68.out test69.out test70.out \
+ test71.out test72.out test73.out test74.out test75.out \
+! test76.out test77.out
+
+ .SUFFIXES: .in .out
+
+--- 28,34 ----
+ test61.out test62.out test63.out test64.out test65.out \
+ test66.out test67.out test68.out test69.out test70.out \
+ test71.out test72.out test73.out test74.out test75.out \
+! test76.out test77.out test78.out
+
+ .SUFFIXES: .in .out
+
+*** ../mercurial/vim73/src/testdir/Make_vms.mms 2011-04-28 19:05:01.000000000 +0200
+--- src/testdir/Make_vms.mms 2011-06-13 01:01:29.000000000 +0200
+***************
+*** 4,10 ****
+ # Authors: Zoltan Arpadffy, <arpadffy@polarhome.com>
+ # Sandor Kopanyi, <sandor.kopanyi@mailbox.hu>
+ #
+! # Last change: 2011 Mar 03
+ #
+ # This has been tested on VMS 6.2 to 8.3 on DEC Alpha, VAX and IA64.
+ # Edit the lines in the Configuration section below to select.
+--- 4,10 ----
+ # Authors: Zoltan Arpadffy, <arpadffy@polarhome.com>
+ # Sandor Kopanyi, <sandor.kopanyi@mailbox.hu>
+ #
+! # Last change: 2011 Jun 13
+ #
+ # This has been tested on VMS 6.2 to 8.3 on DEC Alpha, VAX and IA64.
+ # Edit the lines in the Configuration section below to select.
+***************
+*** 75,81 ****
+ test61.out test62.out test63.out test64.out test65.out \
+ test66.out test67.out test68.out test69.out \
+ test71.out test72.out test74.out test75.out test76.out \
+! test77.out
+
+ # Known problems:
+ # Test 30: a problem around mac format - unknown reason
+--- 75,81 ----
+ test61.out test62.out test63.out test64.out test65.out \
+ test66.out test67.out test68.out test69.out \
+ test71.out test72.out test74.out test75.out test76.out \
+! test77.out test78.out
+
+ # Known problems:
+ # Test 30: a problem around mac format - unknown reason
+*** ../vim-7.3.215/src/version.c 2011-06-12 22:13:37.000000000 +0200
+--- src/version.c 2011-06-13 00:59:02.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 216,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+172. You join listservers just for the extra e-mail.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.217 b/source/ap/vim/patches/7.3.217
new file mode 100644
index 000000000..be04b8634
--- /dev/null
+++ b/source/ap/vim/patches/7.3.217
@@ -0,0 +1,63 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.217
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.217
+Problem: Inside an "if" a ":wincmd" causes problems.
+Solution: When skipping commands let ":wincmd" skip over its argument.
+Files: src/ex_docmd.c
+
+
+*** ../mercurial/vim73/src/ex_docmd.c 2011-05-25 12:51:17.000000000 +0200
+--- src/ex_docmd.c 2011-06-13 01:15:17.000000000 +0200
+***************
+*** 2595,2600 ****
+--- 2595,2601 ----
+ case CMD_unlet:
+ case CMD_verbose:
+ case CMD_vertical:
++ case CMD_wincmd:
+ break;
+
+ default: goto doend;
+***************
+*** 8237,8243 ****
+ p = skipwhite(p);
+ if (*p != NUL && *p != '"' && eap->nextcmd == NULL)
+ EMSG(_(e_invarg));
+! else
+ {
+ /* Pass flags on for ":vertical wincmd ]". */
+ postponed_split_flags = cmdmod.split;
+--- 8238,8244 ----
+ p = skipwhite(p);
+ if (*p != NUL && *p != '"' && eap->nextcmd == NULL)
+ EMSG(_(e_invarg));
+! else if (!eap->skip)
+ {
+ /* Pass flags on for ":vertical wincmd ]". */
+ postponed_split_flags = cmdmod.split;
+*** ../vim-7.3.216/src/version.c 2011-06-13 01:07:22.000000000 +0200
+--- src/version.c 2011-06-13 01:18:48.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 217,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+173. You keep tracking down the email addresses of all your friends
+ (even childhood friends).
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.218 b/source/ap/vim/patches/7.3.218
new file mode 100644
index 000000000..1da18d810
--- /dev/null
+++ b/source/ap/vim/patches/7.3.218
@@ -0,0 +1,91 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.218
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.218 (after 7.3.212)
+Problem: Tiny configuration problem with Python 3.
+Solution: Add abiflags in one more place. (Andreas Behr)
+Files: src/auto/configure, src/configure.in
+
+
+*** ../mercurial/vim73/src/auto/configure 2011-06-12 21:37:06.000000000 +0200
+--- src/auto/configure 2011-06-13 01:26:50.000000000 +0200
+***************
+*** 5607,5613 ****
+ @echo "python3_BASEMODLIBS='$(BASEMODLIBS)'"
+ @echo "python3_LIBS='$(LIBS)'"
+ @echo "python3_SYSLIBS='$(SYSLIBS)'"
+- @echo "python3_LINKFORSHARED='$(LINKFORSHARED)'"
+ @echo "python3_INSTSONAME='$(INSTSONAME)'"
+ eof
+ eval "`cd ${PYTHON3_CONFDIR} && make -f "${tmp_mkf}" __ | sed '/ directory /d'`"
+--- 5607,5612 ----
+***************
+*** 5624,5630 ****
+ if test "${vi_cv_path_python3_pfx}" = "${vi_cv_path_python3_epfx}"; then
+ PYTHON3_CFLAGS="-I${vi_cv_path_python3_pfx}/include/python${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags} -DPYTHON3_HOME=L\\\"${vi_cv_path_python3_pfx}\\\""
+ else
+! PYTHON3_CFLAGS="-I${vi_cv_path_python3_pfx}/include/python${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags} -I${vi_cv_path_python3_epfx}/include/python${vi_cv_var_python3_version} -DPYTHON3_HOME=L\\\"${vi_cv_path_python3_pfx}\\\""
+ fi
+ PYTHON3_SRC="if_python3.c"
+ if test "x$MACOSX" = "xyes"; then
+--- 5623,5629 ----
+ if test "${vi_cv_path_python3_pfx}" = "${vi_cv_path_python3_epfx}"; then
+ PYTHON3_CFLAGS="-I${vi_cv_path_python3_pfx}/include/python${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags} -DPYTHON3_HOME=L\\\"${vi_cv_path_python3_pfx}\\\""
+ else
+! PYTHON3_CFLAGS="-I${vi_cv_path_python3_pfx}/include/python${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags} -I${vi_cv_path_python3_epfx}/include/python${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags} -DPYTHON3_HOME=L\\\"${vi_cv_path_python3_pfx}\\\""
+ fi
+ PYTHON3_SRC="if_python3.c"
+ if test "x$MACOSX" = "xyes"; then
+*** ../mercurial/vim73/src/configure.in 2011-06-12 21:37:06.000000000 +0200
+--- src/configure.in 2011-06-13 01:26:35.000000000 +0200
+***************
+*** 1063,1069 ****
+ @echo "python3_BASEMODLIBS='$(BASEMODLIBS)'"
+ @echo "python3_LIBS='$(LIBS)'"
+ @echo "python3_SYSLIBS='$(SYSLIBS)'"
+- @echo "python3_LINKFORSHARED='$(LINKFORSHARED)'"
+ @echo "python3_INSTSONAME='$(INSTSONAME)'"
+ eof
+ dnl -- delete the lines from make about Entering/Leaving directory
+--- 1063,1068 ----
+***************
+*** 1080,1086 ****
+ if test "${vi_cv_path_python3_pfx}" = "${vi_cv_path_python3_epfx}"; then
+ PYTHON3_CFLAGS="-I${vi_cv_path_python3_pfx}/include/python${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags} -DPYTHON3_HOME=L\\\"${vi_cv_path_python3_pfx}\\\""
+ else
+! PYTHON3_CFLAGS="-I${vi_cv_path_python3_pfx}/include/python${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags} -I${vi_cv_path_python3_epfx}/include/python${vi_cv_var_python3_version} -DPYTHON3_HOME=L\\\"${vi_cv_path_python3_pfx}\\\""
+ fi
+ PYTHON3_SRC="if_python3.c"
+ dnl For Mac OSX 10.2 config.o is included in the Python library.
+--- 1079,1085 ----
+ if test "${vi_cv_path_python3_pfx}" = "${vi_cv_path_python3_epfx}"; then
+ PYTHON3_CFLAGS="-I${vi_cv_path_python3_pfx}/include/python${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags} -DPYTHON3_HOME=L\\\"${vi_cv_path_python3_pfx}\\\""
+ else
+! PYTHON3_CFLAGS="-I${vi_cv_path_python3_pfx}/include/python${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags} -I${vi_cv_path_python3_epfx}/include/python${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags} -DPYTHON3_HOME=L\\\"${vi_cv_path_python3_pfx}\\\""
+ fi
+ PYTHON3_SRC="if_python3.c"
+ dnl For Mac OSX 10.2 config.o is included in the Python library.
+*** ../vim-7.3.217/src/version.c 2011-06-13 01:19:48.000000000 +0200
+--- src/version.c 2011-06-13 01:29:42.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 218,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+174. You know what a listserv is.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.219 b/source/ap/vim/patches/7.3.219
new file mode 100644
index 000000000..2ec111799
--- /dev/null
+++ b/source/ap/vim/patches/7.3.219
@@ -0,0 +1,92 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.219
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.219
+Problem: Can't compile with GTK on Mac.
+Solution: Add some #ifdef trickery. (Ben Schmidt)
+Files: src/os_mac_conv.c, src/os_macosx.m, src/vim.h
+
+
+*** ../mercurial/vim73/src/os_mac_conv.c 2010-08-16 21:23:30.000000000 +0200
+--- src/os_mac_conv.c 2011-06-13 01:55:17.000000000 +0200
+***************
+*** 14,19 ****
+--- 14,21 ----
+ */
+
+ #define NO_X11_INCLUDES
++ #define BalloonEval int /* used in header files */
++
+ #include "vim.h"
+ #ifndef FEAT_GUI_MAC
+ # include <CoreServices/CoreServices.h>
+*** ../mercurial/vim73/src/os_macosx.m 2010-10-10 17:08:28.000000000 +0200
+--- src/os_macosx.m 2011-06-13 01:58:47.000000000 +0200
+***************
+*** 18,23 ****
+--- 18,24 ----
+ /* Avoid a conflict for the definition of Boolean between Mac header files and
+ * X11 header files. */
+ #define NO_X11_INCLUDES
++ #define BalloonEval int /* used in header files */
+
+ #include "vim.h"
+ #import <Cocoa/Cocoa.h>
+***************
+*** 27,35 ****
+ * Clipboard support for the console.
+ * Don't include this when building the GUI version, the functions in
+ * gui_mac.c are used then. TODO: remove those instead?
+! * But for MacVim we need these ones.
+ */
+! #if defined(FEAT_CLIPBOARD) && (!defined(FEAT_GUI) || defined(FEAT_GUI_MACVIM))
+
+ /* Used to identify clipboard data copied from Vim. */
+
+--- 28,36 ----
+ * Clipboard support for the console.
+ * Don't include this when building the GUI version, the functions in
+ * gui_mac.c are used then. TODO: remove those instead?
+! * But for MacVim we do need these ones.
+ */
+! #if defined(FEAT_CLIPBOARD) && (!defined(FEAT_GUI_ENABLED) || defined(FEAT_GUI_MACVIM))
+
+ /* Used to identify clipboard data copied from Vim. */
+
+*** ../mercurial/vim73/src/vim.h 2011-05-19 18:26:34.000000000 +0200
+--- src/vim.h 2011-06-13 01:57:17.000000000 +0200
+***************
+*** 121,126 ****
+--- 121,127 ----
+ || defined(FEAT_GUI_W32) \
+ || defined(FEAT_GUI_W16) \
+ || defined(FEAT_GUI_PHOTON)
++ # define FEAT_GUI_ENABLED /* also defined with NO_X11_INCLUDES */
+ # if !defined(FEAT_GUI) && !defined(NO_X11_INCLUDES)
+ # define FEAT_GUI
+ # endif
+*** ../vim-7.3.218/src/version.c 2011-06-13 01:32:42.000000000 +0200
+--- src/version.c 2011-06-13 02:03:02.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 219,
+ /**/
+
+--
+If Microsoft would build a car...
+... the oil, water temperature, and alternator warning lights would
+all be replaced by a single "General Protection Fault" warning light.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.220 b/source/ap/vim/patches/7.3.220
new file mode 100644
index 000000000..0122e7fce
--- /dev/null
+++ b/source/ap/vim/patches/7.3.220
@@ -0,0 +1,1230 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.220
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.220
+Problem: Python 3: vim.error is a 'str' instead of an 'Exception' object,
+ so 'except' or 'raise' it causes a 'SystemError' exception.
+ Buffer objects do not support slice assignment.
+ When exchanging text between Vim and Python, multibyte texts become
+ gabage or cause Unicode Expceptions, etc.
+ 'py3file' tries to read in the file as Unicode, sometimes causes
+ UnicodeDecodeException
+Solution: Fix the problems. (lilydjwg)
+Files: src/if_py_both.h, src/if_python.c, src/if_python3.c
+
+
+*** ../mercurial/vim73/src/if_py_both.h 2011-03-22 15:47:18.000000000 +0100
+--- src/if_py_both.h 2011-06-18 23:54:25.000000000 +0200
+***************
+*** 65,74 ****
+ OutputWrite(PyObject *self, PyObject *args)
+ {
+ int len;
+! char *str;
+ int error = ((OutputObject *)(self))->error;
+
+! if (!PyArg_ParseTuple(args, "s#", &str, &len))
+ return NULL;
+
+ Py_BEGIN_ALLOW_THREADS
+--- 65,74 ----
+ OutputWrite(PyObject *self, PyObject *args)
+ {
+ int len;
+! char *str = NULL;
+ int error = ((OutputObject *)(self))->error;
+
+! if (!PyArg_ParseTuple(args, "es#", p_enc, &str, &len))
+ return NULL;
+
+ Py_BEGIN_ALLOW_THREADS
+***************
+*** 76,81 ****
+--- 76,82 ----
+ writer((writefn)(error ? emsg : msg), (char_u *)str, len);
+ Python_Release_Vim();
+ Py_END_ALLOW_THREADS
++ PyMem_Free(str);
+
+ Py_INCREF(Py_None);
+ return Py_None;
+***************
+*** 104,113 ****
+ for (i = 0; i < n; ++i)
+ {
+ PyObject *line = PyList_GetItem(list, i);
+! char *str;
+ PyInt len;
+
+! if (!PyArg_Parse(line, "s#", &str, &len)) {
+ PyErr_SetString(PyExc_TypeError, _("writelines() requires list of strings"));
+ Py_DECREF(list);
+ return NULL;
+--- 105,114 ----
+ for (i = 0; i < n; ++i)
+ {
+ PyObject *line = PyList_GetItem(list, i);
+! char *str = NULL;
+ PyInt len;
+
+! if (!PyArg_Parse(line, "es#", p_enc, &str, &len)) {
+ PyErr_SetString(PyExc_TypeError, _("writelines() requires list of strings"));
+ Py_DECREF(list);
+ return NULL;
+***************
+*** 118,123 ****
+--- 119,125 ----
+ writer((writefn)(error ? emsg : msg), (char_u *)str, len);
+ Python_Release_Vim();
+ Py_END_ALLOW_THREADS
++ PyMem_Free(str);
+ }
+
+ Py_DECREF(list);
+***************
+*** 681,686 ****
+--- 683,689 ----
+ {
+ const char *str;
+ char *save;
++ PyObject *bytes;
+ PyInt len;
+ PyInt i;
+ char *p;
+***************
+*** 691,698 ****
+ return NULL;
+ }
+
+! str = PyString_AsString(obj);
+! len = PyString_Size(obj);
+
+ /*
+ * Error checking: String must not contain newlines, as we
+--- 694,702 ----
+ return NULL;
+ }
+
+! bytes = PyString_AsBytes(obj); /* for Python 2 this does nothing */
+! str = PyString_AsString(bytes);
+! len = PyString_Size(bytes);
+
+ /*
+ * Error checking: String must not contain newlines, as we
+***************
+*** 731,736 ****
+--- 735,741 ----
+ }
+
+ save[i] = '\0';
++ PyString_FreeBytes(bytes); /* Python 2 does nothing here */
+
+ return save;
+ }
+***************
+*** 817,823 ****
+ invalidate_botline();
+ }
+
+! /* Replace a line in the specified buffer. The line number is
+ * in Vim format (1-based). The replacement line is given as
+ * a Python string object. The object is checked for validity
+ * and correct format. Errors are returned as a value of FAIL.
+--- 822,829 ----
+ invalidate_botline();
+ }
+
+! /*
+! * Replace a line in the specified buffer. The line number is
+ * in Vim format (1-based). The replacement line is given as
+ * a Python string object. The object is checked for validity
+ * and correct format. Errors are returned as a value of FAIL.
+***************
+*** 908,913 ****
+--- 914,1106 ----
+ }
+ }
+
++ /* Replace a range of lines in the specified buffer. The line numbers are in
++ * Vim format (1-based). The range is from lo up to, but not including, hi.
++ * The replacement lines are given as a Python list of string objects. The
++ * list is checked for validity and correct format. Errors are returned as a
++ * value of FAIL. The return value is OK on success.
++ * If OK is returned and len_change is not NULL, *len_change
++ * is set to the change in the buffer length.
++ */
++ static int
++ SetBufferLineList(buf_T *buf, PyInt lo, PyInt hi, PyObject *list, PyInt *len_change)
++ {
++ /* First of all, we check the thpe of the supplied Python object.
++ * There are three cases:
++ * 1. NULL, or None - this is a deletion.
++ * 2. A list - this is a replacement.
++ * 3. Anything else - this is an error.
++ */
++ if (list == Py_None || list == NULL)
++ {
++ PyInt i;
++ PyInt n = (int)(hi - lo);
++ buf_T *savebuf = curbuf;
++
++ PyErr_Clear();
++ curbuf = buf;
++
++ if (u_savedel((linenr_T)lo, (long)n) == FAIL)
++ PyErr_SetVim(_("cannot save undo information"));
++ else
++ {
++ for (i = 0; i < n; ++i)
++ {
++ if (ml_delete((linenr_T)lo, FALSE) == FAIL)
++ {
++ PyErr_SetVim(_("cannot delete line"));
++ break;
++ }
++ }
++ if (buf == curwin->w_buffer)
++ py_fix_cursor((linenr_T)lo, (linenr_T)hi, (linenr_T)-n);
++ deleted_lines_mark((linenr_T)lo, (long)i);
++ }
++
++ curbuf = savebuf;
++
++ if (PyErr_Occurred() || VimErrorCheck())
++ return FAIL;
++
++ if (len_change)
++ *len_change = -n;
++
++ return OK;
++ }
++ else if (PyList_Check(list))
++ {
++ PyInt i;
++ PyInt new_len = PyList_Size(list);
++ PyInt old_len = hi - lo;
++ PyInt extra = 0; /* lines added to text, can be negative */
++ char **array;
++ buf_T *savebuf;
++
++ if (new_len == 0) /* avoid allocating zero bytes */
++ array = NULL;
++ else
++ {
++ array = (char **)alloc((unsigned)(new_len * sizeof(char *)));
++ if (array == NULL)
++ {
++ PyErr_NoMemory();
++ return FAIL;
++ }
++ }
++
++ for (i = 0; i < new_len; ++i)
++ {
++ PyObject *line = PyList_GetItem(list, i);
++
++ array[i] = StringToLine(line);
++ if (array[i] == NULL)
++ {
++ while (i)
++ vim_free(array[--i]);
++ vim_free(array);
++ return FAIL;
++ }
++ }
++
++ savebuf = curbuf;
++
++ PyErr_Clear();
++ curbuf = buf;
++
++ if (u_save((linenr_T)(lo-1), (linenr_T)hi) == FAIL)
++ PyErr_SetVim(_("cannot save undo information"));
++
++ /* If the size of the range is reducing (ie, new_len < old_len) we
++ * need to delete some old_len. We do this at the start, by
++ * repeatedly deleting line "lo".
++ */
++ if (!PyErr_Occurred())
++ {
++ for (i = 0; i < old_len - new_len; ++i)
++ if (ml_delete((linenr_T)lo, FALSE) == FAIL)
++ {
++ PyErr_SetVim(_("cannot delete line"));
++ break;
++ }
++ extra -= i;
++ }
++
++ /* For as long as possible, replace the existing old_len with the
++ * new old_len. This is a more efficient operation, as it requires
++ * less memory allocation and freeing.
++ */
++ if (!PyErr_Occurred())
++ {
++ for (i = 0; i < old_len && i < new_len; ++i)
++ if (ml_replace((linenr_T)(lo+i), (char_u *)array[i], FALSE)
++ == FAIL)
++ {
++ PyErr_SetVim(_("cannot replace line"));
++ break;
++ }
++ }
++ else
++ i = 0;
++
++ /* Now we may need to insert the remaining new old_len. If we do, we
++ * must free the strings as we finish with them (we can't pass the
++ * responsibility to vim in this case).
++ */
++ if (!PyErr_Occurred())
++ {
++ while (i < new_len)
++ {
++ if (ml_append((linenr_T)(lo + i - 1),
++ (char_u *)array[i], 0, FALSE) == FAIL)
++ {
++ PyErr_SetVim(_("cannot insert line"));
++ break;
++ }
++ vim_free(array[i]);
++ ++i;
++ ++extra;
++ }
++ }
++
++ /* Free any left-over old_len, as a result of an error */
++ while (i < new_len)
++ {
++ vim_free(array[i]);
++ ++i;
++ }
++
++ /* Free the array of old_len. All of its contents have now
++ * been dealt with (either freed, or the responsibility passed
++ * to vim.
++ */
++ vim_free(array);
++
++ /* Adjust marks. Invalidate any which lie in the
++ * changed range, and move any in the remainder of the buffer.
++ */
++ mark_adjust((linenr_T)lo, (linenr_T)(hi - 1),
++ (long)MAXLNUM, (long)extra);
++ changed_lines((linenr_T)lo, 0, (linenr_T)hi, (long)extra);
++
++ if (buf == curwin->w_buffer)
++ py_fix_cursor((linenr_T)lo, (linenr_T)hi, (linenr_T)extra);
++
++ curbuf = savebuf;
++
++ if (PyErr_Occurred() || VimErrorCheck())
++ return FAIL;
++
++ if (len_change)
++ *len_change = new_len - old_len;
++
++ return OK;
++ }
++ else
++ {
++ PyErr_BadArgument();
++ return FAIL;
++ }
++ }
+
+ /* Insert a number of lines into the specified buffer after the specifed line.
+ * The line number is in Vim format (1-based). The lines to be inserted are
+***************
+*** 1108,1113 ****
+--- 1301,1340 ----
+ return -1;
+
+ if (new_end)
++ *new_end = end + len_change;
++
++ return 0;
++ }
++
++ static PyInt
++ RBAsSlice(BufferObject *self, PyInt lo, PyInt hi, PyObject *val, PyInt start, PyInt end, PyInt *new_end)
++ {
++ PyInt size;
++ PyInt len_change;
++
++ /* Self must be a valid buffer */
++ if (CheckBuffer(self))
++ return -1;
++
++ /* Sort out the slice range */
++ size = end - start + 1;
++
++ if (lo < 0)
++ lo = 0;
++ else if (lo > size)
++ lo = size;
++ if (hi < 0)
++ hi = 0;
++ if (hi < lo)
++ hi = lo;
++ else if (hi > size)
++ hi = size;
++
++ if (SetBufferLineList(self->buf, lo + start, hi + start,
++ val, &len_change) == FAIL)
++ return -1;
++
++ if (new_end)
+ *new_end = end + len_change;
+
+ return 0;
+*** ../mercurial/vim73/src/if_python.c 2011-03-26 18:32:00.000000000 +0100
+--- src/if_python.c 2011-06-19 00:02:15.000000000 +0200
+***************
+*** 56,61 ****
+--- 56,65 ----
+
+ static void init_structs(void);
+
++ /* No-op conversion functions, use with care! */
++ #define PyString_AsBytes(obj) (obj)
++ #define PyString_FreeBytes(obj)
++
+ #if !defined(FEAT_PYTHON) && defined(PROTO)
+ /* Use this to be able to generate prototypes without python being used. */
+ # define PyObject Py_ssize_t
+***************
+*** 129,134 ****
+--- 133,139 ----
+ */
+ # define PyArg_Parse dll_PyArg_Parse
+ # define PyArg_ParseTuple dll_PyArg_ParseTuple
++ # define PyMem_Free dll_PyMem_Free
+ # define PyDict_SetItemString dll_PyDict_SetItemString
+ # define PyErr_BadArgument dll_PyErr_BadArgument
+ # define PyErr_Clear dll_PyErr_Clear
+***************
+*** 189,194 ****
+--- 194,200 ----
+ */
+ static int(*dll_PyArg_Parse)(PyObject *, char *, ...);
+ static int(*dll_PyArg_ParseTuple)(PyObject *, char *, ...);
++ static int(*dll_PyMem_Free)(void *);
+ static int(*dll_PyDict_SetItemString)(PyObject *dp, char *key, PyObject *item);
+ static int(*dll_PyErr_BadArgument)(void);
+ static void(*dll_PyErr_Clear)(void);
+***************
+*** 271,276 ****
+--- 277,283 ----
+ {
+ {"PyArg_Parse", (PYTHON_PROC*)&dll_PyArg_Parse},
+ {"PyArg_ParseTuple", (PYTHON_PROC*)&dll_PyArg_ParseTuple},
++ {"PyMem_Free", (PYTHON_PROC*)&dll_PyMem_Free},
+ {"PyDict_SetItemString", (PYTHON_PROC*)&dll_PyDict_SetItemString},
+ {"PyErr_BadArgument", (PYTHON_PROC*)&dll_PyErr_BadArgument},
+ {"PyErr_Clear", (PYTHON_PROC*)&dll_PyErr_Clear},
+***************
+*** 833,876 ****
+ static PyObject *CurrentGetattr(PyObject *, char *);
+ static int CurrentSetattr(PyObject *, char *, PyObject *);
+
+- /* Common routines for buffers and line ranges
+- * -------------------------------------------
+- */
+-
+- static PyInt
+- RBAssSlice(BufferObject *self, PyInt lo, PyInt hi, PyObject *val, PyInt start, PyInt end, PyInt *new_end)
+- {
+- PyInt size;
+- PyInt len_change;
+-
+- /* Self must be a valid buffer */
+- if (CheckBuffer(self))
+- return -1;
+-
+- /* Sort out the slice range */
+- size = end - start + 1;
+-
+- if (lo < 0)
+- lo = 0;
+- else if (lo > size)
+- lo = size;
+- if (hi < 0)
+- hi = 0;
+- if (hi < lo)
+- hi = lo;
+- else if (hi > size)
+- hi = size;
+-
+- if (SetBufferLineList(self->buf, lo + start, hi + start,
+- val, &len_change) == FAIL)
+- return -1;
+-
+- if (new_end)
+- *new_end = end + len_change;
+-
+- return 0;
+- }
+-
+ static PySequenceMethods BufferAsSeq = {
+ (PyInquiry) BufferLength, /* sq_length, len(x) */
+ (binaryfunc) 0, /* BufferConcat, */ /* sq_concat, x+y */
+--- 840,845 ----
+***************
+*** 1038,1044 ****
+ static PyInt
+ BufferAssSlice(PyObject *self, PyInt lo, PyInt hi, PyObject *val)
+ {
+! return RBAssSlice((BufferObject *)(self), lo, hi, val, 1,
+ (PyInt)((BufferObject *)(self))->buf->b_ml.ml_line_count,
+ NULL);
+ }
+--- 1007,1013 ----
+ static PyInt
+ BufferAssSlice(PyObject *self, PyInt lo, PyInt hi, PyObject *val)
+ {
+! return RBAsSlice((BufferObject *)(self), lo, hi, val, 1,
+ (PyInt)((BufferObject *)(self))->buf->b_ml.ml_line_count,
+ NULL);
+ }
+***************
+*** 1088,1094 ****
+ static PyInt
+ RangeAssSlice(PyObject *self, PyInt lo, PyInt hi, PyObject *val)
+ {
+! return RBAssSlice(((RangeObject *)(self))->buf, lo, hi, val,
+ ((RangeObject *)(self))->start,
+ ((RangeObject *)(self))->end,
+ &((RangeObject *)(self))->end);
+--- 1057,1063 ----
+ static PyInt
+ RangeAssSlice(PyObject *self, PyInt lo, PyInt hi, PyObject *val)
+ {
+! return RBAsSlice(((RangeObject *)(self))->buf, lo, hi, val,
+ ((RangeObject *)(self))->start,
+ ((RangeObject *)(self))->end,
+ &((RangeObject *)(self))->end);
+***************
+*** 1435,1628 ****
+ * 4. Utility functions for handling the interface between Vim and Python.
+ */
+
+- /* Replace a range of lines in the specified buffer. The line numbers are in
+- * Vim format (1-based). The range is from lo up to, but not including, hi.
+- * The replacement lines are given as a Python list of string objects. The
+- * list is checked for validity and correct format. Errors are returned as a
+- * value of FAIL. The return value is OK on success.
+- * If OK is returned and len_change is not NULL, *len_change
+- * is set to the change in the buffer length.
+- */
+- static int
+- SetBufferLineList(buf_T *buf, PyInt lo, PyInt hi, PyObject *list, PyInt *len_change)
+- {
+- /* First of all, we check the thpe of the supplied Python object.
+- * There are three cases:
+- * 1. NULL, or None - this is a deletion.
+- * 2. A list - this is a replacement.
+- * 3. Anything else - this is an error.
+- */
+- if (list == Py_None || list == NULL)
+- {
+- PyInt i;
+- PyInt n = (int)(hi - lo);
+- buf_T *savebuf = curbuf;
+-
+- PyErr_Clear();
+- curbuf = buf;
+-
+- if (u_savedel((linenr_T)lo, (long)n) == FAIL)
+- PyErr_SetVim(_("cannot save undo information"));
+- else
+- {
+- for (i = 0; i < n; ++i)
+- {
+- if (ml_delete((linenr_T)lo, FALSE) == FAIL)
+- {
+- PyErr_SetVim(_("cannot delete line"));
+- break;
+- }
+- }
+- if (buf == curwin->w_buffer)
+- py_fix_cursor((linenr_T)lo, (linenr_T)hi, (linenr_T)-n);
+- deleted_lines_mark((linenr_T)lo, (long)i);
+- }
+-
+- curbuf = savebuf;
+-
+- if (PyErr_Occurred() || VimErrorCheck())
+- return FAIL;
+-
+- if (len_change)
+- *len_change = -n;
+-
+- return OK;
+- }
+- else if (PyList_Check(list))
+- {
+- PyInt i;
+- PyInt new_len = PyList_Size(list);
+- PyInt old_len = hi - lo;
+- PyInt extra = 0; /* lines added to text, can be negative */
+- char **array;
+- buf_T *savebuf;
+-
+- if (new_len == 0) /* avoid allocating zero bytes */
+- array = NULL;
+- else
+- {
+- array = (char **)alloc((unsigned)(new_len * sizeof(char *)));
+- if (array == NULL)
+- {
+- PyErr_NoMemory();
+- return FAIL;
+- }
+- }
+-
+- for (i = 0; i < new_len; ++i)
+- {
+- PyObject *line = PyList_GetItem(list, i);
+-
+- array[i] = StringToLine(line);
+- if (array[i] == NULL)
+- {
+- while (i)
+- vim_free(array[--i]);
+- vim_free(array);
+- return FAIL;
+- }
+- }
+-
+- savebuf = curbuf;
+-
+- PyErr_Clear();
+- curbuf = buf;
+-
+- if (u_save((linenr_T)(lo-1), (linenr_T)hi) == FAIL)
+- PyErr_SetVim(_("cannot save undo information"));
+-
+- /* If the size of the range is reducing (ie, new_len < old_len) we
+- * need to delete some old_len. We do this at the start, by
+- * repeatedly deleting line "lo".
+- */
+- if (!PyErr_Occurred())
+- {
+- for (i = 0; i < old_len - new_len; ++i)
+- if (ml_delete((linenr_T)lo, FALSE) == FAIL)
+- {
+- PyErr_SetVim(_("cannot delete line"));
+- break;
+- }
+- extra -= i;
+- }
+-
+- /* For as long as possible, replace the existing old_len with the
+- * new old_len. This is a more efficient operation, as it requires
+- * less memory allocation and freeing.
+- */
+- if (!PyErr_Occurred())
+- {
+- for (i = 0; i < old_len && i < new_len; ++i)
+- if (ml_replace((linenr_T)(lo+i), (char_u *)array[i], FALSE)
+- == FAIL)
+- {
+- PyErr_SetVim(_("cannot replace line"));
+- break;
+- }
+- }
+- else
+- i = 0;
+-
+- /* Now we may need to insert the remaining new old_len. If we do, we
+- * must free the strings as we finish with them (we can't pass the
+- * responsibility to vim in this case).
+- */
+- if (!PyErr_Occurred())
+- {
+- while (i < new_len)
+- {
+- if (ml_append((linenr_T)(lo + i - 1),
+- (char_u *)array[i], 0, FALSE) == FAIL)
+- {
+- PyErr_SetVim(_("cannot insert line"));
+- break;
+- }
+- vim_free(array[i]);
+- ++i;
+- ++extra;
+- }
+- }
+-
+- /* Free any left-over old_len, as a result of an error */
+- while (i < new_len)
+- {
+- vim_free(array[i]);
+- ++i;
+- }
+-
+- /* Free the array of old_len. All of its contents have now
+- * been dealt with (either freed, or the responsibility passed
+- * to vim.
+- */
+- vim_free(array);
+-
+- /* Adjust marks. Invalidate any which lie in the
+- * changed range, and move any in the remainder of the buffer.
+- */
+- mark_adjust((linenr_T)lo, (linenr_T)(hi - 1),
+- (long)MAXLNUM, (long)extra);
+- changed_lines((linenr_T)lo, 0, (linenr_T)hi, (long)extra);
+-
+- if (buf == curwin->w_buffer)
+- py_fix_cursor((linenr_T)lo, (linenr_T)hi, (linenr_T)extra);
+-
+- curbuf = savebuf;
+-
+- if (PyErr_Occurred() || VimErrorCheck())
+- return FAIL;
+-
+- if (len_change)
+- *len_change = new_len - old_len;
+-
+- return OK;
+- }
+- else
+- {
+- PyErr_BadArgument();
+- return FAIL;
+- }
+- }
+-
+ /* Convert a Vim line into a Python string.
+ * All internal newlines are replaced by null characters.
+ *
+--- 1404,1409 ----
+*** ../mercurial/vim73/src/if_python3.c 2011-06-12 21:37:06.000000000 +0200
+--- src/if_python3.c 2011-06-19 00:10:42.000000000 +0200
+***************
+*** 70,77 ****
+
+ #define PyInt Py_ssize_t
+ #define PyString_Check(obj) PyUnicode_Check(obj)
+! #define PyString_AsString(obj) _PyUnicode_AsString(obj)
+! #define PyString_Size(obj) PyUnicode_GET_SIZE(obj)
+ #define PyString_FromString(repr) PyUnicode_FromString(repr)
+
+ #if defined(DYNAMIC_PYTHON3) || defined(PROTO)
+--- 70,79 ----
+
+ #define PyInt Py_ssize_t
+ #define PyString_Check(obj) PyUnicode_Check(obj)
+! #define PyString_AsBytes(obj) PyUnicode_AsEncodedString(obj, (char *)p_enc, NULL);
+! #define PyString_FreeBytes(obj) Py_XDECREF(bytes)
+! #define PyString_AsString(obj) PyBytes_AsString(obj)
+! #define PyString_Size(obj) PyBytes_GET_SIZE(bytes)
+ #define PyString_FromString(repr) PyUnicode_FromString(repr)
+
+ #if defined(DYNAMIC_PYTHON3) || defined(PROTO)
+***************
+*** 99,104 ****
+--- 101,107 ----
+ # define PyArg_Parse py3_PyArg_Parse
+ # undef PyArg_ParseTuple
+ # define PyArg_ParseTuple py3_PyArg_ParseTuple
++ # define PyMem_Free py3_PyMem_Free
+ # define PyDict_SetItemString py3_PyDict_SetItemString
+ # define PyErr_BadArgument py3_PyErr_BadArgument
+ # define PyErr_Clear py3_PyErr_Clear
+***************
+*** 140,147 ****
+--- 143,155 ----
+ # define PyModule_AddObject py3_PyModule_AddObject
+ # define PyImport_AppendInittab py3_PyImport_AppendInittab
+ # define _PyUnicode_AsString py3__PyUnicode_AsString
++ # undef PyUnicode_AsEncodedString
++ # define PyUnicode_AsEncodedString py3_PyUnicode_AsEncodedString
++ # undef PyBytes_AsString
++ # define PyBytes_AsString py3_PyBytes_AsString
+ # define PyObject_GenericGetAttr py3_PyObject_GenericGetAttr
+ # define PySlice_Type (*py3_PySlice_Type)
++ # define PyErr_NewException py3_PyErr_NewException
+ # ifdef Py_DEBUG
+ # define _Py_NegativeRefcount py3__Py_NegativeRefcount
+ # define _Py_RefTotal (*py3__Py_RefTotal)
+***************
+*** 157,164 ****
+ # define PyModule_Create2 py3_PyModule_Create2
+ # undef PyUnicode_FromString
+ # define PyUnicode_FromString py3_PyUnicode_FromString
+! # undef PyUnicode_FromStringAndSize
+! # define PyUnicode_FromStringAndSize py3_PyUnicode_FromStringAndSize
+
+ # ifdef Py_DEBUG
+ # undef PyObject_NEW
+--- 165,172 ----
+ # define PyModule_Create2 py3_PyModule_Create2
+ # undef PyUnicode_FromString
+ # define PyUnicode_FromString py3_PyUnicode_FromString
+! # undef PyUnicode_Decode
+! # define PyUnicode_Decode py3_PyUnicode_Decode
+
+ # ifdef Py_DEBUG
+ # undef PyObject_NEW
+***************
+*** 199,205 ****
+ static int (*py3_PyType_Ready)(PyTypeObject *type);
+ static int (*py3_PyDict_SetItemString)(PyObject *dp, char *key, PyObject *item);
+ static PyObject* (*py3_PyUnicode_FromString)(const char *u);
+! static PyObject* (*py3_PyUnicode_FromStringAndSize)(const char *u, Py_ssize_t size);
+ static long (*py3_PyLong_AsLong)(PyObject *);
+ static void (*py3_PyErr_SetNone)(PyObject *);
+ static void (*py3_PyEval_InitThreads)(void);
+--- 207,214 ----
+ static int (*py3_PyType_Ready)(PyTypeObject *type);
+ static int (*py3_PyDict_SetItemString)(PyObject *dp, char *key, PyObject *item);
+ static PyObject* (*py3_PyUnicode_FromString)(const char *u);
+! static PyObject* (*py3_PyUnicode_Decode)(const char *u, Py_ssize_t size,
+! const char *encoding, const char *errors);
+ static long (*py3_PyLong_AsLong)(PyObject *);
+ static void (*py3_PyErr_SetNone)(PyObject *);
+ static void (*py3_PyEval_InitThreads)(void);
+***************
+*** 207,212 ****
+--- 216,222 ----
+ static PyThreadState*(*py3_PyEval_SaveThread)(void);
+ static int (*py3_PyArg_Parse)(PyObject *, char *, ...);
+ static int (*py3_PyArg_ParseTuple)(PyObject *, char *, ...);
++ static int (*py3_PyMem_Free)(void *);
+ static int (*py3_Py_IsInitialized)(void);
+ static void (*py3_PyErr_Clear)(void);
+ static PyObject*(*py3__PyObject_Init)(PyObject *, PyTypeObject *);
+***************
+*** 214,224 ****
+--- 224,237 ----
+ static int (*py3_PyModule_AddObject)(PyObject *m, const char *name, PyObject *o);
+ static int (*py3_PyImport_AppendInittab)(const char *name, PyObject* (*initfunc)(void));
+ static char* (*py3__PyUnicode_AsString)(PyObject *unicode);
++ static PyObject* (*py3_PyUnicode_AsEncodedString)(PyObject *unicode, const char* encoding, const char* errors);
++ static char* (*py3_PyBytes_AsString)(PyObject *bytes);
+ static PyObject* (*py3_PyObject_GenericGetAttr)(PyObject *obj, PyObject *name);
+ static PyObject* (*py3_PyModule_Create2)(struct PyModuleDef* module, int module_api_version);
+ static PyObject* (*py3_PyType_GenericAlloc)(PyTypeObject *type, Py_ssize_t nitems);
+ static PyObject* (*py3_PyType_GenericNew)(PyTypeObject *type, PyObject *args, PyObject *kwds);
+ static PyTypeObject* py3_PySlice_Type;
++ static PyObject* (*py3_PyErr_NewException)(char *name, PyObject *base, PyObject *dict);
+ # ifdef Py_DEBUG
+ static void (*py3__Py_NegativeRefcount)(const char *fname, int lineno, PyObject *op);
+ static Py_ssize_t* py3__Py_RefTotal;
+***************
+*** 259,264 ****
+--- 272,278 ----
+ {"Py_SetPythonHome", (PYTHON_PROC*)&py3_Py_SetPythonHome},
+ {"Py_Initialize", (PYTHON_PROC*)&py3_Py_Initialize},
+ {"PyArg_ParseTuple", (PYTHON_PROC*)&py3_PyArg_ParseTuple},
++ {"PyMem_Free", (PYTHON_PROC*)&py3_PyMem_Free},
+ {"PyList_New", (PYTHON_PROC*)&py3_PyList_New},
+ {"PyGILState_Ensure", (PYTHON_PROC*)&py3_PyGILState_Ensure},
+ {"PyGILState_Release", (PYTHON_PROC*)&py3_PyGILState_Release},
+***************
+*** 289,295 ****
+ {"PyEval_RestoreThread", (PYTHON_PROC*)&py3_PyEval_RestoreThread},
+ {"PyEval_SaveThread", (PYTHON_PROC*)&py3_PyEval_SaveThread},
+ {"PyArg_Parse", (PYTHON_PROC*)&py3_PyArg_Parse},
+- {"PyArg_ParseTuple", (PYTHON_PROC*)&py3_PyArg_ParseTuple},
+ {"Py_IsInitialized", (PYTHON_PROC*)&py3_Py_IsInitialized},
+ {"_Py_NoneStruct", (PYTHON_PROC*)&py3__Py_NoneStruct},
+ {"PyErr_Clear", (PYTHON_PROC*)&py3_PyErr_Clear},
+--- 303,308 ----
+***************
+*** 297,307 ****
+--- 310,322 ----
+ {"PyModule_AddObject", (PYTHON_PROC*)&py3_PyModule_AddObject},
+ {"PyImport_AppendInittab", (PYTHON_PROC*)&py3_PyImport_AppendInittab},
+ {"_PyUnicode_AsString", (PYTHON_PROC*)&py3__PyUnicode_AsString},
++ {"PyBytes_AsString", (PYTHON_PROC*)&py3_PyBytes_AsString},
+ {"PyObject_GenericGetAttr", (PYTHON_PROC*)&py3_PyObject_GenericGetAttr},
+ {"PyModule_Create2", (PYTHON_PROC*)&py3_PyModule_Create2},
+ {"PyType_GenericAlloc", (PYTHON_PROC*)&py3_PyType_GenericAlloc},
+ {"PyType_GenericNew", (PYTHON_PROC*)&py3_PyType_GenericNew},
+ {"PySlice_Type", (PYTHON_PROC*)&py3_PySlice_Type},
++ {"PyErr_NewException", (PYTHON_PROC*)&py3_PyErr_NewException},
+ # ifdef Py_DEBUG
+ {"_Py_NegativeRefcount", (PYTHON_PROC*)&py3__Py_NegativeRefcount},
+ {"_Py_RefTotal", (PYTHON_PROC*)&py3__Py_RefTotal},
+***************
+*** 337,343 ****
+ py3_runtime_link_init(char *libname, int verbose)
+ {
+ int i;
+! void *ucs_from_string, *ucs_from_string_and_size;
+
+ # if !(defined(PY_NO_RTLD_GLOBAL) && defined(PY3_NO_RTLD_GLOBAL)) && defined(UNIX) && defined(FEAT_PYTHON)
+ /* Can't have Python and Python3 loaded at the same time.
+--- 352,358 ----
+ py3_runtime_link_init(char *libname, int verbose)
+ {
+ int i;
+! void *ucs_from_string, *ucs_decode, *ucs_as_encoded_string;
+
+ # if !(defined(PY_NO_RTLD_GLOBAL) && defined(PY3_NO_RTLD_GLOBAL)) && defined(UNIX) && defined(FEAT_PYTHON)
+ /* Can't have Python and Python3 loaded at the same time.
+***************
+*** 377,395 ****
+ /* Load unicode functions separately as only the ucs2 or the ucs4 functions
+ * will be present in the library. */
+ ucs_from_string = symbol_from_dll(hinstPy3, "PyUnicodeUCS2_FromString");
+! ucs_from_string_and_size = symbol_from_dll(hinstPy3,
+! "PyUnicodeUCS2_FromStringAndSize");
+! if (!ucs_from_string || !ucs_from_string_and_size)
+ {
+ ucs_from_string = symbol_from_dll(hinstPy3,
+ "PyUnicodeUCS4_FromString");
+! ucs_from_string_and_size = symbol_from_dll(hinstPy3,
+! "PyUnicodeUCS4_FromStringAndSize");
+ }
+! if (ucs_from_string && ucs_from_string_and_size)
+ {
+ py3_PyUnicode_FromString = ucs_from_string;
+! py3_PyUnicode_FromStringAndSize = ucs_from_string_and_size;
+ }
+ else
+ {
+--- 392,415 ----
+ /* Load unicode functions separately as only the ucs2 or the ucs4 functions
+ * will be present in the library. */
+ ucs_from_string = symbol_from_dll(hinstPy3, "PyUnicodeUCS2_FromString");
+! ucs_decode = symbol_from_dll(hinstPy3,
+! "PyUnicodeUCS2_Decode");
+! ucs_as_encoded_string = symbol_from_dll(hinstPy3,
+! "PyUnicodeUCS2_AsEncodedString");
+! if (!ucs_from_string || !ucs_decode || !ucs_as_encoded_string)
+ {
+ ucs_from_string = symbol_from_dll(hinstPy3,
+ "PyUnicodeUCS4_FromString");
+! ucs_decode = symbol_from_dll(hinstPy3,
+! "PyUnicodeUCS4_Decode");
+! ucs_as_encoded_string = symbol_from_dll(hinstPy3,
+! "PyUnicodeUCS4_AsEncodedString");
+ }
+! if (ucs_from_string && ucs_decode && ucs_as_encoded_string)
+ {
+ py3_PyUnicode_FromString = ucs_from_string;
+! py3_PyUnicode_Decode = ucs_decode;
+! py3_PyUnicode_AsEncodedString = ucs_as_encoded_string;
+ }
+ else
+ {
+***************
+*** 567,574 ****
+ /* Remove the element from sys.path that was added because of our
+ * argv[0] value in Py3Init_vim(). Previously we used an empty
+ * string, but dependinding on the OS we then get an empty entry or
+! * the current directory in sys.path. */
+! PyRun_SimpleString("import sys; sys.path = list(filter(lambda x: x != '/must>not&exist', sys.path))");
+
+ // lock is created and acquired in PyEval_InitThreads() and thread
+ // state is created in Py_Initialize()
+--- 587,597 ----
+ /* Remove the element from sys.path that was added because of our
+ * argv[0] value in Py3Init_vim(). Previously we used an empty
+ * string, but dependinding on the OS we then get an empty entry or
+! * the current directory in sys.path.
+! * Only after vim has been imported, the element does exist in
+! * sys.path.
+! */
+! PyRun_SimpleString("import vim; import sys; sys.path = list(filter(lambda x: not x.endswith('must>not&exist'), sys.path))");
+
+ // lock is created and acquired in PyEval_InitThreads() and thread
+ // state is created in Py_Initialize()
+***************
+*** 605,610 ****
+--- 628,635 ----
+ #if defined(HAVE_LOCALE_H) || defined(X_LOCALE)
+ char *saved_locale;
+ #endif
++ PyObject *cmdstr;
++ PyObject *cmdbytes;
+
+ #if defined(MACOS) && !defined(MACOS_X_UNIX)
+ GetPort(&oldPort);
+***************
+*** 634,640 ****
+
+ pygilstate = PyGILState_Ensure();
+
+! PyRun_SimpleString((char *)(cmd));
+
+ PyGILState_Release(pygilstate);
+
+--- 659,671 ----
+
+ pygilstate = PyGILState_Ensure();
+
+! /* PyRun_SimpleString expects a UTF-8 string. Wrong encoding may cause
+! * SyntaxError (unicode error). */
+! cmdstr = PyUnicode_Decode(cmd, strlen(cmd), (char *)p_enc, NULL);
+! cmdbytes = PyUnicode_AsEncodedString(cmdstr, "utf-8", NULL);
+! Py_XDECREF(cmdstr);
+! PyRun_SimpleString(PyBytes_AsString(cmdbytes));
+! Py_XDECREF(cmdbytes);
+
+ PyGILState_Release(pygilstate);
+
+***************
+*** 693,699 ****
+ * different options under Windows, meaning that stdio pointers aren't
+ * compatible between the two. Yuk.
+ *
+! * construct: exec(compile(open('a_filename').read(), 'a_filename', 'exec'))
+ *
+ * We need to escape any backslashes or single quotes in the file name, so that
+ * Python won't mangle the file name.
+--- 724,733 ----
+ * different options under Windows, meaning that stdio pointers aren't
+ * compatible between the two. Yuk.
+ *
+! * construct: exec(compile(open('a_filename', 'rb').read(), 'a_filename', 'exec'))
+! *
+! * Using bytes so that Python can detect the source encoding as it normally
+! * does. The doc does not say "compile" accept bytes, though.
+ *
+ * We need to escape any backslashes or single quotes in the file name, so that
+ * Python won't mangle the file name.
+***************
+*** 716,723 ****
+ return;
+ if (i==0)
+ {
+! strcpy(p,"').read(),'");
+! p += 11;
+ }
+ else
+ {
+--- 750,757 ----
+ return;
+ if (i==0)
+ {
+! strcpy(p,"','rb').read(),'");
+! p += 16;
+ }
+ else
+ {
+***************
+*** 812,819 ****
+
+ static Py_ssize_t BufferLength(PyObject *);
+ static PyObject *BufferItem(PyObject *, Py_ssize_t);
+- static Py_ssize_t BufferAsItem(PyObject *, Py_ssize_t, PyObject *);
+ static PyObject* BufferSubscript(PyObject *self, PyObject* idx);
+
+
+ /* Line range type - Implementation functions
+--- 846,853 ----
+
+ static Py_ssize_t BufferLength(PyObject *);
+ static PyObject *BufferItem(PyObject *, Py_ssize_t);
+ static PyObject* BufferSubscript(PyObject *self, PyObject* idx);
++ static Py_ssize_t BufferAsSubscript(PyObject *self, PyObject* idx, PyObject* val);
+
+
+ /* Line range type - Implementation functions
+***************
+*** 835,841 ****
+ (ssizeargfunc) 0, /* sq_repeat, x*n */
+ (ssizeargfunc) BufferItem, /* sq_item, x[i] */
+ 0, /* was_sq_slice, x[i:j] */
+! (ssizeobjargproc) BufferAsItem, /* sq_ass_item, x[i]=v */
+ 0, /* sq_ass_slice, x[i:j]=v */
+ 0, /* sq_contains */
+ 0, /* sq_inplace_concat */
+--- 869,875 ----
+ (ssizeargfunc) 0, /* sq_repeat, x*n */
+ (ssizeargfunc) BufferItem, /* sq_item, x[i] */
+ 0, /* was_sq_slice, x[i:j] */
+! 0, /* sq_ass_item, x[i]=v */
+ 0, /* sq_ass_slice, x[i:j]=v */
+ 0, /* sq_contains */
+ 0, /* sq_inplace_concat */
+***************
+*** 845,851 ****
+ PyMappingMethods BufferAsMapping = {
+ /* mp_length */ (lenfunc)BufferLength,
+ /* mp_subscript */ (binaryfunc)BufferSubscript,
+! /* mp_ass_subscript */ (objobjargproc)0,
+ };
+
+
+--- 879,885 ----
+ PyMappingMethods BufferAsMapping = {
+ /* mp_length */ (lenfunc)BufferLength,
+ /* mp_subscript */ (binaryfunc)BufferSubscript,
+! /* mp_ass_subscript */ (objobjargproc)BufferAsSubscript,
+ };
+
+
+***************
+*** 897,902 ****
+--- 931,938 ----
+
+ if (this->buf && this->buf != INVALID_BUFFER_VALUE)
+ this->buf->b_python3_ref = NULL;
++
++ Py_TYPE(self)->tp_free((PyObject*)self);
+ }
+
+ static PyObject *
+***************
+*** 975,989 ****
+ (Py_ssize_t)((BufferObject *)(self))->buf->b_ml.ml_line_count);
+ }
+
+- static Py_ssize_t
+- BufferAsItem(PyObject *self, Py_ssize_t n, PyObject *val)
+- {
+- return RBAsItem((BufferObject *)(self), n, val, 1,
+- (Py_ssize_t)((BufferObject *)(self))->buf->b_ml.ml_line_count,
+- NULL);
+- }
+-
+-
+ static PyObject *
+ BufferSubscript(PyObject *self, PyObject* idx)
+ {
+--- 1011,1016 ----
+***************
+*** 999,1011 ****
+ &step, &slicelen) < 0) {
+ return NULL;
+ }
+! return BufferSlice(self,start,stop+1);
+ } else {
+ PyErr_SetString(PyExc_IndexError, "Index must be int or slice");
+ return NULL;
+ }
+ }
+
+ static PySequenceMethods RangeAsSeq = {
+ (lenfunc) RangeLength, /* sq_length, len(x) */
+ (binaryfunc) 0, /* RangeConcat, sq_concat, x+y */
+--- 1026,1064 ----
+ &step, &slicelen) < 0) {
+ return NULL;
+ }
+! return BufferSlice(self,start,stop);
+ } else {
+ PyErr_SetString(PyExc_IndexError, "Index must be int or slice");
+ return NULL;
+ }
+ }
+
++ static Py_ssize_t
++ BufferAsSubscript(PyObject *self, PyObject* idx, PyObject* val)
++ {
++ if (PyLong_Check(idx)) {
++ long n = PyLong_AsLong(idx);
++ return RBAsItem((BufferObject *)(self), n, val, 1,
++ (Py_ssize_t)((BufferObject *)(self))->buf->b_ml.ml_line_count,
++ NULL);
++ } else if (PySlice_Check(idx)) {
++ Py_ssize_t start, stop, step, slicelen;
++
++ if (PySlice_GetIndicesEx((PySliceObject *)idx,
++ (Py_ssize_t)((BufferObject *)(self))->buf->b_ml.ml_line_count+1,
++ &start, &stop,
++ &step, &slicelen) < 0) {
++ return -1;
++ }
++ return RBAsSlice((BufferObject *)(self), start, stop, val, 1,
++ (PyInt)((BufferObject *)(self))->buf->b_ml.ml_line_count,
++ NULL);
++ } else {
++ PyErr_SetString(PyExc_IndexError, "Index must be int or slice");
++ return -1;
++ }
++ }
++
+ static PySequenceMethods RangeAsSeq = {
+ (lenfunc) RangeLength, /* sq_length, len(x) */
+ (binaryfunc) 0, /* RangeConcat, sq_concat, x+y */
+***************
+*** 1032,1037 ****
+--- 1085,1091 ----
+ RangeDestructor(PyObject *self)
+ {
+ Py_DECREF(((RangeObject *)(self))->buf);
++ Py_TYPE(self)->tp_free((PyObject*)self);
+ }
+
+ static PyObject *
+***************
+*** 1159,1164 ****
+--- 1213,1220 ----
+
+ if (this->win && this->win != INVALID_WINDOW_VALUE)
+ this->win->w_python3_ref = NULL;
++
++ Py_TYPE(self)->tp_free((PyObject*)self);
+ }
+
+ static PyObject *
+***************
+*** 1350,1357 ****
+ PySys_SetArgv(1, argv);
+
+ mod = PyModule_Create(&vimmodule);
+
+! VimError = Py_BuildValue("s", "vim.error");
+
+ PyModule_AddObject(mod, "error", VimError);
+ Py_INCREF((PyObject *)(void *)&TheBufferList);
+--- 1406,1416 ----
+ PySys_SetArgv(1, argv);
+
+ mod = PyModule_Create(&vimmodule);
++ if (mod == NULL)
++ return NULL;
+
+! VimError = PyErr_NewException("vim.error", NULL, NULL);
+! Py_INCREF(VimError);
+
+ PyModule_AddObject(mod, "error", VimError);
+ Py_INCREF((PyObject *)(void *)&TheBufferList);
+***************
+*** 1404,1410 ****
+ }
+ *p = '\0';
+
+! result = PyUnicode_FromStringAndSize(tmp, len);
+
+ vim_free(tmp);
+ return result;
+--- 1463,1469 ----
+ }
+ *p = '\0';
+
+! result = PyUnicode_Decode(tmp, len, (char *)p_enc, NULL);
+
+ vim_free(tmp);
+ return result;
+*** ../vim-7.3.219/src/version.c 2011-06-13 02:03:55.000000000 +0200
+--- src/version.c 2011-06-19 00:25:38.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 220,
+ /**/
+
+--
+I'm in shape. Round IS a shape.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.221 b/source/ap/vim/patches/7.3.221
new file mode 100644
index 000000000..7211a4a66
--- /dev/null
+++ b/source/ap/vim/patches/7.3.221
@@ -0,0 +1,287 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.221
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.221
+Problem: Text from the clipboard is sometimes handled as linewise, but not
+ consistently.
+Solution: Assume the text is linewise when it ends in a CR or NL.
+Files: src/gui_gtk_x11.c, src/gui_mac.c, src/ops.c, src/os_msdos.c,
+ src/os_mswin.c, src/os_qnx.c, src/ui.c
+
+
+*** ../mercurial/vim73/src/gui_gtk_x11.c 2011-02-25 17:10:22.000000000 +0100
+--- src/gui_gtk_x11.c 2011-06-19 00:58:31.000000000 +0200
+***************
+*** 1173,1179 ****
+ char_u *tmpbuf = NULL;
+ guchar *tmpbuf_utf8 = NULL;
+ int len;
+! int motion_type;
+
+ if (data->selection == clip_plus.gtk_sel_atom)
+ cbd = &clip_plus;
+--- 1173,1179 ----
+ char_u *tmpbuf = NULL;
+ guchar *tmpbuf_utf8 = NULL;
+ int len;
+! int motion_type = MAUTO;
+
+ if (data->selection == clip_plus.gtk_sel_atom)
+ cbd = &clip_plus;
+***************
+*** 1182,1188 ****
+
+ text = (char_u *)data->data;
+ len = data->length;
+- motion_type = MCHAR;
+
+ if (text == NULL || len <= 0)
+ {
+--- 1182,1187 ----
+*** ../mercurial/vim73/src/gui_mac.c 2011-06-12 20:33:30.000000000 +0200
+--- src/gui_mac.c 2011-06-19 00:59:07.000000000 +0200
+***************
+*** 4671,4677 ****
+ if (flavor)
+ type = **textOfClip;
+ else
+! type = (strchr(*textOfClip, '\r') != NULL) ? MLINE : MCHAR;
+
+ tempclip = lalloc(scrapSize + 1, TRUE);
+ mch_memmove(tempclip, *textOfClip + flavor, scrapSize);
+--- 4671,4677 ----
+ if (flavor)
+ type = **textOfClip;
+ else
+! type = MAUTO;
+
+ tempclip = lalloc(scrapSize + 1, TRUE);
+ mch_memmove(tempclip, *textOfClip + flavor, scrapSize);
+*** ../mercurial/vim73/src/ops.c 2011-04-01 16:28:33.000000000 +0200
+--- src/ops.c 2011-06-19 00:59:39.000000000 +0200
+***************
+*** 5733,5739 ****
+ }
+ }
+
+! /* Convert from the GUI selection string into the '*'/'+' register */
+ void
+ clip_yank_selection(type, str, len, cbd)
+ int type;
+--- 5733,5741 ----
+ }
+ }
+
+! /*
+! * Convert from the GUI selection string into the '*'/'+' register.
+! */
+ void
+ clip_yank_selection(type, str, len, cbd)
+ int type;
+***************
+*** 6090,6098 ****
+ if (yank_type == MBLOCK)
+ yank_type = MAUTO;
+ #endif
+- if (yank_type == MAUTO)
+- yank_type = ((len > 0 && (str[len - 1] == '\n' || str[len - 1] == '\r'))
+- ? MLINE : MCHAR);
+ str_to_reg(y_current, yank_type, str, len, block_len);
+
+ # ifdef FEAT_CLIPBOARD
+--- 6092,6097 ----
+***************
+*** 6113,6125 ****
+ * is appended.
+ */
+ static void
+! str_to_reg(y_ptr, type, str, len, blocklen)
+ struct yankreg *y_ptr; /* pointer to yank register */
+! int type; /* MCHAR, MLINE or MBLOCK */
+ char_u *str; /* string to put in register */
+ long len; /* length of string */
+ long blocklen; /* width of Visual block */
+ {
+ int lnum;
+ long start;
+ long i;
+--- 6112,6125 ----
+ * is appended.
+ */
+ static void
+! str_to_reg(y_ptr, yank_type, str, len, blocklen)
+ struct yankreg *y_ptr; /* pointer to yank register */
+! int yank_type; /* MCHAR, MLINE, MBLOCK, MAUTO */
+ char_u *str; /* string to put in register */
+ long len; /* length of string */
+ long blocklen; /* width of Visual block */
+ {
++ int type; /* MCHAR, MLINE or MBLOCK */
+ int lnum;
+ long start;
+ long i;
+***************
+*** 6136,6141 ****
+--- 6136,6147 ----
+ if (y_ptr->y_array == NULL) /* NULL means empty register */
+ y_ptr->y_size = 0;
+
++ if (yank_type == MAUTO)
++ type = ((len > 0 && (str[len - 1] == NL || str[len - 1] == CAR))
++ ? MLINE : MCHAR);
++ else
++ type = yank_type;
++
+ /*
+ * Count the number of lines within the string
+ */
+*** ../mercurial/vim73/src/os_msdos.c 2010-12-17 18:06:00.000000000 +0100
+--- src/os_msdos.c 2011-06-19 01:00:56.000000000 +0200
+***************
+*** 2232,2238 ****
+ void
+ clip_mch_request_selection(VimClipboard *cbd)
+ {
+! int type = MCHAR;
+ char_u *pAllocated = NULL;
+ char_u *pClipText = NULL;
+ int clip_data_format = 0;
+--- 2232,2238 ----
+ void
+ clip_mch_request_selection(VimClipboard *cbd)
+ {
+! int type = MAUTO;
+ char_u *pAllocated = NULL;
+ char_u *pClipText = NULL;
+ int clip_data_format = 0;
+***************
+*** 2280,2293 ****
+ {
+ clip_data_format = CF_TEXT;
+ pClipText = pAllocated;
+- type = (vim_strchr((char*)pClipText, '\r') != NULL) ? MLINE : MCHAR;
+ }
+
+ else if ((pAllocated = Win16GetClipboardData(CF_OEMTEXT)) != NULL)
+ {
+ clip_data_format = CF_OEMTEXT;
+ pClipText = pAllocated;
+- type = (vim_strchr((char*)pClipText, '\r') != NULL) ? MLINE : MCHAR;
+ }
+
+ /* Did we get anything? */
+--- 2280,2291 ----
+*** ../mercurial/vim73/src/os_mswin.c 2011-01-17 20:08:04.000000000 +0100
+--- src/os_mswin.c 2011-06-19 01:01:51.000000000 +0200
+***************
+*** 1410,1418 ****
+ {
+ char_u *temp_clipboard;
+
+! /* If the type is not known guess it. */
+ if (metadata.type == -1)
+! metadata.type = (vim_strchr(str, '\n') == NULL) ? MCHAR : MLINE;
+
+ /* Translate <CR><NL> into <NL>. */
+ temp_clipboard = crnl_to_nl(str, &str_size);
+--- 1410,1418 ----
+ {
+ char_u *temp_clipboard;
+
+! /* If the type is not known detect it. */
+ if (metadata.type == -1)
+! metadata.type = MAUTO;
+
+ /* Translate <CR><NL> into <NL>. */
+ temp_clipboard = crnl_to_nl(str, &str_size);
+*** ../mercurial/vim73/src/os_qnx.c 2010-05-15 21:22:11.000000000 +0200
+--- src/os_qnx.c 2011-06-19 01:02:26.000000000 +0200
+***************
+*** 93,99 ****
+ clip_length = clip_header->length - 1;
+
+ if( clip_text != NULL && is_type_set == FALSE )
+! type = (strchr( clip_text, '\r' ) != NULL) ? MLINE : MCHAR;
+ }
+
+ if( (clip_text != NULL) && (clip_length > 0) )
+--- 93,99 ----
+ clip_length = clip_header->length - 1;
+
+ if( clip_text != NULL && is_type_set == FALSE )
+! type = MAUTO;
+ }
+
+ if( (clip_text != NULL) && (clip_length > 0) )
+*** ../mercurial/vim73/src/ui.c 2010-09-21 22:09:28.000000000 +0200
+--- src/ui.c 2011-06-19 01:03:31.000000000 +0200
+***************
+*** 1609,1615 ****
+
+ #if defined(FEAT_HANGULIN) || defined(PROTO)
+ void
+! push_raw_key (s, len)
+ char_u *s;
+ int len;
+ {
+--- 1609,1615 ----
+
+ #if defined(FEAT_HANGULIN) || defined(PROTO)
+ void
+! push_raw_key(s, len)
+ char_u *s;
+ int len;
+ {
+***************
+*** 2016,2022 ****
+ long_u *length;
+ int *format;
+ {
+! int motion_type;
+ long_u len;
+ char_u *p;
+ char **text_list = NULL;
+--- 2016,2022 ----
+ long_u *length;
+ int *format;
+ {
+! int motion_type = MAUTO;
+ long_u len;
+ char_u *p;
+ char **text_list = NULL;
+***************
+*** 2036,2042 ****
+ *(int *)success = FALSE;
+ return;
+ }
+- motion_type = MCHAR;
+ p = (char_u *)value;
+ len = *length;
+ if (*type == vim_atom)
+--- 2036,2041 ----
+*** ../vim-7.3.220/src/version.c 2011-06-19 00:27:46.000000000 +0200
+--- src/version.c 2011-06-19 01:03:59.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 221,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+190. You quickly hand over your wallet, leather jacket, and car keys
+ during a mugging, then proceed to beat the crap out of your
+ assailant when he asks for your laptop.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.222 b/source/ap/vim/patches/7.3.222
new file mode 100644
index 000000000..87151b5ab
--- /dev/null
+++ b/source/ap/vim/patches/7.3.222
@@ -0,0 +1,71 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.22
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.222
+Problem: Warning for building GvimExt.
+Solution: Comment-out the DESCRIPTION line. (Mike Williams)
+Files: src/GvimExt/gvimext.def, src/GvimExt/gvimext_ming.def
+
+
+*** ../mercurial/vim73/src/GvimExt/gvimext.def 2010-05-15 21:22:11.000000000 +0200
+--- src/GvimExt/gvimext.def 2011-06-15 03:50:55.000000000 +0200
+***************
+*** 1,7 ****
+ ;gvimdef.def : Declares the module parameters for the DLL.
+
+ LIBRARY gvimext
+! DESCRIPTION 'Vim Shell Extension'
+
+ EXPORTS
+ DllCanUnloadNow private
+--- 1,7 ----
+ ;gvimdef.def : Declares the module parameters for the DLL.
+
+ LIBRARY gvimext
+! ; DESCRIPTION 'Vim Shell Extension'
+
+ EXPORTS
+ DllCanUnloadNow private
+*** ../mercurial/vim73/src/GvimExt/gvimext_ming.def 2010-05-15 21:22:11.000000000 +0200
+--- src/GvimExt/gvimext_ming.def 2011-06-15 03:51:05.000000000 +0200
+***************
+*** 3,9 ****
+ ;Hence this is the same file as gvimext.def with private removed
+
+ LIBRARY gvimext
+! DESCRIPTION 'Vim Shell Extension build with MinGW'
+
+ EXPORTS
+ DllCanUnloadNow = DllCanUnloadNow@0
+--- 3,9 ----
+ ;Hence this is the same file as gvimext.def with private removed
+
+ LIBRARY gvimext
+! ; DESCRIPTION 'Vim Shell Extension build with MinGW'
+
+ EXPORTS
+ DllCanUnloadNow = DllCanUnloadNow@0
+*** ../vim-7.3.221/src/version.c 2011-06-19 01:14:23.000000000 +0200
+--- src/version.c 2011-06-19 01:26:57.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 222,
+ /**/
+
+--
+What is the difference between a professional and an amateur?
+The ark was built by an amateur; professionals gave us the Titanic.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.223 b/source/ap/vim/patches/7.3.223
new file mode 100644
index 000000000..e151c5b74
--- /dev/null
+++ b/source/ap/vim/patches/7.3.223
@@ -0,0 +1,387 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.223
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.223
+Problem: MingW cross compilation doesn't work with tiny features.
+Solution: Move acp_to_enc(), enc_to_utf16() and utf16_to_enc() outside of
+ "#ifdef CLIPBOARD". Fix typo in makefile.
+Files: src/Make_ming.mak, src/os_mswin.c
+
+
+*** ../mercurial/vim73/src/Make_ming.mak 2010-12-30 14:50:46.000000000 +0100
+--- src/Make_ming.mak 2011-06-19 01:20:16.000000000 +0200
+***************
+*** 87,93 ****
+
+ # If you are using gettext-0.10.35 from http://sourceforge.net/projects/gettext
+ # or gettext-0.10.37 from http://sourceforge.net/projects/mingwrep/
+! # uncomment the following, but I can't build a static versión with them, ?-(|
+ #GETTEXT=c:/gettext-0.10.37-20010430
+ #STATIC_GETTEXT=USE_STATIC_GETTEXT
+ #DYNAMIC_GETTEXT=DYNAMIC_GETTEXT
+--- 87,93 ----
+
+ # If you are using gettext-0.10.35 from http://sourceforge.net/projects/gettext
+ # or gettext-0.10.37 from http://sourceforge.net/projects/mingwrep/
+! # uncomment the following, but I can't build a static version with them, ?-(|
+ #GETTEXT=c:/gettext-0.10.37-20010430
+ #STATIC_GETTEXT=USE_STATIC_GETTEXT
+ #DYNAMIC_GETTEXT=DYNAMIC_GETTEXT
+*** ../mercurial/vim73/src/os_mswin.c 2011-06-19 01:14:23.000000000 +0200
+--- src/os_mswin.c 2011-06-19 01:25:23.000000000 +0200
+***************
+*** 1105,1236 ****
+ return ret;
+ }
+
+- #if defined(FEAT_MBYTE) || defined(PROTO)
+- /*
+- * Note: the following two functions are only guaranteed to work when using
+- * valid MS-Windows codepages or when iconv() is available.
+- */
+-
+- /*
+- * Convert "str" from 'encoding' to UTF-16.
+- * Input in "str" with length "*lenp". When "lenp" is NULL, use strlen().
+- * Output is returned as an allocated string. "*lenp" is set to the length of
+- * the result. A trailing NUL is always added.
+- * Returns NULL when out of memory.
+- */
+- short_u *
+- enc_to_utf16(char_u *str, int *lenp)
+- {
+- vimconv_T conv;
+- WCHAR *ret;
+- char_u *allocbuf = NULL;
+- int len_loc;
+- int length;
+-
+- if (lenp == NULL)
+- {
+- len_loc = (int)STRLEN(str) + 1;
+- lenp = &len_loc;
+- }
+-
+- if (enc_codepage > 0)
+- {
+- /* We can do any CP### -> UTF-16 in one pass, and we can do it
+- * without iconv() (convert_* may need iconv). */
+- MultiByteToWideChar_alloc(enc_codepage, 0, str, *lenp, &ret, &length);
+- }
+- else
+- {
+- /* Use "latin1" by default, we might be called before we have p_enc
+- * set up. Convert to utf-8 first, works better with iconv(). Does
+- * nothing if 'encoding' is "utf-8". */
+- conv.vc_type = CONV_NONE;
+- if (convert_setup(&conv, p_enc ? p_enc : (char_u *)"latin1",
+- (char_u *)"utf-8") == FAIL)
+- return NULL;
+- if (conv.vc_type != CONV_NONE)
+- {
+- str = allocbuf = string_convert(&conv, str, lenp);
+- if (str == NULL)
+- return NULL;
+- }
+- convert_setup(&conv, NULL, NULL);
+-
+- length = utf8_to_utf16(str, *lenp, NULL, NULL);
+- ret = (WCHAR *)alloc((unsigned)((length + 1) * sizeof(WCHAR)));
+- if (ret != NULL)
+- {
+- utf8_to_utf16(str, *lenp, (short_u *)ret, NULL);
+- ret[length] = 0;
+- }
+-
+- vim_free(allocbuf);
+- }
+-
+- *lenp = length;
+- return (short_u *)ret;
+- }
+-
+- /*
+- * Convert an UTF-16 string to 'encoding'.
+- * Input in "str" with length (counted in wide characters) "*lenp". When
+- * "lenp" is NULL, use wcslen().
+- * Output is returned as an allocated string. If "*lenp" is not NULL it is
+- * set to the length of the result.
+- * Returns NULL when out of memory.
+- */
+- char_u *
+- utf16_to_enc(short_u *str, int *lenp)
+- {
+- vimconv_T conv;
+- char_u *utf8_str = NULL, *enc_str = NULL;
+- int len_loc;
+-
+- if (lenp == NULL)
+- {
+- len_loc = (int)wcslen(str) + 1;
+- lenp = &len_loc;
+- }
+-
+- if (enc_codepage > 0)
+- {
+- /* We can do any UTF-16 -> CP### in one pass. */
+- int length;
+-
+- WideCharToMultiByte_alloc(enc_codepage, 0, str, *lenp,
+- (LPSTR *)&enc_str, &length, 0, 0);
+- *lenp = length;
+- return enc_str;
+- }
+-
+- /* Avoid allocating zero bytes, it generates an error message. */
+- utf8_str = alloc(utf16_to_utf8(str, *lenp == 0 ? 1 : *lenp, NULL));
+- if (utf8_str != NULL)
+- {
+- *lenp = utf16_to_utf8(str, *lenp, utf8_str);
+-
+- /* We might be called before we have p_enc set up. */
+- conv.vc_type = CONV_NONE;
+- convert_setup(&conv, (char_u *)"utf-8",
+- p_enc? p_enc: (char_u *)"latin1");
+- if (conv.vc_type == CONV_NONE)
+- {
+- /* p_enc is utf-8, so we're done. */
+- enc_str = utf8_str;
+- }
+- else
+- {
+- enc_str = string_convert(&conv, utf8_str, lenp);
+- vim_free(utf8_str);
+- }
+-
+- convert_setup(&conv, NULL, NULL);
+- }
+-
+- return enc_str;
+- }
+- #endif /* FEAT_MBYTE */
+-
+ /*
+ * Wait for another process to Close the Clipboard.
+ * Returns TRUE for success.
+--- 1105,1110 ----
+***************
+*** 1436,1467 ****
+ #endif
+ }
+
+- #if (defined(FEAT_MBYTE) && defined(WIN3264)) || defined(PROTO)
+- /*
+- * Convert from the active codepage to 'encoding'.
+- * Input is "str[str_size]".
+- * The result is in allocated memory: "out[outlen]". With terminating NUL.
+- */
+- void
+- acp_to_enc(str, str_size, out, outlen)
+- char_u *str;
+- int str_size;
+- char_u **out;
+- int *outlen;
+-
+- {
+- LPWSTR widestr;
+-
+- MultiByteToWideChar_alloc(GetACP(), 0, str, str_size, &widestr, outlen);
+- if (widestr != NULL)
+- {
+- ++*outlen; /* Include the 0 after the string */
+- *out = utf16_to_enc((short_u *)widestr, outlen);
+- vim_free(widestr);
+- }
+- }
+- #endif
+-
+ /*
+ * Send the current selection to the clipboard.
+ */
+--- 1310,1315 ----
+***************
+*** 1626,1631 ****
+--- 1474,1631 ----
+
+ #endif /* FEAT_CLIPBOARD */
+
++ #if defined(FEAT_MBYTE) || defined(PROTO)
++ /*
++ * Note: the following two functions are only guaranteed to work when using
++ * valid MS-Windows codepages or when iconv() is available.
++ */
++
++ /*
++ * Convert "str" from 'encoding' to UTF-16.
++ * Input in "str" with length "*lenp". When "lenp" is NULL, use strlen().
++ * Output is returned as an allocated string. "*lenp" is set to the length of
++ * the result. A trailing NUL is always added.
++ * Returns NULL when out of memory.
++ */
++ short_u *
++ enc_to_utf16(char_u *str, int *lenp)
++ {
++ vimconv_T conv;
++ WCHAR *ret;
++ char_u *allocbuf = NULL;
++ int len_loc;
++ int length;
++
++ if (lenp == NULL)
++ {
++ len_loc = (int)STRLEN(str) + 1;
++ lenp = &len_loc;
++ }
++
++ if (enc_codepage > 0)
++ {
++ /* We can do any CP### -> UTF-16 in one pass, and we can do it
++ * without iconv() (convert_* may need iconv). */
++ MultiByteToWideChar_alloc(enc_codepage, 0, str, *lenp, &ret, &length);
++ }
++ else
++ {
++ /* Use "latin1" by default, we might be called before we have p_enc
++ * set up. Convert to utf-8 first, works better with iconv(). Does
++ * nothing if 'encoding' is "utf-8". */
++ conv.vc_type = CONV_NONE;
++ if (convert_setup(&conv, p_enc ? p_enc : (char_u *)"latin1",
++ (char_u *)"utf-8") == FAIL)
++ return NULL;
++ if (conv.vc_type != CONV_NONE)
++ {
++ str = allocbuf = string_convert(&conv, str, lenp);
++ if (str == NULL)
++ return NULL;
++ }
++ convert_setup(&conv, NULL, NULL);
++
++ length = utf8_to_utf16(str, *lenp, NULL, NULL);
++ ret = (WCHAR *)alloc((unsigned)((length + 1) * sizeof(WCHAR)));
++ if (ret != NULL)
++ {
++ utf8_to_utf16(str, *lenp, (short_u *)ret, NULL);
++ ret[length] = 0;
++ }
++
++ vim_free(allocbuf);
++ }
++
++ *lenp = length;
++ return (short_u *)ret;
++ }
++
++ /*
++ * Convert an UTF-16 string to 'encoding'.
++ * Input in "str" with length (counted in wide characters) "*lenp". When
++ * "lenp" is NULL, use wcslen().
++ * Output is returned as an allocated string. If "*lenp" is not NULL it is
++ * set to the length of the result.
++ * Returns NULL when out of memory.
++ */
++ char_u *
++ utf16_to_enc(short_u *str, int *lenp)
++ {
++ vimconv_T conv;
++ char_u *utf8_str = NULL, *enc_str = NULL;
++ int len_loc;
++
++ if (lenp == NULL)
++ {
++ len_loc = (int)wcslen(str) + 1;
++ lenp = &len_loc;
++ }
++
++ if (enc_codepage > 0)
++ {
++ /* We can do any UTF-16 -> CP### in one pass. */
++ int length;
++
++ WideCharToMultiByte_alloc(enc_codepage, 0, str, *lenp,
++ (LPSTR *)&enc_str, &length, 0, 0);
++ *lenp = length;
++ return enc_str;
++ }
++
++ /* Avoid allocating zero bytes, it generates an error message. */
++ utf8_str = alloc(utf16_to_utf8(str, *lenp == 0 ? 1 : *lenp, NULL));
++ if (utf8_str != NULL)
++ {
++ *lenp = utf16_to_utf8(str, *lenp, utf8_str);
++
++ /* We might be called before we have p_enc set up. */
++ conv.vc_type = CONV_NONE;
++ convert_setup(&conv, (char_u *)"utf-8",
++ p_enc? p_enc: (char_u *)"latin1");
++ if (conv.vc_type == CONV_NONE)
++ {
++ /* p_enc is utf-8, so we're done. */
++ enc_str = utf8_str;
++ }
++ else
++ {
++ enc_str = string_convert(&conv, utf8_str, lenp);
++ vim_free(utf8_str);
++ }
++
++ convert_setup(&conv, NULL, NULL);
++ }
++
++ return enc_str;
++ }
++ #endif /* FEAT_MBYTE */
++
++ #if (defined(FEAT_MBYTE) && defined(WIN3264)) || defined(PROTO)
++ /*
++ * Convert from the active codepage to 'encoding'.
++ * Input is "str[str_size]".
++ * The result is in allocated memory: "out[outlen]". With terminating NUL.
++ */
++ void
++ acp_to_enc(str, str_size, out, outlen)
++ char_u *str;
++ int str_size;
++ char_u **out;
++ int *outlen;
++
++ {
++ LPWSTR widestr;
++
++ MultiByteToWideChar_alloc(GetACP(), 0, str, str_size, &widestr, outlen);
++ if (widestr != NULL)
++ {
++ ++*outlen; /* Include the 0 after the string */
++ *out = utf16_to_enc((short_u *)widestr, outlen);
++ vim_free(widestr);
++ }
++ }
++ #endif
++
+
+ /*
+ * Debugging helper: expose the MCH_WRITE_DUMP stuff to other modules
+*** ../vim-7.3.222/src/version.c 2011-06-19 01:27:29.000000000 +0200
+--- src/version.c 2011-06-19 01:28:41.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 223,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+191. You rate eating establishments not by the quality of the food,
+ but by the availability of electrical outlets for your PowerBook.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.224 b/source/ap/vim/patches/7.3.224
new file mode 100644
index 000000000..1673f4768
--- /dev/null
+++ b/source/ap/vim/patches/7.3.224
@@ -0,0 +1,162 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.224
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.224
+Problem: Can't pass dict to sort function.
+Solution: Add the optional {dict} argument to sort(). (ZyX)
+Files: runtime/doc/eval.txt, src/eval.c
+
+
+*** ../mercurial/vim73/runtime/doc/eval.txt 2011-05-19 17:25:36.000000000 +0200
+--- runtime/doc/eval.txt 2011-06-19 02:42:52.000000000 +0200
+***************
+*** 1919,1925 ****
+ simplify( {filename}) String simplify filename as much as possible
+ sin( {expr}) Float sine of {expr}
+ sinh( {expr}) Float hyperbolic sine of {expr}
+! sort( {list} [, {func}]) List sort {list}, using {func} to compare
+ soundfold( {word}) String sound-fold {word}
+ spellbadword() String badly spelled word at cursor
+ spellsuggest( {word} [, {max} [, {capital}]])
+--- 1922,1929 ----
+ simplify( {filename}) String simplify filename as much as possible
+ sin( {expr}) Float sine of {expr}
+ sinh( {expr}) Float hyperbolic sine of {expr}
+! sort( {list} [, {func} [, {dict}]])
+! List sort {list}, using {func} to compare
+ soundfold( {word}) String sound-fold {word}
+ spellbadword() String badly spelled word at cursor
+ spellsuggest( {word} [, {max} [, {capital}]])
+***************
+*** 5275,5281 ****
+ {only available when compiled with the |+float| feature}
+
+
+! sort({list} [, {func}]) *sort()* *E702*
+ Sort the items in {list} in-place. Returns {list}. If you
+ want a list to remain unmodified make a copy first: >
+ :let sortedlist = sort(copy(mylist))
+--- 5279,5285 ----
+ {only available when compiled with the |+float| feature}
+
+
+! sort({list} [, {func} [, {dict}]]) *sort()* *E702*
+ Sort the items in {list} in-place. Returns {list}. If you
+ want a list to remain unmodified make a copy first: >
+ :let sortedlist = sort(copy(mylist))
+***************
+*** 5283,5288 ****
+--- 5287,5294 ----
+ Numbers sort after Strings, |Lists| after Numbers.
+ For sorting text in the current buffer use |:sort|.
+ When {func} is given and it is one then case is ignored.
++ {dict} is for functions with the "dict" attribute. It will be
++ used to set the local variable "self". |Dictionary-function|
+ When {func} is a |Funcref| or a function name, this function
+ is called to compare items. The function is invoked with two
+ items as argument and must return zero if they are equal, 1 or
+*** ../mercurial/vim73/src/eval.c 2011-05-19 18:26:34.000000000 +0200
+--- src/eval.c 2011-06-19 02:51:13.000000000 +0200
+***************
+*** 7930,7936 ****
+ {"sin", 1, 1, f_sin},
+ {"sinh", 1, 1, f_sinh},
+ #endif
+! {"sort", 1, 2, f_sort},
+ {"soundfold", 1, 1, f_soundfold},
+ {"spellbadword", 0, 1, f_spellbadword},
+ {"spellsuggest", 1, 3, f_spellsuggest},
+--- 7930,7936 ----
+ {"sin", 1, 1, f_sin},
+ {"sinh", 1, 1, f_sinh},
+ #endif
+! {"sort", 1, 3, f_sort},
+ {"soundfold", 1, 1, f_soundfold},
+ {"spellbadword", 0, 1, f_spellbadword},
+ {"spellsuggest", 1, 3, f_spellsuggest},
+***************
+*** 16366,16371 ****
+--- 16366,16372 ----
+
+ static int item_compare_ic;
+ static char_u *item_compare_func;
++ static dict_T *item_compare_selfdict;
+ static int item_compare_func_err;
+ #define ITEM_COMPARE_FAIL 999
+
+***************
+*** 16425,16431 ****
+
+ rettv.v_type = VAR_UNKNOWN; /* clear_tv() uses this */
+ res = call_func(item_compare_func, (int)STRLEN(item_compare_func),
+! &rettv, 2, argv, 0L, 0L, &dummy, TRUE, NULL);
+ clear_tv(&argv[0]);
+ clear_tv(&argv[1]);
+
+--- 16426,16433 ----
+
+ rettv.v_type = VAR_UNKNOWN; /* clear_tv() uses this */
+ res = call_func(item_compare_func, (int)STRLEN(item_compare_func),
+! &rettv, 2, argv, 0L, 0L, &dummy, TRUE,
+! item_compare_selfdict);
+ clear_tv(&argv[0]);
+ clear_tv(&argv[1]);
+
+***************
+*** 16471,16478 ****
+--- 16473,16482 ----
+
+ item_compare_ic = FALSE;
+ item_compare_func = NULL;
++ item_compare_selfdict = NULL;
+ if (argvars[1].v_type != VAR_UNKNOWN)
+ {
++ /* optional second argument: {func} */
+ if (argvars[1].v_type == VAR_FUNC)
+ item_compare_func = argvars[1].vval.v_string;
+ else
+***************
+*** 16487,16492 ****
+--- 16491,16507 ----
+ else
+ item_compare_func = get_tv_string(&argvars[1]);
+ }
++
++ if (argvars[2].v_type != VAR_UNKNOWN)
++ {
++ /* optional third argument: {dict} */
++ if (argvars[2].v_type != VAR_DICT)
++ {
++ EMSG(_(e_dictreq));
++ return;
++ }
++ item_compare_selfdict = argvars[2].vval.v_dict;
++ }
+ }
+
+ /* Make an array with each entry pointing to an item in the List. */
+*** ../vim-7.3.223/src/version.c 2011-06-19 01:30:01.000000000 +0200
+--- src/version.c 2011-06-19 02:52:46.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 224,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+193. You ask your girlfriend to drive home so you can sit back with
+ your PDA and download the information to your laptop
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.225 b/source/ap/vim/patches/7.3.225
new file mode 100644
index 000000000..5a32b9a62
--- /dev/null
+++ b/source/ap/vim/patches/7.3.225
Binary files differ
diff --git a/source/ap/vim/patches/7.3.226 b/source/ap/vim/patches/7.3.226
new file mode 100644
index 000000000..0002aa77f
--- /dev/null
+++ b/source/ap/vim/patches/7.3.226
@@ -0,0 +1,58 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.226
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.226
+Problem: On a 64 bit system "syn sync fromstart" is very slow. (Bjorn
+ Steinbrink)
+Solution: Store the state when starting to parse from the first line.
+Files: src/syntax.c
+
+
+*** ../mercurial/vim73/src/syntax.c 2011-05-25 17:56:23.000000000 +0200
+--- src/syntax.c 2011-06-19 04:47:08.000000000 +0200
+***************
+*** 559,565 ****
+ if (INVALID_STATE(&current_state))
+ {
+ syn_sync(wp, lnum, last_valid);
+! first_stored = current_lnum + syn_block->b_syn_sync_minlines;
+ }
+ else
+ first_stored = current_lnum;
+--- 559,571 ----
+ if (INVALID_STATE(&current_state))
+ {
+ syn_sync(wp, lnum, last_valid);
+! if (current_lnum == 1)
+! /* First line is always valid, no matter "minlines". */
+! first_stored = 1;
+! else
+! /* Need to parse "minlines" lines before state can be considered
+! * valid to store. */
+! first_stored = current_lnum + syn_block->b_syn_sync_minlines;
+ }
+ else
+ first_stored = current_lnum;
+*** ../vim-7.3.225/src/version.c 2011-06-19 04:31:54.000000000 +0200
+--- src/version.c 2011-06-19 04:49:53.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 226,
+ /**/
+
+--
+Press any key to continue, press any other key to quit.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.227 b/source/ap/vim/patches/7.3.227
new file mode 100644
index 000000000..55d5a9c6b
--- /dev/null
+++ b/source/ap/vim/patches/7.3.227
@@ -0,0 +1,109 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.227
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.227 (after 7.3.221)
+Problem: Mac OS doesn't have the linewise clipboard fix.
+Solution: Also change the Mac OS file. (Bjorn Winckler)
+Files: src/os_macosx.m
+
+
+*** ../mercurial/vim73/src/os_macosx.m 2011-06-13 02:03:55.000000000 +0200
+--- src/os_macosx.m 2011-06-20 00:23:57.000000000 +0200
+***************
+*** 65,71 ****
+ NSString *bestType = [pb availableTypeFromArray:supportedTypes];
+ if (!bestType) goto releasepool;
+
+! int motion_type = MCHAR;
+ NSString *string = nil;
+
+ if ([bestType isEqual:VimPboardType])
+--- 65,71 ----
+ NSString *bestType = [pb availableTypeFromArray:supportedTypes];
+ if (!bestType) goto releasepool;
+
+! int motion_type = MAUTO;
+ NSString *string = nil;
+
+ if ([bestType isEqual:VimPboardType])
+***************
+*** 89,97 ****
+
+ if (!string)
+ {
+! /* Use NSStringPboardType. The motion type is set to line-wise if the
+! * string contains at least one EOL character, otherwise it is set to
+! * character-wise (block-wise is never used).
+ */
+ NSMutableString *mstring =
+ [[pb stringForType:NSStringPboardType] mutableCopy];
+--- 89,95 ----
+
+ if (!string)
+ {
+! /* Use NSStringPboardType. The motion type is detected automatically.
+ */
+ NSMutableString *mstring =
+ [[pb stringForType:NSStringPboardType] mutableCopy];
+***************
+*** 108,126 ****
+ options:0 range:range];
+ }
+
+- /* Scan for newline character to decide whether the string should be
+- * pasted line-wise or character-wise.
+- */
+- motion_type = MCHAR;
+- if (0 < n || NSNotFound != [mstring rangeOfString:@"\n"].location)
+- motion_type = MLINE;
+-
+ string = mstring;
+ }
+
+ if (!(MCHAR == motion_type || MLINE == motion_type || MBLOCK == motion_type
+ || MAUTO == motion_type))
+! motion_type = MCHAR;
+
+ char_u *str = (char_u*)[string UTF8String];
+ int len = [string lengthOfBytesUsingEncoding:NSUTF8StringEncoding];
+--- 106,118 ----
+ options:0 range:range];
+ }
+
+ string = mstring;
+ }
+
++ /* Default to MAUTO, uses MCHAR or MLINE depending on trailing NL. */
+ if (!(MCHAR == motion_type || MLINE == motion_type || MBLOCK == motion_type
+ || MAUTO == motion_type))
+! motion_type = MAUTO;
+
+ char_u *str = (char_u*)[string UTF8String];
+ int len = [string lengthOfBytesUsingEncoding:NSUTF8StringEncoding];
+*** ../vim-7.3.226/src/version.c 2011-06-19 04:54:17.000000000 +0200
+--- src/version.c 2011-06-20 00:21:53.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 227,
+ /**/
+
+--
+Some of the well know MS-Windows errors:
+ EMULTI Multitasking attempted, system confused
+ EKEYBOARD Keyboard locked, try getting out of this one!
+ EXPLAIN Unexplained error, please tell us what happened
+ EFUTURE Reserved for our future mistakes
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.228 b/source/ap/vim/patches/7.3.228
new file mode 100644
index 000000000..3edede597
--- /dev/null
+++ b/source/ap/vim/patches/7.3.228
@@ -0,0 +1,45 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.228
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.228
+Problem: "2gj" does not always move to the correct position.
+Solution: Get length of line after moving to a next line. (James Vega)
+Files: src/normal.c
+
+
+*** ../mercurial/vim73/src/normal.c 2011-05-10 17:29:28.000000000 +0200
+--- src/normal.c 2011-06-20 00:41:43.000000000 +0200
+***************
+*** 4533,4538 ****
+--- 4533,4539 ----
+ }
+ curwin->w_cursor.lnum++;
+ curwin->w_curswant %= width2;
++ linelen = linetabsize(ml_get_curline());
+ }
+ }
+ }
+*** ../vim-7.3.227/src/version.c 2011-06-20 00:25:37.000000000 +0200
+--- src/version.c 2011-06-20 00:45:15.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 228,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+197. Your desk collapses under the weight of your computer peripherals.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.229 b/source/ap/vim/patches/7.3.229
new file mode 100644
index 000000000..b133f7a48
--- /dev/null
+++ b/source/ap/vim/patches/7.3.229
@@ -0,0 +1,55 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.229
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.229
+Problem: Using fork() makes gvim crash on Mac when build with
+ CoreFoundation.
+Solution: Disallow fork() when __APPLE__ is defined. (Hisashi T Fujinaka)
+Files: src/gui.c
+
+
+*** ../mercurial/vim73/src/gui.c 2011-05-10 16:41:13.000000000 +0200
+--- src/gui.c 2011-06-20 00:51:21.000000000 +0200
+***************
+*** 59,65 ****
+ gui_start()
+ {
+ char_u *old_term;
+! #if defined(UNIX) && !defined(__BEOS__) && !defined(MACOS_X)
+ # define MAY_FORK
+ int dofork = TRUE;
+ #endif
+--- 59,66 ----
+ gui_start()
+ {
+ char_u *old_term;
+! #if defined(UNIX) && !defined(__BEOS__) && !defined(MACOS_X) \
+! && !defined(__APPLE__)
+ # define MAY_FORK
+ int dofork = TRUE;
+ #endif
+*** ../vim-7.3.228/src/version.c 2011-06-20 00:45:55.000000000 +0200
+--- src/version.c 2011-06-20 00:50:42.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 229,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+198. You read all the quotes at Netaholics Anonymous and keep thinking
+ "What's wrong with that?"
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.230 b/source/ap/vim/patches/7.3.230
new file mode 100644
index 000000000..80fcdf130
--- /dev/null
+++ b/source/ap/vim/patches/7.3.230
@@ -0,0 +1,70 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.230
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.230
+Problem: ":wundo" and ":rundo" don't unescape their argument. (Aaron
+ Thoma)
+Solution: Use FILE1 instead of XFILE.
+Files: src/ex_cmds.h
+
+
+*** ../mercurial/vim73/src/ex_cmds.h 2010-08-20 11:09:02.000000000 +0200
+--- src/ex_cmds.h 2011-06-20 04:44:13.000000000 +0200
+***************
+*** 788,794 ****
+ EX(CMD_rubyfile, "rubyfile", ex_rubyfile,
+ RANGE|FILE1|NEEDARG|CMDWIN),
+ EX(CMD_rundo, "rundo", ex_rundo,
+! NEEDARG|EXTRA|XFILE),
+ EX(CMD_rviminfo, "rviminfo", ex_viminfo,
+ BANG|FILE1|TRLBAR|CMDWIN),
+ EX(CMD_substitute, "substitute", do_sub,
+--- 788,794 ----
+ EX(CMD_rubyfile, "rubyfile", ex_rubyfile,
+ RANGE|FILE1|NEEDARG|CMDWIN),
+ EX(CMD_rundo, "rundo", ex_rundo,
+! NEEDARG|FILE1),
+ EX(CMD_rviminfo, "rviminfo", ex_viminfo,
+ BANG|FILE1|TRLBAR|CMDWIN),
+ EX(CMD_substitute, "substitute", do_sub,
+***************
+*** 1078,1084 ****
+ EX(CMD_wsverb, "wsverb", ex_wsverb,
+ EXTRA|NOTADR|NEEDARG),
+ EX(CMD_wundo, "wundo", ex_wundo,
+! BANG|NEEDARG|EXTRA|XFILE),
+ EX(CMD_wviminfo, "wviminfo", ex_viminfo,
+ BANG|FILE1|TRLBAR|CMDWIN),
+ EX(CMD_xit, "xit", ex_exit,
+--- 1078,1084 ----
+ EX(CMD_wsverb, "wsverb", ex_wsverb,
+ EXTRA|NOTADR|NEEDARG),
+ EX(CMD_wundo, "wundo", ex_wundo,
+! BANG|NEEDARG|FILE1),
+ EX(CMD_wviminfo, "wviminfo", ex_viminfo,
+ BANG|FILE1|TRLBAR|CMDWIN),
+ EX(CMD_xit, "xit", ex_exit,
+*** ../vim-7.3.229/src/version.c 2011-06-20 00:53:10.000000000 +0200
+--- src/version.c 2011-06-20 05:02:40.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 230,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+201. When somebody asks you where you are, you tell them in which chat room.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.231 b/source/ap/vim/patches/7.3.231
new file mode 100644
index 000000000..266d0a2bc
--- /dev/null
+++ b/source/ap/vim/patches/7.3.231
@@ -0,0 +1,128 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.231
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Note: this is a weird patch, it redoes patches from 7.3.202 and 7.3.203
+that failed when applied as a patch, but the mercurial repository
+already had this, thus won't change anything there.
+
+
+Patch 7.3.231
+Problem: Runtime file patches failed.
+Solution: Redo the patches made against the patched files instead of the
+ files in the mercurial repository.
+Files: runtime/doc/indent.txt, runtime/doc/os_win32.txt
+
+
+*** ../vim-7.3.230/runtime/doc/indent.txt 2011-05-25 15:16:06.000000000 +0200
+--- runtime/doc/indent.txt 2011-05-31 22:23:39.000000000 +0200
+***************
+*** 356,363 ****
+ BaseClass(3) BaseClass(3)
+ {} {}
+ <
+! +N Indent a continuation line (a line that spills onto the next) N
+! additional characters. (default 'shiftwidth').
+
+ cino= cino=+10 >
+ a = b + 9 * a = b + 9 *
+--- 357,368 ----
+ BaseClass(3) BaseClass(3)
+ {} {}
+ <
+! *cino-+*
+! +N Indent a continuation line (a line that spills onto the next)
+! inside a function N additional characters. (default
+! 'shiftwidth').
+! Outside of a function, when the previous line ended in a
+! backslash, the 2 * N is used.
+
+ cino= cino=+10 >
+ a = b + 9 * a = b + 9 *
+***************
+*** 509,522 ****
+--- 514,532 ----
+ }
+ }
+ <
++ *cino-)*
+ )N Vim searches for unclosed parentheses at most N lines away.
+ This limits the time needed to search for parentheses. (default
+ 20 lines).
+
++ *cino-star*
+ *N Vim searches for unclosed comments at most N lines away. This
+ limits the time needed to search for the start of a comment.
++ If your /* */ comments stop indenting afer N lines this is the
++ value you will want to change.
+ (default 70 lines).
+
++ *cino-#*
+ #N When N is non-zero recognize shell/Perl comments, starting with
+ '#'. Default N is zero: don't recognizes '#' comments. Note
+ that lines starting with # will still be seen as preprocessor
+*** ../vim-7.3.230/runtime/doc/os_win32.txt 2010-08-15 21:57:16.000000000 +0200
+--- runtime/doc/os_win32.txt 2011-05-28 18:17:58.000000000 +0200
+***************
+*** 313,318 ****
+--- 313,349 ----
+ with :!start do not get passed Vim's open file handles, which means they do
+ not have to be closed before Vim.
+ To avoid this special treatment, use ":! start".
++ There are two optional arguments (see the next Q):
++ /min the window will be minimized.
++ /b" no console window will be opened
++ You can only one of these flags at a time. A second second one will be
++ treated as the start of the command.
++
++ Q. How do I avoid getting a window for programs that I run asynchronously?
++ A. You have two possible solutions depending on what exactly do you want:
++ 1) You may use the /min flag in order to run program in a minimized state
++ with no other changes. It will work equally for console and GUI
++ applications.
++ 2) You can use the /b flag to run console applications without creating a
++ console window for them (GUI applications are not affected). But you
++ should use this flag only if the application you run doesn't require any
++ input. Otherwise it will get an EOF error because its input stream
++ (stdin) would be redirected to \\.\NUL (stdoud and stderr too).
++
++ Example for a console application, run Exuberant ctags: >
++ :!start /min ctags -R .
++ < When it has finished you should see file named "tags" in your current
++ directory. You should notice the window title blinking on your taskbar.
++ This is more noticable for commands that take longer.
++ Now delete the "tags" file and run this command: >
++ :!start /b ctags -R .
++ < You should have the same "tags" file, but this time there will be no
++ blinking on the taskbar.
++ Example for a GUI application: >
++ :!start /min notepad
++ :!start /b notepad
++ < The first command runs notepad minimized and the second one runs it
++ normally.
+
+ Q. I'm using Win32s, and when I try to run an external command like "make",
+ Vim doesn't wait for it to finish! Help!
+*** ../vim-7.3.230/src/version.c 2011-06-20 05:02:53.000000000 +0200
+--- src/version.c 2011-06-26 03:14:03.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 231,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+222. You send more than 20 personal e-mails a day.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.232 b/source/ap/vim/patches/7.3.232
new file mode 100644
index 000000000..982d7478c
--- /dev/null
+++ b/source/ap/vim/patches/7.3.232
@@ -0,0 +1,84 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.232
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.232
+Problem: Python doesn't compile without +multi_byte
+Solution: Use "latin1" when MULTI_BYTE is not defined.
+Files: src/if_py_both.h
+
+
+*** ../vim-7.3.231/src/if_py_both.h 2011-06-19 00:27:46.000000000 +0200
+--- src/if_py_both.h 2011-06-26 03:58:07.000000000 +0200
+***************
+*** 12,17 ****
+--- 12,23 ----
+ * Common code for if_python.c and if_python3.c.
+ */
+
++ #ifdef FEAT_MBYTE
++ # define ENC_OPT p_enc
++ #else
++ # define ENC_OPT "latin1"
++ #endif
++
+ /*
+ * obtain a lock on the Vim data structures
+ */
+***************
+*** 68,74 ****
+ char *str = NULL;
+ int error = ((OutputObject *)(self))->error;
+
+! if (!PyArg_ParseTuple(args, "es#", p_enc, &str, &len))
+ return NULL;
+
+ Py_BEGIN_ALLOW_THREADS
+--- 74,80 ----
+ char *str = NULL;
+ int error = ((OutputObject *)(self))->error;
+
+! if (!PyArg_ParseTuple(args, "es#", ENC_OPT, &str, &len))
+ return NULL;
+
+ Py_BEGIN_ALLOW_THREADS
+***************
+*** 108,114 ****
+ char *str = NULL;
+ PyInt len;
+
+! if (!PyArg_Parse(line, "es#", p_enc, &str, &len)) {
+ PyErr_SetString(PyExc_TypeError, _("writelines() requires list of strings"));
+ Py_DECREF(list);
+ return NULL;
+--- 114,120 ----
+ char *str = NULL;
+ PyInt len;
+
+! if (!PyArg_Parse(line, "es#", ENC_OPT, &str, &len)) {
+ PyErr_SetString(PyExc_TypeError, _("writelines() requires list of strings"));
+ Py_DECREF(list);
+ return NULL;
+*** ../vim-7.3.231/src/version.c 2011-06-26 03:16:58.000000000 +0200
+--- src/version.c 2011-06-26 04:00:40.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 232,
+ /**/
+
+--
+If evolution theories are correct, humans will soon grow a third
+hand for operating the mouse.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.233 b/source/ap/vim/patches/7.3.233
new file mode 100644
index 000000000..2dcbf89ac
--- /dev/null
+++ b/source/ap/vim/patches/7.3.233
@@ -0,0 +1,81 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.233
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.233
+Problem: ":scriptnames" and ":breaklist" show long file names.
+Solution: Shorten to use "~/" when possible. (Jean-Rene David)
+Files: src/ex_cmds2.c
+
+
+*** ../vim-7.3.232/src/ex_cmds2.c 2011-05-19 18:26:34.000000000 +0200
+--- src/ex_cmds2.c 2011-06-26 04:20:24.000000000 +0200
+***************
+*** 682,691 ****
+ for (i = 0; i < dbg_breakp.ga_len; ++i)
+ {
+ bp = &BREAKP(i);
+ smsg((char_u *)_("%3d %s %s line %ld"),
+ bp->dbg_nr,
+ bp->dbg_type == DBG_FUNC ? "func" : "file",
+! bp->dbg_name,
+ (long)bp->dbg_lnum);
+ }
+ }
+--- 682,693 ----
+ for (i = 0; i < dbg_breakp.ga_len; ++i)
+ {
+ bp = &BREAKP(i);
++ if (bp->dbg_type == DBG_FILE)
++ home_replace(NULL, bp->dbg_name, NameBuff, MAXPATHL, TRUE);
+ smsg((char_u *)_("%3d %s %s line %ld"),
+ bp->dbg_nr,
+ bp->dbg_type == DBG_FUNC ? "func" : "file",
+! bp->dbg_type == DBG_FUNC ? bp->dbg_name : NameBuff,
+ (long)bp->dbg_lnum);
+ }
+ }
+***************
+*** 3268,3274 ****
+
+ for (i = 1; i <= script_items.ga_len && !got_int; ++i)
+ if (SCRIPT_ITEM(i).sn_name != NULL)
+! smsg((char_u *)"%3d: %s", i, SCRIPT_ITEM(i).sn_name);
+ }
+
+ # if defined(BACKSLASH_IN_FILENAME) || defined(PROTO)
+--- 3270,3280 ----
+
+ for (i = 1; i <= script_items.ga_len && !got_int; ++i)
+ if (SCRIPT_ITEM(i).sn_name != NULL)
+! {
+! home_replace(NULL, SCRIPT_ITEM(i).sn_name,
+! NameBuff, MAXPATHL, TRUE);
+! smsg((char_u *)"%3d: %s", i, NameBuff);
+! }
+ }
+
+ # if defined(BACKSLASH_IN_FILENAME) || defined(PROTO)
+*** ../vim-7.3.232/src/version.c 2011-06-26 04:01:37.000000000 +0200
+--- src/version.c 2011-06-26 04:23:48.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 233,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+223. You set up a web-cam as your home's security system.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.234 b/source/ap/vim/patches/7.3.234
new file mode 100644
index 000000000..a60df3db1
--- /dev/null
+++ b/source/ap/vim/patches/7.3.234
@@ -0,0 +1,178 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.234
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.234
+Problem: With GTK menu may be popping down.
+Solution: Use event time instead of GDK_CURRENT_TIME. (Hong Xu)
+Files: src/gui.c, src/gui.h, src/gui_gtk.c, src/gui_gtk_x11.c
+
+
+*** ../vim-7.3.233/src/gui.c 2011-06-20 00:53:10.000000000 +0200
+--- src/gui.c 2011-06-26 04:38:09.000000000 +0200
+***************
+*** 84,89 ****
+--- 84,93 ----
+ gui.starting = TRUE;
+ full_screen = FALSE;
+
++ #ifdef FEAT_GUI_GTK
++ gui.event_time = GDK_CURRENT_TIME;
++ #endif
++
+ #ifdef MAY_FORK
+ if (!gui.dofork || vim_strchr(p_go, GO_FORG) || recursive)
+ dofork = FALSE;
+*** ../vim-7.3.233/src/gui.h 2011-05-10 16:41:13.000000000 +0200
+--- src/gui.h 2011-06-26 04:41:21.000000000 +0200
+***************
+*** 401,406 ****
+--- 401,408 ----
+ GtkAccelGroup *accel_group;
+ GtkWidget *filedlg; /* file selection dialog */
+ char_u *browse_fname; /* file name from filedlg */
++
++ guint32 event_time;
+ #endif /* FEAT_GUI_GTK */
+
+ #if defined(FEAT_GUI_TABLINE) \
+*** ../vim-7.3.233/src/gui_gtk.c 2011-01-17 20:08:03.000000000 +0100
+--- src/gui_gtk.c 2011-06-26 04:38:09.000000000 +0200
+***************
+*** 1391,1397 ****
+ gtk_menu_popup(GTK_MENU(menu->submenu_id),
+ NULL, NULL,
+ (GtkMenuPositionFunc)NULL, NULL,
+! 3U, (guint32)GDK_CURRENT_TIME);
+ }
+
+ /* Ugly global variable to pass "mouse_pos" flag from gui_make_popup() to
+--- 1391,1397 ----
+ gtk_menu_popup(GTK_MENU(menu->submenu_id),
+ NULL, NULL,
+ (GtkMenuPositionFunc)NULL, NULL,
+! 3U, gui.event_time);
+ }
+
+ /* Ugly global variable to pass "mouse_pos" flag from gui_make_popup() to
+*** ../vim-7.3.233/src/gui_gtk_x11.c 2011-06-19 01:14:22.000000000 +0200
+--- src/gui_gtk_x11.c 2011-06-26 04:39:57.000000000 +0200
+***************
+*** 88,95 ****
+ # include <X11/Sunkeysym.h>
+ #endif
+
+- static guint32 clipboard_event_time = CurrentTime;
+-
+ /*
+ * Easy-to-use macro for multihead support.
+ */
+--- 88,93 ----
+***************
+*** 934,940 ****
+ guint state;
+ char_u *s, *d;
+
+! clipboard_event_time = event->time;
+ key_sym = event->keyval;
+ state = event->state;
+
+--- 932,938 ----
+ guint state;
+ char_u *s, *d;
+
+! gui.event_time = event->time;
+ key_sym = event->keyval;
+ state = event->state;
+
+***************
+*** 1129,1135 ****
+ GdkEventKey *event,
+ gpointer data UNUSED)
+ {
+! clipboard_event_time = event->time;
+ /*
+ * GTK+ 2 input methods may do fancy stuff on key release events too.
+ * With the default IM for instance, you can enter any UCS code point
+--- 1127,1133 ----
+ GdkEventKey *event,
+ gpointer data UNUSED)
+ {
+! gui.event_time = event->time;
+ /*
+ * GTK+ 2 input methods may do fancy stuff on key release events too.
+ * With the default IM for instance, you can enter any UCS code point
+***************
+*** 1622,1628 ****
+ int x, y;
+ int_u vim_modifiers;
+
+! clipboard_event_time = event->time;
+
+ /* Make sure we have focus now we've been selected */
+ if (gtk_socket_id != 0 && !GTK_WIDGET_HAS_FOCUS(widget))
+--- 1620,1626 ----
+ int x, y;
+ int_u vim_modifiers;
+
+! gui.event_time = event->time;
+
+ /* Make sure we have focus now we've been selected */
+ if (gtk_socket_id != 0 && !GTK_WIDGET_HAS_FOCUS(widget))
+***************
+*** 1733,1739 ****
+ int x, y;
+ int_u vim_modifiers;
+
+! clipboard_event_time = event->time;
+
+ /* Remove any motion "machine gun" timers used for automatic further
+ extension of allocation areas if outside of the applications window
+--- 1731,1737 ----
+ int x, y;
+ int_u vim_modifiers;
+
+! gui.event_time = event->time;
+
+ /* Remove any motion "machine gun" timers used for automatic further
+ extension of allocation areas if outside of the applications window
+***************
+*** 5654,5660 ****
+ int success;
+
+ success = gtk_selection_owner_set(gui.drawarea, cbd->gtk_sel_atom,
+! clipboard_event_time);
+ gui_mch_update();
+ return (success) ? OK : FAIL;
+ }
+--- 5652,5658 ----
+ int success;
+
+ success = gtk_selection_owner_set(gui.drawarea, cbd->gtk_sel_atom,
+! gui.event_time);
+ gui_mch_update();
+ return (success) ? OK : FAIL;
+ }
+*** ../vim-7.3.233/src/version.c 2011-06-26 04:25:24.000000000 +0200
+--- src/version.c 2011-06-26 04:47:02.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 234,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+225. You sign up for free subscriptions for all the computer magazines
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.235 b/source/ap/vim/patches/7.3.235
new file mode 100644
index 000000000..a852c852a
--- /dev/null
+++ b/source/ap/vim/patches/7.3.235
@@ -0,0 +1,360 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.235
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.235
+Problem: ";" gets stuck on a "t" command, it's not useful.
+Solution: Add the ';' flag in 'cpo'. (Christian Brabandt)
+Files: runtime/doc/motion.txt, runtime/doc/options.txt, src/option.h,
+ src/search.c src/testdir/test81.in, src/testdir/test81.ok,
+ src/testdir/Makefile, src/testdir/Make_amiga.mak,
+ src/testdir/Make_dos.mak, src/testdir/Make_ming.mak,
+ src/testdir/Make_os2.mak, src/testdir/Make_vms.mms
+
+
+*** ../vim-7.3.234/runtime/doc/motion.txt 2010-08-15 21:57:17.000000000 +0200
+--- runtime/doc/motion.txt 2011-06-26 05:15:58.000000000 +0200
+***************
+*** 269,279 ****
+ {char} can be entered like with the |f| command.
+
+ *;*
+! ; Repeat latest f, t, F or T [count] times.
+
+ *,*
+ , Repeat latest f, t, F or T in opposite direction
+! [count] times.
+
+ ==============================================================================
+ 3. Up-down motions *up-down-motions*
+--- 269,279 ----
+ {char} can be entered like with the |f| command.
+
+ *;*
+! ; Repeat latest f, t, F or T [count] times. See |cpo-;|
+
+ *,*
+ , Repeat latest f, t, F or T in opposite direction
+! [count] times. See also |cpo-;|
+
+ ==============================================================================
+ 3. Up-down motions *up-down-motions*
+*** ../vim-7.3.234/runtime/doc/options.txt 2011-06-12 20:42:17.000000000 +0200
+--- runtime/doc/options.txt 2011-06-26 05:15:58.000000000 +0200
+***************
+*** 2090,2095 ****
+--- 2117,2128 ----
+ *cpo->*
+ > When appending to a register, put a line break before
+ the appended text.
++ *cpo-;*
++ ; When using |,| or |;| to repeat the last |t| search
++ and the cursor is right in front of the searched
++ character, the cursor won't move. When not included,
++ the cursor would skip over it and jump to the
++ following occurence.
+
+ POSIX flags. These are not included in the Vi default value, except
+ when $VIM_POSIX was set on startup. |posix|
+*** ../vim-7.3.234/src/option.h 2011-06-12 22:13:37.000000000 +0200
+--- src/option.h 2011-06-26 05:17:58.000000000 +0200
+***************
+*** 169,178 ****
+ #define CPO_SUBPERCENT '/' /* % in :s string uses previous one */
+ #define CPO_BACKSL '\\' /* \ is not special in [] */
+ #define CPO_CHDIR '.' /* don't chdir if buffer is modified */
+ /* default values for Vim, Vi and POSIX */
+ #define CPO_VIM "aABceFs"
+! #define CPO_VI "aAbBcCdDeEfFgHiIjJkKlLmMnoOpPqrRsStuvwWxXyZ$!%*-+<>"
+! #define CPO_ALL "aAbBcCdDeEfFgHiIjJkKlLmMnoOpPqrRsStuvwWxXyZ$!%*-+<>#{|&/\\."
+
+ /* characters for p_ww option: */
+ #define WW_ALL "bshl<>[],~"
+--- 169,180 ----
+ #define CPO_SUBPERCENT '/' /* % in :s string uses previous one */
+ #define CPO_BACKSL '\\' /* \ is not special in [] */
+ #define CPO_CHDIR '.' /* don't chdir if buffer is modified */
++ #define CPO_SCOLON ';' /* using "," and ";" will skip over char if
++ * cursor would not move */
+ /* default values for Vim, Vi and POSIX */
+ #define CPO_VIM "aABceFs"
+! #define CPO_VI "aAbBcCdDeEfFgHiIjJkKlLmMnoOpPqrRsStuvwWxXyZ$!%*-+<>;"
+! #define CPO_ALL "aAbBcCdDeEfFgHiIjJkKlLmMnoOpPqrRsStuvwWxXyZ$!%*-+<>#{|&/\\.;"
+
+ /* characters for p_ww option: */
+ #define WW_ALL "bshl<>[],~"
+*** ../vim-7.3.234/src/search.c 2011-05-10 16:41:13.000000000 +0200
+--- src/search.c 2011-06-26 05:20:45.000000000 +0200
+***************
+*** 1546,1551 ****
+--- 1546,1552 ----
+ int col;
+ char_u *p;
+ int len;
++ int stop = TRUE;
+ #ifdef FEAT_MBYTE
+ static char_u bytes[MB_MAXBYTES];
+ static int bytelen = 1; /* >1 for multi-byte char */
+***************
+*** 1580,1585 ****
+--- 1581,1592 ----
+ t_cmd = last_t_cmd;
+ c = lastc;
+ /* For multi-byte re-use last bytes[] and bytelen. */
++
++ /* Force a move of at least one char, so ";" and "," will move the
++ * cursor, even if the cursor is right in front of char we are looking
++ * at. */
++ if (vim_strchr(p_cpo, CPO_SCOLON) == NULL && count == 1)
++ stop = FALSE;
+ }
+
+ if (dir == BACKWARD)
+***************
+*** 1612,1625 ****
+ }
+ if (bytelen == 1)
+ {
+! if (p[col] == c)
+ break;
+ }
+ else
+ {
+! if (vim_memcmp(p + col, bytes, bytelen) == 0)
+ break;
+ }
+ }
+ }
+ else
+--- 1619,1633 ----
+ }
+ if (bytelen == 1)
+ {
+! if (p[col] == c && stop)
+ break;
+ }
+ else
+ {
+! if (vim_memcmp(p + col, bytes, bytelen) == 0 && stop)
+ break;
+ }
++ stop = TRUE;
+ }
+ }
+ else
+***************
+*** 1629,1636 ****
+ {
+ if ((col += dir) < 0 || col >= len)
+ return FAIL;
+! if (p[col] == c)
+ break;
+ }
+ }
+ }
+--- 1637,1645 ----
+ {
+ if ((col += dir) < 0 || col >= len)
+ return FAIL;
+! if (p[col] == c && stop)
+ break;
++ stop = TRUE;
+ }
+ }
+ }
+*** ../vim-7.3.234/src/testdir/test81.in 2011-06-26 05:34:33.000000000 +0200
+--- src/testdir/test81.in 2011-06-26 05:30:31.000000000 +0200
+***************
+*** 0 ****
+--- 1,18 ----
++ Test for t movement command and 'cpo-;' setting
++
++ STARTTEST
++ :set nocompatible
++ :set cpo-=;
++ /firstline/
++ j0tt;D
++ $Ty;D:set cpo+=;
++ j0tt;;D
++ $Ty;;D:?firstline?+1,$w! test.out
++ :qa!
++ ENDTEST
++
++ firstline
++ aaa two three four
++ bbb yee yoo four
++ ccc two three four
++ ddd yee yoo four
+*** ../vim-7.3.234/src/testdir/test81.ok 2011-06-26 05:34:33.000000000 +0200
+--- src/testdir/test81.ok 2011-06-26 05:31:33.000000000 +0200
+***************
+*** 0 ****
+--- 1,4 ----
++ aaa two
++ bbb y
++ ccc
++ ddd yee y
+*** ../vim-7.3.234/src/testdir/Makefile 2011-06-19 04:31:54.000000000 +0200
+--- src/testdir/Makefile 2011-06-26 05:09:56.000000000 +0200
+***************
+*** 26,32 ****
+ test64.out test65.out test66.out test67.out test68.out \
+ test69.out test70.out test71.out test72.out test73.out \
+ test74.out test75.out test76.out test77.out test78.out \
+! test79.out test80.out
+
+ SCRIPTS_GUI = test16.out
+
+--- 26,32 ----
+ test64.out test65.out test66.out test67.out test68.out \
+ test69.out test70.out test71.out test72.out test73.out \
+ test74.out test75.out test76.out test77.out test78.out \
+! test79.out test80.out test81.out
+
+ SCRIPTS_GUI = test16.out
+
+*** ../vim-7.3.234/src/testdir/Make_amiga.mak 2011-06-19 04:31:54.000000000 +0200
+--- src/testdir/Make_amiga.mak 2011-06-26 05:09:07.000000000 +0200
+***************
+*** 28,34 ****
+ test61.out test62.out test63.out test64.out test65.out \
+ test66.out test67.out test68.out test69.out test70.out \
+ test71.out test72.out test73.out test74.out test75.out \
+! test76.out test77.out test78.out test79.out test80.out
+
+ .SUFFIXES: .in .out
+
+--- 28,35 ----
+ test61.out test62.out test63.out test64.out test65.out \
+ test66.out test67.out test68.out test69.out test70.out \
+ test71.out test72.out test73.out test74.out test75.out \
+! test76.out test77.out test78.out test79.out test80.out \
+! test81.out
+
+ .SUFFIXES: .in .out
+
+***************
+*** 128,130 ****
+--- 129,132 ----
+ test78.out: test78.in
+ test79.out: test79.in
+ test80.out: test80.in
++ test81.out: test81.in
+*** ../vim-7.3.234/src/testdir/Make_dos.mak 2011-06-19 04:31:54.000000000 +0200
+--- src/testdir/Make_dos.mak 2011-06-26 05:09:16.000000000 +0200
+***************
+*** 29,35 ****
+ test42.out test52.out test65.out test66.out test67.out \
+ test68.out test69.out test71.out test72.out test73.out \
+ test74.out test75.out test76.out test77.out test78.out \
+! test79.out test80.out
+
+ SCRIPTS32 = test50.out test70.out
+
+--- 29,35 ----
+ test42.out test52.out test65.out test66.out test67.out \
+ test68.out test69.out test71.out test72.out test73.out \
+ test74.out test75.out test76.out test77.out test78.out \
+! test79.out test80.out test81.out
+
+ SCRIPTS32 = test50.out test70.out
+
+*** ../vim-7.3.234/src/testdir/Make_ming.mak 2011-06-19 04:31:54.000000000 +0200
+--- src/testdir/Make_ming.mak 2011-06-26 05:09:24.000000000 +0200
+***************
+*** 49,55 ****
+ test42.out test52.out test65.out test66.out test67.out \
+ test68.out test69.out test71.out test72.out test73.out \
+ test74.out test75.out test76.out test77.out test78.out \
+! test79.out test80.out
+
+ SCRIPTS32 = test50.out test70.out
+
+--- 49,55 ----
+ test42.out test52.out test65.out test66.out test67.out \
+ test68.out test69.out test71.out test72.out test73.out \
+ test74.out test75.out test76.out test77.out test78.out \
+! test79.out test80.out test81.out
+
+ SCRIPTS32 = test50.out test70.out
+
+*** ../vim-7.3.234/src/testdir/Make_os2.mak 2011-06-19 04:31:54.000000000 +0200
+--- src/testdir/Make_os2.mak 2011-06-26 05:09:33.000000000 +0200
+***************
+*** 28,34 ****
+ test61.out test62.out test63.out test64.out test65.out \
+ test66.out test67.out test68.out test69.out test70.out \
+ test71.out test72.out test73.out test74.out test75.out \
+! test76.out test77.out test78.out test79.out test80.out
+
+ .SUFFIXES: .in .out
+
+--- 28,35 ----
+ test61.out test62.out test63.out test64.out test65.out \
+ test66.out test67.out test68.out test69.out test70.out \
+ test71.out test72.out test73.out test74.out test75.out \
+! test76.out test77.out test78.out test79.out test80.out \
+! test81.out
+
+ .SUFFIXES: .in .out
+
+*** ../vim-7.3.234/src/testdir/Make_vms.mms 2011-06-19 04:31:54.000000000 +0200
+--- src/testdir/Make_vms.mms 2011-06-26 05:09:42.000000000 +0200
+***************
+*** 4,10 ****
+ # Authors: Zoltan Arpadffy, <arpadffy@polarhome.com>
+ # Sandor Kopanyi, <sandor.kopanyi@mailbox.hu>
+ #
+! # Last change: 2011 Jun 19
+ #
+ # This has been tested on VMS 6.2 to 8.3 on DEC Alpha, VAX and IA64.
+ # Edit the lines in the Configuration section below to select.
+--- 4,10 ----
+ # Authors: Zoltan Arpadffy, <arpadffy@polarhome.com>
+ # Sandor Kopanyi, <sandor.kopanyi@mailbox.hu>
+ #
+! # Last change: 2011 Jun 26
+ #
+ # This has been tested on VMS 6.2 to 8.3 on DEC Alpha, VAX and IA64.
+ # Edit the lines in the Configuration section below to select.
+***************
+*** 75,81 ****
+ test61.out test62.out test63.out test64.out test65.out \
+ test66.out test67.out test68.out test69.out \
+ test71.out test72.out test74.out test75.out test76.out \
+! test77.out test78.out test79.out test80.out
+
+ # Known problems:
+ # Test 30: a problem around mac format - unknown reason
+--- 75,81 ----
+ test61.out test62.out test63.out test64.out test65.out \
+ test66.out test67.out test68.out test69.out \
+ test71.out test72.out test74.out test75.out test76.out \
+! test77.out test78.out test79.out test80.out test81.out
+
+ # Known problems:
+ # Test 30: a problem around mac format - unknown reason
+*** ../vim-7.3.234/src/version.c 2011-06-26 04:48:56.000000000 +0200
+--- src/version.c 2011-06-26 05:33:53.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 235,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+226. You sit down at the computer right after dinner and your spouse
+ says "See you in the morning."
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.236 b/source/ap/vim/patches/7.3.236
new file mode 100644
index 000000000..3be69e302
--- /dev/null
+++ b/source/ap/vim/patches/7.3.236
@@ -0,0 +1,87 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.236
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.236 (after 7.3.232)
+Problem: Python 3 doesn't compile without +multi_byte
+Solution: Use "latin1" when MULTI_BYTE is not defined. (lilydjwg)
+Files: src/if_python3.c
+
+
+*** ../vim-7.3.235/src/if_python3.c 2011-06-19 00:27:46.000000000 +0200
+--- src/if_python3.c 2011-06-26 19:10:57.000000000 +0200
+***************
+*** 70,76 ****
+
+ #define PyInt Py_ssize_t
+ #define PyString_Check(obj) PyUnicode_Check(obj)
+! #define PyString_AsBytes(obj) PyUnicode_AsEncodedString(obj, (char *)p_enc, NULL);
+ #define PyString_FreeBytes(obj) Py_XDECREF(bytes)
+ #define PyString_AsString(obj) PyBytes_AsString(obj)
+ #define PyString_Size(obj) PyBytes_GET_SIZE(bytes)
+--- 70,76 ----
+
+ #define PyInt Py_ssize_t
+ #define PyString_Check(obj) PyUnicode_Check(obj)
+! #define PyString_AsBytes(obj) PyUnicode_AsEncodedString(obj, (char *)ENC_OPT, NULL);
+ #define PyString_FreeBytes(obj) Py_XDECREF(bytes)
+ #define PyString_AsString(obj) PyBytes_AsString(obj)
+ #define PyString_Size(obj) PyBytes_GET_SIZE(bytes)
+***************
+*** 661,667 ****
+
+ /* PyRun_SimpleString expects a UTF-8 string. Wrong encoding may cause
+ * SyntaxError (unicode error). */
+! cmdstr = PyUnicode_Decode(cmd, strlen(cmd), (char *)p_enc, NULL);
+ cmdbytes = PyUnicode_AsEncodedString(cmdstr, "utf-8", NULL);
+ Py_XDECREF(cmdstr);
+ PyRun_SimpleString(PyBytes_AsString(cmdbytes));
+--- 661,667 ----
+
+ /* PyRun_SimpleString expects a UTF-8 string. Wrong encoding may cause
+ * SyntaxError (unicode error). */
+! cmdstr = PyUnicode_Decode(cmd, strlen(cmd), (char *)ENC_OPT, NULL);
+ cmdbytes = PyUnicode_AsEncodedString(cmdstr, "utf-8", NULL);
+ Py_XDECREF(cmdstr);
+ PyRun_SimpleString(PyBytes_AsString(cmdbytes));
+***************
+*** 1463,1469 ****
+ }
+ *p = '\0';
+
+! result = PyUnicode_Decode(tmp, len, (char *)p_enc, NULL);
+
+ vim_free(tmp);
+ return result;
+--- 1463,1469 ----
+ }
+ *p = '\0';
+
+! result = PyUnicode_Decode(tmp, len, (char *)ENC_OPT, NULL);
+
+ vim_free(tmp);
+ return result;
+*** ../vim-7.3.235/src/version.c 2011-06-26 05:36:07.000000000 +0200
+--- src/version.c 2011-06-26 19:12:12.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 236,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+228. You spend Saturday night making the counter on your home page
+ pass that 2000 mark.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.237 b/source/ap/vim/patches/7.3.237
new file mode 100644
index 000000000..ead50ca6a
--- /dev/null
+++ b/source/ap/vim/patches/7.3.237
@@ -0,0 +1,222 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.237
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.237
+Problem: "filetype" completion doesn't work on Windows. (Yue Wu)
+Solution: Don't use a glob pattern for the directories, use a list of
+ directories. (Dominique Pelle)
+Files: src/ex_getln.c
+
+
+*** ../vim-7.3.236/src/ex_getln.c 2011-05-19 18:26:34.000000000 +0200
+--- src/ex_getln.c 2011-06-26 19:36:36.000000000 +0200
+***************
+*** 110,116 ****
+ static int expand_showtail __ARGS((expand_T *xp));
+ #ifdef FEAT_CMDL_COMPL
+ static int expand_shellcmd __ARGS((char_u *filepat, int *num_file, char_u ***file, int flagsarg));
+! static int ExpandRTDir __ARGS((char_u *pat, int *num_file, char_u ***file, char *dirname));
+ # if defined(FEAT_USR_CMDS) && defined(FEAT_EVAL)
+ static int ExpandUserDefined __ARGS((expand_T *xp, regmatch_T *regmatch, int *num_file, char_u ***file));
+ static int ExpandUserList __ARGS((expand_T *xp, int *num_file, char_u ***file));
+--- 110,116 ----
+ static int expand_showtail __ARGS((expand_T *xp));
+ #ifdef FEAT_CMDL_COMPL
+ static int expand_shellcmd __ARGS((char_u *filepat, int *num_file, char_u ***file, int flagsarg));
+! static int ExpandRTDir __ARGS((char_u *pat, int *num_file, char_u ***file, char *dirname[]));
+ # if defined(FEAT_USR_CMDS) && defined(FEAT_EVAL)
+ static int ExpandUserDefined __ARGS((expand_T *xp, regmatch_T *regmatch, int *num_file, char_u ***file));
+ static int ExpandUserList __ARGS((expand_T *xp, int *num_file, char_u ***file));
+***************
+*** 4536,4548 ****
+ || xp->xp_context == EXPAND_TAGS_LISTFILES)
+ return expand_tags(xp->xp_context == EXPAND_TAGS, pat, num_file, file);
+ if (xp->xp_context == EXPAND_COLORS)
+! return ExpandRTDir(pat, num_file, file, "colors");
+ if (xp->xp_context == EXPAND_COMPILER)
+! return ExpandRTDir(pat, num_file, file, "compiler");
+ if (xp->xp_context == EXPAND_OWNSYNTAX)
+! return ExpandRTDir(pat, num_file, file, "syntax");
+ if (xp->xp_context == EXPAND_FILETYPE)
+! return ExpandRTDir(pat, num_file, file, "{syntax,indent,ftplugin}");
+ # if defined(FEAT_USR_CMDS) && defined(FEAT_EVAL)
+ if (xp->xp_context == EXPAND_USER_LIST)
+ return ExpandUserList(xp, num_file, file);
+--- 4536,4560 ----
+ || xp->xp_context == EXPAND_TAGS_LISTFILES)
+ return expand_tags(xp->xp_context == EXPAND_TAGS, pat, num_file, file);
+ if (xp->xp_context == EXPAND_COLORS)
+! {
+! char *directories[] = {"colors", NULL};
+! return ExpandRTDir(pat, num_file, file, directories);
+! }
+ if (xp->xp_context == EXPAND_COMPILER)
+! {
+! char *directories[] = {"colors", NULL};
+! return ExpandRTDir(pat, num_file, file, directories);
+! }
+ if (xp->xp_context == EXPAND_OWNSYNTAX)
+! {
+! char *directories[] = {"syntax", NULL};
+! return ExpandRTDir(pat, num_file, file, directories);
+! }
+ if (xp->xp_context == EXPAND_FILETYPE)
+! {
+! char *directories[] = {"syntax", "indent", "ftplugin", NULL};
+! return ExpandRTDir(pat, num_file, file, directories);
+! }
+ # if defined(FEAT_USR_CMDS) && defined(FEAT_EVAL)
+ if (xp->xp_context == EXPAND_USER_LIST)
+ return ExpandUserList(xp, num_file, file);
+***************
+*** 4995,5051 ****
+ /*
+ * Expand color scheme, compiler or filetype names:
+ * 'runtimepath'/{dirnames}/{pat}.vim
+! * dirnames may contain one directory (ex: "colorscheme") or can be a glob
+! * expression matching multiple directories (ex: "{syntax,ftplugin,indent}").
+ */
+ static int
+ ExpandRTDir(pat, num_file, file, dirnames)
+ char_u *pat;
+ int *num_file;
+ char_u ***file;
+! char *dirnames;
+ {
+! char_u *all;
+ char_u *s;
+ char_u *e;
+ garray_T ga;
+
+ *num_file = 0;
+ *file = NULL;
+! s = alloc((unsigned)(STRLEN(pat) + STRLEN(dirnames) + 7));
+! if (s == NULL)
+! return FAIL;
+! sprintf((char *)s, "%s/%s*.vim", dirnames, pat);
+! all = globpath(p_rtp, s, 0);
+! vim_free(s);
+! if (all == NULL)
+! return FAIL;
+
+! ga_init2(&ga, (int)sizeof(char *), 3);
+! for (s = all; *s != NUL; s = e)
+ {
+! e = vim_strchr(s, '\n');
+! if (e == NULL)
+! e = s + STRLEN(s);
+! if (ga_grow(&ga, 1) == FAIL)
+! break;
+! if (e - 4 > s && STRNICMP(e - 4, ".vim", 4) == 0)
+ {
+! for (s = e - 4; s > all; mb_ptr_back(all, s))
+! if (*s == '\n' || vim_ispathsep(*s))
+! break;
+! ++s;
+! ((char_u **)ga.ga_data)[ga.ga_len] =
+ vim_strnsave(s, (int)(e - s - 4));
+! ++ga.ga_len;
+ }
+! if (*e != NUL)
+! ++e;
+ }
+! vim_free(all);
+
+ /* Sort and remove duplicates which can happen when specifying multiple
+! * directories in dirnames such as "{syntax,ftplugin,indent}". */
+ remove_duplicates(&ga);
+
+ *file = ga.ga_data;
+--- 5007,5074 ----
+ /*
+ * Expand color scheme, compiler or filetype names:
+ * 'runtimepath'/{dirnames}/{pat}.vim
+! * "dirnames" is an array with one or more directory names.
+ */
+ static int
+ ExpandRTDir(pat, num_file, file, dirnames)
+ char_u *pat;
+ int *num_file;
+ char_u ***file;
+! char *dirnames[];
+ {
+! char_u *matches;
+ char_u *s;
+ char_u *e;
+ garray_T ga;
++ int i;
++ int pat_len;
+
+ *num_file = 0;
+ *file = NULL;
+! pat_len = STRLEN(pat);
+! ga_init2(&ga, (int)sizeof(char *), 10);
+
+! for (i = 0; dirnames[i] != NULL; ++i)
+ {
+! s = alloc((unsigned)(STRLEN(dirnames[i]) + pat_len + 7));
+! if (s == NULL)
+ {
+! ga_clear_strings(&ga);
+! return FAIL;
+! }
+! sprintf((char *)s, "%s/%s*.vim", dirnames[i], pat);
+! matches = globpath(p_rtp, s, 0);
+! vim_free(s);
+! if (matches == NULL)
+! continue;
+!
+! for (s = matches; *s != NUL; s = e)
+! {
+! e = vim_strchr(s, '\n');
+! if (e == NULL)
+! e = s + STRLEN(s);
+! if (ga_grow(&ga, 1) == FAIL)
+! break;
+! if (e - 4 > s && STRNICMP(e - 4, ".vim", 4) == 0)
+! {
+! for (s = e - 4; s > matches; mb_ptr_back(matches, s))
+! if (*s == '\n' || vim_ispathsep(*s))
+! break;
+! ++s;
+! ((char_u **)ga.ga_data)[ga.ga_len] =
+ vim_strnsave(s, (int)(e - s - 4));
+! ++ga.ga_len;
+! }
+! if (*e != NUL)
+! ++e;
+ }
+! vim_free(matches);
+ }
+! if (ga.ga_len == 0)
+! return FAIL;
+
+ /* Sort and remove duplicates which can happen when specifying multiple
+! * directories in dirnames. */
+ remove_duplicates(&ga);
+
+ *file = ga.ga_data;
+*** ../vim-7.3.236/src/version.c 2011-06-26 19:13:33.000000000 +0200
+--- src/version.c 2011-06-26 19:39:39.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 237,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+230. You spend your Friday nights typing away at your keyboard
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.238 b/source/ap/vim/patches/7.3.238
new file mode 100644
index 000000000..289b1a432
--- /dev/null
+++ b/source/ap/vim/patches/7.3.238
@@ -0,0 +1,53 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.238
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.238
+Problem: Compiler warning for conversion.
+Solution: Add type cast. (Mike Williams)
+Files: src/ex_getln.c
+
+
+*** ../vim-7.3.237/src/ex_getln.c 2011-06-26 19:40:14.000000000 +0200
+--- src/ex_getln.c 2011-07-04 14:23:27.000000000 +0200
+***************
+*** 5025,5031 ****
+
+ *num_file = 0;
+ *file = NULL;
+! pat_len = STRLEN(pat);
+ ga_init2(&ga, (int)sizeof(char *), 10);
+
+ for (i = 0; dirnames[i] != NULL; ++i)
+--- 5025,5031 ----
+
+ *num_file = 0;
+ *file = NULL;
+! pat_len = (int)STRLEN(pat);
+ ga_init2(&ga, (int)sizeof(char *), 10);
+
+ for (i = 0; dirnames[i] != NULL; ++i)
+*** ../vim-7.3.237/src/version.c 2011-06-26 19:40:14.000000000 +0200
+--- src/version.c 2011-07-07 15:04:00.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 238,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+255. You work for a newspaper and your editor asks you to write an
+ article about Internet addiction...in the "first person."
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.239 b/source/ap/vim/patches/7.3.239
new file mode 100644
index 000000000..1c03da3f6
--- /dev/null
+++ b/source/ap/vim/patches/7.3.239
@@ -0,0 +1,321 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.239
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.239
+Problem: Python corrects the cursor column without taking 'virtualedit'
+ into account. (lilydjwg)
+Solution: Call check_cursor_col_win().
+Files: src/if_py_both.h, src/mbyte.c, src/misc2.c, src/normal.c,
+ src/proto/mbyte.pro, src/proto/misc2.pro
+
+
+*** ../vim-7.3.238/src/if_py_both.h 2011-06-26 04:01:37.000000000 +0200
+--- src/if_py_both.h 2011-07-07 14:28:19.000000000 +0200
+***************
+*** 534,540 ****
+ {
+ long lnum;
+ long col;
+- long len;
+
+ if (!PyArg_Parse(val, "(ll)", &lnum, &col))
+ return -1;
+--- 534,539 ----
+***************
+*** 549,566 ****
+ if (VimErrorCheck())
+ return -1;
+
+- /* When column is out of range silently correct it. */
+- len = (long)STRLEN(ml_get_buf(this->win->w_buffer, lnum, FALSE));
+- if (col > len)
+- col = len;
+-
+ this->win->w_cursor.lnum = lnum;
+ this->win->w_cursor.col = col;
+ #ifdef FEAT_VIRTUALEDIT
+ this->win->w_cursor.coladd = 0;
+ #endif
+! update_screen(VALID);
+
+ return 0;
+ }
+ else if (strcmp(name, "height") == 0)
+--- 548,562 ----
+ if (VimErrorCheck())
+ return -1;
+
+ this->win->w_cursor.lnum = lnum;
+ this->win->w_cursor.col = col;
+ #ifdef FEAT_VIRTUALEDIT
+ this->win->w_cursor.coladd = 0;
+ #endif
+! /* When column is out of range silently correct it. */
+! check_cursor_col_win(this->win);
+
++ update_screen(VALID);
+ return 0;
+ }
+ else if (strcmp(name, "height") == 0)
+*** ../vim-7.3.238/src/mbyte.c 2011-04-11 14:29:13.000000000 +0200
+--- src/mbyte.c 2011-07-07 14:27:07.000000000 +0200
+***************
+*** 3563,3569 ****
+ void
+ mb_adjust_cursor()
+ {
+! mb_adjustpos(&curwin->w_cursor);
+ }
+
+ /*
+--- 3563,3569 ----
+ void
+ mb_adjust_cursor()
+ {
+! mb_adjustpos(curbuf, &curwin->w_cursor);
+ }
+
+ /*
+***************
+*** 3571,3577 ****
+ * If it points to a tail byte it's moved backwards to the head byte.
+ */
+ void
+! mb_adjustpos(lp)
+ pos_T *lp;
+ {
+ char_u *p;
+--- 3571,3578 ----
+ * If it points to a tail byte it's moved backwards to the head byte.
+ */
+ void
+! mb_adjustpos(buf, lp)
+! buf_T *buf;
+ pos_T *lp;
+ {
+ char_u *p;
+***************
+*** 3582,3588 ****
+ #endif
+ )
+ {
+! p = ml_get(lp->lnum);
+ lp->col -= (*mb_head_off)(p, p + lp->col);
+ #ifdef FEAT_VIRTUALEDIT
+ /* Reset "coladd" when the cursor would be on the right half of a
+--- 3583,3589 ----
+ #endif
+ )
+ {
+! p = ml_get_buf(buf, lp->lnum, FALSE);
+ lp->col -= (*mb_head_off)(p, p + lp->col);
+ #ifdef FEAT_VIRTUALEDIT
+ /* Reset "coladd" when the cursor would be on the right half of a
+*** ../vim-7.3.238/src/misc2.c 2011-04-11 16:56:29.000000000 +0200
+--- src/misc2.c 2011-07-07 14:27:50.000000000 +0200
+***************
+*** 333,339 ****
+ #ifdef FEAT_MBYTE
+ /* prevent from moving onto a trail byte */
+ if (has_mbyte)
+! mb_adjustpos(pos);
+ #endif
+
+ if (col < wcol)
+--- 333,339 ----
+ #ifdef FEAT_MBYTE
+ /* prevent from moving onto a trail byte */
+ if (has_mbyte)
+! mb_adjustpos(curbuf, pos);
+ #endif
+
+ if (col < wcol)
+***************
+*** 544,559 ****
+ void
+ check_cursor_col()
+ {
+ colnr_T len;
+ #ifdef FEAT_VIRTUALEDIT
+! colnr_T oldcol = curwin->w_cursor.col;
+! colnr_T oldcoladd = curwin->w_cursor.col + curwin->w_cursor.coladd;
+ #endif
+
+! len = (colnr_T)STRLEN(ml_get_curline());
+ if (len == 0)
+! curwin->w_cursor.col = 0;
+! else if (curwin->w_cursor.col >= len)
+ {
+ /* Allow cursor past end-of-line when:
+ * - in Insert mode or restarting Insert mode
+--- 544,569 ----
+ void
+ check_cursor_col()
+ {
++ check_cursor_col_win(curwin);
++ }
++
++ /*
++ * Make sure win->w_cursor.col is valid.
++ */
++ void
++ check_cursor_col_win(win)
++ win_T *win;
++ {
+ colnr_T len;
+ #ifdef FEAT_VIRTUALEDIT
+! colnr_T oldcol = win->w_cursor.col;
+! colnr_T oldcoladd = win->w_cursor.col + win->w_cursor.coladd;
+ #endif
+
+! len = (colnr_T)STRLEN(ml_get_buf(win->w_buffer, win->w_cursor.lnum, FALSE));
+ if (len == 0)
+! win->w_cursor.col = 0;
+! else if (win->w_cursor.col >= len)
+ {
+ /* Allow cursor past end-of-line when:
+ * - in Insert mode or restarting Insert mode
+***************
+*** 567,599 ****
+ || (ve_flags & VE_ONEMORE)
+ #endif
+ || virtual_active())
+! curwin->w_cursor.col = len;
+ else
+ {
+! curwin->w_cursor.col = len - 1;
+ #ifdef FEAT_MBYTE
+! /* prevent cursor from moving on the trail byte */
+ if (has_mbyte)
+! mb_adjust_cursor();
+ #endif
+ }
+ }
+! else if (curwin->w_cursor.col < 0)
+! curwin->w_cursor.col = 0;
+
+ #ifdef FEAT_VIRTUALEDIT
+ /* If virtual editing is on, we can leave the cursor on the old position,
+ * only we must set it to virtual. But don't do it when at the end of the
+ * line. */
+ if (oldcol == MAXCOL)
+! curwin->w_cursor.coladd = 0;
+ else if (ve_flags == VE_ALL)
+ {
+! if (oldcoladd > curwin->w_cursor.col)
+! curwin->w_cursor.coladd = oldcoladd - curwin->w_cursor.col;
+ else
+ /* avoid weird number when there is a miscalculation or overflow */
+! curwin->w_cursor.coladd = 0;
+ }
+ #endif
+ }
+--- 577,609 ----
+ || (ve_flags & VE_ONEMORE)
+ #endif
+ || virtual_active())
+! win->w_cursor.col = len;
+ else
+ {
+! win->w_cursor.col = len - 1;
+ #ifdef FEAT_MBYTE
+! /* Move the cursor to the head byte. */
+ if (has_mbyte)
+! mb_adjustpos(win->w_buffer, &win->w_cursor);
+ #endif
+ }
+ }
+! else if (win->w_cursor.col < 0)
+! win->w_cursor.col = 0;
+
+ #ifdef FEAT_VIRTUALEDIT
+ /* If virtual editing is on, we can leave the cursor on the old position,
+ * only we must set it to virtual. But don't do it when at the end of the
+ * line. */
+ if (oldcol == MAXCOL)
+! win->w_cursor.coladd = 0;
+ else if (ve_flags == VE_ALL)
+ {
+! if (oldcoladd > win->w_cursor.col)
+! win->w_cursor.coladd = oldcoladd - win->w_cursor.col;
+ else
+ /* avoid weird number when there is a miscalculation or overflow */
+! win->w_cursor.coladd = 0;
+ }
+ #endif
+ }
+*** ../vim-7.3.238/src/normal.c 2011-06-20 00:45:55.000000000 +0200
+--- src/normal.c 2011-07-07 14:27:57.000000000 +0200
+***************
+*** 8774,8780 ****
+ {
+ --pp->col;
+ #ifdef FEAT_MBYTE
+! mb_adjustpos(pp);
+ #endif
+ }
+ else if (pp->lnum > 1)
+--- 8774,8780 ----
+ {
+ --pp->col;
+ #ifdef FEAT_MBYTE
+! mb_adjustpos(curbuf, pp);
+ #endif
+ }
+ else if (pp->lnum > 1)
+*** ../vim-7.3.238/src/proto/mbyte.pro 2010-08-15 21:57:28.000000000 +0200
+--- src/proto/mbyte.pro 2011-07-07 14:27:09.000000000 +0200
+***************
+*** 56,62 ****
+ int utf_valid_string __ARGS((char_u *s, char_u *end));
+ int dbcs_screen_tail_off __ARGS((char_u *base, char_u *p));
+ void mb_adjust_cursor __ARGS((void));
+! void mb_adjustpos __ARGS((pos_T *lp));
+ char_u *mb_prevptr __ARGS((char_u *line, char_u *p));
+ int mb_charlen __ARGS((char_u *str));
+ int mb_charlen_len __ARGS((char_u *str, int len));
+--- 56,62 ----
+ int utf_valid_string __ARGS((char_u *s, char_u *end));
+ int dbcs_screen_tail_off __ARGS((char_u *base, char_u *p));
+ void mb_adjust_cursor __ARGS((void));
+! void mb_adjustpos __ARGS((buf_T *buf, pos_T *lp));
+ char_u *mb_prevptr __ARGS((char_u *line, char_u *p));
+ int mb_charlen __ARGS((char_u *str));
+ int mb_charlen_len __ARGS((char_u *str, int len));
+*** ../vim-7.3.238/src/proto/misc2.pro 2011-04-11 16:56:29.000000000 +0200
+--- src/proto/misc2.pro 2011-07-07 14:26:57.000000000 +0200
+***************
+*** 14,19 ****
+--- 14,20 ----
+ linenr_T get_cursor_rel_lnum __ARGS((win_T *wp, linenr_T lnum));
+ void check_cursor_lnum __ARGS((void));
+ void check_cursor_col __ARGS((void));
++ void check_cursor_col_win __ARGS((win_T *win));
+ void check_cursor __ARGS((void));
+ void adjust_cursor_col __ARGS((void));
+ int leftcol_changed __ARGS((void));
+*** ../vim-7.3.238/src/version.c 2011-07-07 15:04:38.000000000 +0200
+--- src/version.c 2011-07-07 15:05:49.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 239,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+256. You are able to write down over 250 symptoms of being an internet
+ addict, even though they only asked for 101.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.240 b/source/ap/vim/patches/7.3.240
new file mode 100644
index 000000000..7048ac1f3
--- /dev/null
+++ b/source/ap/vim/patches/7.3.240
@@ -0,0 +1,795 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.240
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Note: I haven't verified this works or even compiles. Please send me a
+patch if you see a problem and can fix it.
+
+Patch 7.3.240
+Problem: External commands can't use pipes on MS-Windows.
+Solution: Implement pipes and use them when 'shelltemp' isn't set. (Vincent
+ Berthoux)
+Files: src/eval.c, src/ex_cmds.c, src/misc2.c, src/os_unix.c,
+ src/os_win32.c, src/proto/misc2.pro, src/ui.c
+
+
+*** ../vim-7.3.239/src/eval.c 2011-06-19 02:55:32.000000000 +0200
+--- src/eval.c 2011-07-07 15:44:56.000000000 +0200
+***************
+*** 11931,11937 ****
+ #ifdef FEAT_SEARCHPATH
+ "file_in_path",
+ #endif
+! #if defined(UNIX) && !defined(USE_SYSTEM)
+ "filterpipe",
+ #endif
+ #ifdef FEAT_FIND_ID
+--- 11931,11937 ----
+ #ifdef FEAT_SEARCHPATH
+ "file_in_path",
+ #endif
+! #if (defined(UNIX) && !defined(USE_SYSTEM)) || defined(WIN3264)
+ "filterpipe",
+ #endif
+ #ifdef FEAT_FIND_ID
+*** ../vim-7.3.239/src/ex_cmds.c 2011-06-12 22:03:15.000000000 +0200
+--- src/ex_cmds.c 2011-07-07 15:44:56.000000000 +0200
+***************
+*** 1107,1113 ****
+ if (do_out)
+ shell_flags |= SHELL_DOOUT;
+
+! #if !defined(USE_SYSTEM) && defined(UNIX)
+ if (!do_in && do_out && !p_stmp)
+ {
+ /* Use a pipe to fetch stdout of the command, do not use a temp file. */
+--- 1107,1113 ----
+ if (do_out)
+ shell_flags |= SHELL_DOOUT;
+
+! #if (!defined(USE_SYSTEM) && defined(UNIX)) || defined(WIN3264)
+ if (!do_in && do_out && !p_stmp)
+ {
+ /* Use a pipe to fetch stdout of the command, do not use a temp file. */
+*** ../vim-7.3.239/src/misc2.c 2011-07-07 15:08:53.000000000 +0200
+--- src/misc2.c 2011-07-07 15:55:42.000000000 +0200
+***************
+*** 2146,2151 ****
+--- 2146,2170 ----
+ }
+ }
+
++ #if (defined(UNIX) && !defined(USE_SYSTEM)) || defined(WIN3264)
++ /*
++ * Append the text in "gap" below the cursor line and clear "gap".
++ */
++ void
++ append_ga_line(gap)
++ garray_T *gap;
++ {
++ /* Remove trailing CR. */
++ if (gap->ga_len > 0
++ && !curbuf->b_p_bin
++ && ((char_u *)gap->ga_data)[gap->ga_len - 1] == CAR)
++ --gap->ga_len;
++ ga_append(gap, NUL);
++ ml_append(curwin->w_cursor.lnum++, gap->ga_data, 0, FALSE);
++ gap->ga_len = 0;
++ }
++ #endif
++
+ /************************************************************************
+ * functions that use lookup tables for various things, generally to do with
+ * special key codes.
+*** ../vim-7.3.239/src/os_unix.c 2011-04-11 16:56:29.000000000 +0200
+--- src/os_unix.c 2011-07-07 15:54:58.000000000 +0200
+***************
+*** 3660,3686 ****
+ /* Nothing to do. */
+ }
+
+- #ifndef USE_SYSTEM
+- static void append_ga_line __ARGS((garray_T *gap));
+-
+- /*
+- * Append the text in "gap" below the cursor line and clear "gap".
+- */
+- static void
+- append_ga_line(gap)
+- garray_T *gap;
+- {
+- /* Remove trailing CR. */
+- if (gap->ga_len > 0
+- && !curbuf->b_p_bin
+- && ((char_u *)gap->ga_data)[gap->ga_len - 1] == CAR)
+- --gap->ga_len;
+- ga_append(gap, NUL);
+- ml_append(curwin->w_cursor.lnum++, gap->ga_data, 0, FALSE);
+- gap->ga_len = 0;
+- }
+- #endif
+-
+ int
+ mch_call_shell(cmd, options)
+ char_u *cmd;
+--- 3660,3665 ----
+*** ../vim-7.3.239/src/os_win32.c 2011-05-25 17:06:16.000000000 +0200
+--- src/os_win32.c 2011-07-07 16:08:30.000000000 +0200
+***************
+*** 417,422 ****
+--- 417,427 ----
+ static PGNSECINFO pGetNamedSecurityInfo;
+ #endif
+
++ typedef BOOL (WINAPI *PSETHANDLEINFORMATION)(HANDLE, DWORD, DWORD);
++
++ static BOOL allowPiping = FALSE;
++ static PSETHANDLEINFORMATION pSetHandleInformation;
++
+ /*
+ * Set g_PlatformId to VER_PLATFORM_WIN32_NT (NT) or
+ * VER_PLATFORM_WIN32_WINDOWS (Win95).
+***************
+*** 467,472 ****
+--- 472,489 ----
+ }
+ }
+ #endif
++ /*
++ * If we are on windows NT, try to load the pipe functions, only
++ * available from Win2K.
++ */
++ if (g_PlatformId == VER_PLATFORM_WIN32_NT)
++ {
++ HANDLE kernel32 = GetModuleHandle("kernel32");
++ pSetHandleInformation = (PSETHANDLEINFORMATION)GetProcAddress(
++ kernel32, "SetHandleInformation");
++
++ allowPiping = pSetHandleInformation != NULL;
++ }
+ done = TRUE;
+ }
+ }
+***************
+*** 1635,1641 ****
+ }
+
+ #if ((defined(__MINGW32__) || defined (__CYGWIN32__)) && \
+! __MSVCRT_VERSION__ >= 0x800) || (defined(_MSC_VER) && _MSC_VER >= 1400)
+ /*
+ * Bad parameter handler.
+ *
+--- 1652,1658 ----
+ }
+
+ #if ((defined(__MINGW32__) || defined (__CYGWIN32__)) && \
+! __MSVCRT_VERSION__ >= 0x800) || (defined(_MSC_VER) && _MSC_VER >= 1400)
+ /*
+ * Bad parameter handler.
+ *
+***************
+*** 3210,3216 ****
+ * 4. Prompt the user to press a key to close the console window
+ */
+ static int
+! mch_system(char *cmd, int options)
+ {
+ STARTUPINFO si;
+ PROCESS_INFORMATION pi;
+--- 3227,3233 ----
+ * 4. Prompt the user to press a key to close the console window
+ */
+ static int
+! mch_system_classic(char *cmd, int options)
+ {
+ STARTUPINFO si;
+ PROCESS_INFORMATION pi;
+***************
+*** 3315,3320 ****
+--- 3332,3829 ----
+
+ return ret;
+ }
++
++ /*
++ * Thread launched by the gui to send the current buffer data to the
++ * process. This way avoid to hang up vim totally if the children
++ * process take a long time to process the lines.
++ */
++ static DWORD WINAPI
++ sub_process_writer(LPVOID param)
++ {
++ HANDLE g_hChildStd_IN_Wr = param;
++ linenr_T lnum = curbuf->b_op_start.lnum;
++ DWORD len = 0;
++ DWORD l;
++ char_u *lp = ml_get(lnum);
++ char_u *s;
++ int written = 0;
++
++ for (;;)
++ {
++ l = (DWORD)STRLEN(lp + written);
++ if (l == 0)
++ len = 0;
++ else if (lp[written] == NL)
++ {
++ /* NL -> NUL translation */
++ WriteFile(g_hChildStd_IN_Wr, "", 1, &len, NULL);
++ }
++ else
++ {
++ s = vim_strchr(lp + written, NL);
++ WriteFile(g_hChildStd_IN_Wr, (char *)lp + written,
++ s == NULL ? l : (DWORD)(s - (lp + written)),
++ &len, NULL);
++ }
++ if (len == (int)l)
++ {
++ /* Finished a line, add a NL, unless this line should not have
++ * one. */
++ if (lnum != curbuf->b_op_end.lnum
++ || !curbuf->b_p_bin
++ || (lnum != curbuf->b_no_eol_lnum
++ && (lnum != curbuf->b_ml.ml_line_count
++ || curbuf->b_p_eol)))
++ {
++ WriteFile(g_hChildStd_IN_Wr, "\n", 1, &ignored, NULL);
++ }
++
++ ++lnum;
++ if (lnum > curbuf->b_op_end.lnum)
++ break;
++
++ lp = ml_get(lnum);
++ written = 0;
++ }
++ else if (len > 0)
++ written += len;
++ }
++
++ /* finished all the lines, close pipe */
++ CloseHandle(g_hChildStd_IN_Wr);
++ ExitThread(0);
++ }
++
++
++ # define BUFLEN 100 /* length for buffer, stolen from unix version */
++
++ /*
++ * This function read from the children's stdout and write the
++ * data on screen or in the buffer accordingly.
++ */
++ static void
++ dump_pipe(int options,
++ HANDLE g_hChildStd_OUT_Rd,
++ garray_T *ga,
++ char_u buffer[],
++ DWORD *buffer_off)
++ {
++ DWORD availableBytes = 0;
++ DWORD i;
++ int c;
++ char_u *p;
++ int ret;
++ DWORD len;
++ DWORD toRead;
++ int repeatCount;
++
++ /* we query the pipe to see if there is any data to read
++ * to avoid to perform a blocking read */
++ ret = PeekNamedPipe(g_hChildStd_OUT_Rd, /* pipe to query */
++ NULL, /* optional buffer */
++ 0, /* buffe size */
++ NULL, /* number of read bytes */
++ &availableBytes, /* available bytes total */
++ NULL); /* byteLeft */
++
++ repeatCount = 0;
++ /* We got real data in the pipe, read it */
++ while (ret != 0 && availableBytes > 0 && availableBytes > 0)
++ {
++ repeatCount++;
++ toRead =
++ # ifdef FEAT_MBYTE
++ (DWORD)(BUFLEN - *buffer_off);
++ # else
++ (DWORD)BUFLEN;
++ # endif
++ toRead = availableBytes < toRead ? availableBytes : toRead;
++ ReadFile(g_hChildStd_OUT_Rd, buffer
++ # ifdef FEAT_MBYTE
++ + *buffer_off, toRead
++ # else
++ , toRead
++ # endif
++ , &len, NULL);
++
++ /* If we haven't read anything, there is a problem */
++ if (len == 0)
++ break;
++
++ availableBytes -= len;
++
++ if (options & SHELL_READ)
++ {
++ /* Do NUL -> NL translation, append NL separated
++ * lines to the current buffer. */
++ for (i = 0; i < len; ++i)
++ {
++ if (buffer[i] == NL)
++ append_ga_line(ga);
++ else if (buffer[i] == NUL)
++ ga_append(ga, NL);
++ else
++ ga_append(ga, buffer[i]);
++ }
++ }
++ # ifdef FEAT_MBYTE
++ else if (has_mbyte)
++ {
++ int l;
++
++ len += *buffer_off;
++ buffer[len] = NUL;
++
++ /* Check if the last character in buffer[] is
++ * incomplete, keep these bytes for the next
++ * round. */
++ for (p = buffer; p < buffer + len; p += l)
++ {
++ l = mb_cptr2len(p);
++ if (l == 0)
++ l = 1; /* NUL byte? */
++ else if (MB_BYTE2LEN(*p) != l)
++ break;
++ }
++ if (p == buffer) /* no complete character */
++ {
++ /* avoid getting stuck at an illegal byte */
++ if (len >= 12)
++ ++p;
++ else
++ {
++ *buffer_off = len;
++ return;
++ }
++ }
++ c = *p;
++ *p = NUL;
++ msg_puts(buffer);
++ if (p < buffer + len)
++ {
++ *p = c;
++ *buffer_off = (DWORD)((buffer + len) - p);
++ mch_memmove(buffer, p, *buffer_off);
++ return;
++ }
++ *buffer_off = 0;
++ }
++ # endif /* FEAT_MBYTE */
++ else
++ {
++ buffer[len] = NUL;
++ msg_puts(buffer);
++ }
++
++ windgoto(msg_row, msg_col);
++ cursor_on();
++ out_flush();
++ }
++ }
++
++ /*
++ * Version of system to use for windows NT > 5.0 (Win2K), use pipe
++ * for communication and doesn't open any new window.
++ */
++ static int
++ mch_system_piped(char *cmd, int options)
++ {
++ STARTUPINFO si;
++ PROCESS_INFORMATION pi;
++ DWORD ret = 0;
++
++ HANDLE g_hChildStd_IN_Rd = NULL;
++ HANDLE g_hChildStd_IN_Wr = NULL;
++ HANDLE g_hChildStd_OUT_Rd = NULL;
++ HANDLE g_hChildStd_OUT_Wr = NULL;
++
++ char_u buffer[BUFLEN + 1]; /* reading buffer + size */
++ DWORD len;
++
++ /* buffer used to receive keys */
++ char_u ta_buf[BUFLEN + 1]; /* TypeAHead */
++ int ta_len = 0; /* valid bytes in ta_buf[] */
++
++ DWORD i;
++ int c;
++ int noread_cnt = 0;
++ garray_T ga;
++ int delay = 1;
++ # ifdef FEAT_MBYTE
++ DWORD buffer_off = 0; /* valid bytes in buffer[] */
++ # endif
++
++ SECURITY_ATTRIBUTES saAttr;
++
++ /* Set the bInheritHandle flag so pipe handles are inherited. */
++ saAttr.nLength = sizeof(SECURITY_ATTRIBUTES);
++ saAttr.bInheritHandle = TRUE;
++ saAttr.lpSecurityDescriptor = NULL;
++
++ if ( ! CreatePipe(&g_hChildStd_OUT_Rd, &g_hChildStd_OUT_Wr, &saAttr, 0)
++ /* Ensure the read handle to the pipe for STDOUT is not inherited. */
++ || ! pSetHandleInformation(g_hChildStd_OUT_Rd, HANDLE_FLAG_INHERIT, 0)
++ /* Create a pipe for the child process's STDIN. */
++ || ! CreatePipe(&g_hChildStd_IN_Rd, &g_hChildStd_IN_Wr, &saAttr, 0)
++ /* Ensure the write handle to the pipe for STDIN is not inherited. */
++ || ! pSetHandleInformation(g_hChildStd_IN_Wr, HANDLE_FLAG_INHERIT, 0) )
++ {
++ CloseHandle(g_hChildStd_IN_Rd);
++ CloseHandle(g_hChildStd_IN_Wr);
++ CloseHandle(g_hChildStd_OUT_Rd);
++ CloseHandle(g_hChildStd_OUT_Wr);
++ MSG_PUTS(_("\nCannot create pipes\n"));
++ }
++
++ si.cb = sizeof(si);
++ si.lpReserved = NULL;
++ si.lpDesktop = NULL;
++ si.lpTitle = NULL;
++ si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
++
++ /* set-up our file redirection */
++ si.hStdError = g_hChildStd_OUT_Wr;
++ si.hStdOutput = g_hChildStd_OUT_Wr;
++ si.hStdInput = g_hChildStd_IN_Rd;
++ si.wShowWindow = SW_HIDE;
++ si.cbReserved2 = 0;
++ si.lpReserved2 = NULL;
++
++ if (options & SHELL_READ)
++ ga_init2(&ga, 1, BUFLEN);
++
++ /* Now, run the command */
++ CreateProcess(NULL, /* Executable name */
++ cmd, /* Command to execute */
++ NULL, /* Process security attributes */
++ NULL, /* Thread security attributes */
++
++ // this command can be litigeous, handle inheritence was
++ // deactivated for pending temp file, but, if we deactivate
++ // it, the pipes don't work for some reason.
++ TRUE, /* Inherit handles, first deactivated,
++ * but needed */
++ CREATE_DEFAULT_ERROR_MODE, /* Creation flags */
++ NULL, /* Environment */
++ NULL, /* Current directory */
++ &si, /* Startup information */
++ &pi); /* Process information */
++
++
++ /* Close our unused side of the pipes */
++ CloseHandle(g_hChildStd_IN_Rd);
++ CloseHandle(g_hChildStd_OUT_Wr);
++
++ if (options & SHELL_WRITE)
++ {
++ HANDLE thread =
++ CreateThread(NULL, /* security attributes */
++ 0, /* default stack size */
++ sub_process_writer, /* function to be executed */
++ g_hChildStd_IN_Wr, /* parameter */
++ 0, /* creation flag, start immediately */
++ NULL); /* we don't care about thread id */
++ CloseHandle(thread);
++ g_hChildStd_IN_Wr = NULL;
++ }
++
++ /* Keep updating the window while waiting for the shell to finish. */
++ for (;;)
++ {
++ MSG msg;
++
++ if (PeekMessage(&msg, (HWND)NULL, 0, 0, PM_REMOVE))
++ {
++ TranslateMessage(&msg);
++ DispatchMessage(&msg);
++ }
++
++ /* write pipe information in the window */
++ if ((options & (SHELL_READ|SHELL_WRITE))
++ # ifdef FEAT_GUI
++ || gui.in_use
++ # endif
++ )
++ {
++ len = 0;
++ if (!(options & SHELL_EXPAND)
++ && ((options &
++ (SHELL_READ|SHELL_WRITE|SHELL_COOKED))
++ != (SHELL_READ|SHELL_WRITE|SHELL_COOKED)
++ # ifdef FEAT_GUI
++ || gui.in_use
++ # endif
++ )
++ && (ta_len > 0 || noread_cnt > 4))
++ {
++ if (ta_len == 0)
++ {
++ /* Get extra characters when we don't have any. Reset the
++ * counter and timer. */
++ noread_cnt = 0;
++ # if defined(HAVE_GETTIMEOFDAY) && defined(HAVE_SYS_TIME_H)
++ gettimeofday(&start_tv, NULL);
++ # endif
++ len = ui_inchar(ta_buf, BUFLEN, 10L, 0);
++ }
++ if (ta_len > 0 || len > 0)
++ {
++ /*
++ * For pipes: Check for CTRL-C: send interrupt signal to
++ * child. Check for CTRL-D: EOF, close pipe to child.
++ */
++ if (len == 1 && cmd != NULL)
++ {
++ if (ta_buf[ta_len] == Ctrl_C)
++ {
++ /* Learn what exit code is expected, for
++ * now put 9 as SIGKILL */
++ TerminateProcess(pi.hProcess, 9);
++ }
++ if (ta_buf[ta_len] == Ctrl_D)
++ {
++ CloseHandle(g_hChildStd_IN_Wr);
++ g_hChildStd_IN_Wr = NULL;
++ }
++ }
++
++ /* replace K_BS by <BS> and K_DEL by <DEL> */
++ for (i = ta_len; i < ta_len + len; ++i)
++ {
++ if (ta_buf[i] == CSI && len - i > 2)
++ {
++ c = TERMCAP2KEY(ta_buf[i + 1], ta_buf[i + 2]);
++ if (c == K_DEL || c == K_KDEL || c == K_BS)
++ {
++ mch_memmove(ta_buf + i + 1, ta_buf + i + 3,
++ (size_t)(len - i - 2));
++ if (c == K_DEL || c == K_KDEL)
++ ta_buf[i] = DEL;
++ else
++ ta_buf[i] = Ctrl_H;
++ len -= 2;
++ }
++ }
++ else if (ta_buf[i] == '\r')
++ ta_buf[i] = '\n';
++ # ifdef FEAT_MBYTE
++ if (has_mbyte)
++ i += (*mb_ptr2len_len)(ta_buf + i,
++ ta_len + len - i) - 1;
++ # endif
++ }
++
++ /*
++ * For pipes: echo the typed characters. For a pty this
++ * does not seem to work.
++ */
++ for (i = ta_len; i < ta_len + len; ++i)
++ {
++ if (ta_buf[i] == '\n' || ta_buf[i] == '\b')
++ msg_putchar(ta_buf[i]);
++ # ifdef FEAT_MBYTE
++ else if (has_mbyte)
++ {
++ int l = (*mb_ptr2len)(ta_buf + i);
++
++ msg_outtrans_len(ta_buf + i, l);
++ i += l - 1;
++ }
++ # endif
++ else
++ msg_outtrans_len(ta_buf + i, 1);
++ }
++ windgoto(msg_row, msg_col);
++ out_flush();
++
++ ta_len += len;
++
++ /*
++ * Write the characters to the child, unless EOF has been
++ * typed for pipes. Write one character at a time, to
++ * avoid losing too much typeahead. When writing buffer
++ * lines, drop the typed characters (only check for
++ * CTRL-C).
++ */
++ if (options & SHELL_WRITE)
++ ta_len = 0;
++ else if (g_hChildStd_IN_Wr != NULL)
++ {
++ WriteFile(g_hChildStd_IN_Wr, (char*)ta_buf,
++ 1, &len, NULL);
++ // if we are typing in, we want to keep things reactive
++ delay = 1;
++ if (len > 0)
++ {
++ ta_len -= len;
++ mch_memmove(ta_buf, ta_buf + len, ta_len);
++ }
++ }
++ }
++ }
++ }
++
++ if (ta_len)
++ ui_inchar_undo(ta_buf, ta_len);
++
++ if (WaitForSingleObject(pi.hProcess, delay) != WAIT_TIMEOUT)
++ {
++ dump_pipe(options, g_hChildStd_OUT_Rd,
++ &ga, buffer, &buffer_off);
++ break;
++ }
++
++ ++noread_cnt;
++ dump_pipe(options, g_hChildStd_OUT_Rd,
++ &ga, buffer, &buffer_off);
++
++ /* We start waiting for a very short time and then increase it, so
++ * that we respond quickly when the process is quick, and don't
++ * consume too much overhead when it's slow. */
++ if (delay < 50)
++ delay += 10;
++ }
++
++ /* Close the pipe */
++ CloseHandle(g_hChildStd_OUT_Rd);
++ if (g_hChildStd_IN_Wr != NULL)
++ CloseHandle(g_hChildStd_IN_Wr);
++
++ WaitForSingleObject(pi.hProcess, INFINITE);
++
++ /* Get the command exit code */
++ GetExitCodeProcess(pi.hProcess, &ret);
++
++ if (options & SHELL_READ)
++ {
++ if (ga.ga_len > 0)
++ {
++ append_ga_line(&ga);
++ /* remember that the NL was missing */
++ curbuf->b_no_eol_lnum = curwin->w_cursor.lnum;
++ }
++ else
++ curbuf->b_no_eol_lnum = 0;
++ ga_clear(&ga);
++ }
++
++ /* Close the handles to the subprocess, so that it goes away */
++ CloseHandle(pi.hThread);
++ CloseHandle(pi.hProcess);
++
++ return ret;
++ }
++
++ static int
++ mch_system(char *cmd, int options)
++ {
++ /* if we can pipe and the shelltemp option is off */
++ if (allowPiping && !p_stmp)
++ return mch_system_piped(cmd, options);
++ else
++ return mch_system_classic(cmd, options);
++ }
+ #else
+
+ # define mch_system(c, o) system(c)
+***************
+*** 3388,3394 ****
+ char_u *newcmd;
+ long_u cmdlen = (
+ #ifdef FEAT_GUI_W32
+! STRLEN(vimrun_path) +
+ #endif
+ STRLEN(p_sh) + STRLEN(p_shcf) + STRLEN(cmd) + 10);
+
+--- 3897,3903 ----
+ char_u *newcmd;
+ long_u cmdlen = (
+ #ifdef FEAT_GUI_W32
+! (allowPiping && !p_stmp ? 0 : STRLEN(vimrun_path)) +
+ #endif
+ STRLEN(p_sh) + STRLEN(p_shcf) + STRLEN(cmd) + 10);
+
+***************
+*** 3497,3503 ****
+ MB_ICONWARNING);
+ need_vimrun_warning = FALSE;
+ }
+! if (!s_dont_use_vimrun)
+ /* Use vimrun to execute the command. It opens a console
+ * window, which can be closed without killing Vim. */
+ vim_snprintf((char *)newcmd, cmdlen, "%s%s%s %s %s",
+--- 4006,4012 ----
+ MB_ICONWARNING);
+ need_vimrun_warning = FALSE;
+ }
+! if (!s_dont_use_vimrun && (!allowPiping || p_stmp))
+ /* Use vimrun to execute the command. It opens a console
+ * window, which can be closed without killing Vim. */
+ vim_snprintf((char *)newcmd, cmdlen, "%s%s%s %s %s",
+***************
+*** 3521,3527 ****
+ /* Print the return value, unless "vimrun" was used. */
+ if (x != 0 && !(options & SHELL_SILENT) && !emsg_silent
+ #if defined(FEAT_GUI_W32)
+! && ((options & SHELL_DOOUT) || s_dont_use_vimrun)
+ #endif
+ )
+ {
+--- 4030,4037 ----
+ /* Print the return value, unless "vimrun" was used. */
+ if (x != 0 && !(options & SHELL_SILENT) && !emsg_silent
+ #if defined(FEAT_GUI_W32)
+! && ((options & SHELL_DOOUT) || s_dont_use_vimrun
+! || (allowPiping && !p_stmp))
+ #endif
+ )
+ {
+*** ../vim-7.3.239/src/proto/misc2.pro 2011-07-07 15:08:53.000000000 +0200
+--- src/proto/misc2.pro 2011-07-07 15:56:16.000000000 +0200
+***************
+*** 58,63 ****
+--- 58,64 ----
+ char_u *ga_concat_strings __ARGS((garray_T *gap));
+ void ga_concat __ARGS((garray_T *gap, char_u *s));
+ void ga_append __ARGS((garray_T *gap, int c));
++ void append_ga_line __ARGS((garray_T *gap));
+ int name_to_mod_mask __ARGS((int c));
+ int simplify_key __ARGS((int key, int *modifiers));
+ int handle_x_keys __ARGS((int key));
+*** ../vim-7.3.239/src/ui.c 2011-06-19 01:14:23.000000000 +0200
+--- src/ui.c 2011-07-07 15:44:56.000000000 +0200
+***************
+*** 58,64 ****
+ #endif
+ }
+
+! #if defined(UNIX) || defined(VMS) || defined(PROTO)
+ /*
+ * When executing an external program, there may be some typed characters that
+ * are not consumed by it. Give them back to ui_inchar() and they are stored
+--- 58,64 ----
+ #endif
+ }
+
+! #if defined(UNIX) || defined(VMS) || defined(PROTO) || defined(WIN3264)
+ /*
+ * When executing an external program, there may be some typed characters that
+ * are not consumed by it. Give them back to ui_inchar() and they are stored
+*** ../vim-7.3.239/src/version.c 2011-07-07 15:08:53.000000000 +0200
+--- src/version.c 2011-07-07 16:14:20.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 240,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+257. Your "hundred-and-one" lists include well over 101 items, since you
+ automatically interpret all numbers in hexadecimal notation.
+ (hex 101 = decimal 257)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.241 b/source/ap/vim/patches/7.3.241
new file mode 100644
index 000000000..3b73c4de1
--- /dev/null
+++ b/source/ap/vim/patches/7.3.241
@@ -0,0 +1,71 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.241
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.241
+Problem: Using CTRL-R CTRL-W on the command line may insert only part of
+ the word.
+Solution: Use the cursor position instead of assuming it is at the end of
+ the command. (Tyru)
+Files: src/ex_getln.c
+
+
+*** ../vim-7.3.240/src/ex_getln.c 2011-07-07 15:04:38.000000000 +0200
+--- src/ex_getln.c 2011-07-07 16:38:50.000000000 +0200
+***************
+*** 3046,3052 ****
+ int len;
+
+ /* Locate start of last word in the cmd buffer. */
+! for (w = ccline.cmdbuff + ccline.cmdlen; w > ccline.cmdbuff; )
+ {
+ #ifdef FEAT_MBYTE
+ if (has_mbyte)
+--- 3046,3052 ----
+ int len;
+
+ /* Locate start of last word in the cmd buffer. */
+! for (w = ccline.cmdbuff + ccline.cmdpos; w > ccline.cmdbuff; )
+ {
+ #ifdef FEAT_MBYTE
+ if (has_mbyte)
+***************
+*** 3064,3070 ****
+ --w;
+ }
+ }
+! len = (int)((ccline.cmdbuff + ccline.cmdlen) - w);
+ if (p_ic ? STRNICMP(w, arg, len) == 0 : STRNCMP(w, arg, len) == 0)
+ p += len;
+ }
+--- 3064,3070 ----
+ --w;
+ }
+ }
+! len = (int)((ccline.cmdbuff + ccline.cmdpos) - w);
+ if (p_ic ? STRNICMP(w, arg, len) == 0 : STRNCMP(w, arg, len) == 0)
+ p += len;
+ }
+*** ../vim-7.3.240/src/version.c 2011-07-07 16:20:45.000000000 +0200
+--- src/version.c 2011-07-07 16:41:29.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 241,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+258. When you want to see your girlfriend, you surf to her homepage.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.242 b/source/ap/vim/patches/7.3.242
new file mode 100644
index 000000000..0cf4db920
--- /dev/null
+++ b/source/ap/vim/patches/7.3.242
@@ -0,0 +1,71 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.242
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.242
+Problem: Illegal memory access in after_pathsep().
+Solution: Check that the pointer is not at the start of the file name.
+ (Dominique Pelle)
+Files: src/misc2.c
+
+
+*** ../vim-7.3.241/src/misc2.c 2011-07-07 16:20:45.000000000 +0200
+--- src/misc2.c 2011-07-07 17:05:41.000000000 +0200
+***************
+*** 3247,3253 ****
+ #if defined(FEAT_MBYTE) || defined(PROTO)
+ /*
+ * Return TRUE if "p" points to just after a path separator.
+! * Take care of multi-byte characters.
+ * "b" must point to the start of the file name
+ */
+ int
+--- 3247,3253 ----
+ #if defined(FEAT_MBYTE) || defined(PROTO)
+ /*
+ * Return TRUE if "p" points to just after a path separator.
+! * Takes care of multi-byte characters.
+ * "b" must point to the start of the file name
+ */
+ int
+***************
+*** 3255,3261 ****
+ char_u *b;
+ char_u *p;
+ {
+! return vim_ispathsep(p[-1])
+ && (!has_mbyte || (*mb_head_off)(b, p - 1) == 0);
+ }
+ #endif
+--- 3255,3261 ----
+ char_u *b;
+ char_u *p;
+ {
+! return p > b && vim_ispathsep(p[-1])
+ && (!has_mbyte || (*mb_head_off)(b, p - 1) == 0);
+ }
+ #endif
+*** ../vim-7.3.241/src/version.c 2011-07-07 16:44:33.000000000 +0200
+--- src/version.c 2011-07-07 17:05:49.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 242,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+260. Co-workers have to E-mail you about the fire alarm to get
+ you out of the building.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.243 b/source/ap/vim/patches/7.3.243
new file mode 100644
index 000000000..f1f913d48
--- /dev/null
+++ b/source/ap/vim/patches/7.3.243
@@ -0,0 +1,52 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.243
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.243
+Problem: Illegal memory access in readline().
+Solution: Swap the conditions. (Dominique Pelle)
+Files: src/eval.c
+
+
+*** ../vim-7.3.242/src/eval.c 2011-07-07 16:20:45.000000000 +0200
+--- src/eval.c 2011-07-07 17:32:16.000000000 +0200
+***************
+*** 14318,14324 ****
+ tolist = 0;
+ for ( ; filtd < buflen || readlen <= 0; ++filtd)
+ {
+! if (buf[filtd] == '\n' || readlen <= 0)
+ {
+ /* In binary mode add an empty list item when the last
+ * non-empty line ends in a '\n'. */
+--- 14318,14324 ----
+ tolist = 0;
+ for ( ; filtd < buflen || readlen <= 0; ++filtd)
+ {
+! if (readlen <= 0 || buf[filtd] == '\n')
+ {
+ /* In binary mode add an empty list item when the last
+ * non-empty line ends in a '\n'. */
+*** ../vim-7.3.242/src/version.c 2011-07-07 17:15:29.000000000 +0200
+--- src/version.c 2011-07-07 17:32:30.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 243,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+261. You find diskettes in your pockets when doing laundry.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.244 b/source/ap/vim/patches/7.3.244
new file mode 100644
index 000000000..4cff94f2f
--- /dev/null
+++ b/source/ap/vim/patches/7.3.244
@@ -0,0 +1,48 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.244
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.244
+Problem: MS-Windows: Build problem with old compiler. (John Beckett)
+Solution: Only use HandleToLong() when available. (Mike Williams)
+Files: src/gui_w32.c
+
+
+*** ../vim-7.3.243/src/gui_w32.c 2011-05-25 21:18:02.000000000 +0200
+--- src/gui_w32.c 2011-07-07 17:42:36.000000000 +0200
+***************
+*** 1574,1579 ****
+--- 1574,1583 ----
+ #endif
+
+ #ifdef FEAT_EVAL
++ # if _MSC_VER < 1400
++ /* HandleToLong() only exists in compilers that can do 64 bit builds */
++ # define HandleToLong(h) ((long)(h))
++ # endif
+ /* set the v:windowid variable */
+ set_vim_var_nr(VV_WINDOWID, HandleToLong(s_hwnd));
+ #endif
+*** ../vim-7.3.243/src/version.c 2011-07-07 17:36:52.000000000 +0200
+--- src/version.c 2011-07-07 17:43:21.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 244,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+262. Your computer has it's own phone line - but your daughter doesn't.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.245 b/source/ap/vim/patches/7.3.245
new file mode 100644
index 000000000..b05fe433a
--- /dev/null
+++ b/source/ap/vim/patches/7.3.245
@@ -0,0 +1,81 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.245
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.245
+Problem: Python 3.2 libraries not correctly detected.
+Solution: Add the suffix to the library name. (Niclas Zeising)
+Files: src/auto/configure, src/configure.in
+
+
+*** ../vim-7.3.244/src/auto/configure 2011-06-13 01:32:42.000000000 +0200
+--- src/auto/configure 2011-07-13 17:57:05.000000000 +0200
+***************
+*** 5611,5617 ****
+ eof
+ eval "`cd ${PYTHON3_CONFDIR} && make -f "${tmp_mkf}" __ | sed '/ directory /d'`"
+ rm -f -- "${tmp_mkf}"
+! vi_cv_path_python3_plibs="-L${PYTHON3_CONFDIR} -lpython${vi_cv_var_python3_version}"
+ vi_cv_path_python3_plibs="${vi_cv_path_python3_plibs} ${python3_BASEMODLIBS} ${python3_LIBS} ${python3_SYSLIBS}"
+ vi_cv_path_python3_plibs=`echo $vi_cv_path_python3_plibs | sed s/-ltermcap//`
+ vi_cv_path_python3_plibs=`echo $vi_cv_path_python3_plibs | sed s/-lffi//`
+--- 5611,5617 ----
+ eof
+ eval "`cd ${PYTHON3_CONFDIR} && make -f "${tmp_mkf}" __ | sed '/ directory /d'`"
+ rm -f -- "${tmp_mkf}"
+! vi_cv_path_python3_plibs="-L${PYTHON3_CONFDIR} -lpython${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags}"
+ vi_cv_path_python3_plibs="${vi_cv_path_python3_plibs} ${python3_BASEMODLIBS} ${python3_LIBS} ${python3_SYSLIBS}"
+ vi_cv_path_python3_plibs=`echo $vi_cv_path_python3_plibs | sed s/-ltermcap//`
+ vi_cv_path_python3_plibs=`echo $vi_cv_path_python3_plibs | sed s/-lffi//`
+*** ../vim-7.3.244/src/configure.in 2011-06-13 01:32:42.000000000 +0200
+--- src/configure.in 2011-07-13 17:57:01.000000000 +0200
+***************
+*** 1068,1074 ****
+ dnl -- delete the lines from make about Entering/Leaving directory
+ eval "`cd ${PYTHON3_CONFDIR} && make -f "${tmp_mkf}" __ | sed '/ directory /d'`"
+ rm -f -- "${tmp_mkf}"
+! vi_cv_path_python3_plibs="-L${PYTHON3_CONFDIR} -lpython${vi_cv_var_python3_version}"
+ vi_cv_path_python3_plibs="${vi_cv_path_python3_plibs} ${python3_BASEMODLIBS} ${python3_LIBS} ${python3_SYSLIBS}"
+ dnl remove -ltermcap, it can conflict with an earlier -lncurses
+ vi_cv_path_python3_plibs=`echo $vi_cv_path_python3_plibs | sed s/-ltermcap//`
+--- 1068,1074 ----
+ dnl -- delete the lines from make about Entering/Leaving directory
+ eval "`cd ${PYTHON3_CONFDIR} && make -f "${tmp_mkf}" __ | sed '/ directory /d'`"
+ rm -f -- "${tmp_mkf}"
+! vi_cv_path_python3_plibs="-L${PYTHON3_CONFDIR} -lpython${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags}"
+ vi_cv_path_python3_plibs="${vi_cv_path_python3_plibs} ${python3_BASEMODLIBS} ${python3_LIBS} ${python3_SYSLIBS}"
+ dnl remove -ltermcap, it can conflict with an earlier -lncurses
+ vi_cv_path_python3_plibs=`echo $vi_cv_path_python3_plibs | sed s/-ltermcap//`
+*** ../vim-7.3.244/src/version.c 2011-07-07 17:43:37.000000000 +0200
+--- src/version.c 2011-07-15 13:09:17.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 245,
+ /**/
+
+
+--
+ When danger reared its ugly head,
+ He bravely turned his tail and fled
+ Yes, Brave Sir Robin turned about
+ And gallantly he chickened out
+ Bravely taking to his feet
+ He beat a very brave retreat
+ Bravest of the brave Sir Robin
+ Petrified of being dead
+ Soiled his pants then brave Sir Robin
+ Turned away and fled.
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.246 b/source/ap/vim/patches/7.3.246
new file mode 100644
index 000000000..d9982ea04
--- /dev/null
+++ b/source/ap/vim/patches/7.3.246
@@ -0,0 +1,55 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.246
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.246 (after 7.3.235)
+Problem: Repeating "f4" in "4444" skips one 4.
+Solution: Check the t_cmd flag. (Christian Brabandt)
+Files: src/search.c
+
+
+*** ../vim-7.3.245/src/search.c 2011-06-26 05:36:07.000000000 +0200
+--- src/search.c 2011-07-15 13:16:49.000000000 +0200
+***************
+*** 1585,1591 ****
+ /* Force a move of at least one char, so ";" and "," will move the
+ * cursor, even if the cursor is right in front of char we are looking
+ * at. */
+! if (vim_strchr(p_cpo, CPO_SCOLON) == NULL && count == 1)
+ stop = FALSE;
+ }
+
+--- 1585,1591 ----
+ /* Force a move of at least one char, so ";" and "," will move the
+ * cursor, even if the cursor is right in front of char we are looking
+ * at. */
+! if (vim_strchr(p_cpo, CPO_SCOLON) == NULL && count == 1 && t_cmd)
+ stop = FALSE;
+ }
+
+*** ../vim-7.3.245/src/version.c 2011-07-15 13:09:46.000000000 +0200
+--- src/version.c 2011-07-15 13:20:40.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 246,
+ /**/
+
+--
+ GALAHAD turns back. We see from his POV the lovely ZOOT standing by him
+ smiling enchantingly and a number of equally delectable GIRLIES draped
+ around in the seductively poulticed room. They look at him smilingly and
+ wave.
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.247 b/source/ap/vim/patches/7.3.247
new file mode 100644
index 000000000..a0cb566c7
--- /dev/null
+++ b/source/ap/vim/patches/7.3.247
@@ -0,0 +1,95 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.247
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.247
+Problem: Running tests changes the users viminfo file. Test for patch
+ 7.3.246 missing.
+Solution: Add "nviminfo" to the 'viminfo' option. Include the test.
+Files: src/testdir/test78.in, src/testdir/test81.in
+
+
+*** ../vim-7.3.246/src/testdir/test78.in 2011-06-13 01:07:22.000000000 +0200
+--- src/testdir/test78.in 2011-07-15 13:26:22.000000000 +0200
+***************
+*** 6,12 ****
+
+ STARTTEST
+ :so small.vim
+! :set nocp fileformat=unix undolevels=-1
+ :e! Xtest
+ ggdG
+ :let text = "\tabcdefghijklmnoparstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnoparstuvwxyz0123456789"
+--- 6,12 ----
+
+ STARTTEST
+ :so small.vim
+! :set nocp fileformat=unix undolevels=-1 viminfo+=nviminfo
+ :e! Xtest
+ ggdG
+ :let text = "\tabcdefghijklmnoparstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnoparstuvwxyz0123456789"
+*** ../vim-7.3.246/src/testdir/test81.in 2011-06-26 05:36:07.000000000 +0200
+--- src/testdir/test81.in 2011-07-15 13:25:00.000000000 +0200
+***************
+*** 1,10 ****
+ Test for t movement command and 'cpo-;' setting
+
+ STARTTEST
+! :set nocompatible
+ :set cpo-=;
+ /firstline/
+ j0tt;D
+ $Ty;D:set cpo+=;
+ j0tt;;D
+ $Ty;;D:?firstline?+1,$w! test.out
+--- 1,12 ----
+ Test for t movement command and 'cpo-;' setting
+
+ STARTTEST
+! :set nocompatible viminfo+=nviminfo
+ :set cpo-=;
+ /firstline/
+ j0tt;D
++ 0fz;D
++ $Fy;D
+ $Ty;D:set cpo+=;
+ j0tt;;D
+ $Ty;;D:?firstline?+1,$w! test.out
+***************
+*** 13,18 ****
+--- 15,22 ----
+
+ firstline
+ aaa two three four
++ zzz
++ yyy
+ bbb yee yoo four
+ ccc two three four
+ ddd yee yoo four
+*** ../vim-7.3.246/src/version.c 2011-07-15 13:21:24.000000000 +0200
+--- src/version.c 2011-07-15 13:31:14.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 247,
+ /**/
+
+--
+ZOOT: I'm afraid our life must seem very dull and quiet compared to yours.
+ We are but eightscore young blondes, all between sixteen and
+ nineteen-and-a-half, cut off in this castle, with no one to protect us.
+ Oooh. It is a lonely life ... bathing ... dressing ... undressing ...
+ making exciting underwear....
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.248 b/source/ap/vim/patches/7.3.248
new file mode 100644
index 000000000..6fbf3f6cd
--- /dev/null
+++ b/source/ap/vim/patches/7.3.248
@@ -0,0 +1,129 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.248
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.248
+Problem: PC Install instructions missing install instructions.
+Solution: Step-by-step explanation. (Michael Soyka)
+Files: src/INSTALLpc.txt
+
+
+*** ../vim-7.3.247/src/INSTALLpc.txt 2011-06-12 20:36:00.000000000 +0200
+--- src/INSTALLpc.txt 2011-07-15 13:49:46.000000000 +0200
+***************
+*** 11,19 ****
+ this, then you will get the default behavior as is documented, which should
+ be fine for most people.
+
+! With the exception of the last two sections (Windows 3.1 and MS-DOS),
+! this document assumes that you are building Vim for Win32
+! (Windows NT/2000/XP/2003/Vista and Windows 95/98/Me)
+
+
+ Contents:
+--- 11,19 ----
+ this, then you will get the default behavior as is documented, which should
+ be fine for most people.
+
+! With the exception of two sections (Windows 3.1 and MS-DOS), this document
+! assumes that you are building Vim for Win32 or later.
+! (Windows 95/98/Me/NT/2000/XP/2003/Vista/7)
+
+
+ Contents:
+***************
+*** 27,32 ****
+--- 27,35 ----
+ 8. Windows 3.1
+ 9. MS-DOS
+
++ 10. Installing after building from sources
++
++
+ The currently preferred method is using the free Visual C++ Toolkit 2008
+ |msvc-2008-express|, the produced binary runs on most MS-Windows systems. If
+ you need the executable to run on Windows 98 or ME, use the 2003 one
+***************
+*** 409,411 ****
+--- 412,470 ----
+
+ If you get all kinds of strange error messages when compiling, try adding
+ changing the file format from "unix" to "dos".
++
++
++ 10. Installing after building from sources
++ ==========================================
++
++ [provided by Michael Soyka]
++
++ After you've built the Vim binaries as described above, you're ready to
++ install Vim on your system. However, if you've obtained the Vim sources
++ using Mercurial or by downloading them as a unix tar file, you must first
++ create a "vim73" directory. If you instead downloaded the sources as
++ zip files, you can skip this setup as the zip archives already have the
++ correct directory structure.
++
++ A. Create a Vim "runtime" subdirectory named "vim73"
++ -----------------------------------------------------
++ If you obtained your Vim sources as zip files, you can skip this step.
++ Otherwise, continue reading.
++
++ Go to the directory that contains the Vim "src" and "runtime"
++ directories and create a new subdirectory named "vim73".
++
++ Copy the "runtime" files into "vim73":
++ copy runtime\* vim73
++
++ B. Copy the new binaries into the "vim73" directory
++ ----------------------------------------------------
++ Regardless of how you installed the Vim sources, you need to copy the
++ new binaries you created above into "vim73":
++
++ copy src\*.exe vim73
++ copy src\GvimExt\gvimext.dll vim73
++ copy src\xxd\xxd.exe vim73
++
++ C. Move the "vim73" directory into the Vim installation subdirectory
++ ---------------------------------------------------------------------
++ Move the "vim73" subdirectory into the subdirectory where you want Vim
++ to be installed. Typically, this subdirectory will be named "vim".
++ If you already have a "vim73" subdirectory in "vim", delete it first
++ by running its unstal.exe program.
++
++ D. Install Vim
++ ---------------
++ "cd" to your Vim installation subdirectory "vim\vim73" and run the
++ "install.exe" program. It will ask you a number of questions about
++ how you would like to have your Vim setup. Among these are:
++ - You can tell it to write a "_vimrc" file with your preferences in the
++ parent directory.
++ - It can also install an "Edit with Vim" entry in the Windows Explorer
++ popup menu.
++ - You can have it create batch files, so that you can run Vim from the
++ console or in a shell. You can select one of the directories in your
++ PATH or add the directory to PATH using the Windows Control Panel.
++ - Create entries for Vim on the desktop and in the Start menu.
++
++ Happy Vimming!
+*** ../vim-7.3.247/src/version.c 2011-07-15 13:33:17.000000000 +0200
+--- src/version.c 2011-07-15 13:51:03.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 248,
+ /**/
+
+--
+Linux is just like a wigwam: no Windows, no Gates and an Apache inside.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.249 b/source/ap/vim/patches/7.3.249
new file mode 100644
index 000000000..661f97977
--- /dev/null
+++ b/source/ap/vim/patches/7.3.249
@@ -0,0 +1,134 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.249
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.249
+Problem: Wrong indenting for array initializer.
+Solution: Detect '}' in a better way. (Lech Lorens)
+Files: src/misc1.c, src/testdir/test3.in, src/testdir/test3.ok
+
+
+*** ../vim-7.3.248/src/misc1.c 2011-06-12 21:51:01.000000000 +0200
+--- src/misc1.c 2011-07-15 14:06:44.000000000 +0200
+***************
+*** 7945,7952 ****
+ * If we're at the end of a block, skip to the start of
+ * that block.
+ */
+! curwin->w_cursor.col = 0;
+! if (*cin_skipcomment(l) == '}'
+ && (trypos = find_start_brace(ind_maxcomment))
+ != NULL) /* XXX */
+ {
+--- 7945,7951 ----
+ * If we're at the end of a block, skip to the start of
+ * that block.
+ */
+! if (find_last_paren(l, '{', '}')
+ && (trypos = find_start_brace(ind_maxcomment))
+ != NULL) /* XXX */
+ {
+*** ../vim-7.3.248/src/testdir/test3.in 2011-06-12 21:51:01.000000000 +0200
+--- src/testdir/test3.in 2011-07-15 14:03:41.000000000 +0200
+***************
+*** 1452,1457 ****
+--- 1452,1487 ----
+
+ STARTTEST
+ :set cino&
++ :set cino+=l1
++ 2kdd=][
++ ENDTEST
++
++ void func(void)
++ {
++ int tab[] =
++ {
++ 1, 2, 3,
++ 4, 5, 6};
++
++ printf("Indent this line correctly!\n");
++
++ switch (foo)
++ {
++ case bar:
++ printf("bar");
++ break;
++ case baz: {
++ printf("baz");
++ break;
++ }
++ case quux:
++ printf("But don't break the indentation of this instruction\n");
++ break;
++ }
++ }
++
++ STARTTEST
++ :set cino&
+ 2kdd=][
+ ENDTEST
+
+*** ../vim-7.3.248/src/testdir/test3.ok 2011-06-12 21:51:01.000000000 +0200
+--- src/testdir/test3.ok 2011-07-15 14:03:41.000000000 +0200
+***************
+*** 1310,1315 ****
+--- 1310,1340 ----
+
+ void func(void)
+ {
++ int tab[] =
++ {
++ 1, 2, 3,
++ 4, 5, 6};
++
++ printf("Indent this line correctly!\n");
++
++ switch (foo)
++ {
++ case bar:
++ printf("bar");
++ break;
++ case baz: {
++ printf("baz");
++ break;
++ }
++ case quux:
++ printf("But don't break the indentation of this instruction\n");
++ break;
++ }
++ }
++
++
++ void func(void)
++ {
+ cout << "a"
+ << "b"
+ << ") :"
+*** ../vim-7.3.248/src/version.c 2011-07-15 13:51:57.000000000 +0200
+--- src/version.c 2011-07-15 14:12:05.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 249,
+ /**/
+
+--
+ GALAHAD hurries to the door and pushes through it. As he leaves the room
+ we CUT TO the reverse to show that he is now in a room full of bathing
+ and romping GIRLIES, all innocent, wide-eyed and beautiful. They smile
+ enchantingly at him as he tries to keep walking without being diverted by
+ the lovely sights assaulting his eyeballs.
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.250 b/source/ap/vim/patches/7.3.250
new file mode 100644
index 000000000..fc33328bd
--- /dev/null
+++ b/source/ap/vim/patches/7.3.250
@@ -0,0 +1,104 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.250
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.250
+Problem: Python: Errors in Unicode characters not handled nicely.
+Solution: Add the surrogateescape error handler. (lilydjwg)
+Files: src/if_python3.c
+
+
+*** ../vim-7.3.249/src/if_python3.c 2011-06-26 19:13:33.000000000 +0200
+--- src/if_python3.c 2011-07-15 15:50:01.000000000 +0200
+***************
+*** 68,76 ****
+
+ static void init_structs(void);
+
+ #define PyInt Py_ssize_t
+ #define PyString_Check(obj) PyUnicode_Check(obj)
+! #define PyString_AsBytes(obj) PyUnicode_AsEncodedString(obj, (char *)ENC_OPT, NULL);
+ #define PyString_FreeBytes(obj) Py_XDECREF(bytes)
+ #define PyString_AsString(obj) PyBytes_AsString(obj)
+ #define PyString_Size(obj) PyBytes_GET_SIZE(bytes)
+--- 68,83 ----
+
+ static void init_structs(void);
+
++ /* The "surrogateescape" error handler is new in Python 3.1 */
++ #if PY_VERSION_HEX >= 0x030100f0
++ # define CODEC_ERROR_HANDLER "surrogateescape"
++ #else
++ # define CODEC_ERROR_HANDLER NULL
++ #endif
++
+ #define PyInt Py_ssize_t
+ #define PyString_Check(obj) PyUnicode_Check(obj)
+! #define PyString_AsBytes(obj) PyUnicode_AsEncodedString(obj, (char *)ENC_OPT, CODEC_ERROR_HANDLER);
+ #define PyString_FreeBytes(obj) Py_XDECREF(bytes)
+ #define PyString_AsString(obj) PyBytes_AsString(obj)
+ #define PyString_Size(obj) PyBytes_GET_SIZE(bytes)
+***************
+*** 661,668 ****
+
+ /* PyRun_SimpleString expects a UTF-8 string. Wrong encoding may cause
+ * SyntaxError (unicode error). */
+! cmdstr = PyUnicode_Decode(cmd, strlen(cmd), (char *)ENC_OPT, NULL);
+! cmdbytes = PyUnicode_AsEncodedString(cmdstr, "utf-8", NULL);
+ Py_XDECREF(cmdstr);
+ PyRun_SimpleString(PyBytes_AsString(cmdbytes));
+ Py_XDECREF(cmdbytes);
+--- 668,676 ----
+
+ /* PyRun_SimpleString expects a UTF-8 string. Wrong encoding may cause
+ * SyntaxError (unicode error). */
+! cmdstr = PyUnicode_Decode(cmd, strlen(cmd),
+! (char *)ENC_OPT, CODEC_ERROR_HANDLER);
+! cmdbytes = PyUnicode_AsEncodedString(cmdstr, "utf-8", CODEC_ERROR_HANDLER);
+ Py_XDECREF(cmdstr);
+ PyRun_SimpleString(PyBytes_AsString(cmdbytes));
+ Py_XDECREF(cmdbytes);
+***************
+*** 1463,1469 ****
+ }
+ *p = '\0';
+
+! result = PyUnicode_Decode(tmp, len, (char *)ENC_OPT, NULL);
+
+ vim_free(tmp);
+ return result;
+--- 1471,1477 ----
+ }
+ *p = '\0';
+
+! result = PyUnicode_Decode(tmp, len, (char *)ENC_OPT, CODEC_ERROR_HANDLER);
+
+ vim_free(tmp);
+ return result;
+*** ../vim-7.3.249/src/version.c 2011-07-15 14:12:25.000000000 +0200
+--- src/version.c 2011-07-15 15:46:19.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 250,
+ /**/
+
+--
+DINGO: You must spank her well and after you have spanked her you
+ may deal with her as you like and then ... spank me.
+AMAZING: And spank me!
+STUNNER: And me.
+LOVELY: And me.
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.251 b/source/ap/vim/patches/7.3.251
new file mode 100644
index 000000000..43aa41487
--- /dev/null
+++ b/source/ap/vim/patches/7.3.251
@@ -0,0 +1,184 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.251
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.251
+Problem: "gH<Del>" deletes the current line, except when it's the last
+ line.
+Solution: Set the "include" flag to indicate the last line is to be deleted.
+Files: src/normal.c, src/ops.c
+
+
+*** ../vim-7.3.250/src/normal.c 2011-07-07 15:08:53.000000000 +0200
+--- src/normal.c 2011-07-15 16:53:12.000000000 +0200
+***************
+*** 1795,1811 ****
+ {
+ oap->inclusive = FALSE;
+ /* Try to include the newline, unless it's an operator
+! * that works on lines only */
+! if (*p_sel != 'o'
+! && !op_on_lines(oap->op_type)
+! && oap->end.lnum < curbuf->b_ml.ml_line_count)
+ {
+! ++oap->end.lnum;
+! oap->end.col = 0;
+ # ifdef FEAT_VIRTUALEDIT
+! oap->end.coladd = 0;
+ # endif
+! ++oap->line_count;
+ }
+ }
+ }
+--- 1795,1819 ----
+ {
+ oap->inclusive = FALSE;
+ /* Try to include the newline, unless it's an operator
+! * that works on lines only. */
+! if (*p_sel != 'o' && !op_on_lines(oap->op_type))
+ {
+! if (oap->end.lnum < curbuf->b_ml.ml_line_count)
+! {
+! ++oap->end.lnum;
+! oap->end.col = 0;
+ # ifdef FEAT_VIRTUALEDIT
+! oap->end.coladd = 0;
+ # endif
+! ++oap->line_count;
+! }
+! else
+! {
+! /* Cannot move below the last line, make the op
+! * inclusive to tell the operation to include the
+! * line break. */
+! oap->inclusive = TRUE;
+! }
+ }
+ }
+ }
+*** ../vim-7.3.250/src/ops.c 2011-06-19 01:14:22.000000000 +0200
+--- src/ops.c 2011-07-15 17:28:28.000000000 +0200
+***************
+*** 1650,1656 ****
+ && oap->line_count > 1
+ && oap->op_type == OP_DELETE)
+ {
+! ptr = ml_get(oap->end.lnum) + oap->end.col + oap->inclusive;
+ ptr = skipwhite(ptr);
+ if (*ptr == NUL && inindent(0))
+ oap->motion_type = MLINE;
+--- 1650,1658 ----
+ && oap->line_count > 1
+ && oap->op_type == OP_DELETE)
+ {
+! ptr = ml_get(oap->end.lnum) + oap->end.col;
+! if (*ptr != NUL)
+! ptr += oap->inclusive;
+ ptr = skipwhite(ptr);
+ if (*ptr == NUL && inindent(0))
+ oap->motion_type = MLINE;
+***************
+*** 1920,1930 ****
+ curwin->w_cursor.coladd = 0;
+ }
+ #endif
+! (void)del_bytes((long)n, !virtual_op, oap->op_type == OP_DELETE
+ #ifdef FEAT_VISUAL
+ && !oap->is_VIsual
+ #endif
+ );
+ }
+ else /* delete characters between lines */
+ {
+--- 1922,1941 ----
+ curwin->w_cursor.coladd = 0;
+ }
+ #endif
+! if (oap->inclusive && oap->end.lnum == curbuf->b_ml.ml_line_count
+! && n > (int)STRLEN(ml_get(oap->end.lnum)))
+! {
+! /* Special case: gH<Del> deletes the last line. */
+! del_lines(1L, FALSE);
+! }
+! else
+! {
+! (void)del_bytes((long)n, !virtual_op, oap->op_type == OP_DELETE
+ #ifdef FEAT_VISUAL
+ && !oap->is_VIsual
+ #endif
+ );
++ }
+ }
+ else /* delete characters between lines */
+ {
+***************
+*** 1941,1957 ****
+ ++curwin->w_cursor.lnum;
+ del_lines((long)(oap->line_count - 2), FALSE);
+
+! /* delete from start of line until op_end */
+! curwin->w_cursor.col = 0;
+! (void)del_bytes((long)(oap->end.col + 1 - !oap->inclusive),
+! !virtual_op, oap->op_type == OP_DELETE
+ #ifdef FEAT_VISUAL
+ && !oap->is_VIsual
+ #endif
+ );
+! curwin->w_cursor = curpos; /* restore curwin->w_cursor */
+!
+! (void)do_join(2, FALSE, FALSE);
+ }
+ }
+
+--- 1952,1980 ----
+ ++curwin->w_cursor.lnum;
+ del_lines((long)(oap->line_count - 2), FALSE);
+
+! n = (oap->end.col + 1 - !oap->inclusive);
+! if (oap->inclusive && oap->end.lnum == curbuf->b_ml.ml_line_count
+! && n > (int)STRLEN(ml_get(oap->end.lnum)))
+! {
+! /* Special case: gH<Del> deletes the last line. */
+! del_lines(1L, FALSE);
+! curwin->w_cursor = curpos; /* restore curwin->w_cursor */
+! if (curwin->w_cursor.lnum > 1)
+! --curwin->w_cursor.lnum;
+! }
+! else
+! {
+! /* delete from start of line until op_end */
+! curwin->w_cursor.col = 0;
+! (void)del_bytes((long)n, !virtual_op, oap->op_type == OP_DELETE
+ #ifdef FEAT_VISUAL
+ && !oap->is_VIsual
+ #endif
+ );
+! curwin->w_cursor = curpos; /* restore curwin->w_cursor */
+! }
+! if (curwin->w_cursor.lnum < curbuf->b_ml.ml_line_count)
+! (void)do_join(2, FALSE, FALSE);
+ }
+ }
+
+*** ../vim-7.3.250/src/version.c 2011-07-15 15:54:39.000000000 +0200
+--- src/version.c 2011-07-15 17:35:18.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 251,
+ /**/
+
+--
+ ### Hiroshima 45, Chernobyl 86, Windows 95 ###
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.252 b/source/ap/vim/patches/7.3.252
new file mode 100644
index 000000000..e24b73be7
--- /dev/null
+++ b/source/ap/vim/patches/7.3.252
@@ -0,0 +1,43 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.252
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.252 (after 7.3.247)
+Problem: Tests fail. (David Northfield)
+Solution: Add missing update for .ok file.
+Files: src/testdir/test81.ok
+
+
+*** ../vim-7.3.251/src/testdir/test81.ok 2011-06-26 05:36:07.000000000 +0200
+--- src/testdir/test81.ok 2011-07-15 13:14:27.000000000 +0200
+***************
+*** 1,4 ****
+--- 1,6 ----
+ aaa two
++ z
++ y
+ bbb y
+ ccc
+ ddd yee y
+*** ../vim-7.3.251/src/version.c 2011-07-15 17:51:30.000000000 +0200
+--- src/version.c 2011-07-15 17:55:25.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 252,
+ /**/
+
+--
+You cannot propel yourself forward by patting yourself on the back.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.253 b/source/ap/vim/patches/7.3.253
new file mode 100644
index 000000000..70e415b5d
--- /dev/null
+++ b/source/ap/vim/patches/7.3.253
@@ -0,0 +1,539 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.253
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.253
+Problem: "echo 'abc' > ''" returns 0 or 1, depending on 'ignorecase'.
+ Checks in mb_strnicmp() for illegal and truncated bytes are
+ wrong. Should not assume that byte length is equal before case
+ folding.
+Solution: Add utf_safe_read_char_adv() and utf_strnicmp(). Add a test for
+ this. (Ivan Krasilnikov)
+Files: src/mbyte.c src/testdir/test82.in, src/testdir/test82.ok,
+ src/testdir/Makefile, src/testdir/Make_amiga.mak,
+ src/testdir/Make_dos.mak, src/testdir/Make_ming.mak,
+ src/testdir/Make_os2.mak, src/testdir/Make_vms.mms
+
+
+*** ../vim-7.3.252/src/mbyte.c 2011-07-07 15:08:53.000000000 +0200
+--- src/mbyte.c 2011-07-15 20:13:52.000000000 +0200
+***************
+*** 132,137 ****
+--- 132,138 ----
+ static int dbcs_char2cells __ARGS((int c));
+ static int dbcs_ptr2cells_len __ARGS((char_u *p, int size));
+ static int dbcs_ptr2char __ARGS((char_u *p));
++ static int utf_safe_read_char_adv __ARGS((char_u **s, size_t *n));
+
+ /*
+ * Lookup table to quickly get the length in bytes of a UTF-8 character from
+***************
+*** 1701,1706 ****
+--- 1702,1767 ----
+ }
+
+ /*
++ * Convert a UTF-8 byte sequence to a wide character.
++ * String is assumed to be terminated by NUL or after "n" bytes, whichever
++ * comes first.
++ * The function is safe in the sense that it never accesses memory beyond the
++ * first "n" bytes of "s".
++ *
++ * On success, returns decoded codepoint, advances "s" to the beginning of
++ * next character and decreases "n" accordingly.
++ *
++ * If end of string was reached, returns 0 and, if "n" > 0, advances "s" past
++ * NUL byte.
++ *
++ * If byte sequence is illegal or incomplete, returns -1 and does not advance
++ * "s".
++ */
++ static int
++ utf_safe_read_char_adv(s, n)
++ char_u **s;
++ size_t *n;
++ {
++ int c, k;
++
++ if (*n == 0) /* end of buffer */
++ return 0;
++
++ k = utf8len_tab_zero[**s];
++
++ if (k == 1)
++ {
++ /* ASCII character or NUL */
++ (*n)--;
++ return *(*s)++;
++ }
++
++ if ((size_t)k <= *n)
++ {
++ /* We have a multibyte sequence and it isn't truncated by buffer
++ * limits so utf_ptr2char() is safe to use. Or the first byte is
++ * illegal (k=0), and it's also safe to use utf_ptr2char(). */
++ c = utf_ptr2char(*s);
++
++ /* On failure, utf_ptr2char() returns the first byte, so here we
++ * check equality with the first byte. The only non-ASCII character
++ * which equals the first byte of its own UTF-8 representation is
++ * U+00C3 (UTF-8: 0xC3 0x83), so need to check that special case too.
++ * It's safe even if n=1, else we would have k=2 > n. */
++ if (c != (int)(**s) || (c == 0xC3 && (*s)[1] == 0x83))
++ {
++ /* byte sequence was successfully decoded */
++ *s += k;
++ *n -= k;
++ return c;
++ }
++ }
++
++ /* byte sequence is incomplete or illegal */
++ return -1;
++ }
++
++ /*
+ * Get character at **pp and advance *pp to the next character.
+ * Note: composing characters are skipped!
+ */
+***************
+*** 2667,2673 ****
+ {0x10400,0x10427,1,40}
+ };
+
+! static int utf_convert(int a, convertStruct table[], int tableSize);
+
+ /*
+ * Generic conversion function for case operations.
+--- 2728,2735 ----
+ {0x10400,0x10427,1,40}
+ };
+
+! static int utf_convert __ARGS((int a, convertStruct table[], int tableSize));
+! static int utf_strnicmp __ARGS((char_u *s1, char_u *s2, size_t n1, size_t n2));
+
+ /*
+ * Generic conversion function for case operations.
+***************
+*** 3079,3084 ****
+--- 3141,3220 ----
+ return (utf_tolower(a) != a);
+ }
+
++ static int
++ utf_strnicmp(s1, s2, n1, n2)
++ char_u *s1, *s2;
++ size_t n1, n2;
++ {
++ int c1, c2, cdiff;
++ char_u buffer[6];
++
++ for (;;)
++ {
++ c1 = utf_safe_read_char_adv(&s1, &n1);
++ c2 = utf_safe_read_char_adv(&s2, &n2);
++
++ if (c1 <= 0 || c2 <= 0)
++ break;
++
++ if (c1 == c2)
++ continue;
++
++ cdiff = utf_fold(c1) - utf_fold(c2);
++ if (cdiff != 0)
++ return cdiff;
++ }
++
++ /* some string ended or has an incomplete/illegal character sequence */
++
++ if (c1 == 0 || c2 == 0)
++ {
++ /* some string ended. shorter string is smaller */
++ if (c1 == 0 && c2 == 0)
++ return 0;
++ return c1 == 0 ? -1 : 1;
++ }
++
++ /* Continue with bytewise comparison to produce some result that
++ * would make comparison operations involving this function transitive.
++ *
++ * If only one string had an error, comparison should be made with
++ * folded version of the other string. In this case it is enough
++ * to fold just one character to determine the result of comparison. */
++
++ if (c1 != -1 && c2 == -1)
++ {
++ n1 = utf_char2bytes(utf_fold(c1), buffer);
++ s1 = buffer;
++ }
++ else if (c2 != -1 && c1 == -1)
++ {
++ n2 = utf_char2bytes(utf_fold(c2), buffer);
++ s2 = buffer;
++ }
++
++ while (n1 > 0 && n2 > 0 && *s1 != NUL && *s2 != NUL)
++ {
++ cdiff = (int)(*s1) - (int)(*s2);
++ if (cdiff != 0)
++ return cdiff;
++
++ s1++;
++ s2++;
++ n1--;
++ n2--;
++ }
++
++ if (n1 > 0 && *s1 == NUL)
++ n1 = 0;
++ if (n2 > 0 && *s2 == NUL)
++ n2 = 0;
++
++ if (n1 == 0 && n2 == 0)
++ return 0;
++ return n1 == 0 ? -1 : 1;
++ }
++
+ /*
+ * Version of strnicmp() that handles multi-byte characters.
+ * Needed for Big5, Sjift-JIS and UTF-8 encoding. Other DBCS encodings can
+***************
+*** 3092,3140 ****
+ char_u *s1, *s2;
+ size_t nn;
+ {
+! int i, j, l;
+ int cdiff;
+- int incomplete = FALSE;
+ int n = (int)nn;
+
+! for (i = 0; i < n; i += l)
+ {
+! if (s1[i] == NUL && s2[i] == NUL) /* both strings end */
+! return 0;
+! if (enc_utf8)
+! {
+! l = utf_byte2len(s1[i]);
+! if (l > n - i)
+! {
+! l = n - i; /* incomplete character */
+! incomplete = TRUE;
+! }
+! /* Check directly first, it's faster. */
+! for (j = 0; j < l; ++j)
+! {
+! if (s1[i + j] != s2[i + j])
+! break;
+! if (s1[i + j] == 0)
+! /* Both stings have the same bytes but are incomplete or
+! * have illegal bytes, accept them as equal. */
+! l = j;
+! }
+! if (j < l)
+! {
+! /* If one of the two characters is incomplete return -1. */
+! if (incomplete || i + utf_byte2len(s2[i]) > n)
+! return -1;
+! /* Don't case-fold illegal bytes or truncated characters. */
+! if (utf_ptr2len(s1 + i) < l || utf_ptr2len(s2 + i) < l)
+! return -1;
+! cdiff = utf_fold(utf_ptr2char(s1 + i))
+! - utf_fold(utf_ptr2char(s2 + i));
+! if (cdiff != 0)
+! return cdiff;
+! }
+! }
+! else
+ {
+ l = (*mb_ptr2len)(s1 + i);
+ if (l <= 1)
+ {
+--- 3228,3248 ----
+ char_u *s1, *s2;
+ size_t nn;
+ {
+! int i, l;
+ int cdiff;
+ int n = (int)nn;
+
+! if (enc_utf8)
+ {
+! return utf_strnicmp(s1, s2, nn, nn);
+! }
+! else
+! {
+! for (i = 0; i < n; i += l)
+ {
++ if (s1[i] == NUL && s2[i] == NUL) /* both strings end */
++ return 0;
++
+ l = (*mb_ptr2len)(s1 + i);
+ if (l <= 1)
+ {
+*** ../vim-7.3.252/src/testdir/test82.in 2011-07-15 21:16:03.000000000 +0200
+--- src/testdir/test82.in 2011-07-15 18:22:46.000000000 +0200
+***************
+*** 0 ****
+--- 1,93 ----
++ Tests for case-insensitive UTF-8 comparisons (utf_strnicmp() in mbyte.c)
++
++ STARTTEST
++ :so small.vim
++ :if !has("multi_byte")
++ : e! test.ok
++ : w! test.out
++ : qa!
++ :endif
++ :set enc=utf8
++ ggdG
++ :
++ :function! Ch(a, op, b, expected)
++ : if eval(printf('"%s" %s "%s"', a:a, a:op, a:b)) != a:expected
++ : call append(line('$'), printf('"%s" %s "%s" should return %d', a:a, a:op, a:b, a:expected))
++ : else
++ : let b:passed += 1
++ : endif
++ :endfunction
++ :
++ :function! Chk(a, b, result)
++ : if a:result == 0
++ : call Ch(a:a, '==?', a:b, 1)
++ : call Ch(a:a, '!=?', a:b, 0)
++ : call Ch(a:a, '<=?', a:b, 1)
++ : call Ch(a:a, '>=?', a:b, 1)
++ : call Ch(a:a, '<?', a:b, 0)
++ : call Ch(a:a, '>?', a:b, 0)
++ : elseif a:result > 0
++ : call Ch(a:a, '==?', a:b, 0)
++ : call Ch(a:a, '!=?', a:b, 1)
++ : call Ch(a:a, '<=?', a:b, 0)
++ : call Ch(a:a, '>=?', a:b, 1)
++ : call Ch(a:a, '<?', a:b, 0)
++ : call Ch(a:a, '>?', a:b, 1)
++ : else
++ : call Ch(a:a, '==?', a:b, 0)
++ : call Ch(a:a, '!=?', a:b, 1)
++ : call Ch(a:a, '<=?', a:b, 1)
++ : call Ch(a:a, '>=?', a:b, 0)
++ : call Ch(a:a, '<?', a:b, 1)
++ : call Ch(a:a, '>?', a:b, 0)
++ : endif
++ :endfunction
++ :
++ :function! Check(a, b, result)
++ : call Chk(a:a, a:b, a:result)
++ : call Chk(a:b, a:a, -a:result)
++ :endfunction
++ :
++ :function! LT(a, b)
++ : call Check(a:a, a:b, -1)
++ :endfunction
++ :
++ :function! GT(a, b)
++ : call Check(a:a, a:b, 1)
++ :endfunction
++ :
++ :function! EQ(a, b)
++ : call Check(a:a, a:b, 0)
++ :endfunction
++ :
++ :let b:passed=0
++ :call EQ('', '')
++ :call LT('', 'a')
++ :call EQ('abc', 'abc')
++ :call EQ('Abc', 'abC')
++ :call LT('ab', 'abc')
++ :call LT('AB', 'abc')
++ :call LT('ab', 'aBc')
++ :call EQ('\xd0\xb9\xd1\x86\xd1\x83\xd0\xba\xd0\xb5\xd0\xbd', '\xd0\xb9\xd0\xa6\xd0\xa3\xd0\xba\xd0\x95\xd0\xbd')
++ :call LT('\xd0\xb9\xd1\x86\xd1\x83\xd0\xba\xd0\xb5\xd0\xbd', '\xd0\xaf\xd1\x86\xd1\x83\xd0\xba\xd0\xb5\xd0\xbd')
++ :call EQ('\xe2\x84\xaa', 'k')
++ :call LT('\xe2\x84\xaa', 'kkkkkk')
++ :call EQ('\xe2\x84\xaa\xe2\x84\xaa\xe2\x84\xaa', 'kkk')
++ :call LT('kk', '\xe2\x84\xaa\xe2\x84\xaa\xe2\x84\xaa')
++ :call EQ('\xe2\x84\xaa\xe2\x84\xa6k\xe2\x84\xaak\xcf\x89', 'k\xcf\x89\xe2\x84\xaakk\xe2\x84\xa6')
++ :call EQ('Abc\x80', 'AbC\x80')
++ :call LT('Abc\x80', 'AbC\x81')
++ :call LT('Abc', 'AbC\x80')
++ :call LT('abc\x80DEF', 'abc\x80def') " case folding stops at the first bad character
++ :call LT('\xc3XYZ', '\xc3xyz')
++ :call EQ('\xef\xbc\xba', '\xef\xbd\x9a') " FF3A (upper), FF5A (lower)
++ :call GT('\xef\xbc\xba', '\xef\xbc\xff') " first string is ok and equals \xef\xbd\x9a after folding, second string is illegal and was left unchanged, then the strings were bytewise compared
++ :call LT('\xc3', '\xc3\x83')
++ :call EQ('\xc3\xa3xYz', '\xc3\x83XyZ')
++ :for n in range(0x60, 0xFF) | call LT(printf('xYz\x%.2X', n-1), printf('XyZ\x%.2X', n)) | endfor
++ :for n in range(0x80, 0xBF) | call EQ(printf('xYz\xc2\x%.2XUvW', n), printf('XyZ\xc2\x%.2XuVw', n)) | endfor
++ :for n in range(0xC0, 0xFF) | call LT(printf('xYz\xc2\x%.2XUvW', n), printf('XyZ\xc2\x%.2XuVw', n)) | endfor
++ :call append(0, printf('%d checks passed', b:passed))
++ :wq! test.out
++ ENDTEST
++
+*** ../vim-7.3.252/src/testdir/test82.ok 2011-07-15 21:16:03.000000000 +0200
+--- src/testdir/test82.ok 2011-07-15 18:37:33.000000000 +0200
+***************
+*** 0 ****
+--- 1,2 ----
++ 3732 checks passed
++
+*** ../vim-7.3.252/src/testdir/Makefile 2011-06-26 05:36:07.000000000 +0200
+--- src/testdir/Makefile 2011-07-15 18:30:08.000000000 +0200
+***************
+*** 26,32 ****
+ test64.out test65.out test66.out test67.out test68.out \
+ test69.out test70.out test71.out test72.out test73.out \
+ test74.out test75.out test76.out test77.out test78.out \
+! test79.out test80.out test81.out
+
+ SCRIPTS_GUI = test16.out
+
+--- 26,32 ----
+ test64.out test65.out test66.out test67.out test68.out \
+ test69.out test70.out test71.out test72.out test73.out \
+ test74.out test75.out test76.out test77.out test78.out \
+! test79.out test80.out test81.out test82.out
+
+ SCRIPTS_GUI = test16.out
+
+*** ../vim-7.3.252/src/testdir/Make_amiga.mak 2011-06-26 05:36:07.000000000 +0200
+--- src/testdir/Make_amiga.mak 2011-07-15 18:29:50.000000000 +0200
+***************
+*** 29,35 ****
+ test66.out test67.out test68.out test69.out test70.out \
+ test71.out test72.out test73.out test74.out test75.out \
+ test76.out test77.out test78.out test79.out test80.out \
+! test81.out
+
+ .SUFFIXES: .in .out
+
+--- 29,35 ----
+ test66.out test67.out test68.out test69.out test70.out \
+ test71.out test72.out test73.out test74.out test75.out \
+ test76.out test77.out test78.out test79.out test80.out \
+! test81.out test82.out
+
+ .SUFFIXES: .in .out
+
+***************
+*** 130,132 ****
+--- 130,133 ----
+ test79.out: test79.in
+ test80.out: test80.in
+ test81.out: test81.in
++ test82.out: test82.in
+*** ../vim-7.3.252/src/testdir/Make_dos.mak 2011-06-26 05:36:07.000000000 +0200
+--- src/testdir/Make_dos.mak 2011-07-15 18:30:02.000000000 +0200
+***************
+*** 29,35 ****
+ test42.out test52.out test65.out test66.out test67.out \
+ test68.out test69.out test71.out test72.out test73.out \
+ test74.out test75.out test76.out test77.out test78.out \
+! test79.out test80.out test81.out
+
+ SCRIPTS32 = test50.out test70.out
+
+--- 29,35 ----
+ test42.out test52.out test65.out test66.out test67.out \
+ test68.out test69.out test71.out test72.out test73.out \
+ test74.out test75.out test76.out test77.out test78.out \
+! test79.out test80.out test81.out test82.out
+
+ SCRIPTS32 = test50.out test70.out
+
+*** ../vim-7.3.252/src/testdir/Make_ming.mak 2011-06-26 05:36:07.000000000 +0200
+--- src/testdir/Make_ming.mak 2011-07-15 18:30:15.000000000 +0200
+***************
+*** 49,55 ****
+ test42.out test52.out test65.out test66.out test67.out \
+ test68.out test69.out test71.out test72.out test73.out \
+ test74.out test75.out test76.out test77.out test78.out \
+! test79.out test80.out test81.out
+
+ SCRIPTS32 = test50.out test70.out
+
+--- 49,55 ----
+ test42.out test52.out test65.out test66.out test67.out \
+ test68.out test69.out test71.out test72.out test73.out \
+ test74.out test75.out test76.out test77.out test78.out \
+! test79.out test80.out test81.out test82.out
+
+ SCRIPTS32 = test50.out test70.out
+
+*** ../vim-7.3.252/src/testdir/Make_os2.mak 2011-06-26 05:36:07.000000000 +0200
+--- src/testdir/Make_os2.mak 2011-07-15 18:30:25.000000000 +0200
+***************
+*** 29,35 ****
+ test66.out test67.out test68.out test69.out test70.out \
+ test71.out test72.out test73.out test74.out test75.out \
+ test76.out test77.out test78.out test79.out test80.out \
+! test81.out
+
+ .SUFFIXES: .in .out
+
+--- 29,35 ----
+ test66.out test67.out test68.out test69.out test70.out \
+ test71.out test72.out test73.out test74.out test75.out \
+ test76.out test77.out test78.out test79.out test80.out \
+! test81.out test82.out
+
+ .SUFFIXES: .in .out
+
+*** ../vim-7.3.252/src/testdir/Make_vms.mms 2011-06-26 05:36:07.000000000 +0200
+--- src/testdir/Make_vms.mms 2011-07-15 18:30:33.000000000 +0200
+***************
+*** 4,10 ****
+ # Authors: Zoltan Arpadffy, <arpadffy@polarhome.com>
+ # Sandor Kopanyi, <sandor.kopanyi@mailbox.hu>
+ #
+! # Last change: 2011 Jun 26
+ #
+ # This has been tested on VMS 6.2 to 8.3 on DEC Alpha, VAX and IA64.
+ # Edit the lines in the Configuration section below to select.
+--- 4,10 ----
+ # Authors: Zoltan Arpadffy, <arpadffy@polarhome.com>
+ # Sandor Kopanyi, <sandor.kopanyi@mailbox.hu>
+ #
+! # Last change: 2011 Jul 15
+ #
+ # This has been tested on VMS 6.2 to 8.3 on DEC Alpha, VAX and IA64.
+ # Edit the lines in the Configuration section below to select.
+***************
+*** 75,81 ****
+ test61.out test62.out test63.out test64.out test65.out \
+ test66.out test67.out test68.out test69.out \
+ test71.out test72.out test74.out test75.out test76.out \
+! test77.out test78.out test79.out test80.out test81.out
+
+ # Known problems:
+ # Test 30: a problem around mac format - unknown reason
+--- 75,82 ----
+ test61.out test62.out test63.out test64.out test65.out \
+ test66.out test67.out test68.out test69.out \
+ test71.out test72.out test74.out test75.out test76.out \
+! test77.out test78.out test79.out test80.out test81.out \
+! test82.out
+
+ # Known problems:
+ # Test 30: a problem around mac format - unknown reason
+*** ../vim-7.3.252/src/version.c 2011-07-15 17:56:11.000000000 +0200
+--- src/version.c 2011-07-15 21:12:26.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 253,
+ /**/
+
+--
+"Intelligence has much less practical application than you'd think."
+ -- Scott Adams, Dilbert.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.254 b/source/ap/vim/patches/7.3.254
new file mode 100644
index 000000000..85176a7a6
--- /dev/null
+++ b/source/ap/vim/patches/7.3.254
@@ -0,0 +1,47 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.254
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.254
+Problem: The coladd field is not reset when setting the line number for a
+ ":call" command.
+Solution: Reset it.
+Files: src/eval.c
+
+
+*** ../vim-7.3.253/src/eval.c 2011-07-07 17:36:52.000000000 +0200
+--- src/eval.c 2011-07-07 17:51:42.000000000 +0200
+***************
+*** 3430,3435 ****
+--- 3430,3438 ----
+ {
+ curwin->w_cursor.lnum = lnum;
+ curwin->w_cursor.col = 0;
++ #ifdef FEAT_VIRTUALEDIT
++ curwin->w_cursor.coladd = 0;
++ #endif
+ }
+ arg = startarg;
+ if (get_func_tv(name, (int)STRLEN(name), &rettv, &arg,
+*** ../vim-7.3.253/src/version.c 2011-07-15 21:16:54.000000000 +0200
+--- src/version.c 2011-07-15 21:23:16.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 254,
+ /**/
+
+--
+Eight Megabytes And Continually Swapping.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.255 b/source/ap/vim/patches/7.3.255
new file mode 100644
index 000000000..c01a585ec
--- /dev/null
+++ b/source/ap/vim/patches/7.3.255
@@ -0,0 +1,81 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.255
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.255
+Problem: When editing a file such as "File[2010-08-15].vim" an E16 error is
+ given. (Manuel Stol)
+Solution: Don't give an error for failing to compile the regexp.
+Files: src/ex_docmd.c, src/misc1.c, src/vim.h
+
+
+*** ../vim-7.3.254/src/ex_docmd.c 2011-06-13 01:19:48.000000000 +0200
+--- src/ex_docmd.c 2011-07-20 14:48:01.000000000 +0200
+***************
+*** 7069,7075 ****
+ old_arg_count = GARGCOUNT;
+ if (expand_wildcards(old_arg_count, old_arg_files,
+ &new_arg_file_count, &new_arg_files,
+! EW_FILE|EW_NOTFOUND|EW_ADDSLASH) == OK
+ && new_arg_file_count > 0)
+ {
+ alist_set(&global_alist, new_arg_file_count, new_arg_files,
+--- 7069,7075 ----
+ old_arg_count = GARGCOUNT;
+ if (expand_wildcards(old_arg_count, old_arg_files,
+ &new_arg_file_count, &new_arg_files,
+! EW_FILE|EW_NOTFOUND|EW_ADDSLASH|EW_NOERROR) == OK
+ && new_arg_file_count > 0)
+ {
+ alist_set(&global_alist, new_arg_file_count, new_arg_files,
+*** ../vim-7.3.254/src/misc1.c 2011-07-15 14:12:25.000000000 +0200
+--- src/misc1.c 2011-07-20 14:55:09.000000000 +0200
+***************
+*** 9043,9050 ****
+--- 9043,9054 ----
+ }
+
+ /* compile the regexp into a program */
++ if (flags & EW_NOERROR)
++ ++emsg_silent;
+ regmatch.rm_ic = TRUE; /* Always ignore case */
+ regmatch.regprog = vim_regcomp(pat, RE_MAGIC);
++ if (flags & EW_NOERROR)
++ --emsg_silent;
+ vim_free(pat);
+
+ if (regmatch.regprog == NULL)
+*** ../vim-7.3.254/src/vim.h 2011-06-13 02:03:55.000000000 +0200
+--- src/vim.h 2011-07-20 14:50:13.000000000 +0200
+***************
+*** 815,820 ****
+--- 815,821 ----
+ #define EW_EXEC 0x40 /* executable files */
+ #define EW_PATH 0x80 /* search in 'path' too */
+ #define EW_ICASE 0x100 /* ignore case */
++ #define EW_NOERROR 0x200 /* no error for bad regexp */
+ /* Note: mostly EW_NOTFOUND and EW_SILENT are mutually exclusive: EW_NOTFOUND
+ * is used when executing commands and EW_SILENT for interactive expanding. */
+
+*** ../vim-7.3.254/src/version.c 2011-07-15 21:24:06.000000000 +0200
+--- src/version.c 2011-07-20 15:03:52.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 255,
+ /**/
+
+--
+Not too long ago, a program was something you watched on TV...
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.256 b/source/ap/vim/patches/7.3.256
new file mode 100644
index 000000000..b8c9f00d1
--- /dev/null
+++ b/source/ap/vim/patches/7.3.256
@@ -0,0 +1,322 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.256
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.256
+Problem: Javascript indenting not sufficiently tested.
+Solution: Add more tests. (Luc Deschenaux) Mark the lines that are indented
+ wrong.
+Files: src/testdir/test3.in, src/testdir/test3.ok
+
+
+*** ../vim-7.3.255/src/testdir/test3.in 2011-07-15 14:12:25.000000000 +0200
+--- src/testdir/test3.in 2011-07-15 21:05:49.000000000 +0200
+***************
+*** 1592,1598 ****
+
+
+ STARTTEST
+! :set cino=J1
+ /^JSSTART
+ =/^JSEND
+ ENDTEST
+--- 1592,1598 ----
+
+
+ STARTTEST
+! :set cino=j1,J1
+ /^JSSTART
+ =/^JSEND
+ ENDTEST
+***************
+*** 1613,1618 ****
+--- 1613,1757 ----
+ JSEND
+
+ STARTTEST
++ :set cino=j1,J1
++ /^JSSTART
++ =/^JSEND
++ ENDTEST
++
++ JSSTART
++ var foo = [
++ 1, // indent 8 more
++ 2,
++ 3
++ ]; // indent 8 less
++ JSEND
++
++ STARTTEST
++ :set cino=j1,J1
++ /^JSSTART
++ =/^JSEND
++ ENDTEST
++
++ JSSTART
++ function bar() {
++ var foo = [
++ 1,
++ 2,
++ 3
++ ]; // indent 16 less
++ }
++ JSEND
++
++ STARTTEST
++ :set cino=j1,J1
++ /^JSSTART
++ =/^JSEND
++ ENDTEST
++
++ JSSTART
++ (function($){
++
++ var class_name='myclass';
++
++ function private_method() {
++ }
++
++ var public_method={
++ method: function(options,args){
++ private_method();
++ }
++ }
++
++ function init(options) {
++
++ $(this).data(class_name+'_public',$.extend({},{
++ foo: 'bar',
++ bar: 2, // indent 8 more
++ foobar: [ // indent 8 more
++ 1, // indent 8 more
++ 2, // indent 16 more
++ 3 // indent 16 more
++ ],
++ callback: function(){ // indent 8 more
++ return true; // indent 8 more
++ } // indent 8 more
++ }, options||{}));
++ }
++
++ $.fn[class_name]=function() {
++
++ var _arguments=arguments;
++ return this.each(function(){
++
++ var options=$(this).data(class_name+'_public');
++ if (!options) {
++ init.apply(this,_arguments);
++
++ } else {
++ var method=public_method[_arguments[0]];
++
++ if (typeof(method)!='function') {
++ console.log(class_name+' has no method "'+_arguments[0]+'"');
++ return false;
++ }
++ _arguments[0]=options;
++ method.apply(this,_arguments);
++ }
++ });
++ }
++
++ })(jQuery);
++ JSEND
++
++ STARTTEST
++ :set cino=j1,J1
++ /^JSSTART
++ =/^JSEND
++ ENDTEST
++
++ JSSTART
++ function init(options) {
++ $(this).data(class_name+'_public',$.extend({},{
++ foo: 'bar',
++ bar: 2,
++ foobar: [
++ 1, // indent 8 more
++ 2, // indent 8 more
++ 3 // indent 8 more
++ ],
++ callback: function(){
++ return true;
++ }
++ }, options||{}));
++ }
++ JSEND
++
++ STARTTEST
++ :set cino=j1,J1
++ /^JSSTART
++ =/^JSEND
++ ENDTEST
++
++ JSSTART
++ (function($){
++ function init(options) {
++ $(this).data(class_name+'_public',$.extend({},{
++ foo: 'bar',
++ bar: 2, // indent 8 more
++ foobar: [ // indent 8 more
++ 1, // indent 8 more
++ 2, // indent 16 more
++ 3 // indent 16 more
++ ],
++ callback: function(){ // indent 8 more
++ return true; // indent 8 more
++ } // indent 8 more
++ }, options||{}));
++ }
++ })(jQuery);
++ JSEND
++
++ STARTTEST
+ :g/^STARTTEST/.,/^ENDTEST/d
+ :1;/start of AUTO/,$wq! test.out
+ ENDTEST
+*** ../vim-7.3.255/src/testdir/test3.ok 2011-07-15 14:12:25.000000000 +0200
+--- src/testdir/test3.ok 2011-07-15 21:06:38.000000000 +0200
+***************
+*** 1443,1445 ****
+--- 1443,1559 ----
+ }
+ JSEND
+
++
++ JSSTART
++ var foo = [
++ 1, // indent 8 more
++ 2,
++ 3
++ ]; // indent 8 less
++ JSEND
++
++
++ JSSTART
++ function bar() {
++ var foo = [
++ 1,
++ 2,
++ 3
++ ]; // indent 16 less
++ }
++ JSEND
++
++
++ JSSTART
++ (function($){
++
++ var class_name='myclass';
++
++ function private_method() {
++ }
++
++ var public_method={
++ method: function(options,args){
++ private_method();
++ }
++ }
++
++ function init(options) {
++
++ $(this).data(class_name+'_public',$.extend({},{
++ foo: 'bar',
++ bar: 2, // indent 8 more
++ foobar: [ // indent 8 more
++ 1, // indent 8 more
++ 2, // indent 16 more
++ 3 // indent 16 more
++ ],
++ callback: function(){ // indent 8 more
++ return true; // indent 8 more
++ } // indent 8 more
++ }, options||{}));
++ }
++
++ $.fn[class_name]=function() {
++
++ var _arguments=arguments;
++ return this.each(function(){
++
++ var options=$(this).data(class_name+'_public');
++ if (!options) {
++ init.apply(this,_arguments);
++
++ } else {
++ var method=public_method[_arguments[0]];
++
++ if (typeof(method)!='function') {
++ console.log(class_name+' has no method "'+_arguments[0]+'"');
++ return false;
++ }
++ _arguments[0]=options;
++ method.apply(this,_arguments);
++ }
++ });
++ }
++
++ })(jQuery);
++ JSEND
++
++
++ JSSTART
++ function init(options) {
++ $(this).data(class_name+'_public',$.extend({},{
++ foo: 'bar',
++ bar: 2,
++ foobar: [
++ 1, // indent 8 more
++ 2, // indent 8 more
++ 3 // indent 8 more
++ ],
++ callback: function(){
++ return true;
++ }
++ }, options||{}));
++ }
++ JSEND
++
++
++ JSSTART
++ (function($){
++ function init(options) {
++ $(this).data(class_name+'_public',$.extend({},{
++ foo: 'bar',
++ bar: 2, // indent 8 more
++ foobar: [ // indent 8 more
++ 1, // indent 8 more
++ 2, // indent 16 more
++ 3 // indent 16 more
++ ],
++ callback: function(){ // indent 8 more
++ return true; // indent 8 more
++ } // indent 8 more
++ }, options||{}));
++ }
++ })(jQuery);
++ JSEND
++
+*** ../vim-7.3.255/src/version.c 2011-07-20 15:04:52.000000000 +0200
+--- src/version.c 2011-07-20 15:08:13.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 256,
+ /**/
+
+--
+Not too long ago, a keyboard was something to make music with...
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.257 b/source/ap/vim/patches/7.3.257
new file mode 100644
index 000000000..f6292bf8d
--- /dev/null
+++ b/source/ap/vim/patches/7.3.257
@@ -0,0 +1,97 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.257
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.257
+Problem: Not all completions are available to user commands.
+Solution: Add "color", "compiler", "file_in_path" and "locale". (Dominique
+ Pelle)
+Files: src/ex_docmd.c, runtime/doc/map.txt
+
+
+*** ../vim-7.3.256/src/ex_docmd.c 2011-07-20 15:04:52.000000000 +0200
+--- src/ex_docmd.c 2011-07-20 16:10:28.000000000 +0200
+***************
+*** 5297,5303 ****
+--- 5297,5305 ----
+ {
+ {EXPAND_AUGROUP, "augroup"},
+ {EXPAND_BUFFERS, "buffer"},
++ {EXPAND_COLORS, "color"},
+ {EXPAND_COMMANDS, "command"},
++ {EXPAND_COMPILER, "compiler"},
+ #if defined(FEAT_CSCOPE)
+ {EXPAND_CSCOPE, "cscope"},
+ #endif
+***************
+*** 5310,5319 ****
+--- 5312,5326 ----
+ {EXPAND_EVENTS, "event"},
+ {EXPAND_EXPRESSION, "expression"},
+ {EXPAND_FILES, "file"},
++ {EXPAND_FILES_IN_PATH, "file_in_path"},
+ {EXPAND_FILETYPE, "filetype"},
+ {EXPAND_FUNCTIONS, "function"},
+ {EXPAND_HELP, "help"},
+ {EXPAND_HIGHLIGHT, "highlight"},
++ #if (defined(HAVE_LOCALE_H) || defined(X_LOCALE)) \
++ && (defined(FEAT_GETTEXT) || defined(FEAT_MBYTE))
++ {EXPAND_LOCALES, "locale"},
++ #endif
+ {EXPAND_MAPPINGS, "mapping"},
+ {EXPAND_MENUS, "menu"},
+ {EXPAND_OWNSYNTAX, "syntax"},
+*** ../vim-7.3.256/runtime/doc/map.txt 2011-05-19 17:25:36.000000000 +0200
+--- runtime/doc/map.txt 2011-07-20 16:10:28.000000000 +0200
+***************
+*** 1202,1221 ****
+--- 1211,1236 ----
+
+ -complete=augroup autocmd groups
+ -complete=buffer buffer names
++ -complete=color color schemes
+ -complete=command Ex command (and arguments)
++ -complete=compiler compilers
++ -complete=cscope |:cscope| suboptions
+ -complete=dir directory names
+ -complete=environment environment variable names
+ -complete=event autocommand events
+ -complete=expression Vim expression
+ -complete=file file and directory names
++ -complete=file_in_path file and directory names in |'path'|
+ -complete=filetype filetype names |'filetype'|
+ -complete=function function name
+ -complete=help help subjects
+ -complete=highlight highlight groups
++ -complete=locale locale names (as output of locale -a)
+ -complete=mapping mapping name
+ -complete=menu menus
+ -complete=option options
+ -complete=shellcmd Shell command
++ -complete=sign |:sign| suboptions
+ -complete=syntax syntax file names |'syntax'|
+ -complete=tag tags
+ -complete=tag_listfiles tags, file names are shown when CTRL-D is hit
+*** ../vim-7.3.256/src/version.c 2011-07-20 15:09:38.000000000 +0200
+--- src/version.c 2011-07-20 16:30:31.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 257,
+ /**/
+
+--
+I have to exercise early in the morning before my brain
+figures out what I'm doing.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.258 b/source/ap/vim/patches/7.3.258
new file mode 100644
index 000000000..277cbe774
--- /dev/null
+++ b/source/ap/vim/patches/7.3.258
@@ -0,0 +1,70 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.258
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.258
+Problem: MS-Windows: The edit with existing vim context menu entries can be
+ unwanted.
+Solution: Let a registry entry disable them. (Jerome Vuarand)
+Files: src/GvimExt/gvimext.cpp
+
+
+*** ../vim-7.3.257/src/GvimExt/gvimext.cpp 2010-08-15 21:57:29.000000000 +0200
+--- src/GvimExt/gvimext.cpp 2011-07-20 16:48:09.000000000 +0200
+***************
+*** 586,593 ****
+
+ // Initialize m_cntOfHWnd to 0
+ m_cntOfHWnd = 0;
+! // Retrieve all the vim instances
+! EnumWindows(EnumWindowsProc, (LPARAM)this);
+
+ if (cbFiles > 1)
+ {
+--- 586,608 ----
+
+ // Initialize m_cntOfHWnd to 0
+ m_cntOfHWnd = 0;
+!
+! HKEY keyhandle;
+! bool showExisting = true;
+!
+! // Check whether "Edit with existing Vim" entries are disabled.
+! if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software\\Vim\\Gvim", 0,
+! KEY_READ, &keyhandle) == ERROR_SUCCESS)
+! {
+! if (RegQueryValueEx(keyhandle, "DisableEditWithExisting", 0, NULL,
+! NULL, NULL) == ERROR_SUCCESS)
+! showExisting = false;
+! RegCloseKey(keyhandle);
+! }
+!
+! // Retrieve all the vim instances, unless disabled.
+! if (showExisting)
+! EnumWindows(EnumWindowsProc, (LPARAM)this);
+
+ if (cbFiles > 1)
+ {
+*** ../vim-7.3.257/src/version.c 2011-07-20 16:36:35.000000000 +0200
+--- src/version.c 2011-07-20 16:54:34.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 258,
+ /**/
+
+--
+What the word 'politics' means: 'Poli' in Latin meaning 'many' and 'tics'
+meaning 'bloodsucking creatures'.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.259 b/source/ap/vim/patches/7.3.259
new file mode 100644
index 000000000..91f9dfa13
--- /dev/null
+++ b/source/ap/vim/patches/7.3.259
@@ -0,0 +1,503 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.259
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.259
+Problem: Equivalence classes only work for latin characters.
+Solution: Add the Unicode equivalence characters. (Dominique Pelle)
+Files: runtime/doc/pattern.txt, src/regexp.c, src/testdir/test44.in,
+ src/testdir/test44.ok
+
+
+*** ../vim-7.3.258/runtime/doc/pattern.txt 2010-08-15 21:57:14.000000000 +0200
+--- runtime/doc/pattern.txt 2011-07-20 17:44:03.000000000 +0200
+***************
+*** 1027,1037 ****
+ These items only work for 8-bit characters.
+ */[[=* *[==]*
+ - An equivalence class. This means that characters are matched that
+! have almost the same meaning, e.g., when ignoring accents. The form
+! is:
+ [=a=]
+- Currently this is only implemented for latin1. Also works for the
+- latin1 characters in utf-8 and latin9.
+ */[[.* *[..]*
+ - A collation element. This currently simply accepts a single
+ character in the form:
+--- 1036,1044 ----
+ These items only work for 8-bit characters.
+ */[[=* *[==]*
+ - An equivalence class. This means that characters are matched that
+! have almost the same meaning, e.g., when ignoring accents. This
+! only works for Unicode, latin1 and latin9. The form is:
+ [=a=]
+ */[[.* *[..]*
+ - A collation element. This currently simply accepts a single
+ character in the form:
+*** ../vim-7.3.258/src/regexp.c 2011-06-19 04:31:54.000000000 +0200
+--- src/regexp.c 2011-07-20 17:56:52.000000000 +0200
+***************
+*** 666,673 ****
+--- 666,677 ----
+ static void regc __ARGS((int b));
+ #ifdef FEAT_MBYTE
+ static void regmbc __ARGS((int c));
++ # define REGMBC(x) regmbc(x);
++ # define CASEMBC(x) case x:
+ #else
+ # define regmbc(c) regc(c)
++ # define REGMBC(x)
++ # define CASEMBC(x)
+ #endif
+ static void reginsert __ARGS((int, char_u *));
+ static void reginsert_limits __ARGS((int, long, long, char_u *));
+***************
+*** 787,854 ****
+ switch (c)
+ {
+ case 'A': case '\300': case '\301': case '\302':
+ case '\303': case '\304': case '\305':
+ regmbc('A'); regmbc('\300'); regmbc('\301');
+ regmbc('\302'); regmbc('\303'); regmbc('\304');
+ regmbc('\305');
+ return;
+ case 'C': case '\307':
+ regmbc('C'); regmbc('\307');
+ return;
+ case 'E': case '\310': case '\311': case '\312': case '\313':
+ regmbc('E'); regmbc('\310'); regmbc('\311');
+ regmbc('\312'); regmbc('\313');
+ return;
+ case 'I': case '\314': case '\315': case '\316': case '\317':
+ regmbc('I'); regmbc('\314'); regmbc('\315');
+ regmbc('\316'); regmbc('\317');
+ return;
+ case 'N': case '\321':
+ regmbc('N'); regmbc('\321');
+ return;
+ case 'O': case '\322': case '\323': case '\324': case '\325':
+! case '\326':
+ regmbc('O'); regmbc('\322'); regmbc('\323');
+ regmbc('\324'); regmbc('\325'); regmbc('\326');
+ return;
+ case 'U': case '\331': case '\332': case '\333': case '\334':
+ regmbc('U'); regmbc('\331'); regmbc('\332');
+ regmbc('\333'); regmbc('\334');
+ return;
+ case 'Y': case '\335':
+ regmbc('Y'); regmbc('\335');
+ return;
+ case 'a': case '\340': case '\341': case '\342':
+ case '\343': case '\344': case '\345':
+ regmbc('a'); regmbc('\340'); regmbc('\341');
+ regmbc('\342'); regmbc('\343'); regmbc('\344');
+ regmbc('\345');
+ return;
+ case 'c': case '\347':
+ regmbc('c'); regmbc('\347');
+ return;
+ case 'e': case '\350': case '\351': case '\352': case '\353':
+ regmbc('e'); regmbc('\350'); regmbc('\351');
+ regmbc('\352'); regmbc('\353');
+ return;
+ case 'i': case '\354': case '\355': case '\356': case '\357':
+ regmbc('i'); regmbc('\354'); regmbc('\355');
+ regmbc('\356'); regmbc('\357');
+ return;
+ case 'n': case '\361':
+ regmbc('n'); regmbc('\361');
+ return;
+ case 'o': case '\362': case '\363': case '\364': case '\365':
+! case '\366':
+ regmbc('o'); regmbc('\362'); regmbc('\363');
+ regmbc('\364'); regmbc('\365'); regmbc('\366');
+ return;
+ case 'u': case '\371': case '\372': case '\373': case '\374':
+ regmbc('u'); regmbc('\371'); regmbc('\372');
+ regmbc('\373'); regmbc('\374');
+ return;
+ case 'y': case '\375': case '\377':
+ regmbc('y'); regmbc('\375'); regmbc('\377');
+ return;
+ }
+ #endif
+--- 791,1085 ----
+ switch (c)
+ {
+ case 'A': case '\300': case '\301': case '\302':
++ CASEMBC(0x100) CASEMBC(0x102) CASEMBC(0x104) CASEMBC(0x1cd)
++ CASEMBC(0x1de) CASEMBC(0x1e0) CASEMBC(0x1ea2)
+ case '\303': case '\304': case '\305':
+ regmbc('A'); regmbc('\300'); regmbc('\301');
+ regmbc('\302'); regmbc('\303'); regmbc('\304');
+ regmbc('\305');
++ REGMBC(0x100) REGMBC(0x102) REGMBC(0x104)
++ REGMBC(0x1cd) REGMBC(0x1de) REGMBC(0x1e0)
++ REGMBC(0x1ea2)
++ return;
++ case 'B': CASEMBC(0x1e02) CASEMBC(0x1e06)
++ regmbc('B'); REGMBC(0x1e02) REGMBC(0x1e06)
+ return;
+ case 'C': case '\307':
++ CASEMBC(0x106) CASEMBC(0x108) CASEMBC(0x10a) CASEMBC(0x10c)
+ regmbc('C'); regmbc('\307');
++ REGMBC(0x106) REGMBC(0x108) REGMBC(0x10a)
++ REGMBC(0x10c)
++ return;
++ case 'D': CASEMBC(0x10e) CASEMBC(0x110) CASEMBC(0x1e0a)
++ CASEMBC(0x1e0e) CASEMBC(0x1e10)
++ regmbc('D'); REGMBC(0x10e) REGMBC(0x110)
++ REGMBC(0x1e0a) REGMBC(0x1e0e) REGMBC(0x1e10)
+ return;
+ case 'E': case '\310': case '\311': case '\312': case '\313':
++ CASEMBC(0x112) CASEMBC(0x114) CASEMBC(0x116) CASEMBC(0x118)
++ CASEMBC(0x11a) CASEMBC(0x1eba) CASEMBC(0x1ebc)
+ regmbc('E'); regmbc('\310'); regmbc('\311');
+ regmbc('\312'); regmbc('\313');
++ REGMBC(0x112) REGMBC(0x114) REGMBC(0x116)
++ REGMBC(0x118) REGMBC(0x11a) REGMBC(0x1eba)
++ REGMBC(0x1ebc)
++ return;
++ case 'F': CASEMBC(0x1e1e)
++ regmbc('F'); REGMBC(0x1e1e)
++ return;
++ case 'G': CASEMBC(0x11c) CASEMBC(0x11e) CASEMBC(0x120)
++ CASEMBC(0x122) CASEMBC(0x1e4) CASEMBC(0x1e6) CASEMBC(0x1f4)
++ CASEMBC(0x1e20)
++ regmbc('G'); REGMBC(0x11c) REGMBC(0x11e)
++ REGMBC(0x120) REGMBC(0x122) REGMBC(0x1e4)
++ REGMBC(0x1e6) REGMBC(0x1f4) REGMBC(0x1e20)
++ return;
++ case 'H': CASEMBC(0x124) CASEMBC(0x126) CASEMBC(0x1e22)
++ CASEMBC(0x1e26) CASEMBC(0x1e28)
++ regmbc('H'); REGMBC(0x124) REGMBC(0x126)
++ REGMBC(0x1e22) REGMBC(0x1e26) REGMBC(0x1e28)
+ return;
+ case 'I': case '\314': case '\315': case '\316': case '\317':
++ CASEMBC(0x128) CASEMBC(0x12a) CASEMBC(0x12c) CASEMBC(0x12e)
++ CASEMBC(0x130) CASEMBC(0x1cf) CASEMBC(0x1ec8)
+ regmbc('I'); regmbc('\314'); regmbc('\315');
+ regmbc('\316'); regmbc('\317');
++ REGMBC(0x128) REGMBC(0x12a) REGMBC(0x12c)
++ REGMBC(0x12e) REGMBC(0x130) REGMBC(0x1cf)
++ REGMBC(0x1ec8)
++ return;
++ case 'J': CASEMBC(0x134)
++ regmbc('J'); REGMBC(0x134)
++ return;
++ case 'K': CASEMBC(0x136) CASEMBC(0x1e8) CASEMBC(0x1e30)
++ CASEMBC(0x1e34)
++ regmbc('K'); REGMBC(0x136) REGMBC(0x1e8)
++ REGMBC(0x1e30) REGMBC(0x1e34)
++ return;
++ case 'L': CASEMBC(0x139) CASEMBC(0x13b) CASEMBC(0x13d)
++ CASEMBC(0x13f) CASEMBC(0x141) CASEMBC(0x1e3a)
++ regmbc('L'); REGMBC(0x139) REGMBC(0x13b)
++ REGMBC(0x13d) REGMBC(0x13f) REGMBC(0x141)
++ REGMBC(0x1e3a)
++ return;
++ case 'M': CASEMBC(0x1e3e) CASEMBC(0x1e40)
++ regmbc('M'); REGMBC(0x1e3e) REGMBC(0x1e40)
+ return;
+ case 'N': case '\321':
++ CASEMBC(0x143) CASEMBC(0x145) CASEMBC(0x147) CASEMBC(0x1e44)
++ CASEMBC(0x1e48)
+ regmbc('N'); regmbc('\321');
++ REGMBC(0x143) REGMBC(0x145) REGMBC(0x147)
++ REGMBC(0x1e44) REGMBC(0x1e48)
+ return;
+ case 'O': case '\322': case '\323': case '\324': case '\325':
+! case '\326': case '\330':
+! CASEMBC(0x14c) CASEMBC(0x14e) CASEMBC(0x150) CASEMBC(0x1a0)
+! CASEMBC(0x1d1) CASEMBC(0x1ea) CASEMBC(0x1ec) CASEMBC(0x1ece)
+ regmbc('O'); regmbc('\322'); regmbc('\323');
+ regmbc('\324'); regmbc('\325'); regmbc('\326');
++ regmbc('\330');
++ REGMBC(0x14c) REGMBC(0x14e) REGMBC(0x150)
++ REGMBC(0x1a0) REGMBC(0x1d1) REGMBC(0x1ea)
++ REGMBC(0x1ec) REGMBC(0x1ece)
++ return;
++ case 'P': case 0x1e54: case 0x1e56:
++ regmbc('P'); REGMBC(0x1e54) REGMBC(0x1e56)
++ return;
++ case 'R': CASEMBC(0x154) CASEMBC(0x156) CASEMBC(0x158)
++ CASEMBC(0x1e58) CASEMBC(0x1e5e)
++ regmbc('R'); REGMBC(0x154) REGMBC(0x156) REGMBC(0x158)
++ REGMBC(0x1e58) REGMBC(0x1e5e)
++ return;
++ case 'S': CASEMBC(0x15a) CASEMBC(0x15c) CASEMBC(0x15e)
++ CASEMBC(0x160) CASEMBC(0x1e60)
++ regmbc('S'); REGMBC(0x15a) REGMBC(0x15c)
++ REGMBC(0x15e) REGMBC(0x160) REGMBC(0x1e60)
++ return;
++ case 'T': CASEMBC(0x162) CASEMBC(0x164) CASEMBC(0x166)
++ CASEMBC(0x1e6a) CASEMBC(0x1e6e)
++ regmbc('T'); REGMBC(0x162) REGMBC(0x164)
++ REGMBC(0x166) REGMBC(0x1e6a) REGMBC(0x1e6e)
+ return;
+ case 'U': case '\331': case '\332': case '\333': case '\334':
++ CASEMBC(0x168) CASEMBC(0x16a) CASEMBC(0x16c) CASEMBC(0x16e)
++ CASEMBC(0x170) CASEMBC(0x172) CASEMBC(0x1af) CASEMBC(0x1d3)
++ CASEMBC(0x1ee6)
+ regmbc('U'); regmbc('\331'); regmbc('\332');
+ regmbc('\333'); regmbc('\334');
++ REGMBC(0x168) REGMBC(0x16a) REGMBC(0x16c)
++ REGMBC(0x16e) REGMBC(0x170) REGMBC(0x172)
++ REGMBC(0x1af) REGMBC(0x1d3) REGMBC(0x1ee6)
++ return;
++ case 'V': CASEMBC(0x1e7c)
++ regmbc('V'); REGMBC(0x1e7c)
++ return;
++ case 'W': CASEMBC(0x174) CASEMBC(0x1e80) CASEMBC(0x1e82)
++ CASEMBC(0x1e84) CASEMBC(0x1e86)
++ regmbc('W'); REGMBC(0x174) REGMBC(0x1e80)
++ REGMBC(0x1e82) REGMBC(0x1e84) REGMBC(0x1e86)
++ return;
++ case 'X': CASEMBC(0x1e8a) CASEMBC(0x1e8c)
++ regmbc('X'); REGMBC(0x1e8a) REGMBC(0x1e8c)
+ return;
+ case 'Y': case '\335':
++ CASEMBC(0x176) CASEMBC(0x178) CASEMBC(0x1e8e) CASEMBC(0x1ef2)
++ CASEMBC(0x1ef6) CASEMBC(0x1ef8)
+ regmbc('Y'); regmbc('\335');
++ REGMBC(0x176) REGMBC(0x178) REGMBC(0x1e8e)
++ REGMBC(0x1ef2) REGMBC(0x1ef6) REGMBC(0x1ef8)
++ return;
++ case 'Z': CASEMBC(0x179) CASEMBC(0x17b) CASEMBC(0x17d)
++ CASEMBC(0x1b5) CASEMBC(0x1e90) CASEMBC(0x1e94)
++ regmbc('Z'); REGMBC(0x179) REGMBC(0x17b)
++ REGMBC(0x17d) REGMBC(0x1b5) REGMBC(0x1e90)
++ REGMBC(0x1e94)
+ return;
+ case 'a': case '\340': case '\341': case '\342':
+ case '\343': case '\344': case '\345':
++ CASEMBC(0x101) CASEMBC(0x103) CASEMBC(0x105) CASEMBC(0x1ce)
++ CASEMBC(0x1df) CASEMBC(0x1e1) CASEMBC(0x1ea3)
+ regmbc('a'); regmbc('\340'); regmbc('\341');
+ regmbc('\342'); regmbc('\343'); regmbc('\344');
+ regmbc('\345');
++ REGMBC(0x101) REGMBC(0x103) REGMBC(0x105)
++ REGMBC(0x1ce) REGMBC(0x1df) REGMBC(0x1e1)
++ REGMBC(0x1ea3)
++ return;
++ case 'b': CASEMBC(0x1e03) CASEMBC(0x1e07)
++ regmbc('b'); REGMBC(0x1e03) REGMBC(0x1e07)
+ return;
+ case 'c': case '\347':
++ CASEMBC(0x107) CASEMBC(0x109) CASEMBC(0x10b) CASEMBC(0x10d)
+ regmbc('c'); regmbc('\347');
++ REGMBC(0x107) REGMBC(0x109) REGMBC(0x10b)
++ REGMBC(0x10d)
++ return;
++ case 'd': CASEMBC(0x10f) CASEMBC(0x111) CASEMBC(0x1d0b)
++ CASEMBC(0x1e11)
++ regmbc('d'); REGMBC(0x10f) REGMBC(0x111)
++ REGMBC(0x1e0b) REGMBC(0x01e0f) REGMBC(0x1e11)
+ return;
+ case 'e': case '\350': case '\351': case '\352': case '\353':
++ CASEMBC(0x113) CASEMBC(0x115) CASEMBC(0x117) CASEMBC(0x119)
++ CASEMBC(0x11b) CASEMBC(0x1ebb) CASEMBC(0x1ebd)
+ regmbc('e'); regmbc('\350'); regmbc('\351');
+ regmbc('\352'); regmbc('\353');
++ REGMBC(0x113) REGMBC(0x115) REGMBC(0x117)
++ REGMBC(0x119) REGMBC(0x11b) REGMBC(0x1ebb)
++ REGMBC(0x1ebd)
++ return;
++ case 'f': CASEMBC(0x1e1f)
++ regmbc('f'); REGMBC(0x1e1f)
++ return;
++ case 'g': CASEMBC(0x11d) CASEMBC(0x11f) CASEMBC(0x121)
++ CASEMBC(0x123) CASEMBC(0x1e5) CASEMBC(0x1e7) CASEMBC(0x1f5)
++ CASEMBC(0x1e21)
++ regmbc('g'); REGMBC(0x11d) REGMBC(0x11f)
++ REGMBC(0x121) REGMBC(0x123) REGMBC(0x1e5)
++ REGMBC(0x1e7) REGMBC(0x1f5) REGMBC(0x1e21)
++ return;
++ case 'h': CASEMBC(0x125) CASEMBC(0x127) CASEMBC(0x1e23)
++ CASEMBC(0x1e27) CASEMBC(0x1e29) CASEMBC(0x1e96)
++ regmbc('h'); REGMBC(0x125) REGMBC(0x127)
++ REGMBC(0x1e23) REGMBC(0x1e27) REGMBC(0x1e29)
++ REGMBC(0x1e96)
+ return;
+ case 'i': case '\354': case '\355': case '\356': case '\357':
++ CASEMBC(0x129) CASEMBC(0x12b) CASEMBC(0x12d) CASEMBC(0x12f)
++ CASEMBC(0x1d0) CASEMBC(0x1ec9)
+ regmbc('i'); regmbc('\354'); regmbc('\355');
+ regmbc('\356'); regmbc('\357');
++ REGMBC(0x129) REGMBC(0x12b) REGMBC(0x12d)
++ REGMBC(0x12f) REGMBC(0x1d0) REGMBC(0x1ec9)
++ return;
++ case 'j': CASEMBC(0x135) CASEMBC(0x1f0)
++ regmbc('j'); REGMBC(0x135) REGMBC(0x1f0)
++ return;
++ case 'k': CASEMBC(0x137) CASEMBC(0x1e9) CASEMBC(0x1e31)
++ CASEMBC(0x1e35)
++ regmbc('k'); REGMBC(0x137) REGMBC(0x1e9)
++ REGMBC(0x1e31) REGMBC(0x1e35)
++ return;
++ case 'l': CASEMBC(0x13a) CASEMBC(0x13c) CASEMBC(0x13e)
++ CASEMBC(0x140) CASEMBC(0x142) CASEMBC(0x1e3b)
++ regmbc('l'); REGMBC(0x13a) REGMBC(0x13c)
++ REGMBC(0x13e) REGMBC(0x140) REGMBC(0x142)
++ REGMBC(0x1e3b)
++ return;
++ case 'm': CASEMBC(0x1e3f) CASEMBC(0x1e41)
++ regmbc('m'); REGMBC(0x1e3f) REGMBC(0x1e41)
+ return;
+ case 'n': case '\361':
++ CASEMBC(0x144) CASEMBC(0x146) CASEMBC(0x148) CASEMBC(0x149)
++ CASEMBC(0x1e45) CASEMBC(0x1e49)
+ regmbc('n'); regmbc('\361');
++ REGMBC(0x144) REGMBC(0x146) REGMBC(0x148)
++ REGMBC(0x149) REGMBC(0x1e45) REGMBC(0x1e49)
+ return;
+ case 'o': case '\362': case '\363': case '\364': case '\365':
+! case '\366': case '\370':
+! CASEMBC(0x14d) CASEMBC(0x14f) CASEMBC(0x151) CASEMBC(0x1a1)
+! CASEMBC(0x1d2) CASEMBC(0x1eb) CASEMBC(0x1ed) CASEMBC(0x1ecf)
+ regmbc('o'); regmbc('\362'); regmbc('\363');
+ regmbc('\364'); regmbc('\365'); regmbc('\366');
++ regmbc('\370');
++ REGMBC(0x14d) REGMBC(0x14f) REGMBC(0x151)
++ REGMBC(0x1a1) REGMBC(0x1d2) REGMBC(0x1eb)
++ REGMBC(0x1ed) REGMBC(0x1ecf)
++ return;
++ case 'p': CASEMBC(0x1e55) CASEMBC(0x1e57)
++ regmbc('p'); REGMBC(0x1e55) REGMBC(0x1e57)
++ return;
++ case 'r': CASEMBC(0x155) CASEMBC(0x157) CASEMBC(0x159)
++ CASEMBC(0x1e59) CASEMBC(0x1e5f)
++ regmbc('r'); REGMBC(0x155) REGMBC(0x157) REGMBC(0x159)
++ REGMBC(0x1e59) REGMBC(0x1e5f)
++ return;
++ case 's': CASEMBC(0x15b) CASEMBC(0x15d) CASEMBC(0x15f)
++ CASEMBC(0x161) CASEMBC(0x1e61)
++ regmbc('s'); REGMBC(0x15b) REGMBC(0x15d)
++ REGMBC(0x15f) REGMBC(0x161) REGMBC(0x1e61)
++ return;
++ case 't': CASEMBC(0x163) CASEMBC(0x165) CASEMBC(0x167)
++ CASEMBC(0x1e6b) CASEMBC(0x1e6f) CASEMBC(0x1e97)
++ regmbc('t'); REGMBC(0x163) REGMBC(0x165) REGMBC(0x167)
++ REGMBC(0x1e6b) REGMBC(0x1e6f) REGMBC(0x1e97)
+ return;
+ case 'u': case '\371': case '\372': case '\373': case '\374':
++ CASEMBC(0x169) CASEMBC(0x16b) CASEMBC(0x16d) CASEMBC(0x16f)
++ CASEMBC(0x171) CASEMBC(0x173) CASEMBC(0x1b0) CASEMBC(0x1d4)
++ CASEMBC(0x1ee7)
+ regmbc('u'); regmbc('\371'); regmbc('\372');
+ regmbc('\373'); regmbc('\374');
++ REGMBC(0x169) REGMBC(0x16b) REGMBC(0x16d)
++ REGMBC(0x16f) REGMBC(0x171) REGMBC(0x173)
++ REGMBC(0x1b0) REGMBC(0x1d4) REGMBC(0x1ee7)
++ return;
++ case 'v': CASEMBC(0x1e7d)
++ regmbc('v'); REGMBC(0x1e7d)
++ return;
++ case 'w': CASEMBC(0x175) CASEMBC(0x1e81) CASEMBC(0x1e83)
++ CASEMBC(0x1e85) CASEMBC(0x1e87) CASEMBC(0x1e98)
++ regmbc('w'); REGMBC(0x175) REGMBC(0x1e81)
++ REGMBC(0x1e83) REGMBC(0x1e85) REGMBC(0x1e87)
++ REGMBC(0x1e98)
++ return;
++ case 'x': CASEMBC(0x1e8b) CASEMBC(0x1e8d)
++ regmbc('x'); REGMBC(0x1e8b) REGMBC(0x1e8d)
+ return;
+ case 'y': case '\375': case '\377':
++ CASEMBC(0x177) CASEMBC(0x1e8f) CASEMBC(0x1e99)
++ CASEMBC(0x1ef3) CASEMBC(0x1ef7) CASEMBC(0x1ef9)
+ regmbc('y'); regmbc('\375'); regmbc('\377');
++ REGMBC(0x177) REGMBC(0x1e8f) REGMBC(0x1e99)
++ REGMBC(0x1ef3) REGMBC(0x1ef7) REGMBC(0x1ef9)
++ return;
++ case 'z': CASEMBC(0x17a) CASEMBC(0x17c) CASEMBC(0x17e)
++ CASEMBC(0x1b6) CASEMBC(0x1e91) CASEMBC(0x1e95)
++ regmbc('z'); REGMBC(0x17a) REGMBC(0x17c)
++ REGMBC(0x17e) REGMBC(0x1b6) REGMBC(0x1e91)
++ REGMBC(0x1e95)
+ return;
+ }
+ #endif
+***************
+*** 2468,2473 ****
+--- 2699,2706 ----
+ regmbc(c)
+ int c;
+ {
++ if (!has_mbyte && c > 0xff)
++ return;
+ if (regcode == JUST_CALC_SIZE)
+ regsize += (*mb_char2len)(c);
+ else
+***************
+*** 2588,2594 ****
+ else
+ offset = (int)(val - scan);
+ /* When the offset uses more than 16 bits it can no longer fit in the two
+! * bytes avaliable. Use a global flag to avoid having to check return
+ * values in too many places. */
+ if (offset > 0xffff)
+ reg_toolong = TRUE;
+--- 2821,2827 ----
+ else
+ offset = (int)(val - scan);
+ /* When the offset uses more than 16 bits it can no longer fit in the two
+! * bytes available. Use a global flag to avoid having to check return
+ * values in too many places. */
+ if (offset > 0xffff)
+ reg_toolong = TRUE;
+*** ../vim-7.3.258/src/testdir/test44.in 2010-08-15 21:57:29.000000000 +0200
+--- src/testdir/test44.in 2011-07-20 17:36:49.000000000 +0200
+***************
+*** 27,32 ****
+--- 27,34 ----
+ x/\%U12345678
+ x/[\U1234abcd\u1234\uabcd]
+ x/\%d21879b
++ x/ [[=A=]]* [[=B=]]* [[=C=]]* [[=D=]]* [[=E=]]* [[=F=]]* [[=G=]]* [[=H=]]* [[=I=]]* [[=J=]]* [[=K=]]* [[=L=]]* [[=M=]]* [[=N=]]* [[=O=]]* [[=P=]]* [[=Q=]]* [[=R=]]* [[=S=]]* [[=T=]]* [[=U=]]* [[=V=]]* [[=W=]]* [[=X=]]* [[=Y=]]* [[=Z=]]*/e
++ x/ [[=a=]]* [[=b=]]* [[=c=]]* [[=d=]]* [[=e=]]* [[=f=]]* [[=g=]]* [[=h=]]* [[=i=]]* [[=j=]]* [[=k=]]* [[=l=]]* [[=m=]]* [[=n=]]* [[=o=]]* [[=p=]]* [[=q=]]* [[=r=]]* [[=s=]]* [[=t=]]* [[=u=]]* [[=v=]]* [[=w=]]* [[=x=]]* [[=y=]]* [[=z=]]*/e
+ x:?^1?,$w! test.out
+ :e! test.out
+ G:put =matchstr(\"×בגד\", \".\", 0, 2) " ב
+***************
+*** 53,55 ****
+--- 55,59 ----
+ e ü’…™¸y
+ f ü’Š¯z
+ g aå•·bb
++ h AÀÃÂÃÄÅĀĂĄÇǞǠẢ BḂḆ CÇĆĈĊČ DÄŽÄḊḎḠEÈÉÊËĒĔĖĘĚẺẼ FḞ GĜĞĠĢǤǦǴḠ HĤĦḢḦḨ IÃŒÃÃŽÃĨĪĬĮİÇỈ JÄ´ KĶǨḰḴ LĹĻĽĿÅḺ MḾṀ NÑŃŅŇṄṈ OÒÓÔÕÖØŌŎÅƠǑǪǬỎ PṔṖ Q RŔŖŘṘṞ SŚŜŞŠṠ TŢŤŦṪṮ UÙÚÛÜŨŪŬŮŰŲƯǓỦ Vá¹¼ WŴẀẂẄẆ XẊẌ YÃŶŸẎỲỶỸ ZŹŻŽƵáºáº”
++ i aàáâãäåÄăąǎǟǡả bḃḇ cÃ§Ä‡Ä‰Ä‹Ä dÄđḋá¸á¸‘ eèéêëēĕėęěẻẽ fḟ gÄğġģǥǧǵḡ hĥħḣḧḩẖ iìíîïĩīĭįÇỉ jĵǰ kķǩḱḵ lĺļľŀłḻ mḿṠnñńņňʼnṅṉ oòóôõöøÅÅÅ‘Æ¡Ç’Ç«Ç­á» pṕṗ q rŕŗřṙṟ sÅ›Åşšṡ tţťŧṫṯẗ uùúûüũūŭůűųưǔủ vá¹½ wŵáºáºƒáº…ẇẘ xẋẠyýÿŷáºáº™á»³á»·á»¹ zźżžƶẑẕ
+*** ../vim-7.3.258/src/testdir/test44.ok 2010-08-15 21:57:29.000000000 +0200
+--- src/testdir/test44.ok 2011-07-20 17:36:49.000000000 +0200
+***************
+*** 14,19 ****
+--- 14,21 ----
+ e y
+ f z
+ g abb
++ h AÀÃÂÃÄÅĀĂĄÇǞǠẢ BḂḆ CÇĆĈĊČ DÄŽÄḊḎḠEÈÉÊËĒĔĖĘĚẺẼ FḞ GĜĞĠĢǤǦǴḠ HĤĦḢḦḨ IÃŒÃÃŽÃĨĪĬĮİÇỈ JÄ´ KĶǨḰḴ LĹĻĽĿÅḺ MḾṀ NÑŃŅŇṄṈ OÒÓÔÕÖØŌŎÅƠǑǪǬỎ PṔṖ Q RŔŖŘṘṞ SŚŜŞŠṠ TŢŤŦṪṮ UÙÚÛÜŨŪŬŮŰŲƯǓỦ Vá¹¼ WŴẀẂẄẆ XẊẌ YÃŶŸẎỲỶỸ ZŹŻŽƵáº
++ i aàáâãäåÄăąǎǟǡả bḃḇ cÃ§Ä‡Ä‰Ä‹Ä dÄđḋá¸á¸‘ eèéêëēĕėęěẻẽ fḟ gÄğġģǥǧǵḡ hĥħḣḧḩẖ iìíîïĩīĭįÇỉ jĵǰ kķǩḱḵ lĺļľŀłḻ mḿṠnñńņňʼnṅṉ oòóôõöøÅÅÅ‘Æ¡Ç’Ç«Ç­á» pṕṗ q rŕŗřṙṟ sÅ›Åşšṡ tţťŧṫṯẗ uùúûüũūŭůűųưǔủ vá¹½ wŵáºáºƒáº…ẇẘ xẋẠyýÿŷáºáº™á»³á»·á»¹ zźżžƶẑ
+ ב
+ בג
+ ×
+*** ../vim-7.3.258/src/version.c 2011-07-20 17:27:17.000000000 +0200
+--- src/version.c 2011-07-20 17:38:32.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 259,
+ /**/
+
+--
+Not too long ago, compress was something you did to garbage...
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.260 b/source/ap/vim/patches/7.3.260
new file mode 100644
index 000000000..ba9af57aa
--- /dev/null
+++ b/source/ap/vim/patches/7.3.260
@@ -0,0 +1,69 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.260
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.260
+Problem: CursorHold triggers on an incomplete mapping. (Will Gray)
+Solution: Don't trigger CursorHold when there is typeahead.
+Files: src/fileio.c
+
+
+*** ../vim-7.3.259/src/fileio.c 2011-05-19 17:25:36.000000000 +0200
+--- src/fileio.c 2011-07-20 18:22:16.000000000 +0200
+***************
+*** 9044,9050 ****
+ {
+ int state;
+
+! if (!did_cursorhold && has_cursorhold() && !Recording
+ #ifdef FEAT_INS_EXPAND
+ && !ins_compl_active()
+ #endif
+--- 9044,9053 ----
+ {
+ int state;
+
+! if (!did_cursorhold
+! && has_cursorhold()
+! && !Recording
+! && typebuf.tb_len == 0
+ #ifdef FEAT_INS_EXPAND
+ && !ins_compl_active()
+ #endif
+***************
+*** 9935,9940 ****
+--- 9938,9945 ----
+ if ((c == ';' || c == '>') && match == FALSE)
+ {
+ *pattern = NUL; /* Terminate the string */
++ /* TODO: match with 'filetype' of buffer that "fname" comes
++ * from. */
+ match = mch_check_filetype(fname, type_start);
+ *pattern = c; /* Restore the terminator */
+ type_start = pattern + 1;
+*** ../vim-7.3.259/src/version.c 2011-07-20 17:58:14.000000000 +0200
+--- src/version.c 2011-07-20 18:25:15.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 260,
+ /**/
+
+--
+LAUNCELOT: At last! A call! A cry of distress ...
+ (he draws his sword, and turns to CONCORDE)
+ Concorde! Brave, Concorde ... you shall not have died in vain!
+CONCORDE: I'm not quite dead, sir ...
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.261 b/source/ap/vim/patches/7.3.261
new file mode 100644
index 000000000..4c03f6b57
--- /dev/null
+++ b/source/ap/vim/patches/7.3.261
@@ -0,0 +1,53 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.261
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.261
+Problem: G++ error message errornously recognized as error.
+Solution: Ignore "In file included from" line also when it ends in a colon.
+ (Fernando Castillo)
+Files: src/option.h
+
+
+*** ../vim-7.3.260/src/option.h 2011-06-26 05:36:07.000000000 +0200
+--- src/option.h 2011-07-27 13:44:08.000000000 +0200
+***************
+*** 33,39 ****
+ # ifdef EBCDIC
+ #define DFLT_EFM "%*[^ ] %*[^ ] %f:%l%*[ ]%m,%*[^\"]\"%f\"%*\\D%l: %m,\"%f\"%*\\D%l: %m,%f:%l:%c:%m,%f(%l):%m,%f:%l:%m,\"%f\"\\, line %l%*\\D%c%*[^ ] %m,%D%*\\a[%*\\d]: Entering directory `%f',%X%*\\a[%*\\d]: Leaving directory `%f',%DMaking %*\\a in %f,%f|%l| %m"
+ # else
+! #define DFLT_EFM "%*[^\"]\"%f\"%*\\D%l: %m,\"%f\"%*\\D%l: %m,%-G%f:%l: (Each undeclared identifier is reported only once,%-G%f:%l: for each function it appears in.),%-GIn file included from %f:%l:%c,%-GIn file included from %f:%l,%-Gfrom %f:%l:%c,%-Gfrom %f:%l,%f:%l:%c:%m,%f(%l):%m,%f:%l:%m,\"%f\"\\, line %l%*\\D%c%*[^ ] %m,%D%*\\a[%*\\d]: Entering directory `%f',%X%*\\a[%*\\d]: Leaving directory `%f',%D%*\\a: Entering directory `%f',%X%*\\a: Leaving directory `%f',%DMaking %*\\a in %f,%f|%l| %m"
+ # endif
+ # endif
+ # endif
+--- 33,39 ----
+ # ifdef EBCDIC
+ #define DFLT_EFM "%*[^ ] %*[^ ] %f:%l%*[ ]%m,%*[^\"]\"%f\"%*\\D%l: %m,\"%f\"%*\\D%l: %m,%f:%l:%c:%m,%f(%l):%m,%f:%l:%m,\"%f\"\\, line %l%*\\D%c%*[^ ] %m,%D%*\\a[%*\\d]: Entering directory `%f',%X%*\\a[%*\\d]: Leaving directory `%f',%DMaking %*\\a in %f,%f|%l| %m"
+ # else
+! #define DFLT_EFM "%*[^\"]\"%f\"%*\\D%l: %m,\"%f\"%*\\D%l: %m,%-G%f:%l: (Each undeclared identifier is reported only once,%-G%f:%l: for each function it appears in.),%-GIn file included from %f:%l:%c:,%-GIn file included from %f:%l:%c,%-GIn file included from %f:%l,%-Gfrom %f:%l:%c,%-Gfrom %f:%l,%f:%l:%c:%m,%f(%l):%m,%f:%l:%m,\"%f\"\\, line %l%*\\D%c%*[^ ] %m,%D%*\\a[%*\\d]: Entering directory `%f',%X%*\\a[%*\\d]: Leaving directory `%f',%D%*\\a: Entering directory `%f',%X%*\\a: Leaving directory `%f',%DMaking %*\\a in %f,%f|%l| %m"
+ # endif
+ # endif
+ # endif
+*** ../vim-7.3.260/src/version.c 2011-07-20 18:29:33.000000000 +0200
+--- src/version.c 2011-07-27 13:46:23.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 261,
+ /**/
+
+--
+Have you heard about the new Barbie doll? It's called Divorce
+Barbie. It comes with all of Ken's stuff.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.262 b/source/ap/vim/patches/7.3.262
new file mode 100644
index 000000000..b3bd5cd81
--- /dev/null
+++ b/source/ap/vim/patches/7.3.262
@@ -0,0 +1,1356 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.262
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.262
+Problem: Photon code style doesn't match Vim style.
+Solution: Clean up some of it. (Elias Diem)
+Files: src/gui_photon.c
+
+
+*** ../vim-7.3.261/src/gui_photon.c 2011-01-17 20:08:03.000000000 +0100
+--- src/gui_photon.c 2011-07-27 14:07:02.000000000 +0200
+***************
+*** 32,40 ****
+ #endif
+
+ #define ARRAY_LENGTH(a) (sizeof(a) / sizeof(a[0]))
+! #define RGB(r,g,b) PgRGB(r,g,b)
+
+! #define EVENT_BUFFER_SIZE sizeof( PhEvent_t ) + 1000
+
+ /* Some defines for gui_mch_mousehide() */
+ #define MOUSE_HIDE TRUE
+--- 32,40 ----
+ #endif
+
+ #define ARRAY_LENGTH(a) (sizeof(a) / sizeof(a[0]))
+! #define RGB(r, g, b) PgRGB(r, g, b)
+
+! #define EVENT_BUFFER_SIZE sizeof(PhEvent_t) + 1000
+
+ /* Some defines for gui_mch_mousehide() */
+ #define MOUSE_HIDE TRUE
+***************
+*** 206,258 ****
+ static PtCallbackF_t gui_ph_handle_menu_unrealized;
+
+ #ifdef USE_PANEL_GROUP
+! static void gui_ph_get_panelgroup_margins( short*, short*, short*, short* );
+ #endif
+
+ #ifdef FEAT_TOOLBAR
+! static PhImage_t *gui_ph_toolbar_find_icon( vimmenu_T *menu );
+ #endif
+
+! static void gui_ph_draw_start( void );
+! static void gui_ph_draw_end( void );
+
+ /* Set the text for the balloon */
+! static PtWidget_t * gui_ph_show_tooltip( PtWidget_t *window,
+ PtWidget_t *widget,
+ int position,
+ char *text,
+ char *font,
+ PgColor_t fill_color,
+! PgColor_t text_color );
+
+ /****************************************************************************/
+
+! static PtWidget_t * gui_ph_show_tooltip( PtWidget_t *window,
+ PtWidget_t *widget,
+ int position,
+ char *text,
+ char *font,
+ PgColor_t fill_color,
+! PgColor_t text_color )
+ {
+ PtArg_t arg;
+ vimmenu_T *menu;
+ char_u *tooltip;
+
+! PtSetArg( &arg, Pt_ARG_POINTER, &menu, 0 );
+! PtGetResources( widget, 1, &arg );
+
+ /* Override the text and position */
+
+ tooltip = text;
+! if( menu != NULL )
+ {
+ int index = MENU_INDEX_TIP;
+! if( menu->strings[ index ] != NULL )
+ tooltip = menu->strings[ index ];
+ }
+
+! return( PtInflateBalloon(
+ window,
+ widget,
+ /* Don't put the balloon at the bottom,
+--- 206,258 ----
+ static PtCallbackF_t gui_ph_handle_menu_unrealized;
+
+ #ifdef USE_PANEL_GROUP
+! static void gui_ph_get_panelgroup_margins(short*, short*, short*, short*);
+ #endif
+
+ #ifdef FEAT_TOOLBAR
+! static PhImage_t *gui_ph_toolbar_find_icon(vimmenu_T *menu);
+ #endif
+
+! static void gui_ph_draw_start(void);
+! static void gui_ph_draw_end(void);
+
+ /* Set the text for the balloon */
+! static PtWidget_t * gui_ph_show_tooltip(PtWidget_t *window,
+ PtWidget_t *widget,
+ int position,
+ char *text,
+ char *font,
+ PgColor_t fill_color,
+! PgColor_t text_color);
+
+ /****************************************************************************/
+
+! static PtWidget_t * gui_ph_show_tooltip(PtWidget_t *window,
+ PtWidget_t *widget,
+ int position,
+ char *text,
+ char *font,
+ PgColor_t fill_color,
+! PgColor_t text_color)
+ {
+ PtArg_t arg;
+ vimmenu_T *menu;
+ char_u *tooltip;
+
+! PtSetArg(&arg, Pt_ARG_POINTER, &menu, 0);
+! PtGetResources(widget, 1, &arg);
+
+ /* Override the text and position */
+
+ tooltip = text;
+! if (menu != NULL)
+ {
+ int index = MENU_INDEX_TIP;
+! if (menu->strings[ index ] != NULL)
+ tooltip = menu->strings[ index ];
+ }
+
+! return PtInflateBalloon(
+ window,
+ widget,
+ /* Don't put the balloon at the bottom,
+***************
+*** 261,285 ****
+ tooltip,
+ font,
+ fill_color,
+! text_color ) );
+ }
+
+ static void
+! gui_ph_resize_container( void )
+ {
+ PhArea_t area;
+
+! PtWidgetArea( gui.vimWindow, &area );
+! PtWidgetPos ( gui.vimContainer, &area.pos );
+
+! PtSetResource( gui.vimContainer, Pt_ARG_AREA, &area, 0 );
+ }
+
+ static int
+ gui_ph_handle_menu_resize(
+ PtWidget_t *widget,
+ void *other,
+! PtCallbackInfo_t *info )
+ {
+ PtContainerCallback_t *sizes = info->cbdata;
+ PtWidget_t *container;
+--- 261,285 ----
+ tooltip,
+ font,
+ fill_color,
+! text_color);
+ }
+
+ static void
+! gui_ph_resize_container(void)
+ {
+ PhArea_t area;
+
+! PtWidgetArea(gui.vimWindow, &area);
+! PtWidgetPos (gui.vimContainer, &area.pos);
+
+! PtSetResource(gui.vimContainer, Pt_ARG_AREA, &area, 0);
+ }
+
+ static int
+ gui_ph_handle_menu_resize(
+ PtWidget_t *widget,
+ void *other,
+! PtCallbackInfo_t *info)
+ {
+ PtContainerCallback_t *sizes = info->cbdata;
+ PtWidget_t *container;
+***************
+*** 291,297 ****
+ /* Because vim treats the toolbar and menubar separately,
+ * and here they're lumped together into a PtToolbarGroup,
+ * we only need either menu_height or toolbar_height set at once */
+! if( gui.menu_is_active )
+ {
+ gui.menu_height = height;
+ gui.toolbar_height = 0;
+--- 291,297 ----
+ /* Because vim treats the toolbar and menubar separately,
+ * and here they're lumped together into a PtToolbarGroup,
+ * we only need either menu_height or toolbar_height set at once */
+! if (gui.menu_is_active)
+ {
+ gui.menu_height = height;
+ gui.toolbar_height = 0;
+***************
+*** 310,325 ****
+ container = gui.vimContainer;
+ #endif
+
+! PtSetResource( container, Pt_ARG_POS, &below_menu, 0 );
+
+ gui_ph_resize_container();
+
+ #ifdef USE_PANEL_GROUP
+ gui_ph_get_panelgroup_margins(
+ &pg_margin_top, &pg_margin_bottom,
+! &pg_margin_left, &pg_margin_right );
+ #endif
+! return( Pt_CONTINUE );
+ }
+
+ /*
+--- 310,325 ----
+ container = gui.vimContainer;
+ #endif
+
+! PtSetResource(container, Pt_ARG_POS, &below_menu, 0);
+
+ gui_ph_resize_container();
+
+ #ifdef USE_PANEL_GROUP
+ gui_ph_get_panelgroup_margins(
+ &pg_margin_top, &pg_margin_bottom,
+! &pg_margin_left, &pg_margin_right);
+ #endif
+! return Pt_CONTINUE;
+ }
+
+ /*
+***************
+*** 330,352 ****
+ gui_ph_handle_timer_cursor(
+ PtWidget_t *widget,
+ void *data,
+! PtCallbackInfo_t *info )
+ {
+! if( blink_state == BLINK_ON )
+ {
+ gui_undraw_cursor();
+ blink_state = BLINK_OFF;
+! PtSetResource( gui_ph_timer_cursor, Pt_ARG_TIMER_INITIAL,
+! blink_offtime, 0 );
+ }
+ else
+ {
+ gui_update_cursor(TRUE, FALSE);
+ blink_state = BLINK_ON;
+! PtSetResource( gui_ph_timer_cursor, Pt_ARG_TIMER_INITIAL,
+! blink_ontime, 0 );
+ }
+! return( Pt_CONTINUE );
+ }
+
+ static int
+--- 330,352 ----
+ gui_ph_handle_timer_cursor(
+ PtWidget_t *widget,
+ void *data,
+! PtCallbackInfo_t *info)
+ {
+! if (blink_state == BLINK_ON)
+ {
+ gui_undraw_cursor();
+ blink_state = BLINK_OFF;
+! PtSetResource(gui_ph_timer_cursor, Pt_ARG_TIMER_INITIAL,
+! blink_offtime, 0);
+ }
+ else
+ {
+ gui_update_cursor(TRUE, FALSE);
+ blink_state = BLINK_ON;
+! PtSetResource(gui_ph_timer_cursor, Pt_ARG_TIMER_INITIAL,
+! blink_ontime, 0);
+ }
+! return Pt_CONTINUE;
+ }
+
+ static int
+***************
+*** 354,360 ****
+ {
+ is_timeout = TRUE;
+
+! return( Pt_CONTINUE );
+ }
+
+ static int
+--- 354,360 ----
+ {
+ is_timeout = TRUE;
+
+! return Pt_CONTINUE;
+ }
+
+ static int
+***************
+*** 402,408 ****
+ break;
+ }
+
+! return( Pt_CONTINUE );
+ }
+
+ static int
+--- 402,408 ----
+ break;
+ }
+
+! return Pt_CONTINUE;
+ }
+
+ static int
+***************
+*** 426,438 ****
+
+ case Pt_SCROLL_SET:
+ /* FIXME: return straight away here? */
+! return( Pt_CONTINUE );
+ break;
+ }
+
+ gui_drag_scrollbar(sb, value, dragging);
+ }
+! return( Pt_CONTINUE );
+ }
+
+ static int
+--- 426,438 ----
+
+ case Pt_SCROLL_SET:
+ /* FIXME: return straight away here? */
+! return Pt_CONTINUE;
+ break;
+ }
+
+ gui_drag_scrollbar(sb, value, dragging);
+ }
+! return Pt_CONTINUE;
+ }
+
+ static int
+***************
+*** 453,459 ****
+ /* We're a good lil photon program, aren't we? yes we are, yeess wee arrr */
+ if( key->key_flags & Pk_KF_Compose )
+ {
+! return( Pt_CONTINUE );
+ }
+
+ if( (key->key_flags & Pk_KF_Cap_Valid) &&
+--- 453,459 ----
+ /* We're a good lil photon program, aren't we? yes we are, yeess wee arrr */
+ if( key->key_flags & Pk_KF_Compose )
+ {
+! return Pt_CONTINUE;
+ }
+
+ if( (key->key_flags & Pk_KF_Cap_Valid) &&
+***************
+*** 473,479 ****
+ gui_is_menu_shortcut( key->key_cap ) ) ) )
+ {
+ /* Fallthrough and let photon look for the hotkey */
+! return( Pt_CONTINUE );
+ }
+ #endif
+
+--- 473,479 ----
+ gui_is_menu_shortcut( key->key_cap ) ) ) )
+ {
+ /* Fallthrough and let photon look for the hotkey */
+! return Pt_CONTINUE;
+ }
+ #endif
+
+***************
+*** 544,550 ****
+ add_to_input_buf( string, len );
+ }
+
+! return( Pt_CONSUME );
+ }
+ len = 0;
+ #endif
+--- 544,550 ----
+ add_to_input_buf( string, len );
+ }
+
+! return Pt_CONSUME;
+ }
+ len = 0;
+ #endif
+***************
+*** 579,585 ****
+ }
+ else
+ {
+! return( Pt_CONTINUE );
+ }
+ }
+ else
+--- 579,585 ----
+ }
+ else
+ {
+! return Pt_CONTINUE;
+ }
+ }
+ else
+***************
+*** 622,632 ****
+ if( len > 0 )
+ {
+ add_to_input_buf( string, len );
+! return( Pt_CONSUME );
+ }
+ }
+
+! return( Pt_CONTINUE );
+ }
+
+ static int
+--- 622,632 ----
+ if( len > 0 )
+ {
+ add_to_input_buf( string, len );
+! return Pt_CONSUME;
+ }
+ }
+
+! return Pt_CONTINUE;
+ }
+
+ static int
+***************
+*** 652,658 ****
+ if( info->event->type == Ph_EV_PTR_MOTION_NOBUTTON )
+ {
+ gui_mouse_moved( mouse_x, mouse_y );
+! return( Pt_CONTINUE );
+ }
+
+ if( pointer->key_mods & Pk_KM_Shift )
+--- 652,658 ----
+ if( info->event->type == Ph_EV_PTR_MOTION_NOBUTTON )
+ {
+ gui_mouse_moved( mouse_x, mouse_y );
+! return Pt_CONTINUE;
+ }
+
+ if( pointer->key_mods & Pk_KM_Shift )
+***************
+*** 702,708 ****
+ gui_send_mouse_event( button , mouse_x, mouse_y, repeated_click, modifiers );
+ }
+
+! return( Pt_CONTINUE );
+ }
+
+ /* Handle a focus change of the PtRaw widget */
+--- 702,708 ----
+ gui_send_mouse_event( button , mouse_x, mouse_y, repeated_click, modifiers );
+ }
+
+! return Pt_CONTINUE;
+ }
+
+ /* Handle a focus change of the PtRaw widget */
+***************
+*** 721,727 ****
+ PtAddEventHandler( gui.vimTextArea, Ph_EV_PTR_MOTION_NOBUTTON,
+ gui_ph_handle_mouse, NULL );
+ }
+! return( Pt_CONTINUE );
+ }
+
+ static void
+--- 721,727 ----
+ PtAddEventHandler( gui.vimTextArea, Ph_EV_PTR_MOTION_NOBUTTON,
+ gui_ph_handle_mouse, NULL );
+ }
+! return Pt_CONTINUE;
+ }
+
+ static void
+***************
+*** 793,799 ****
+ PtRealizeWidget( menu->submenu_id );
+ }
+
+! return( Pt_CONTINUE );
+ }
+
+ /* This is used for pulldown/popup menus and also toolbar buttons */
+--- 793,799 ----
+ PtRealizeWidget( menu->submenu_id );
+ }
+
+! return Pt_CONTINUE;
+ }
+
+ /* This is used for pulldown/popup menus and also toolbar buttons */
+***************
+*** 805,811 ****
+ vimmenu_T *menu = (vimmenu_T *) data;
+ gui_menu_cb( menu );
+ }
+! return( Pt_CONTINUE );
+ }
+
+ /* Stop focus from disappearing into the menubar... */
+--- 805,811 ----
+ vimmenu_T *menu = (vimmenu_T *) data;
+ gui_menu_cb( menu );
+ }
+! return Pt_CONTINUE;
+ }
+
+ /* Stop focus from disappearing into the menubar... */
+***************
+*** 816,822 ****
+ PtCallbackInfo_t *info )
+ {
+ PtGiveFocus( gui.vimTextArea, NULL );
+! return( Pt_CONTINUE );
+ }
+
+ static int
+--- 816,822 ----
+ PtCallbackInfo_t *info )
+ {
+ PtGiveFocus( gui.vimTextArea, NULL );
+! return Pt_CONTINUE;
+ }
+
+ static int
+***************
+*** 826,832 ****
+ PtCallbackInfo_t *info )
+ {
+ gui_set_shellsize( FALSE, TRUE, RESIZE_BOTH );
+! return( Pt_CONTINUE );
+ }
+
+ /****************************************************************************/
+--- 826,832 ----
+ PtCallbackInfo_t *info )
+ {
+ gui_set_shellsize( FALSE, TRUE, RESIZE_BOTH );
+! return Pt_CONTINUE;
+ }
+
+ /****************************************************************************/
+***************
+*** 878,884 ****
+ ( STRCMP( items->dname, name ) != 0 ) )
+ items = items->next;
+ }
+! return( items );
+ }
+
+ static void
+--- 878,884 ----
+ ( STRCMP( items->dname, name ) != 0 ) )
+ items = items->next;
+ }
+! return items;
+ }
+
+ static void
+***************
+*** 927,933 ****
+ gui_menu_cb( menu );
+ }
+ }
+! return( Pt_CONTINUE );
+ }
+
+ static void
+--- 927,933 ----
+ gui_menu_cb( menu );
+ }
+ }
+! return Pt_CONTINUE;
+ }
+
+ static void
+***************
+*** 974,983 ****
+ mark++;
+
+ if( *mark == ')' )
+! return( TRUE);
+ }
+ }
+! return( FALSE );
+ }
+
+ static void
+--- 974,983 ----
+ mark++;
+
+ if( *mark == ')' )
+! return TRUE;
+ }
+ }
+! return FALSE;
+ }
+
+ static void
+***************
+*** 1057,1063 ****
+ gui_ph_pg_remove_buffer( menu->dname );
+ }
+
+! return( Pt_CONTINUE );
+ }
+ #endif
+
+--- 1057,1063 ----
+ gui_ph_pg_remove_buffer( menu->dname );
+ }
+
+! return Pt_CONTINUE;
+ }
+ #endif
+
+***************
+*** 1071,1077 ****
+ PtContainerHold( gui.vimContainer );
+ }
+
+! return( Pt_CONTINUE );
+ }
+
+ /****************************************************************************/
+--- 1071,1077 ----
+ PtContainerHold( gui.vimContainer );
+ }
+
+! return Pt_CONTINUE;
+ }
+
+ /****************************************************************************/
+***************
+*** 1126,1132 ****
+
+ gui.event_buffer = (PhEvent_t *) alloc( EVENT_BUFFER_SIZE );
+ if( gui.event_buffer == NULL )
+! return( FAIL );
+
+ /* Get a translation so we can convert from ISO Latin-1 to UTF */
+ charset_translate = PxTranslateSet( NULL, "latin1" );
+--- 1126,1132 ----
+
+ gui.event_buffer = (PhEvent_t *) alloc( EVENT_BUFFER_SIZE );
+ if( gui.event_buffer == NULL )
+! return FAIL;
+
+ /* Get a translation so we can convert from ISO Latin-1 to UTF */
+ charset_translate = PxTranslateSet( NULL, "latin1" );
+***************
+*** 1141,1147 ****
+ PtSetArg( &args[ n++ ], Pt_ARG_DIM, &window_size, 0 );
+ gui.vimWindow = PtCreateWidget( PtWindow, NULL, n, args );
+ if( gui.vimWindow == NULL )
+! return( FAIL );
+
+ PtAddCallback( gui.vimWindow, Pt_CB_WINDOW, gui_ph_handle_window_cb, NULL );
+ PtAddCallback( gui.vimWindow, Pt_CB_WINDOW_OPENING,
+--- 1141,1147 ----
+ PtSetArg( &args[ n++ ], Pt_ARG_DIM, &window_size, 0 );
+ gui.vimWindow = PtCreateWidget( PtWindow, NULL, n, args );
+ if( gui.vimWindow == NULL )
+! return FAIL;
+
+ PtAddCallback( gui.vimWindow, Pt_CB_WINDOW, gui_ph_handle_window_cb, NULL );
+ PtAddCallback( gui.vimWindow, Pt_CB_WINDOW_OPENING,
+***************
+*** 1158,1164 ****
+
+ gui.vimPanelGroup = PtCreateWidget( PtPanelGroup, gui.vimWindow, n, args );
+ if( gui.vimPanelGroup == NULL )
+! return( FAIL );
+
+ PtAddCallback( gui.vimPanelGroup, Pt_CB_PG_PANEL_SWITCHING,
+ gui_ph_handle_pg_change, NULL );
+--- 1158,1164 ----
+
+ gui.vimPanelGroup = PtCreateWidget( PtPanelGroup, gui.vimWindow, n, args );
+ if( gui.vimPanelGroup == NULL )
+! return FAIL;
+
+ PtAddCallback( gui.vimPanelGroup, Pt_CB_PG_PANEL_SWITCHING,
+ gui_ph_handle_pg_change, NULL );
+***************
+*** 1172,1178 ****
+
+ gui.vimContainer = PtCreateWidget( PtPane, gui.vimWindow, n, args );
+ if( gui.vimContainer == NULL )
+! return( FAIL );
+
+ PtAddCallback( gui.vimContainer, Pt_CB_RESIZE, gui_ph_pane_resize, NULL );
+ #endif
+--- 1172,1178 ----
+
+ gui.vimContainer = PtCreateWidget( PtPane, gui.vimWindow, n, args );
+ if( gui.vimContainer == NULL )
+! return FAIL;
+
+ PtAddCallback( gui.vimContainer, Pt_CB_RESIZE, gui_ph_pane_resize, NULL );
+ #endif
+***************
+*** 1195,1201 ****
+
+ gui.vimTextArea = PtCreateWidget( PtRaw, Pt_DFLT_PARENT, n, args );
+ if( gui.vimTextArea == NULL)
+! return( FAIL );
+
+ /* TODO: use PtAddEventHandlers instead? */
+ /* Not using Ph_EV_BUT_REPEAT because vim wouldn't use it anyway */
+--- 1195,1201 ----
+
+ gui.vimTextArea = PtCreateWidget( PtRaw, Pt_DFLT_PARENT, n, args );
+ if( gui.vimTextArea == NULL)
+! return FAIL;
+
+ /* TODO: use PtAddEventHandlers instead? */
+ /* Not using Ph_EV_BUT_REPEAT because vim wouldn't use it anyway */
+***************
+*** 1220,1230 ****
+ */
+ gui_ph_timer_cursor = PtCreateWidget( PtTimer, gui.vimWindow, 0, NULL );
+ if( gui_ph_timer_cursor == NULL )
+! return( FAIL );
+
+ gui_ph_timer_timeout = PtCreateWidget( PtTimer, gui.vimWindow, 0, NULL );
+ if( gui_ph_timer_timeout == NULL )
+! return( FAIL );
+
+ PtAddCallback( gui_ph_timer_cursor, Pt_CB_TIMER_ACTIVATE,
+ gui_ph_handle_timer_cursor, NULL);
+--- 1220,1230 ----
+ */
+ gui_ph_timer_cursor = PtCreateWidget( PtTimer, gui.vimWindow, 0, NULL );
+ if( gui_ph_timer_cursor == NULL )
+! return FAIL;
+
+ gui_ph_timer_timeout = PtCreateWidget( PtTimer, gui.vimWindow, 0, NULL );
+ if( gui_ph_timer_timeout == NULL )
+! return FAIL;
+
+ PtAddCallback( gui_ph_timer_cursor, Pt_CB_TIMER_ACTIVATE,
+ gui_ph_handle_timer_cursor, NULL);
+***************
+*** 1239,1245 ****
+ gui.vimToolBarGroup = PtCreateWidget( PtToolbarGroup, gui.vimWindow,
+ n, args );
+ if( gui.vimToolBarGroup == NULL )
+! return( FAIL );
+
+ PtAddCallback( gui.vimToolBarGroup, Pt_CB_RESIZE,
+ gui_ph_handle_menu_resize, NULL );
+--- 1239,1245 ----
+ gui.vimToolBarGroup = PtCreateWidget( PtToolbarGroup, gui.vimWindow,
+ n, args );
+ if( gui.vimToolBarGroup == NULL )
+! return FAIL;
+
+ PtAddCallback( gui.vimToolBarGroup, Pt_CB_RESIZE,
+ gui_ph_handle_menu_resize, NULL );
+***************
+*** 1254,1260 ****
+ }
+ gui.vimMenuBar = PtCreateWidget( PtMenuBar, gui.vimToolBarGroup, n, args );
+ if( gui.vimMenuBar == NULL )
+! return( FAIL );
+
+ # ifdef FEAT_TOOLBAR
+ n = 0;
+--- 1254,1260 ----
+ }
+ gui.vimMenuBar = PtCreateWidget( PtMenuBar, gui.vimToolBarGroup, n, args );
+ if( gui.vimMenuBar == NULL )
+! return FAIL;
+
+ # ifdef FEAT_TOOLBAR
+ n = 0;
+***************
+*** 1273,1279 ****
+
+ gui.vimToolBar = PtCreateWidget( PtToolbar, gui.vimToolBarGroup, n, args );
+ if( gui.vimToolBar == NULL )
+! return( FAIL );
+
+ /*
+ * Size for the toolbar is fetched in gui_mch_show_toolbar, after
+--- 1273,1279 ----
+
+ gui.vimToolBar = PtCreateWidget( PtToolbar, gui.vimToolBarGroup, n, args );
+ if( gui.vimToolBar == NULL )
+! return FAIL;
+
+ /*
+ * Size for the toolbar is fetched in gui_mch_show_toolbar, after
+***************
+*** 1284,1296 ****
+
+ #endif
+
+! return( OK );
+ }
+
+ int
+ gui_mch_init_check(void)
+ {
+! return( (is_photon_available == TRUE) ? OK : FAIL );
+ }
+
+ int
+--- 1284,1296 ----
+
+ #endif
+
+! return OK;
+ }
+
+ int
+ gui_mch_init_check(void)
+ {
+! return (is_photon_available == TRUE) ? OK : FAIL;
+ }
+
+ int
+***************
+*** 1310,1316 ****
+ if (gui_win_x != -1 && gui_win_y != -1)
+ gui_mch_set_winpos(gui_win_x, gui_win_y);
+
+! return( (PtRealizeWidget( gui.vimWindow ) == 0) ? OK : FAIL );
+ }
+
+ void
+--- 1310,1316 ----
+ if (gui_win_x != -1 && gui_win_y != -1)
+ gui_mch_set_winpos(gui_win_x, gui_win_y);
+
+! return (PtRealizeWidget( gui.vimWindow ) == 0) ? OK : FAIL;
+ }
+
+ void
+***************
+*** 1336,1342 ****
+ exit_gui_mch_update( void *data )
+ {
+ *(int *)data = FALSE;
+! return( Pt_END );
+ }
+
+ void
+--- 1336,1342 ----
+ exit_gui_mch_update( void *data )
+ {
+ *(int *)data = FALSE;
+! return Pt_END;
+ }
+
+ void
+***************
+*** 1365,1374 ****
+ if( input_available() )
+ {
+ PtSetResource( gui_ph_timer_timeout, Pt_ARG_TIMER_INITIAL, 0, 0 );
+! return( OK );
+ }
+ else if( is_timeout == TRUE )
+! return( FAIL );
+ }
+ }
+
+--- 1365,1374 ----
+ if( input_available() )
+ {
+ PtSetResource( gui_ph_timer_timeout, Pt_ARG_TIMER_INITIAL, 0, 0 );
+! return OK;
+ }
+ else if( is_timeout == TRUE )
+! return FAIL;
+ }
+ }
+
+***************
+*** 1446,1454 ****
+ vim_free( default_path );
+
+ if( file.ret == Pt_FSDIALOG_BTN1 )
+! return( vim_strsave( file.path ) );
+ }
+! return( NULL );
+ }
+ #endif
+
+--- 1446,1454 ----
+ vim_free( default_path );
+
+ if( file.ret == Pt_FSDIALOG_BTN1 )
+! return vim_strsave(file.path);
+ }
+! return NULL;
+ }
+ #endif
+
+***************
+*** 1470,1476 ****
+
+ PtModalUnblock( modal_ctrl, (void *) button );
+
+! return( Pt_TRUE );
+ }
+
+ static int
+--- 1470,1476 ----
+
+ PtModalUnblock( modal_ctrl, (void *) button );
+
+! return Pt_TRUE;
+ }
+
+ static int
+***************
+*** 1478,1484 ****
+ {
+ if( info->reason_subtype == Pt_EDIT_ACTIVATE )
+ gui_ph_dialog_close( 1, data );
+! return( Pt_CONTINUE );
+ }
+
+ static int
+--- 1478,1484 ----
+ {
+ if( info->reason_subtype == Pt_EDIT_ACTIVATE )
+ gui_ph_dialog_close( 1, data );
+! return Pt_CONTINUE;
+ }
+
+ static int
+***************
+*** 1490,1498 ****
+ if( ( key->key_flags & Pk_KF_Cap_Valid ) && ( key->key_cap == Pk_Escape ) )
+ {
+ gui_ph_dialog_close( 0, data );
+! return( Pt_CONSUME );
+ }
+! return( Pt_PROCESS );
+ }
+
+ int
+--- 1490,1498 ----
+ if( ( key->key_flags & Pk_KF_Cap_Valid ) && ( key->key_cap == Pk_Escape ) )
+ {
+ gui_ph_dialog_close( 0, data );
+! return Pt_CONSUME;
+ }
+! return Pt_PROCESS;
+ }
+
+ int
+***************
+*** 1519,1525 ****
+ button_count = len = i = 0;
+
+ if( buttons == NULL || *buttons == NUL )
+! return( -1 );
+
+ /* There is one less separator than buttons, so bump up the button count */
+ button_count = 1;
+--- 1519,1525 ----
+ button_count = len = i = 0;
+
+ if( buttons == NULL || *buttons == NUL )
+! return -1;
+
+ /* There is one less separator than buttons, so bump up the button count */
+ button_count = 1;
+***************
+*** 1637,1643 ****
+ vim_free( button_array );
+ vim_free( buttons_copy );
+
+! return( dialog_result );
+ }
+ #endif
+ /****************************************************************************/
+--- 1637,1643 ----
+ vim_free( button_array );
+ vim_free( buttons_copy );
+
+! return dialog_result;
+ }
+ #endif
+ /****************************************************************************/
+***************
+*** 1653,1659 ****
+ *x = pos->x;
+ *y = pos->y;
+
+! return( OK );
+ }
+
+ void
+--- 1653,1659 ----
+ *x = pos->x;
+ *y = pos->y;
+
+! return OK;
+ }
+
+ void
+***************
+*** 1975,1985 ****
+ hex_digit(int c)
+ {
+ if (VIM_ISDIGIT(c))
+! return( c - '0' );
+ c = TOLOWER_ASC(c);
+ if (c >= 'a' && c <= 'f')
+! return( c - 'a' + 10 );
+! return( -1000 );
+ }
+
+
+--- 1975,1985 ----
+ hex_digit(int c)
+ {
+ if (VIM_ISDIGIT(c))
+! return c - '0';
+ c = TOLOWER_ASC(c);
+ if (c >= 'a' && c <= 'f')
+! return c - 'a' + 10;
+! return -1000;
+ }
+
+
+***************
+*** 2065,2077 ****
+ b = hex_digit( name[5] ) * 16 + hex_digit( name[6] );
+ if( r < 0 || g < 0 || b < 0 )
+ return INVALCOLOR;
+! return( RGB( r, g, b ) );
+ }
+
+ for( i = 0; i < ARRAY_LENGTH( table ); i++ )
+ {
+ if( STRICMP( name, table[i].name ) == 0 )
+! return( table[i].colour );
+ }
+
+ /*
+--- 2065,2077 ----
+ b = hex_digit( name[5] ) * 16 + hex_digit( name[6] );
+ if( r < 0 || g < 0 || b < 0 )
+ return INVALCOLOR;
+! return RGB(r, g, b);
+ }
+
+ for( i = 0; i < ARRAY_LENGTH( table ); i++ )
+ {
+ if( STRICMP( name, table[i].name ) == 0 )
+! return table[i].colour;
+ }
+
+ /*
+***************
+*** 2115,2121 ****
+ if (STRICMP(color, name) == 0)
+ {
+ fclose(fd);
+! return( (guicolor_T) RGB(r,g,b) );
+ }
+ }
+
+--- 2115,2121 ----
+ if (STRICMP(color, name) == 0)
+ {
+ fclose(fd);
+! return (guicolor_T)RGB(r, g, b);
+ }
+ }
+
+***************
+*** 2451,2458 ****
+ for (i = 0; special_keys[i].key_sym != 0; i++)
+ if (name[0] == special_keys[i].vim_code0 &&
+ name[1] == special_keys[i].vim_code1)
+! return( OK );
+! return( FAIL );
+ }
+
+ /****************************************************************************/
+--- 2451,2458 ----
+ for (i = 0; special_keys[i].key_sym != 0; i++)
+ if (name[0] == special_keys[i].vim_code0 &&
+ name[1] == special_keys[i].vim_code1)
+! return OK;
+! return FAIL;
+ }
+
+ /****************************************************************************/
+***************
+*** 2512,2518 ****
+
+ temp_phi = &external_icon;
+ }
+! return( temp_phi );
+ }
+
+ /*
+--- 2512,2518 ----
+
+ temp_phi = &external_icon;
+ }
+! return temp_phi;
+ }
+
+ /*
+***************
+*** 2541,2556 ****
+ icon = gui_ph_toolbar_load_icon( full_pathname );
+
+ if( icon != NULL )
+! return( icon );
+ }
+
+ if( menu->iconidx >= 0 &&
+ ( menu->iconidx < ARRAY_LENGTH( gui_ph_toolbar_images ) ) )
+ {
+! return( gui_ph_toolbar_images[ menu->iconidx ] );
+ }
+
+! return( NULL );
+ }
+ #endif
+
+--- 2541,2556 ----
+ icon = gui_ph_toolbar_load_icon( full_pathname );
+
+ if( icon != NULL )
+! return icon;
+ }
+
+ if( menu->iconidx >= 0 &&
+ ( menu->iconidx < ARRAY_LENGTH( gui_ph_toolbar_images ) ) )
+ {
+! return gui_ph_toolbar_images[menu->iconidx];
+ }
+
+! return NULL;
+ }
+ #endif
+
+***************
+*** 2895,2905 ****
+ * at least has the bits we're checking for */
+ if( font_size == info.size &&
+ style == (info.style & style) )
+! return( (GuiFont) font_tag );
+ }
+ vim_free( font_tag );
+ }
+! return( NULL );
+ }
+
+ /*
+--- 2895,2905 ----
+ * at least has the bits we're checking for */
+ if( font_size == info.size &&
+ style == (info.style & style) )
+! return (GuiFont)font_tag;
+ }
+ vim_free( font_tag );
+ }
+! return NULL;
+ }
+
+ /*
+***************
+*** 2957,2965 ****
+ }
+ }
+ }
+! return( TRUE );
+ }
+! return( FALSE );
+ }
+
+ int
+--- 2957,2965 ----
+ }
+ }
+ }
+! return TRUE;
+ }
+! return FALSE;
+ }
+
+ int
+***************
+*** 2985,2991 ****
+ "pcterm12", -1, PHFONT_FIXED, NULL );
+
+ if( font_tag == NULL )
+! return( FAIL );
+
+ gui_mch_free_font( gui.norm_font );
+ gui.norm_font = font_tag;
+--- 2985,2991 ----
+ "pcterm12", -1, PHFONT_FIXED, NULL );
+
+ if( font_tag == NULL )
+! return FAIL;
+
+ gui_mch_free_font( gui.norm_font );
+ gui.norm_font = font_tag;
+***************
+*** 2997,3009 ****
+ {
+ if( gui_ph_parse_font_name( vim_font_name, &font_name, &font_flags,
+ &font_size ) == FALSE )
+! return( FAIL );
+
+ font_tag = gui_ph_get_font( font_name, font_flags, font_size, 0 );
+ if( font_tag == NULL )
+ {
+ vim_free( font_name );
+! return( FAIL );
+ }
+
+ gui_mch_free_font( gui.norm_font );
+--- 2997,3009 ----
+ {
+ if( gui_ph_parse_font_name( vim_font_name, &font_name, &font_flags,
+ &font_size ) == FALSE )
+! return FAIL;
+
+ font_tag = gui_ph_get_font( font_name, font_flags, font_size, 0 );
+ if( font_tag == NULL )
+ {
+ vim_free( font_name );
+! return FAIL;
+ }
+
+ gui_mch_free_font( gui.norm_font );
+***************
+*** 3026,3032 ****
+ gui.char_ascent = - extent.ul.y;
+
+ vim_free( font_name );
+! return( OK );
+ }
+
+ /*
+--- 3026,3032 ----
+ gui.char_ascent = - extent.ul.y;
+
+ vim_free( font_name );
+! return OK;
+ }
+
+ /*
+***************
+*** 3042,3048 ****
+ gui.char_height = - info.ascender + info.descender + p_linespace;
+ gui.char_ascent = - info.ascender + p_linespace / 2;
+
+! return( OK );
+ }
+
+ GuiFont
+--- 3042,3048 ----
+ gui.char_height = - info.ascender + info.descender + p_linespace;
+ gui.char_ascent = - info.ascender + p_linespace / 2;
+
+! return OK;
+ }
+
+ GuiFont
+***************
+*** 3060,3072 ****
+ vim_free( font_name );
+
+ if( font_tag != NULL )
+! return( (GuiFont) font_tag );
+ }
+
+ if( report_error )
+ EMSG2(e_font, vim_font_name );
+
+! return( FAIL );
+ }
+
+ #if defined(FEAT_EVAL) || defined(PROTO)
+--- 3060,3072 ----
+ vim_free( font_name );
+
+ if( font_tag != NULL )
+! return (GuiFont)font_tag;
+ }
+
+ if( report_error )
+ EMSG2(e_font, vim_font_name );
+
+! return FAIL;
+ }
+
+ #if defined(FEAT_EVAL) || defined(PROTO)
+*** ../vim-7.3.261/src/version.c 2011-07-27 13:59:12.000000000 +0200
+--- src/version.c 2011-07-27 14:08:08.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 262,
+ /**/
+
+--
+You know you use Vim too much when you have this alias in your
+~/.bashrc file: alias :e=/bin/vim (Eljay Love-Jensen)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.263 b/source/ap/vim/patches/7.3.263
new file mode 100644
index 000000000..98850988c
--- /dev/null
+++ b/source/ap/vim/patches/7.3.263
@@ -0,0 +1,162 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.263
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.263
+Problem: Perl and Tcl have a few code style problems.
+Solution: Clean it up. (Elias Diem)
+Files: src/if_perl.xs, src/if_tcl.c
+
+
+*** ../vim-7.3.262/src/if_perl.xs 2010-10-23 14:02:48.000000000 +0200
+--- src/if_perl.xs 2011-07-27 14:11:03.000000000 +0200
+***************
+*** 755,761 ****
+ #ifdef HAVE_SANDBOX
+ if (sandbox)
+ {
+! safe = perl_get_sv( "VIM::safe", FALSE );
+ # ifndef MAKE_TEST /* avoid a warning for unreachable code */
+ if (safe == NULL || !SvTRUE(safe))
+ EMSG(_("E299: Perl evaluation forbidden in sandbox without the Safe module"));
+--- 755,761 ----
+ #ifdef HAVE_SANDBOX
+ if (sandbox)
+ {
+! safe = perl_get_sv("VIM::safe", FALSE);
+ # ifndef MAKE_TEST /* avoid a warning for unreachable code */
+ if (safe == NULL || !SvTRUE(safe))
+ EMSG(_("E299: Perl evaluation forbidden in sandbox without the Safe module"));
+***************
+*** 1108,1114 ****
+ VIWIN win
+
+ PPCODE:
+! if(items == 1)
+ {
+ EXTEND(sp, 2);
+ if (!win_valid(win))
+--- 1108,1114 ----
+ VIWIN win
+
+ PPCODE:
+! if (items == 1)
+ {
+ EXTEND(sp, 2);
+ if (!win_valid(win))
+***************
+*** 1116,1122 ****
+ PUSHs(sv_2mortal(newSViv(win->w_cursor.lnum)));
+ PUSHs(sv_2mortal(newSViv(win->w_cursor.col)));
+ }
+! else if(items == 3)
+ {
+ int lnum, col;
+
+--- 1116,1122 ----
+ PUSHs(sv_2mortal(newSViv(win->w_cursor.lnum)));
+ PUSHs(sv_2mortal(newSViv(win->w_cursor.col)));
+ }
+! else if (items == 3)
+ {
+ int lnum, col;
+
+***************
+*** 1249,1257 ****
+ {
+ lnum = SvIV(ST(1));
+ count = 1 + SvIV(ST(2)) - lnum;
+! if(count == 0)
+ count = 1;
+! if(count < 0)
+ {
+ lnum -= count;
+ count = -count;
+--- 1249,1257 ----
+ {
+ lnum = SvIV(ST(1));
+ count = 1 + SvIV(ST(2)) - lnum;
+! if (count == 0)
+ count = 1;
+! if (count < 0)
+ {
+ lnum -= count;
+ count = -count;
+*** ../vim-7.3.262/src/if_tcl.c 2010-12-17 20:23:56.000000000 +0100
+--- src/if_tcl.c 2011-07-27 14:11:03.000000000 +0200
+***************
+*** 1884,1897 ****
+ {
+ int newerr = OK;
+
+! if (error == TCL_EXIT )
+ {
+ int retval;
+ char buf[50];
+ Tcl_Obj *robj;
+
+ robj = Tcl_GetObjResult(tclinfo.interp);
+! if( Tcl_GetIntFromObj(tclinfo.interp, robj, &retval) != TCL_OK )
+ {
+ EMSG(_("E281: TCL ERROR: exit code is not int!? Please report this to vim-dev@vim.org"));
+ newerr = FAIL;
+--- 1884,1897 ----
+ {
+ int newerr = OK;
+
+! if (error == TCL_EXIT)
+ {
+ int retval;
+ char buf[50];
+ Tcl_Obj *robj;
+
+ robj = Tcl_GetObjResult(tclinfo.interp);
+! if (Tcl_GetIntFromObj(tclinfo.interp, robj, &retval) != TCL_OK)
+ {
+ EMSG(_("E281: TCL ERROR: exit code is not int!? Please report this to vim-dev@vim.org"));
+ newerr = FAIL;
+***************
+*** 1900,1906 ****
+ {
+ sprintf(buf, _("E572: exit code %d"), retval);
+ tclerrmsg(buf);
+! if (retval == 0 )
+ {
+ did_emsg = 0;
+ newerr = OK;
+--- 1900,1906 ----
+ {
+ sprintf(buf, _("E572: exit code %d"), retval);
+ tclerrmsg(buf);
+! if (retval == 0)
+ {
+ did_emsg = 0;
+ newerr = OK;
+*** ../vim-7.3.262/src/version.c 2011-07-27 14:09:05.000000000 +0200
+--- src/version.c 2011-07-27 14:12:05.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 263,
+ /**/
+
+--
+DEAD PERSON: I don't want to go in the cart!
+CUSTOMER: Oh, don't be such a baby.
+MORTICIAN: I can't take him...
+DEAD PERSON: I feel fine!
+CUSTOMER: Oh, do us a favor...
+MORTICIAN: I can't.
+ The Quest for the Holy Grail (Monty Python)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.264 b/source/ap/vim/patches/7.3.264
new file mode 100644
index 000000000..71ec851f3
--- /dev/null
+++ b/source/ap/vim/patches/7.3.264
@@ -0,0 +1,159 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.264
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.264
+Problem: When the current directory name contains wildcard characters, such
+ as "foo[with]bar", the tags file can't be found. (Jeremy
+ Erickson)
+Solution: When searching for matching files also match without expanding
+ wildcards. This is a bit of a hack.
+Files: src/vim.h, src/misc1.c, src/misc2.c
+
+
+*** ../vim-7.3.263/src/vim.h 2011-07-20 15:04:52.000000000 +0200
+--- src/vim.h 2011-07-27 16:21:38.000000000 +0200
+***************
+*** 816,821 ****
+--- 816,822 ----
+ #define EW_PATH 0x80 /* search in 'path' too */
+ #define EW_ICASE 0x100 /* ignore case */
+ #define EW_NOERROR 0x200 /* no error for bad regexp */
++ #define EW_NOTWILD 0x400 /* add match with literal name if exists */
+ /* Note: mostly EW_NOTFOUND and EW_SILENT are mutually exclusive: EW_NOTFOUND
+ * is used when executing commands and EW_SILENT for interactive expanding. */
+
+*** ../vim-7.3.263/src/misc1.c 2011-07-20 15:04:52.000000000 +0200
+--- src/misc1.c 2011-07-27 17:24:39.000000000 +0200
+***************
+*** 9119,9125 ****
+ * all entries found with "matchname". */
+ if ((p[0] != '.' || starts_with_dot)
+ && (matchname == NULL
+! || vim_regexec(&regmatch, p, (colnr_T)0)))
+ {
+ #ifdef WIN3264
+ STRCPY(s, p);
+--- 9119,9127 ----
+ * all entries found with "matchname". */
+ if ((p[0] != '.' || starts_with_dot)
+ && (matchname == NULL
+! || vim_regexec(&regmatch, p, (colnr_T)0)
+! || ((flags & EW_NOTWILD)
+! && fnamencmp(path + (s - buf), p, e - s) == 0)))
+ {
+ #ifdef WIN3264
+ STRCPY(s, p);
+***************
+*** 9323,9329 ****
+ e = p;
+ *e = NUL;
+
+! /* now we have one wildcard component between "s" and "e" */
+ /* Remove backslashes between "wildoff" and the start of the wildcard
+ * component. */
+ for (p = buf + wildoff; p < s; ++p)
+--- 9325,9331 ----
+ e = p;
+ *e = NUL;
+
+! /* Now we have one wildcard component between "s" and "e". */
+ /* Remove backslashes between "wildoff" and the start of the wildcard
+ * component. */
+ for (p = buf + wildoff; p < s; ++p)
+***************
+*** 9390,9396 ****
+ if (dp == NULL)
+ break;
+ if ((dp->d_name[0] != '.' || starts_with_dot)
+! && vim_regexec(&regmatch, (char_u *)dp->d_name, (colnr_T)0))
+ {
+ STRCPY(s, dp->d_name);
+ len = STRLEN(buf);
+--- 9392,9400 ----
+ if (dp == NULL)
+ break;
+ if ((dp->d_name[0] != '.' || starts_with_dot)
+! && (vim_regexec(&regmatch, (char_u *)dp->d_name, (colnr_T)0)
+! || ((flags & EW_NOTWILD)
+! && fnamencmp(path + (s - buf), dp->d_name, e - s) == 0)))
+ {
+ STRCPY(s, dp->d_name);
+ len = STRLEN(buf);
+*** ../vim-7.3.263/src/misc2.c 2011-07-07 17:15:29.000000000 +0200
+--- src/misc2.c 2011-07-27 17:21:10.000000000 +0200
+***************
+*** 4653,4661 ****
+ {
+ if (r_ptr[0] == '\\' && r_ptr[1] == ';')
+ {
+! /* overwrite the escape char,
+! * use STRLEN(r_ptr) to move the trailing '\0'
+! */
+ STRMOVE(r_ptr, r_ptr + 1);
+ r_ptr++;
+ }
+--- 4653,4660 ----
+ {
+ if (r_ptr[0] == '\\' && r_ptr[1] == ';')
+ {
+! /* Overwrite the escape char,
+! * use STRLEN(r_ptr) to move the trailing '\0'. */
+ STRMOVE(r_ptr, r_ptr + 1);
+ r_ptr++;
+ }
+***************
+*** 4914,4923 ****
+ stackp->ffs_filearray_size = 0;
+ }
+ else
+ expand_wildcards((dirptrs[1] == NULL) ? 1 : 2, dirptrs,
+ &stackp->ffs_filearray_size,
+ &stackp->ffs_filearray,
+! EW_DIR|EW_ADDSLASH|EW_SILENT);
+
+ stackp->ffs_filearray_cur = 0;
+ stackp->ffs_stage = 0;
+--- 4913,4925 ----
+ stackp->ffs_filearray_size = 0;
+ }
+ else
++ /* Add EW_NOTWILD because the expanded path may contain
++ * wildcard characters that are to be taken literally.
++ * This is a bit of a hack. */
+ expand_wildcards((dirptrs[1] == NULL) ? 1 : 2, dirptrs,
+ &stackp->ffs_filearray_size,
+ &stackp->ffs_filearray,
+! EW_DIR|EW_ADDSLASH|EW_SILENT|EW_NOTWILD);
+
+ stackp->ffs_filearray_cur = 0;
+ stackp->ffs_stage = 0;
+*** ../vim-7.3.263/src/version.c 2011-07-27 14:15:41.000000000 +0200
+--- src/version.c 2011-07-27 17:25:44.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 264,
+ /**/
+
+--
+CUSTOMER: You're not fooling anyone y'know. Look, isn't there something
+ you can do?
+DEAD PERSON: I feel happy... I feel happy.
+ [whop]
+CUSTOMER: Ah, thanks very much.
+MORTICIAN: Not at all. See you on Thursday.
+CUSTOMER: Right.
+ The Quest for the Holy Grail (Monty Python)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.265 b/source/ap/vim/patches/7.3.265
new file mode 100644
index 000000000..98cb1b4e0
--- /dev/null
+++ b/source/ap/vim/patches/7.3.265
@@ -0,0 +1,145 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.265
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.265
+Problem: When storing a pattern in search history there is no proper check
+ for the separator character.
+Solution: Pass the separator character to in_history(). (Muraoka Taro)
+Files: src/ex_getln.c
+
+
+*** ../vim-7.3.264/src/ex_getln.c 2011-07-07 16:44:33.000000000 +0200
+--- src/ex_getln.c 2011-07-27 17:50:35.000000000 +0200
+***************
+*** 67,73 ****
+
+ static int hist_char2type __ARGS((int c));
+
+! static int in_history __ARGS((int, char_u *, int));
+ # ifdef FEAT_EVAL
+ static int calc_hist_idx __ARGS((int histype, int num));
+ # endif
+--- 67,73 ----
+
+ static int hist_char2type __ARGS((int c));
+
+! static int in_history __ARGS((int, char_u *, int, int));
+ # ifdef FEAT_EVAL
+ static int calc_hist_idx __ARGS((int histype, int num));
+ # endif
+***************
+*** 5289,5301 ****
+ * If 'move_to_front' is TRUE, matching entry is moved to end of history.
+ */
+ static int
+! in_history(type, str, move_to_front)
+ int type;
+ char_u *str;
+ int move_to_front; /* Move the entry to the front if it exists */
+ {
+ int i;
+ int last_i = -1;
+
+ if (hisidx[type] < 0)
+ return FALSE;
+--- 5289,5303 ----
+ * If 'move_to_front' is TRUE, matching entry is moved to end of history.
+ */
+ static int
+! in_history(type, str, move_to_front, sep)
+ int type;
+ char_u *str;
+ int move_to_front; /* Move the entry to the front if it exists */
++ int sep;
+ {
+ int i;
+ int last_i = -1;
++ char_u *p;
+
+ if (hisidx[type] < 0)
+ return FALSE;
+***************
+*** 5304,5310 ****
+ {
+ if (history[type][i].hisstr == NULL)
+ return FALSE;
+! if (STRCMP(str, history[type][i].hisstr) == 0)
+ {
+ if (!move_to_front)
+ return TRUE;
+--- 5306,5317 ----
+ {
+ if (history[type][i].hisstr == NULL)
+ return FALSE;
+!
+! /* For search history, check that the separator character matches as
+! * well. */
+! p = history[type][i].hisstr;
+! if (STRCMP(str, p) == 0
+! && (type != HIST_SEARCH || sep == p[STRLEN(p) + 1]))
+ {
+ if (!move_to_front)
+ return TRUE;
+***************
+*** 5398,5404 ****
+ }
+ last_maptick = -1;
+ }
+! if (!in_history(histype, new_entry, TRUE))
+ {
+ if (++hisidx[histype] == hislen)
+ hisidx[histype] = 0;
+--- 5405,5411 ----
+ }
+ last_maptick = -1;
+ }
+! if (!in_history(histype, new_entry, TRUE, sep))
+ {
+ if (++hisidx[histype] == hislen)
+ hisidx[histype] = 0;
+***************
+*** 5977,5983 ****
+ if (val != NULL && *val != NUL)
+ {
+ if (!in_history(type, val + (type == HIST_SEARCH),
+! viminfo_add_at_front))
+ {
+ /* Need to re-allocate to append the separator byte. */
+ len = STRLEN(val);
+--- 5984,5990 ----
+ if (val != NULL && *val != NUL)
+ {
+ if (!in_history(type, val + (type == HIST_SEARCH),
+! viminfo_add_at_front, *val))
+ {
+ /* Need to re-allocate to append the separator byte. */
+ len = STRLEN(val);
+*** ../vim-7.3.264/src/version.c 2011-07-27 17:31:42.000000000 +0200
+--- src/version.c 2011-07-27 17:58:22.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 265,
+ /**/
+
+--
+ [clop clop]
+MORTICIAN: Who's that then?
+CUSTOMER: I don't know.
+MORTICIAN: Must be a king.
+CUSTOMER: Why?
+MORTICIAN: He hasn't got shit all over him.
+ The Quest for the Holy Grail (Monty Python)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.266 b/source/ap/vim/patches/7.3.266
new file mode 100644
index 000000000..373280ee4
--- /dev/null
+++ b/source/ap/vim/patches/7.3.266
@@ -0,0 +1,54 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.266
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.266
+Problem: In Gvim with iBus typing space in Insert mode doesn't work.
+Solution: Clear xim_expected_char after checking it.
+Files: src/mbyte.c
+
+
+*** ../vim-7.3.265/src/mbyte.c 2011-07-15 21:16:54.000000000 +0200
+--- src/mbyte.c 2011-07-27 18:21:13.000000000 +0200
+***************
+*** 5170,5175 ****
+--- 5170,5179 ----
+ /* We had a keypad key, and XIM tried to thieve it */
+ return FALSE;
+
++ /* This is supposed to fix a problem with iBus, that space
++ * characters don't work in input mode. */
++ xim_expected_char = NUL;
++
+ /* Normal processing */
+ return imresult;
+ }
+*** ../vim-7.3.265/src/version.c 2011-07-27 17:58:42.000000000 +0200
+--- src/version.c 2011-07-27 18:23:00.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 266,
+ /**/
+
+--
+ [clop clop]
+ARTHUR: Old woman!
+DENNIS: Man!
+ARTHUR: Man, sorry. What knight lives in that castle over there?
+DENNIS: I'm thirty seven.
+ARTHUR: What?
+DENNIS: I'm thirty seven -- I'm not old!
+ The Quest for the Holy Grail (Monty Python)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.267 b/source/ap/vim/patches/7.3.267
new file mode 100644
index 000000000..d986e5036
--- /dev/null
+++ b/source/ap/vim/patches/7.3.267
@@ -0,0 +1,67 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.267
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.267
+Problem: Ruby on Mac OS X 10.7 may crash.
+Solution: Avoid alloc(0). (Bjorn Winckler)
+Files: src/if_ruby.c
+
+
+*** ../vim-7.3.266/src/if_ruby.c 2011-01-17 19:53:20.000000000 +0100
+--- src/if_ruby.c 2011-08-04 18:57:43.000000000 +0200
+***************
+*** 761,771 ****
+ char *buff, *p;
+
+ str = rb_obj_as_string(str);
+! buff = ALLOCA_N(char, RSTRING_LEN(str));
+! strcpy(buff, RSTRING_PTR(str));
+! p = strchr(buff, '\n');
+! if (p) *p = '\0';
+! MSG(buff);
+ return Qnil;
+ }
+
+--- 761,779 ----
+ char *buff, *p;
+
+ str = rb_obj_as_string(str);
+! if (RSTRING_LEN(str) > 0)
+! {
+! /* Only do this when the string isn't empty, alloc(0) causes trouble. */
+! buff = ALLOCA_N(char, RSTRING_LEN(str));
+! strcpy(buff, RSTRING_PTR(str));
+! p = strchr(buff, '\n');
+! if (p) *p = '\0';
+! MSG(buff);
+! }
+! else
+! {
+! MSG("");
+! }
+ return Qnil;
+ }
+
+*** ../vim-7.3.266/src/version.c 2011-07-27 18:25:40.000000000 +0200
+--- src/version.c 2011-08-04 19:07:45.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 267,
+ /**/
+
+--
+There are 10 kinds of people: Those who understand binary and those who don't.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.268 b/source/ap/vim/patches/7.3.268
new file mode 100644
index 000000000..aa848770c
--- /dev/null
+++ b/source/ap/vim/patches/7.3.268
@@ -0,0 +1,69 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.268
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.268
+Problem: Vim freezes when executing an external command with zsh.
+Solution: Use O_NOCTTY both in the master and slave. (Bjorn Winckler)
+Files: src/os_unix.c
+
+
+*** ../vim-7.3.267/src/os_unix.c 2011-07-07 16:20:45.000000000 +0200
+--- src/os_unix.c 2011-08-04 19:06:14.000000000 +0200
+***************
+*** 3889,3899 ****
+ if (p_guipty && !(options & (SHELL_READ|SHELL_WRITE)))
+ {
+ pty_master_fd = OpenPTY(&tty_name); /* open pty */
+! if (pty_master_fd >= 0 && ((pty_slave_fd =
+! open(tty_name, O_RDWR | O_EXTRA, 0)) < 0))
+ {
+! close(pty_master_fd);
+! pty_master_fd = -1;
+ }
+ }
+ /*
+--- 3889,3909 ----
+ if (p_guipty && !(options & (SHELL_READ|SHELL_WRITE)))
+ {
+ pty_master_fd = OpenPTY(&tty_name); /* open pty */
+! if (pty_master_fd >= 0)
+ {
+! /* Leaving out O_NOCTTY may lead to waitpid() always returning
+! * 0 on Mac OS X 10.7 thereby causing freezes. Let's assume
+! * adding O_NOCTTY always works when defined. */
+! #ifdef O_NOCTTY
+! pty_slave_fd = open(tty_name, O_RDWR | O_NOCTTY | O_EXTRA, 0);
+! #else
+! pty_slave_fd = open(tty_name, O_RDWR | O_EXTRA, 0);
+! #endif
+! if (pty_slave_fd < 0)
+! {
+! close(pty_master_fd);
+! pty_master_fd = -1;
+! }
+ }
+ }
+ /*
+*** ../vim-7.3.267/src/version.c 2011-08-04 19:34:55.000000000 +0200
+--- src/version.c 2011-08-04 19:36:00.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 268,
+ /**/
+
+--
+Mental Floss prevents moral decay!
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.269 b/source/ap/vim/patches/7.3.269
new file mode 100644
index 000000000..a0bfc473c
--- /dev/null
+++ b/source/ap/vim/patches/7.3.269
@@ -0,0 +1,112 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.269
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.269
+Problem: 'shellcmdflag' only works with one flag.
+Solution: Split into multiple arguments. (Gary Johnson)
+Files: src/os_unix.c
+
+
+*** ../vim-7.3.268/src/os_unix.c 2011-08-04 19:36:47.000000000 +0200
+--- src/os_unix.c 2011-08-04 20:27:13.000000000 +0200
+***************
+*** 3795,3802 ****
+--- 3795,3804 ----
+ int retval = -1;
+ char **argv = NULL;
+ int argc;
++ char_u *p_shcf_copy = NULL;
+ int i;
+ char_u *p;
++ char_u *s;
+ int inquote;
+ int pty_master_fd = -1; /* for pty's */
+ # ifdef FEAT_GUI
+***************
+*** 3855,3860 ****
+--- 3857,3875 ----
+ }
+ if (argv == NULL)
+ {
++ /*
++ * Account for possible multiple args in p_shcf.
++ */
++ p = p_shcf;
++ for (;;)
++ {
++ p = skiptowhite(p);
++ if (*p == NUL)
++ break;
++ ++argc;
++ p = skipwhite(p);
++ }
++
+ argv = (char **)alloc((unsigned)((argc + 4) * sizeof(char *)));
+ if (argv == NULL) /* out of memory */
+ goto error;
+***************
+*** 3864,3870 ****
+ {
+ if (extra_shell_arg != NULL)
+ argv[argc++] = (char *)extra_shell_arg;
+! argv[argc++] = (char *)p_shcf;
+ argv[argc++] = (char *)cmd;
+ }
+ argv[argc] = NULL;
+--- 3879,3901 ----
+ {
+ if (extra_shell_arg != NULL)
+ argv[argc++] = (char *)extra_shell_arg;
+!
+! /* Break 'shellcmdflag' into white separated parts. This doesn't
+! * handle quoted strings, they are very unlikely to appear. */
+! p_shcf_copy = alloc((unsigned)STRLEN(p_shcf) + 1);
+! if (p_shcf_copy == NULL) /* out of memory */
+! goto error;
+! s = p_shcf_copy;
+! p = p_shcf;
+! while (*p != NUL)
+! {
+! argv[argc++] = (char *)s;
+! while (*p && *p != ' ' && *p != TAB)
+! *s++ = *p++;
+! *s++ = NUL;
+! p = skipwhite(p);
+! }
+!
+ argv[argc++] = (char *)cmd;
+ }
+ argv[argc] = NULL;
+***************
+*** 4677,4682 ****
+--- 4708,4714 ----
+ }
+ }
+ vim_free(argv);
++ vim_free(p_shcf_copy);
+
+ error:
+ if (!did_settmode)
+*** ../vim-7.3.268/src/version.c 2011-08-04 19:36:47.000000000 +0200
+--- src/version.c 2011-08-04 20:30:44.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 269,
+ /**/
+
+--
+Be nice to your kids... they'll be the ones choosing your nursing home.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.270 b/source/ap/vim/patches/7.3.270
new file mode 100644
index 000000000..3eaf6bfa0
--- /dev/null
+++ b/source/ap/vim/patches/7.3.270
@@ -0,0 +1,52 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.270
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.270
+Problem: Illegal memory access.
+Solution: Swap conditions. (Dominique Pelle)
+Files: src/ops.c
+
+
+*** ../vim-7.3.269/src/ops.c 2011-07-15 17:51:30.000000000 +0200
+--- src/ops.c 2011-08-10 12:07:22.000000000 +0200
+***************
+*** 6311,6317 ****
+ *wc += words;
+
+ /* Add eol_size if the end of line was reached before hitting limit. */
+! if (line[i] == NUL && i < limit)
+ {
+ i += eol_size;
+ chars += eol_size;
+--- 6311,6317 ----
+ *wc += words;
+
+ /* Add eol_size if the end of line was reached before hitting limit. */
+! if (i < limit && line[i] == NUL)
+ {
+ i += eol_size;
+ chars += eol_size;
+*** ../vim-7.3.269/src/version.c 2011-08-04 20:31:50.000000000 +0200
+--- src/version.c 2011-08-10 12:09:30.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 270,
+ /**/
+
+--
+An indication you must be a manager:
+You give constructive feedback to your dog.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.271 b/source/ap/vim/patches/7.3.271
new file mode 100644
index 000000000..c42d19a82
--- /dev/null
+++ b/source/ap/vim/patches/7.3.271
@@ -0,0 +1,504 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.271
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.271
+Problem: Code not following Vim coding style.
+Solution: Fix the style. (Elias Diem)
+Files: src/gui_photon.c
+
+
+*** ../vim-7.3.270/src/gui_photon.c 2011-07-27 14:09:05.000000000 +0200
+--- src/gui_photon.c 2011-08-10 12:18:35.000000000 +0200
+***************
+*** 358,378 ****
+ }
+
+ static int
+! gui_ph_handle_window_cb( PtWidget_t *widget, void *data, PtCallbackInfo_t *info )
+ {
+ PhWindowEvent_t *we = info->cbdata;
+ ushort_t *width, *height;
+
+! switch( we->event_f ) {
+ case Ph_WM_CLOSE:
+ gui_shell_closed();
+ break;
+
+ case Ph_WM_FOCUS:
+ /* Just in case it's hidden and needs to be shown */
+! gui_mch_mousehide( MOUSE_SHOW );
+
+! if( we->event_state == Ph_WM_EVSTATE_FOCUS )
+ {
+ gui_focus_change(TRUE);
+ gui_mch_start_blink();
+--- 358,378 ----
+ }
+
+ static int
+! gui_ph_handle_window_cb(PtWidget_t *widget, void *data, PtCallbackInfo_t *info)
+ {
+ PhWindowEvent_t *we = info->cbdata;
+ ushort_t *width, *height;
+
+! switch (we->event_f) {
+ case Ph_WM_CLOSE:
+ gui_shell_closed();
+ break;
+
+ case Ph_WM_FOCUS:
+ /* Just in case it's hidden and needs to be shown */
+! gui_mch_mousehide(MOUSE_SHOW);
+
+! if (we->event_state == Ph_WM_EVSTATE_FOCUS)
+ {
+ gui_focus_change(TRUE);
+ gui_mch_start_blink();
+***************
+*** 385,401 ****
+ break;
+
+ case Ph_WM_RESIZE:
+! PtGetResource( gui.vimWindow, Pt_ARG_WIDTH, &width, 0 );
+! PtGetResource( gui.vimWindow, Pt_ARG_HEIGHT, &height, 0 );
+ #ifdef USE_PANEL_GROUP
+ width -= (pg_margin_left + pg_margin_right);
+ height -= (pg_margin_top + pg_margin_bottom);
+ #endif
+! gui_resize_shell( *width, *height );
+! gui_set_shellsize( FALSE, FALSE, RESIZE_BOTH );
+ is_ignore_draw = FALSE;
+! PtEndFlux( gui.vimContainer );
+! PtContainerRelease( gui.vimContainer );
+ break;
+
+ default:
+--- 385,401 ----
+ break;
+
+ case Ph_WM_RESIZE:
+! PtGetResource(gui.vimWindow, Pt_ARG_WIDTH, &width, 0);
+! PtGetResource(gui.vimWindow, Pt_ARG_HEIGHT, &height, 0);
+ #ifdef USE_PANEL_GROUP
+ width -= (pg_margin_left + pg_margin_right);
+ height -= (pg_margin_top + pg_margin_bottom);
+ #endif
+! gui_resize_shell(*width, *height);
+! gui_set_shellsize(FALSE, FALSE, RESIZE_BOTH);
+ is_ignore_draw = FALSE;
+! PtEndFlux(gui.vimContainer);
+! PtContainerRelease(gui.vimContainer);
+ break;
+
+ default:
+***************
+*** 406,412 ****
+ }
+
+ static int
+! gui_ph_handle_scrollbar( PtWidget_t *widget, void *data, PtCallbackInfo_t *info )
+ {
+ PtScrollbarCallback_t *scroll;
+ scrollbar_T *sb;
+--- 406,412 ----
+ }
+
+ static int
+! gui_ph_handle_scrollbar(PtWidget_t *widget, void *data, PtCallbackInfo_t *info)
+ {
+ PtScrollbarCallback_t *scroll;
+ scrollbar_T *sb;
+***************
+*** 415,424 ****
+ scroll = info->cbdata;
+
+ sb = (scrollbar_T *) data;
+! if( sb != NULL )
+ {
+ value = scroll->position;
+! switch( scroll->action )
+ {
+ case Pt_SCROLL_DRAGGED:
+ dragging = TRUE;
+--- 415,424 ----
+ scroll = info->cbdata;
+
+ sb = (scrollbar_T *) data;
+! if (sb != NULL)
+ {
+ value = scroll->position;
+! switch (scroll->action)
+ {
+ case Pt_SCROLL_DRAGGED:
+ dragging = TRUE;
+***************
+*** 436,532 ****
+ }
+
+ static int
+! gui_ph_handle_keyboard( PtWidget_t *widget, void *data, PtCallbackInfo_t *info )
+ {
+ PhKeyEvent_t *key;
+ unsigned char string[6];
+ int len, i;
+ int ch, modifiers;
+
+! key = PhGetData( info->event );
+
+ ch = modifiers = len = 0;
+
+! if( p_mh )
+! gui_mch_mousehide( MOUSE_HIDE );
+
+ /* We're a good lil photon program, aren't we? yes we are, yeess wee arrr */
+! if( key->key_flags & Pk_KF_Compose )
+ {
+ return Pt_CONTINUE;
+ }
+
+! if( (key->key_flags & Pk_KF_Cap_Valid) &&
+! PkIsKeyDown( key->key_flags ) )
+ {
+ #ifdef FEAT_MENU
+ /*
+ * Only show the menu if the Alt key is down, and the Shift & Ctrl
+ * keys aren't down, as well as the other conditions
+ */
+! if( ( ( key->key_mods & Pk_KM_Alt ) &&
+! !( key->key_mods & Pk_KM_Shift ) &&
+! !( key->key_mods & Pk_KM_Ctrl ) ) &&
+ gui.menu_is_active &&
+! ( *p_wak == 'y' ||
+! ( *p_wak == 'm' &&
+! gui_is_menu_shortcut( key->key_cap ) ) ) )
+ {
+ /* Fallthrough and let photon look for the hotkey */
+ return Pt_CONTINUE;
+ }
+ #endif
+
+! for( i = 0; special_keys[i].key_sym != 0; i++ )
+ {
+! if( special_keys[i].key_sym == key->key_cap )
+ {
+ len = 0;
+! if( special_keys[i].vim_code1 == NUL )
+ ch = special_keys[i].vim_code0;
+ else
+ {
+ /* Detect if a keypad number key has been pressed
+ * and change the key if Num Lock is on */
+! if( key->key_cap >= Pk_KP_Enter && key->key_cap <= Pk_KP_9
+! && ( key->key_mods & Pk_KM_Num_Lock ) )
+ {
+ /* FIXME: For now, just map the key to a ascii value
+ * (see <photon/PkKeyDef.h>) */
+ ch = key->key_cap - 0xf080;
+ }
+ else
+! ch = TO_SPECIAL( special_keys[i].vim_code0,
+! special_keys[i].vim_code1 );
+ }
+ break;
+ }
+ }
+
+! if( key->key_mods & Pk_KM_Ctrl )
+ modifiers |= MOD_MASK_CTRL;
+! if( key->key_mods & Pk_KM_Alt )
+ modifiers |= MOD_MASK_ALT;
+! if( key->key_mods & Pk_KM_Shift )
+ modifiers |= MOD_MASK_SHIFT;
+
+ /* Is this not a special key? */
+! if( special_keys[i].key_sym == 0 )
+ {
+! ch = PhTo8859_1( key );
+! if( ch == -1
+ #ifdef FEAT_MBYTE
+! || ( enc_utf8 && ch > 127 )
+ #endif
+ )
+ {
+ #ifdef FEAT_MBYTE
+! len = PhKeyToMb( string, key );
+! if( len > 0 )
+ {
+ static char buf[6];
+ int src_taken, dst_made;
+! if( enc_utf8 != TRUE )
+ {
+ PxTranslateFromUTF(
+ charset_translate,
+--- 436,532 ----
+ }
+
+ static int
+! gui_ph_handle_keyboard(PtWidget_t *widget, void *data, PtCallbackInfo_t *info)
+ {
+ PhKeyEvent_t *key;
+ unsigned char string[6];
+ int len, i;
+ int ch, modifiers;
+
+! key = PhGetData(info->event);
+
+ ch = modifiers = len = 0;
+
+! if (p_mh)
+! gui_mch_mousehide(MOUSE_HIDE);
+
+ /* We're a good lil photon program, aren't we? yes we are, yeess wee arrr */
+! if (key->key_flags & Pk_KF_Compose)
+ {
+ return Pt_CONTINUE;
+ }
+
+! if ((key->key_flags & Pk_KF_Cap_Valid) &&
+! PkIsKeyDown(key->key_flags))
+ {
+ #ifdef FEAT_MENU
+ /*
+ * Only show the menu if the Alt key is down, and the Shift & Ctrl
+ * keys aren't down, as well as the other conditions
+ */
+! if (((key->key_mods & Pk_KM_Alt) &&
+! !(key->key_mods & Pk_KM_Shift) &&
+! !(key->key_mods & Pk_KM_Ctrl)) &&
+ gui.menu_is_active &&
+! (*p_wak == 'y' ||
+! (*p_wak == 'm' &&
+! gui_is_menu_shortcut(key->key_cap))))
+ {
+ /* Fallthrough and let photon look for the hotkey */
+ return Pt_CONTINUE;
+ }
+ #endif
+
+! for(i = 0; special_keys[i].key_sym != 0; i++)
+ {
+! if (special_keys[i].key_sym == key->key_cap)
+ {
+ len = 0;
+! if (special_keys[i].vim_code1 == NUL)
+ ch = special_keys[i].vim_code0;
+ else
+ {
+ /* Detect if a keypad number key has been pressed
+ * and change the key if Num Lock is on */
+! if (key->key_cap >= Pk_KP_Enter && key->key_cap <= Pk_KP_9
+! && (key->key_mods & Pk_KM_Num_Lock))
+ {
+ /* FIXME: For now, just map the key to a ascii value
+ * (see <photon/PkKeyDef.h>) */
+ ch = key->key_cap - 0xf080;
+ }
+ else
+! ch = TO_SPECIAL(special_keys[i].vim_code0,
+! special_keys[i].vim_code1);
+ }
+ break;
+ }
+ }
+
+! if (key->key_mods & Pk_KM_Ctrl)
+ modifiers |= MOD_MASK_CTRL;
+! if (key->key_mods & Pk_KM_Alt)
+ modifiers |= MOD_MASK_ALT;
+! if (key->key_mods & Pk_KM_Shift)
+ modifiers |= MOD_MASK_SHIFT;
+
+ /* Is this not a special key? */
+! if (special_keys[i].key_sym == 0)
+ {
+! ch = PhTo8859_1(key);
+! if (ch == -1
+ #ifdef FEAT_MBYTE
+! || (enc_utf8 && ch > 127)
+ #endif
+ )
+ {
+ #ifdef FEAT_MBYTE
+! len = PhKeyToMb(string, key);
+! if (len > 0)
+ {
+ static char buf[6];
+ int src_taken, dst_made;
+! if (enc_utf8 != TRUE)
+ {
+ PxTranslateFromUTF(
+ charset_translate,
+***************
+*** 2931,2943 ****
+ name_len = (int_u) ( mark - vim_font );
+
+ *font_name = vim_strnsave( vim_font, name_len );
+! if( *font_name != NULL )
+ {
+! if( mark != NULL )
+ {
+! while( *mark != NUL && *mark++ == ':')
+ {
+! switch( tolower( *mark++ ) )
+ {
+ case 'a': *font_flags |= PF_STYLE_ANTIALIAS; break;
+ case 'b': *font_flags |= PF_STYLE_BOLD; break;
+--- 2931,2943 ----
+ name_len = (int_u) ( mark - vim_font );
+
+ *font_name = vim_strnsave( vim_font, name_len );
+! if (*font_name != NULL)
+ {
+! if (mark != NULL)
+ {
+! while (*mark != NUL && *mark++ == ':')
+ {
+! switch (tolower(*mark++))
+ {
+ case 'a': *font_flags |= PF_STYLE_ANTIALIAS; break;
+ case 'b': *font_flags |= PF_STYLE_BOLD; break;
+***************
+*** 2946,2952 ****
+ case 's':
+ size = getdigits( &mark );
+ /* Restrict the size to some vague limits */
+! if( size < 1 || size > 100 )
+ size = 8;
+
+ *font_size = size;
+--- 2946,2952 ----
+ case 's':
+ size = getdigits( &mark );
+ /* Restrict the size to some vague limits */
+! if (size < 1 || size > 100)
+ size = 8;
+
+ *font_size = size;
+***************
+*** 2973,2990 ****
+ FontQueryInfo info;
+ PhRect_t extent;
+
+! if( vim_font_name == NULL )
+ {
+ /* Default font */
+ vim_font_name = "PC Terminal";
+ }
+
+! if( STRCMP( vim_font_name, "*" ) == 0 )
+ {
+ font_tag = PtFontSelection( gui.vimWindow, NULL, NULL,
+ "pcterm12", -1, PHFONT_FIXED, NULL );
+
+! if( font_tag == NULL )
+ return FAIL;
+
+ gui_mch_free_font( gui.norm_font );
+--- 2973,2990 ----
+ FontQueryInfo info;
+ PhRect_t extent;
+
+! if (vim_font_name == NULL)
+ {
+ /* Default font */
+ vim_font_name = "PC Terminal";
+ }
+
+! if (STRCMP( vim_font_name, "*" ) == 0)
+ {
+ font_tag = PtFontSelection( gui.vimWindow, NULL, NULL,
+ "pcterm12", -1, PHFONT_FIXED, NULL );
+
+! if (font_tag == NULL)
+ return FAIL;
+
+ gui_mch_free_font( gui.norm_font );
+***************
+*** 2995,3006 ****
+ }
+ else
+ {
+! if( gui_ph_parse_font_name( vim_font_name, &font_name, &font_flags,
+! &font_size ) == FALSE )
+ return FAIL;
+
+ font_tag = gui_ph_get_font( font_name, font_flags, font_size, 0 );
+! if( font_tag == NULL )
+ {
+ vim_free( font_name );
+ return FAIL;
+--- 2995,3006 ----
+ }
+ else
+ {
+! if (gui_ph_parse_font_name( vim_font_name, &font_name, &font_flags,
+! &font_size ) == FALSE)
+ return FAIL;
+
+ font_tag = gui_ph_get_font( font_name, font_flags, font_size, 0 );
+! if (font_tag == NULL)
+ {
+ vim_free( font_name );
+ return FAIL;
+***************
+*** 3053,3069 ****
+ int_u font_size = 12;
+ int_u font_flags = 0;
+
+! if( gui_ph_parse_font_name( vim_font_name, &font_name, &font_flags,
+! &font_size ) != FALSE )
+ {
+ font_tag = gui_ph_get_font( font_name, font_flags, font_size, -1 );
+ vim_free( font_name );
+
+! if( font_tag != NULL )
+ return (GuiFont)font_tag;
+ }
+
+! if( report_error )
+ EMSG2(e_font, vim_font_name );
+
+ return FAIL;
+--- 3053,3069 ----
+ int_u font_size = 12;
+ int_u font_flags = 0;
+
+! if (gui_ph_parse_font_name( vim_font_name, &font_name, &font_flags,
+! &font_size ) != FALSE)
+ {
+ font_tag = gui_ph_get_font( font_name, font_flags, font_size, -1 );
+ vim_free( font_name );
+
+! if (font_tag != NULL)
+ return (GuiFont)font_tag;
+ }
+
+! if (report_error)
+ EMSG2(e_font, vim_font_name );
+
+ return FAIL;
+*** ../vim-7.3.270/src/version.c 2011-08-10 12:10:55.000000000 +0200
+--- src/version.c 2011-08-10 12:17:06.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 271,
+ /**/
+
+--
+An indication you must be a manager:
+You believe you never have any problems in your life, just
+"issues" and "improvement opportunities".
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.272 b/source/ap/vim/patches/7.3.272
new file mode 100644
index 000000000..b512a1fd7
--- /dev/null
+++ b/source/ap/vim/patches/7.3.272
@@ -0,0 +1,51 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.272
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.272
+Problem: ":put =list" does not add an empty line for a trailing empty
+ item.
+Solution: Add a trailing NL when turning a list into a string.
+Files: src/eval.c
+
+
+*** ../vim-7.3.271/src/eval.c 2011-07-15 21:24:06.000000000 +0200
+--- src/eval.c 2011-08-10 12:31:51.000000000 +0200
+***************
+*** 1357,1363 ****
+--- 1357,1367 ----
+ {
+ ga_init2(&ga, (int)sizeof(char), 80);
+ if (tv.vval.v_list != NULL)
++ {
+ list_join(&ga, tv.vval.v_list, (char_u *)"\n", TRUE, 0);
++ if (tv.vval.v_list->lv_len > 0)
++ ga_append(&ga, NL);
++ }
+ ga_append(&ga, NUL);
+ retval = (char_u *)ga.ga_data;
+ }
+*** ../vim-7.3.271/src/version.c 2011-08-10 12:19:00.000000000 +0200
+--- src/version.c 2011-08-10 12:36:41.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 272,
+ /**/
+
+--
+Lose weight, NEVER Diet again with
+ The "Invisible Weight Loss Patch"
+ (spam e-mail)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.273 b/source/ap/vim/patches/7.3.273
new file mode 100644
index 000000000..e74eb5a2a
--- /dev/null
+++ b/source/ap/vim/patches/7.3.273
@@ -0,0 +1,124 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.273
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.273
+Problem: A BOM in an error file is seen as text. (Aleksey Baibarin)
+Solution: Remove the BOM from the text before evaluating. (idea by Christian
+ Brabandt)
+Files: src/quickfix.c, src/mbyte.c, src/proto/mbyte.pro,
+ src/testdir/test10.in
+
+
+*** ../vim-7.3.272/src/quickfix.c 2011-05-19 17:42:54.000000000 +0200
+--- src/quickfix.c 2011-08-10 12:56:15.000000000 +0200
+***************
+*** 561,566 ****
+--- 561,570 ----
+ break;
+
+ IObuff[CMDBUFFSIZE - 2] = NUL; /* for very long lines */
++ #ifdef FEAT_MBYTE
++ remove_bom(IObuff);
++ #endif
++
+ if ((efmp = vim_strrchr(IObuff, '\n')) != NULL)
+ *efmp = NUL;
+ #ifdef USE_CRNL
+*** ../vim-7.3.272/src/mbyte.c 2011-07-27 18:25:40.000000000 +0200
+--- src/mbyte.c 2011-08-10 13:11:56.000000000 +0200
+***************
+*** 838,843 ****
+--- 838,864 ----
+ }
+
+ /*
++ * Remove all BOM from "s" by moving remaining text.
++ */
++ void
++ remove_bom(s)
++ char_u *s;
++ {
++ if (enc_utf8)
++ {
++ char_u *p = s;
++
++ while ((p = vim_strbyte(p, 0xef)) != NULL)
++ {
++ if (p[1] == 0xbb && p[2] == 0xbf)
++ STRMOVE(p, p + 3);
++ else
++ ++p;
++ }
++ }
++ }
++
++ /*
+ * Get class of pointer:
+ * 0 for blank or NUL
+ * 1 for punctuation
+*** ../vim-7.3.272/src/proto/mbyte.pro 2011-07-07 15:08:53.000000000 +0200
+--- src/proto/mbyte.pro 2011-08-10 12:50:44.000000000 +0200
+***************
+*** 2,7 ****
+--- 2,8 ----
+ int enc_canon_props __ARGS((char_u *name));
+ char_u *mb_init __ARGS((void));
+ int bomb_size __ARGS((void));
++ void remove_bom __ARGS((char_u *s));
+ int mb_get_class __ARGS((char_u *p));
+ int dbcs_class __ARGS((unsigned lead, unsigned trail));
+ int latin_char2len __ARGS((int c));
+*** ../vim-7.3.272/src/testdir/test10.in 2010-08-15 21:57:29.000000000 +0200
+--- src/testdir/test10.in 2011-08-10 13:01:46.000000000 +0200
+***************
+*** 2,7 ****
+--- 2,10 ----
+
+ STARTTEST
+ :so small.vim
++ :" Also test a BOM is ignored.
++ :so mbyte.vim
++ :set encoding=utf-8
+ :/start of errorfile/,/end of errorfile/w! Xerrorfile
+ :/start of testfile/,/end of testfile/w! Xtestfile
+ :cf Xerrorfile
+***************
+*** 20,26 ****
+
+ start of errorfile
+ "Xtestfile", line 4.12: 1506-045 (S) Undeclared identifier fd_set.
+! "Xtestfile", line 7 col 19; this is an error
+ gcc -c -DHAVE_CONFIsing-prototypes -I/usr/X11R6/include version.c
+ Xtestfile:13: parse error before `asd'
+ make: *** [vim] Error 1
+--- 23,29 ----
+
+ start of errorfile
+ "Xtestfile", line 4.12: 1506-045 (S) Undeclared identifier fd_set.
+! "Xtestfile", line 7 col 19; this is an error
+ gcc -c -DHAVE_CONFIsing-prototypes -I/usr/X11R6/include version.c
+ Xtestfile:13: parse error before `asd'
+ make: *** [vim] Error 1
+*** ../vim-7.3.272/src/version.c 2011-08-10 12:38:02.000000000 +0200
+--- src/version.c 2011-08-10 13:14:35.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 273,
+ /**/
+
+--
+Compilation process failed successfully.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.274 b/source/ap/vim/patches/7.3.274
new file mode 100644
index 000000000..48faf3cf0
--- /dev/null
+++ b/source/ap/vim/patches/7.3.274
@@ -0,0 +1,55 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.274
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.274
+Problem: With concealed characters tabs do not have the right size.
+Solution: Use VCOL_HLC instead of vcol. (Eiichi Sato)
+Files: src/screen.c
+
+
+*** ../vim-7.3.273/src/screen.c 2011-03-22 13:29:20.000000000 +0100
+--- src/screen.c 2011-08-10 14:22:47.000000000 +0200
+***************
+*** 4252,4258 ****
+ {
+ /* tab amount depends on current column */
+ n_extra = (int)wp->w_buffer->b_p_ts
+! - vcol % (int)wp->w_buffer->b_p_ts - 1;
+ #ifdef FEAT_MBYTE
+ mb_utf8 = FALSE; /* don't draw as UTF-8 */
+ #endif
+--- 4252,4258 ----
+ {
+ /* tab amount depends on current column */
+ n_extra = (int)wp->w_buffer->b_p_ts
+! - VCOL_HLC % (int)wp->w_buffer->b_p_ts - 1;
+ #ifdef FEAT_MBYTE
+ mb_utf8 = FALSE; /* don't draw as UTF-8 */
+ #endif
+*** ../vim-7.3.273/src/version.c 2011-08-10 13:21:30.000000000 +0200
+--- src/version.c 2011-08-10 14:23:38.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 274,
+ /**/
+
+--
+ Arthur pulls Pin out. The MONK blesses the grenade as ...
+ARTHUR: (quietly) One, two, five ...
+GALAHAD: Three, sir!
+ARTHUR: Three.
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.275 b/source/ap/vim/patches/7.3.275
new file mode 100644
index 000000000..2bdd145b9
--- /dev/null
+++ b/source/ap/vim/patches/7.3.275
@@ -0,0 +1,77 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.275
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.275
+Problem: MS-Windows: When using a black background some screen updates
+ cause the window to flicker.
+Solution: Add WS_CLIPCHILDREN to CreateWindow(). (René Aguirre)
+Files: src/gui_w32.c
+
+
+*** ../vim-7.3.274/src/gui_w32.c 2011-07-07 17:43:37.000000000 +0200
+--- src/gui_w32.c 2011-08-10 14:40:58.000000000 +0200
+***************
+*** 1379,1385 ****
+ s_hwnd = CreateWindowEx(
+ WS_EX_MDICHILD,
+ szVimWndClass, "Vim MSWindows GUI",
+! WS_OVERLAPPEDWINDOW | WS_CHILD | WS_CLIPSIBLINGS | 0xC000,
+ gui_win_x == -1 ? CW_USEDEFAULT : gui_win_x,
+ gui_win_y == -1 ? CW_USEDEFAULT : gui_win_y,
+ 100, /* Any value will do */
+--- 1379,1386 ----
+ s_hwnd = CreateWindowEx(
+ WS_EX_MDICHILD,
+ szVimWndClass, "Vim MSWindows GUI",
+! WS_OVERLAPPEDWINDOW | WS_CHILD
+! | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | 0xC000,
+ gui_win_x == -1 ? CW_USEDEFAULT : gui_win_x,
+ gui_win_y == -1 ? CW_USEDEFAULT : gui_win_y,
+ 100, /* Any value will do */
+***************
+*** 1410,1416 ****
+ * titlebar, it will be reparented below. */
+ s_hwnd = CreateWindow(
+ szVimWndClass, "Vim MSWindows GUI",
+! win_socket_id == 0 ? WS_OVERLAPPEDWINDOW : WS_POPUP,
+ gui_win_x == -1 ? CW_USEDEFAULT : gui_win_x,
+ gui_win_y == -1 ? CW_USEDEFAULT : gui_win_y,
+ 100, /* Any value will do */
+--- 1411,1418 ----
+ * titlebar, it will be reparented below. */
+ s_hwnd = CreateWindow(
+ szVimWndClass, "Vim MSWindows GUI",
+! (win_socket_id == 0 ? WS_OVERLAPPEDWINDOW : WS_POPUP)
+! | WS_CLIPSIBLINGS | WS_CLIPCHILDREN,
+ gui_win_x == -1 ? CW_USEDEFAULT : gui_win_x,
+ gui_win_y == -1 ? CW_USEDEFAULT : gui_win_y,
+ 100, /* Any value will do */
+*** ../vim-7.3.274/src/version.c 2011-08-10 14:32:33.000000000 +0200
+--- src/version.c 2011-08-10 14:39:14.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 275,
+ /**/
+
+--
+ARTHUR: What does it say?
+BROTHER MAYNARD: It reads ... "Here may be found the last words of Joseph of
+ Aramathea." "He who is valorous and pure of heart may find
+ the Holy Grail in the aaaaarrrrrrggghhh..."
+ARTHUR: What?
+BROTHER MAYNARD: "The Aaaaarrrrrrggghhh..."
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.276 b/source/ap/vim/patches/7.3.276
new file mode 100644
index 000000000..3af02457d
--- /dev/null
+++ b/source/ap/vim/patches/7.3.276
@@ -0,0 +1,130 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.276
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.276
+Problem: GvimExt sets $LANG in the wrong way.
+Solution: Save the environment and use it for gvim. (Yasuhiro Matsumoto)
+Files: src/GvimExt/gvimext.cpp
+
+
+*** ../vim-7.3.275/src/GvimExt/gvimext.cpp 2011-07-20 17:27:17.000000000 +0200
+--- src/GvimExt/gvimext.cpp 2011-08-10 16:25:32.000000000 +0200
+***************
+*** 142,147 ****
+--- 142,148 ----
+ static int dyn_libintl_init(char *dir);
+ static void dyn_libintl_end(void);
+
++ static wchar_t *oldenv = NULL;
+ static HINSTANCE hLibintlDLL = 0;
+ static char *(*dyn_libintl_gettext)(const char *) = null_libintl_gettext;
+ static char *(*dyn_libintl_textdomain)(const char *) = null_libintl_textdomain;
+***************
+*** 339,346 ****
+ inc_cRefThisDLL()
+ {
+ #ifdef FEAT_GETTEXT
+! if (g_cRefThisDll == 0)
+ dyn_gettext_load();
+ #endif
+ InterlockedIncrement((LPLONG)&g_cRefThisDll);
+ }
+--- 340,349 ----
+ inc_cRefThisDLL()
+ {
+ #ifdef FEAT_GETTEXT
+! if (g_cRefThisDll == 0) {
+ dyn_gettext_load();
++ oldenv = GetEnvironmentStringsW();
++ }
+ #endif
+ InterlockedIncrement((LPLONG)&g_cRefThisDll);
+ }
+***************
+*** 349,356 ****
+ dec_cRefThisDLL()
+ {
+ #ifdef FEAT_GETTEXT
+! if (InterlockedDecrement((LPLONG)&g_cRefThisDll) == 0)
+ dyn_gettext_free();
+ #else
+ InterlockedDecrement((LPLONG)&g_cRefThisDll);
+ #endif
+--- 352,364 ----
+ dec_cRefThisDLL()
+ {
+ #ifdef FEAT_GETTEXT
+! if (InterlockedDecrement((LPLONG)&g_cRefThisDll) == 0) {
+ dyn_gettext_free();
++ if (oldenv != NULL) {
++ FreeEnvironmentStringsW(oldenv);
++ oldenv = NULL;
++ }
++ }
+ #else
+ InterlockedDecrement((LPLONG)&g_cRefThisDll);
+ #endif
+***************
+*** 905,912 ****
+ NULL, // Process handle not inheritable.
+ NULL, // Thread handle not inheritable.
+ FALSE, // Set handle inheritance to FALSE.
+! 0, // No creation flags.
+! NULL, // Use parent's environment block.
+ NULL, // Use parent's starting directory.
+ &si, // Pointer to STARTUPINFO structure.
+ &pi) // Pointer to PROCESS_INFORMATION structure.
+--- 913,920 ----
+ NULL, // Process handle not inheritable.
+ NULL, // Thread handle not inheritable.
+ FALSE, // Set handle inheritance to FALSE.
+! oldenv == NULL ? 0 : CREATE_UNICODE_ENVIRONMENT,
+! oldenv, // Use unmodified environment block.
+ NULL, // Use parent's starting directory.
+ &si, // Pointer to STARTUPINFO structure.
+ &pi) // Pointer to PROCESS_INFORMATION structure.
+***************
+*** 987,994 ****
+ NULL, // Process handle not inheritable.
+ NULL, // Thread handle not inheritable.
+ FALSE, // Set handle inheritance to FALSE.
+! 0, // No creation flags.
+! NULL, // Use parent's environment block.
+ NULL, // Use parent's starting directory.
+ &si, // Pointer to STARTUPINFO structure.
+ &pi) // Pointer to PROCESS_INFORMATION structure.
+--- 995,1002 ----
+ NULL, // Process handle not inheritable.
+ NULL, // Thread handle not inheritable.
+ FALSE, // Set handle inheritance to FALSE.
+! oldenv == NULL ? 0 : CREATE_UNICODE_ENVIRONMENT,
+! oldenv, // Use unmodified environment block.
+ NULL, // Use parent's starting directory.
+ &si, // Pointer to STARTUPINFO structure.
+ &pi) // Pointer to PROCESS_INFORMATION structure.
+*** ../vim-7.3.275/src/version.c 2011-08-10 15:56:24.000000000 +0200
+--- src/version.c 2011-08-10 16:28:42.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 276,
+ /**/
+
+--
+User: I'm having problems with my text editor.
+Help desk: Which editor are you using?
+User: I don't know, but it's version VI (pronounced: 6).
+Help desk: Oh, then you should upgrade to version VIM (pronounced: 994).
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.277 b/source/ap/vim/patches/7.3.277
new file mode 100644
index 000000000..3509a1a6f
--- /dev/null
+++ b/source/ap/vim/patches/7.3.277
@@ -0,0 +1,348 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.277
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.277
+Problem: MS-Windows: some characters do not show in dialogs.
+Solution: Use the wide methods when available. (Yanwei Jia)
+Files: src/gui_w32.c, src/gui_w48.c, src/os_mswin.c, src/os_win32.c,
+ src/os_win32.h
+
+
+*** ../vim-7.3.276/src/gui_w32.c 2011-08-10 15:56:24.000000000 +0200
+--- src/gui_w32.c 2011-08-10 16:52:55.000000000 +0200
+***************
+*** 1270,1275 ****
+--- 1270,1294 ----
+ pGetMonitorInfo = (TGetMonitorInfo)GetProcAddress(user32_lib,
+ "GetMonitorInfoA");
+ }
++
++ #ifdef FEAT_MBYTE
++ /* If the OS is Windows NT, use wide functions;
++ * this enables common dialogs input unicode from IME. */
++ if (os_version.dwPlatformId == VER_PLATFORM_WIN32_NT)
++ {
++ pDispatchMessage = DispatchMessageW;
++ pGetMessage = GetMessageW;
++ pIsDialogMessage = IsDialogMessageW;
++ pPeekMessage = PeekMessageW;
++ }
++ else
++ {
++ pDispatchMessage = DispatchMessageA;
++ pGetMessage = GetMessageA;
++ pIsDialogMessage = IsDialogMessageA;
++ pPeekMessage = PeekMessageA;
++ }
++ #endif
+ }
+
+ /*
+*** ../vim-7.3.276/src/gui_w48.c 2010-10-20 21:22:17.000000000 +0200
+--- src/gui_w48.c 2011-08-10 16:49:39.000000000 +0200
+***************
+*** 390,396 ****
+ KillTimer(NULL, idEvent);
+
+ /* Eat spurious WM_TIMER messages */
+! while (PeekMessage(&msg, hwnd, WM_TIMER, WM_TIMER, PM_REMOVE))
+ ;
+
+ if (blink_state == BLINK_ON)
+--- 390,396 ----
+ KillTimer(NULL, idEvent);
+
+ /* Eat spurious WM_TIMER messages */
+! while (pPeekMessage(&msg, hwnd, WM_TIMER, WM_TIMER, PM_REMOVE))
+ ;
+
+ if (blink_state == BLINK_ON)
+***************
+*** 418,424 ****
+ {
+ KillTimer(NULL, blink_timer);
+ /* Eat spurious WM_TIMER messages */
+! while (PeekMessage(&msg, s_hwnd, WM_TIMER, WM_TIMER, PM_REMOVE))
+ ;
+ blink_timer = 0;
+ }
+--- 418,424 ----
+ {
+ KillTimer(NULL, blink_timer);
+ /* Eat spurious WM_TIMER messages */
+! while (pPeekMessage(&msg, s_hwnd, WM_TIMER, WM_TIMER, PM_REMOVE))
+ ;
+ blink_timer = 0;
+ }
+***************
+*** 476,482 ****
+ s_timed_out = TRUE;
+
+ /* Eat spurious WM_TIMER messages */
+! while (PeekMessage(&msg, hwnd, WM_TIMER, WM_TIMER, PM_REMOVE))
+ ;
+ if (idEvent == s_wait_timer)
+ s_wait_timer = 0;
+--- 476,482 ----
+ s_timed_out = TRUE;
+
+ /* Eat spurious WM_TIMER messages */
+! while (pPeekMessage(&msg, hwnd, WM_TIMER, WM_TIMER, PM_REMOVE))
+ ;
+ if (idEvent == s_wait_timer)
+ s_wait_timer = 0;
+***************
+*** 1707,1713 ****
+ static char_u k10[] = {K_SPECIAL, 'k', ';', 0};
+ #endif
+
+! GetMessage(&msg, NULL, 0, 0);
+
+ #ifdef FEAT_OLE
+ /* Look after OLE Automation commands */
+--- 1707,1713 ----
+ static char_u k10[] = {K_SPECIAL, 'k', ';', 0};
+ #endif
+
+! pGetMessage(&msg, NULL, 0, 0);
+
+ #ifdef FEAT_OLE
+ /* Look after OLE Automation commands */
+***************
+*** 1718,1724 ****
+ {
+ /* Message can't be ours, forward it. Fixes problem with Ultramon
+ * 3.0.4 */
+! DispatchMessage(&msg);
+ }
+ else
+ {
+--- 1718,1724 ----
+ {
+ /* Message can't be ours, forward it. Fixes problem with Ultramon
+ * 3.0.4 */
+! pDispatchMessage(&msg);
+ }
+ else
+ {
+***************
+*** 1749,1762 ****
+ if (msg.message == WM_USER)
+ {
+ MyTranslateMessage(&msg);
+! DispatchMessage(&msg);
+ return;
+ }
+ #endif
+
+ #ifdef MSWIN_FIND_REPLACE
+ /* Don't process messages used by the dialog */
+! if (s_findrep_hwnd != NULL && IsDialogMessage(s_findrep_hwnd, &msg))
+ {
+ HandleMouseHide(msg.message, msg.lParam);
+ return;
+--- 1749,1762 ----
+ if (msg.message == WM_USER)
+ {
+ MyTranslateMessage(&msg);
+! pDispatchMessage(&msg);
+ return;
+ }
+ #endif
+
+ #ifdef MSWIN_FIND_REPLACE
+ /* Don't process messages used by the dialog */
+! if (s_findrep_hwnd != NULL && pIsDialogMessage(s_findrep_hwnd, &msg))
+ {
+ HandleMouseHide(msg.message, msg.lParam);
+ return;
+***************
+*** 1928,1934 ****
+ if (vk != VK_F10 || check_map(k10, State, FALSE, TRUE, FALSE,
+ NULL, NULL) == NULL)
+ #endif
+! DispatchMessage(&msg);
+ }
+
+ /*
+--- 1928,1934 ----
+ if (vk != VK_F10 || check_map(k10, State, FALSE, TRUE, FALSE,
+ NULL, NULL) == NULL)
+ #endif
+! pDispatchMessage(&msg);
+ }
+
+ /*
+***************
+*** 1943,1949 ****
+ MSG msg;
+
+ if (!s_busy_processing)
+! while (PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE)
+ && !vim_is_input_buf_full())
+ process_message();
+ }
+--- 1943,1949 ----
+ MSG msg;
+
+ if (!s_busy_processing)
+! while (pPeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE)
+ && !vim_is_input_buf_full())
+ process_message();
+ }
+***************
+*** 2019,2025 ****
+ KillTimer(NULL, s_wait_timer);
+
+ /* Eat spurious WM_TIMER messages */
+! while (PeekMessage(&msg, s_hwnd, WM_TIMER, WM_TIMER, PM_REMOVE))
+ ;
+ s_wait_timer = 0;
+ }
+--- 2019,2025 ----
+ KillTimer(NULL, s_wait_timer);
+
+ /* Eat spurious WM_TIMER messages */
+! while (pPeekMessage(&msg, s_hwnd, WM_TIMER, WM_TIMER, PM_REMOVE))
+ ;
+ s_wait_timer = 0;
+ }
+*** ../vim-7.3.276/src/os_mswin.c 2011-06-19 01:30:01.000000000 +0200
+--- src/os_mswin.c 2011-08-10 16:45:24.000000000 +0200
+***************
+*** 1856,1867 ****
+ {
+ MSG msg;
+
+! while (!*bUserAbort && PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
+ {
+! if (!hDlgPrint || !IsDialogMessage(hDlgPrint, &msg))
+ {
+ TranslateMessage(&msg);
+! DispatchMessage(&msg);
+ }
+ }
+ return !*bUserAbort;
+--- 1856,1867 ----
+ {
+ MSG msg;
+
+! while (!*bUserAbort && pPeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
+ {
+! if (!hDlgPrint || !pIsDialogMessage(hDlgPrint, &msg))
+ {
+ TranslateMessage(&msg);
+! pDispatchMessage(&msg);
+ }
+ }
+ return !*bUserAbort;
+***************
+*** 3132,3141 ****
+ {
+ MSG msg;
+
+! while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
+ {
+ TranslateMessage(&msg);
+! DispatchMessage(&msg);
+ }
+ }
+
+--- 3132,3141 ----
+ {
+ MSG msg;
+
+! while (pPeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
+ {
+ TranslateMessage(&msg);
+! pDispatchMessage(&msg);
+ }
+ }
+
+*** ../vim-7.3.276/src/os_win32.c 2011-07-07 16:20:45.000000000 +0200
+--- src/os_win32.c 2011-08-10 16:54:50.000000000 +0200
+***************
+*** 152,157 ****
+--- 152,165 ----
+ # define wcsicmp(a, b) wcscmpi((a), (b))
+ #endif
+
++ /* Enable common dialogs input unicode from IME if posible. */
++ #ifdef FEAT_MBYTE
++ LRESULT (WINAPI *pDispatchMessage)(LPMSG) = DispatchMessage;
++ BOOL (WINAPI *pGetMessage)(LPMSG, HWND, UINT, UINT) = GetMessage;
++ BOOL (WINAPI *pIsDialogMessage)(HWND, LPMSG) = IsDialogMessage;
++ BOOL (WINAPI *pPeekMessage)(LPMSG, HWND, UINT, UINT, UINT) = PeekMessage;
++ #endif
++
+ #ifndef FEAT_GUI_W32
+ /* Win32 Console handles for input and output */
+ static HANDLE g_hConIn = INVALID_HANDLE_VALUE;
+***************
+*** 3284,3293 ****
+ {
+ MSG msg;
+
+! if (PeekMessage(&msg, (HWND)NULL, 0, 0, PM_REMOVE))
+ {
+ TranslateMessage(&msg);
+! DispatchMessage(&msg);
+ }
+ if (WaitForSingleObject(pi.hProcess, delay) != WAIT_TIMEOUT)
+ break;
+--- 3292,3301 ----
+ {
+ MSG msg;
+
+! if (pPeekMessage(&msg, (HWND)NULL, 0, 0, PM_REMOVE))
+ {
+ TranslateMessage(&msg);
+! pDispatchMessage(&msg);
+ }
+ if (WaitForSingleObject(pi.hProcess, delay) != WAIT_TIMEOUT)
+ break;
+*** ../vim-7.3.276/src/os_win32.h 2011-05-05 18:31:54.000000000 +0200
+--- src/os_win32.h 2011-08-10 16:51:58.000000000 +0200
+***************
+*** 193,195 ****
+--- 193,209 ----
+ #else
+ # define vim_mkdir(x, y) mch_mkdir(x)
+ #endif
++
++ /* Enable common dialogs input unicode from IME if posible. */
++ #ifdef FEAT_MBYTE
++ /* The variables are defined in os_win32.c. */
++ extern LRESULT (WINAPI *pDispatchMessage)(LPMSG);
++ extern BOOL (WINAPI *pGetMessage)(LPMSG, HWND, UINT, UINT);
++ extern BOOL (WINAPI *pIsDialogMessage)(HWND, LPMSG);
++ extern BOOL (WINAPI *pPeekMessage)(LPMSG, HWND, UINT, UINT, UINT);
++ #else
++ # define pDispatchMessage DispatchMessage
++ # define pGetMessage GetMessage
++ # define pIsDialogMessage IsDialogMessage
++ # define pPeekMessage PeekMessage
++ #endif
+*** ../vim-7.3.276/src/version.c 2011-08-10 16:31:18.000000000 +0200
+--- src/version.c 2011-08-10 17:06:55.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 277,
+ /**/
+
+--
+Veni, Vidi, VW -- I came, I saw, I drove around in a little car.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.278 b/source/ap/vim/patches/7.3.278
new file mode 100644
index 000000000..60bc0ac87
--- /dev/null
+++ b/source/ap/vim/patches/7.3.278
@@ -0,0 +1,73 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.278
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.278
+Problem: Passing the file name to open in VisVim doesn't work.
+Solution: Adjust the index and check for end of buffer. (Jiri Sedlak)
+Files: src/VisVim/Commands.cpp
+
+
+*** ../vim-7.3.277/src/VisVim/Commands.cpp 2010-08-15 21:57:27.000000000 +0200
+--- src/VisVim/Commands.cpp 2011-08-10 17:21:27.000000000 +0200
+***************
+*** 549,555 ****
+ if (g_bNewTabs)
+ {
+ sprintf(VimCmd, ":tab drop ");
+! s = VimCmd + 11;
+ }
+ else
+ {
+--- 549,555 ----
+ if (g_bNewTabs)
+ {
+ sprintf(VimCmd, ":tab drop ");
+! s = VimCmd + 10;
+ }
+ else
+ {
+***************
+*** 557,564 ****
+ s = VimCmd + 6;
+ }
+ sprintf(FileNameTmp, "%S", (char *)FileName);
+! for (p = FileNameTmp; *p != '\0' && s < FileNameTmp + MAX_OLE_STR - 4;
+! ++p)
+ if (*p == '\\')
+ *s++ = '/';
+ else
+--- 557,563 ----
+ s = VimCmd + 6;
+ }
+ sprintf(FileNameTmp, "%S", (char *)FileName);
+! for (p = FileNameTmp; *p != '\0' && s < VimCmd + MAX_OLE_STR - 4; ++p)
+ if (*p == '\\')
+ *s++ = '/';
+ else
+*** ../vim-7.3.277/src/version.c 2011-08-10 17:07:56.000000000 +0200
+--- src/version.c 2011-08-10 17:25:20.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 278,
+ /**/
+
+--
+ARTHUR: But if he was dying, he wouldn't bother to carve
+ "Aaaaarrrrrrggghhh". He'd just say it.
+BROTHER MAYNARD: It's down there carved in stone.
+GALAHAD: Perhaps he was dictating.
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.279 b/source/ap/vim/patches/7.3.279
new file mode 100644
index 000000000..6a8814b62
--- /dev/null
+++ b/source/ap/vim/patches/7.3.279
@@ -0,0 +1,118 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.279
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.279
+Problem: With GTK, when gvim is full-screen and a tab is opened and using a
+ specific monitor configuration the window is too big.
+Solution: Adjust the window size like on MS-Windows. (Yukihiro Nakadaira)
+Files: src/gui.c, src/gui_gtk_x11.c, src/proto/gui_gtk_x11.pro
+
+
+*** ../vim-7.3.278/src/gui.c 2011-06-26 04:48:56.000000000 +0200
+--- src/gui.c 2011-08-10 17:40:31.000000000 +0200
+***************
+*** 1407,1413 ****
+ if (!gui.shell_created)
+ return;
+
+! #ifdef MSWIN
+ /* If not setting to a user specified size and maximized, calculate the
+ * number of characters that fit in the maximized window. */
+ if (!mustset && gui_mch_maximized())
+--- 1407,1413 ----
+ if (!gui.shell_created)
+ return;
+
+! #if defined(MSWIN) || defined(FEAT_GUI_GTK)
+ /* If not setting to a user specified size and maximized, calculate the
+ * number of characters that fit in the maximized window. */
+ if (!mustset && gui_mch_maximized())
+*** ../vim-7.3.278/src/gui_gtk_x11.c 2011-06-26 04:48:56.000000000 +0200
+--- src/gui_gtk_x11.c 2011-08-10 17:42:19.000000000 +0200
+***************
+*** 3900,3905 ****
+--- 3900,3920 ----
+ }
+
+ /*
++ * Called when the font changed while the window is maximized. Compute the
++ * new Rows and Columns. This is like resizing the window.
++ */
++ void
++ gui_mch_newfont()
++ {
++ int w, h;
++
++ gtk_window_get_size(GTK_WINDOW(gui.mainwin), &w, &h);
++ w -= get_menu_tool_width();
++ h -= get_menu_tool_height();
++ gui_resize_shell(w, h);
++ }
++
++ /*
+ * Set the windows size.
+ */
+ void
+***************
+*** 4409,4422 ****
+
+ if (gui_mch_maximized())
+ {
+- int w, h;
+-
+ /* Update lines and columns in accordance with the new font, keep the
+ * window maximized. */
+! gtk_window_get_size(GTK_WINDOW(gui.mainwin), &w, &h);
+! w -= get_menu_tool_width();
+! h -= get_menu_tool_height();
+! gui_resize_shell(w, h);
+ }
+ else
+ {
+--- 4424,4432 ----
+
+ if (gui_mch_maximized())
+ {
+ /* Update lines and columns in accordance with the new font, keep the
+ * window maximized. */
+! gui_mch_newfont();
+ }
+ else
+ {
+*** ../vim-7.3.278/src/proto/gui_gtk_x11.pro 2010-08-15 21:57:28.000000000 +0200
+--- src/proto/gui_gtk_x11.pro 2011-08-10 17:42:29.000000000 +0200
+***************
+*** 20,25 ****
+--- 20,26 ----
+ void gui_mch_set_winpos __ARGS((int x, int y));
+ int gui_mch_maximized __ARGS((void));
+ void gui_mch_unmaximize __ARGS((void));
++ void gui_mch_newfont __ARGS((void));
+ void gui_mch_set_shellsize __ARGS((int width, int height, int min_width, int min_height, int base_width, int base_height, int direction));
+ void gui_mch_get_screen_dimensions __ARGS((int *screen_w, int *screen_h));
+ void gui_mch_settitle __ARGS((char_u *title, char_u *icon));
+*** ../vim-7.3.278/src/version.c 2011-08-10 17:25:48.000000000 +0200
+--- src/version.c 2011-08-10 17:43:22.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 279,
+ /**/
+
+--
+LAUNCELOT: Isn't there a St. Aaaaarrrrrrggghhh's in Cornwall?
+ARTHUR: No, that's Saint Ives.
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.280 b/source/ap/vim/patches/7.3.280
new file mode 100644
index 000000000..1c1387aee
--- /dev/null
+++ b/source/ap/vim/patches/7.3.280
@@ -0,0 +1,181 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.280
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.280
+Problem: ":lmake" does not update the quickfix window title.
+Solution: Update the title. (Lech Lorens)
+Files: src/quickfix.c, src/testdir/test10.in, src/testdir/test10.ok
+
+
+*** ../vim-7.3.279/src/quickfix.c 2011-08-10 13:21:30.000000000 +0200
+--- src/quickfix.c 2011-08-10 18:09:19.000000000 +0200
+***************
+*** 126,131 ****
+--- 126,132 ----
+ static win_T *qf_find_win __ARGS((qf_info_T *qi));
+ static buf_T *qf_find_buf __ARGS((qf_info_T *qi));
+ static void qf_update_buffer __ARGS((qf_info_T *qi));
++ static void qf_set_title __ARGS((qf_info_T *qi));
+ static void qf_fill_buffer __ARGS((qf_info_T *qi));
+ #endif
+ static char_u *get_mef_name __ARGS((void));
+***************
+*** 2388,2395 ****
+ qf_fill_buffer(qi);
+
+ if (qi->qf_lists[qi->qf_curlist].qf_title != NULL)
+! set_internal_string_var((char_u *)"w:quickfix_title",
+! qi->qf_lists[qi->qf_curlist].qf_title);
+
+ curwin->w_cursor.lnum = qi->qf_lists[qi->qf_curlist].qf_index;
+ curwin->w_cursor.col = 0;
+--- 2389,2395 ----
+ qf_fill_buffer(qi);
+
+ if (qi->qf_lists[qi->qf_curlist].qf_title != NULL)
+! qf_set_title(qi);
+
+ curwin->w_cursor.lnum = qi->qf_lists[qi->qf_curlist].qf_index;
+ curwin->w_cursor.col = 0;
+***************
+*** 2526,2531 ****
+--- 2526,2533 ----
+ qf_info_T *qi;
+ {
+ buf_T *buf;
++ win_T *win;
++ win_T *curwin_save;
+ aco_save_T aco;
+
+ /* Check if a buffer for the quickfix list exists. Update it. */
+***************
+*** 2537,2542 ****
+--- 2539,2554 ----
+
+ qf_fill_buffer(qi);
+
++ if (qi->qf_lists[qi->qf_curlist].qf_title != NULL
++ && (win = qf_find_win(qi)) != NULL)
++ {
++ curwin_save = curwin;
++ curwin = win;
++ qf_set_title(qi);
++ curwin = curwin_save;
++
++ }
++
+ /* restore curwin/curbuf and a few other things */
+ aucmd_restbuf(&aco);
+
+***************
+*** 2544,2549 ****
+--- 2556,2569 ----
+ }
+ }
+
++ static void
++ qf_set_title(qi)
++ qf_info_T *qi;
++ {
++ set_internal_string_var((char_u *)"w:quickfix_title",
++ qi->qf_lists[qi->qf_curlist].qf_title);
++ }
++
+ /*
+ * Fill current buffer with quickfix errors, replacing any previous contents.
+ * curbuf must be the quickfix buffer!
+*** ../vim-7.3.279/src/testdir/test10.in 2011-08-10 13:21:30.000000000 +0200
+--- src/testdir/test10.in 2011-08-10 18:28:31.000000000 +0200
+***************
+*** 5,13 ****
+ :" Also test a BOM is ignored.
+ :so mbyte.vim
+ :set encoding=utf-8
+! :/start of errorfile/,/end of errorfile/w! Xerrorfile
+ :/start of testfile/,/end of testfile/w! Xtestfile
+! :cf Xerrorfile
+ rA
+ :cn
+ rB
+--- 5,20 ----
+ :" Also test a BOM is ignored.
+ :so mbyte.vim
+ :set encoding=utf-8
+! :7/start of errorfile/,/end of errorfile/w! Xerrorfile1
+! :7/start of errorfile/,/end of errorfile/-1w! Xerrorfile2
+ :/start of testfile/,/end of testfile/w! Xtestfile
+! :cf Xerrorfile2
+! :clast
+! :copen
+! :let a=w:quickfix_title
+! :wincmd p
+! gR=a 
+! :cf Xerrorfile1
+ rA
+ :cn
+ rB
+***************
+*** 17,22 ****
+--- 24,34 ----
+ rD
+ :cn
+ rE
++ :cn
++ :wincmd w
++ :let a=w:quickfix_title
++ :wincmd p
++ gR=a 
+ :w! test.out " Write contents of this file
+ :qa!
+ ENDTEST
+***************
+*** 33,38 ****
+--- 45,52 ----
+ "Xtestfile", linenr 19: yet another problem
+
+ Does anyone know what is the problem and how to correction it?
++ "Xtestfile", line 21 col 9: What is the title of the quickfix window?
++ "Xtestfile", line 22 col 9: What is the title of the quickfix window?
+ end of errorfile
+
+ start of testfile
+*** ../vim-7.3.279/src/testdir/test10.ok 2010-08-15 21:57:29.000000000 +0200
+--- src/testdir/test10.ok 2011-08-10 18:03:53.000000000 +0200
+***************
+*** 18,23 ****
+ line 18 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+ Eine 19 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+ line 20 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+! line 21 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+! line 22 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+ end of testfile
+--- 18,23 ----
+ line 18 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+ Eine 19 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+ line 20 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+! line 21 :cf Xerrorfile1xxxxxxxxxxxxxxx
+! line 22 :cf Xerrorfile2xxxxxxxxxxxxxxx
+ end of testfile
+*** ../vim-7.3.279/src/version.c 2011-08-10 17:44:41.000000000 +0200
+--- src/version.c 2011-08-10 18:35:52.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 280,
+ /**/
+
+--
+"When I die, I want a tombstone that says "GAME OVER" - Ton Richters
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.281 b/source/ap/vim/patches/7.3.281
new file mode 100644
index 000000000..f90e95e13
--- /dev/null
+++ b/source/ap/vim/patches/7.3.281
@@ -0,0 +1,134 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.281
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.281
+Problem: After using "expand('%:8')" the buffer name is changed.
+Solution: Make a copy of the file name before shortening it.
+Files: src/eval.c
+
+
+*** ../vim-7.3.280/src/eval.c 2011-08-10 12:38:02.000000000 +0200
+--- src/eval.c 2011-08-17 15:12:39.000000000 +0200
+***************
+*** 23205,23210 ****
+--- 23205,23211 ----
+ int c;
+ int has_fullname = 0;
+ #ifdef WIN3264
++ char_u *fname_start = *fnamep;
+ int has_shortname = 0;
+ #endif
+
+***************
+*** 23379,23402 ****
+ }
+
+ #ifdef WIN3264
+! /* Check shortname after we have done 'heads' and before we do 'tails'
+ */
+ if (has_shortname)
+ {
+! pbuf = NULL;
+! /* Copy the string if it is shortened by :h */
+! if (*fnamelen < (int)STRLEN(*fnamep))
+ {
+ p = vim_strnsave(*fnamep, *fnamelen);
+! if (p == 0)
+ return -1;
+ vim_free(*bufp);
+ *bufp = *fnamep = p;
+ }
+
+ /* Split into two implementations - makes it easier. First is where
+! * there isn't a full name already, second is where there is.
+! */
+ if (!has_fullname && !vim_isAbsName(*fnamep))
+ {
+ if (shortpath_for_partial(fnamep, bufp, fnamelen) == FAIL)
+--- 23380,23404 ----
+ }
+
+ #ifdef WIN3264
+! /*
+! * Handle ":8" after we have done 'heads' and before we do 'tails'.
+ */
+ if (has_shortname)
+ {
+! /* Copy the string if it is shortened by :h and when it wasn't copied
+! * yet, because we are going to change it in place. Avoids changing
+! * the buffer name for "%:8". */
+! if (*fnamelen < (int)STRLEN(*fnamep) || *fnamep == fname_start)
+ {
+ p = vim_strnsave(*fnamep, *fnamelen);
+! if (p == NULL)
+ return -1;
+ vim_free(*bufp);
+ *bufp = *fnamep = p;
+ }
+
+ /* Split into two implementations - makes it easier. First is where
+! * there isn't a full name already, second is where there is. */
+ if (!has_fullname && !vim_isAbsName(*fnamep))
+ {
+ if (shortpath_for_partial(fnamep, bufp, fnamelen) == FAIL)
+***************
+*** 23404,23421 ****
+ }
+ else
+ {
+! int l;
+
+! /* Simple case, already have the full-name
+ * Nearly always shorter, so try first time. */
+- l = *fnamelen;
+ if (get_short_pathname(fnamep, bufp, &l) == FAIL)
+ return -1;
+
+ if (l == 0)
+ {
+! /* Couldn't find the filename.. search the paths.
+! */
+ l = *fnamelen;
+ if (shortpath_for_invalid_fname(fnamep, bufp, &l) == FAIL)
+ return -1;
+--- 23406,23421 ----
+ }
+ else
+ {
+! int l = *fnamelen;
+
+! /* Simple case, already have the full-name.
+ * Nearly always shorter, so try first time. */
+ if (get_short_pathname(fnamep, bufp, &l) == FAIL)
+ return -1;
+
+ if (l == 0)
+ {
+! /* Couldn't find the filename, search the paths. */
+ l = *fnamelen;
+ if (shortpath_for_invalid_fname(fnamep, bufp, &l) == FAIL)
+ return -1;
+*** ../vim-7.3.280/src/version.c 2011-08-10 18:36:49.000000000 +0200
+--- src/version.c 2011-08-17 15:21:41.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 281,
+ /**/
+
+--
+Kisses may last for as much as, but no more than, five minutes.
+ [real standing law in Iowa, United States of America]
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.282 b/source/ap/vim/patches/7.3.282
new file mode 100644
index 000000000..dcd16806e
--- /dev/null
+++ b/source/ap/vim/patches/7.3.282
@@ -0,0 +1,60 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.282
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.282
+Problem: When using input() and :echo in a loop the displayed text is
+ incorrect. (Benjamin Fritz)
+Solution: Only restore the cursor position when there is a command line.
+ (Ben Schmidt)
+Files: src/ex_getln.c
+
+
+*** ../vim-7.3.281/src/ex_getln.c 2011-07-27 17:58:42.000000000 +0200
+--- src/ex_getln.c 2011-08-17 15:57:39.000000000 +0200
+***************
+*** 1969,1976 ****
+ # endif
+ s = getcmdline(firstc, 1L, 0);
+ restore_cmdline(&save_ccline);
+! /* Restore msg_col, the prompt from input() may have changed it. */
+! msg_col = msg_col_save;
+
+ return s;
+ }
+--- 1969,1980 ----
+ # endif
+ s = getcmdline(firstc, 1L, 0);
+ restore_cmdline(&save_ccline);
+! /* Restore msg_col, the prompt from input() may have changed it.
+! * But only if called recursively and the commandline is therefore being
+! * restored to an old one; if not, the input() prompt stays on the screen,
+! * so we need its modified msg_col left intact. */
+! if (ccline.cmdbuff != NULL)
+! msg_col = msg_col_save;
+
+ return s;
+ }
+*** ../vim-7.3.281/src/version.c 2011-08-17 15:23:16.000000000 +0200
+--- src/version.c 2011-08-17 16:24:04.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 282,
+ /**/
+
+--
+Why don't cannibals eat clowns?
+Because they taste funny.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.283 b/source/ap/vim/patches/7.3.283
new file mode 100644
index 000000000..1a3a6358c
--- /dev/null
+++ b/source/ap/vim/patches/7.3.283
@@ -0,0 +1,114 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.283
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.283
+Problem: An expression mapping with a multi-byte character containing a
+ 0x80 byte gets messed up. (ZyX)
+Solution: Unescape the expression before evaluating it (Yukihiro Nakadaira)
+Files: src/getchar.c
+
+
+*** ../vim-7.3.282/src/getchar.c 2011-04-28 17:30:05.000000000 +0200
+--- src/getchar.c 2011-08-17 17:04:38.000000000 +0200
+***************
+*** 3262,3270 ****
+ validate_maphash();
+
+ /*
+! * find end of keys and skip CTRL-Vs (and backslashes) in it
+ * Accept backslash like CTRL-V when 'cpoptions' does not contain 'B'.
+! * with :unmap white space is included in the keys, no argument possible
+ */
+ p = keys;
+ do_backslash = (vim_strchr(p_cpo, CPO_BSLASH) == NULL);
+--- 3262,3270 ----
+ validate_maphash();
+
+ /*
+! * Find end of keys and skip CTRL-Vs (and backslashes) in it.
+ * Accept backslash like CTRL-V when 'cpoptions' does not contain 'B'.
+! * with :unmap white space is included in the keys, no argument possible.
+ */
+ p = keys;
+ do_backslash = (vim_strchr(p_cpo, CPO_BSLASH) == NULL);
+***************
+*** 4506,4517 ****
+--- 4506,4528 ----
+ {
+ char_u *res;
+ char_u *p;
++ char_u *expr;
+ char_u *save_cmd;
+ pos_T save_cursor;
+
++ /* Remove escaping of CSI, because "str" is in a format to be used as
++ * typeahead. */
++ expr = vim_strsave(str);
++ if (expr == NULL)
++ return NULL;
++ vim_unescape_csi(expr);
++
+ save_cmd = save_cmdline_alloc();
+ if (save_cmd == NULL)
++ {
++ vim_free(expr);
+ return NULL;
++ }
+
+ /* Forbid changing text or using ":normal" to avoid most of the bad side
+ * effects. Also restore the cursor position. */
+***************
+*** 4521,4527 ****
+ #endif
+ set_vim_var_char(c); /* set v:char to the typed character */
+ save_cursor = curwin->w_cursor;
+! p = eval_to_string(str, NULL, FALSE);
+ --textlock;
+ #ifdef FEAT_EX_EXTRA
+ --ex_normal_lock;
+--- 4532,4538 ----
+ #endif
+ set_vim_var_char(c); /* set v:char to the typed character */
+ save_cursor = curwin->w_cursor;
+! p = eval_to_string(expr, NULL, FALSE);
+ --textlock;
+ #ifdef FEAT_EX_EXTRA
+ --ex_normal_lock;
+***************
+*** 4529,4536 ****
+--- 4540,4550 ----
+ curwin->w_cursor = save_cursor;
+
+ restore_cmdline_alloc(save_cmd);
++ vim_free(expr);
++
+ if (p == NULL)
+ return NULL;
++ /* Escape CSI in the result to be able to use the string as typeahead. */
+ res = vim_strsave_escape_csi(p);
+ vim_free(p);
+
+*** ../vim-7.3.282/src/version.c 2011-08-17 16:25:43.000000000 +0200
+--- src/version.c 2011-08-17 17:17:03.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 283,
+ /**/
+
+--
+bashian roulette:
+$ ((RANDOM%6)) || rm -rf ~
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.284 b/source/ap/vim/patches/7.3.284
new file mode 100644
index 000000000..c621ced63
--- /dev/null
+++ b/source/ap/vim/patches/7.3.284
@@ -0,0 +1,211 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.284
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.284
+Problem: The str2special() function doesn't handle multi-byte characters
+ properly.
+Solution: Recognize multi-byte characters. (partly by Vladimir Vichniakov)
+Files: src/getchar.c, src/message.c, src/misc2.c
+
+
+*** ../vim-7.3.283/src/getchar.c 2011-08-17 17:18:14.000000000 +0200
+--- src/getchar.c 2011-08-17 20:11:58.000000000 +0200
+***************
+*** 3964,3970 ****
+ if (*mp->m_str == NUL)
+ msg_puts_attr((char_u *)"<Nop>", hl_attr(HLF_8));
+ else
+! msg_outtrans_special(mp->m_str, FALSE);
+ #ifdef FEAT_EVAL
+ if (p_verbose > 0)
+ last_set_msg(mp->m_script_ID);
+--- 3964,3980 ----
+ if (*mp->m_str == NUL)
+ msg_puts_attr((char_u *)"<Nop>", hl_attr(HLF_8));
+ else
+! {
+! /* Remove escaping of CSI, because "m_str" is in a format to be used
+! * as typeahead. */
+! char_u *s = vim_strsave(mp->m_str);
+! if (s != NULL)
+! {
+! vim_unescape_csi(s);
+! msg_outtrans_special(s, FALSE);
+! vim_free(s);
+! }
+! }
+ #ifdef FEAT_EVAL
+ if (p_verbose > 0)
+ last_set_msg(mp->m_script_ID);
+*** ../vim-7.3.283/src/message.c 2011-03-22 13:07:19.000000000 +0100
+--- src/message.c 2011-08-17 18:40:10.000000000 +0200
+***************
+*** 1547,1562 ****
+ if (IS_SPECIAL(c) || modifiers) /* special key */
+ special = TRUE;
+ }
+- *sp = str + 1;
+
+ #ifdef FEAT_MBYTE
+! /* For multi-byte characters check for an illegal byte. */
+! if (has_mbyte && MB_BYTE2LEN(*str) > (*mb_ptr2len)(str))
+ {
+! transchar_nonprint(buf, c);
+! return buf;
+ }
+ #endif
+
+ /* Make unprintable characters in <> form, also <M-Space> and <Tab>.
+ * Use <Space> only for lhs of a mapping. */
+--- 1547,1573 ----
+ if (IS_SPECIAL(c) || modifiers) /* special key */
+ special = TRUE;
+ }
+
+ #ifdef FEAT_MBYTE
+! if (has_mbyte && !IS_SPECIAL(c))
+ {
+! int len = (*mb_ptr2len)(str);
+!
+! /* For multi-byte characters check for an illegal byte. */
+! if (has_mbyte && MB_BYTE2LEN(*str) > len)
+! {
+! transchar_nonprint(buf, c);
+! *sp = str + 1;
+! return buf;
+! }
+! /* Since 'special' is TRUE the multi-byte character 'c' will be
+! * processed by get_special_key_name() */
+! c = (*mb_ptr2char)(str);
+! *sp = str + len;
+ }
++ else
+ #endif
++ *sp = str + 1;
+
+ /* Make unprintable characters in <> form, also <M-Space> and <Tab>.
+ * Use <Space> only for lhs of a mapping. */
+*** ../vim-7.3.283/src/misc2.c 2011-07-27 17:31:42.000000000 +0200
+--- src/misc2.c 2011-08-17 20:27:30.000000000 +0200
+***************
+*** 2754,2759 ****
+--- 2754,2760 ----
+ int bit;
+ int key;
+ unsigned long n;
++ int l;
+
+ src = *srcp;
+ if (src[0] != '<')
+***************
+*** 2766,2773 ****
+ if (*bp == '-')
+ {
+ last_dash = bp;
+! if (bp[1] != NUL && bp[2] == '>')
+! ++bp; /* anything accepted, like <C-?> */
+ }
+ if (bp[0] == 't' && bp[1] == '_' && bp[2] && bp[3])
+ bp += 3; /* skip t_xx, xx may be '-' or '>' */
+--- 2767,2783 ----
+ if (*bp == '-')
+ {
+ last_dash = bp;
+! if (bp[1] != NUL)
+! {
+! #ifdef FEAT_MBYTE
+! if (has_mbyte)
+! l = mb_ptr2len(bp + 1);
+! else
+! #endif
+! l = 1;
+! if (bp[l + 1] == '>')
+! bp += l; /* anything accepted, like <C-?> */
+! }
+ }
+ if (bp[0] == 't' && bp[1] == '_' && bp[2] && bp[3])
+ bp += 3; /* skip t_xx, xx may be '-' or '>' */
+***************
+*** 2777,2791 ****
+ {
+ end_of_name = bp + 1;
+
+- if (STRNICMP(src + 1, "char-", 5) == 0 && VIM_ISDIGIT(src[6]))
+- {
+- /* <Char-123> or <Char-033> or <Char-0x33> */
+- vim_str2nr(src + 6, NULL, NULL, TRUE, TRUE, NULL, &n);
+- *modp = 0;
+- *srcp = end_of_name;
+- return (int)n;
+- }
+-
+ /* Which modifiers are given? */
+ modifiers = 0x0;
+ for (bp = src + 1; bp < last_dash; bp++)
+--- 2787,2792 ----
+***************
+*** 2804,2814 ****
+ */
+ if (bp >= last_dash)
+ {
+ /*
+ * Modifier with single letter, or special key name.
+ */
+! if (modifiers != 0 && last_dash[2] == '>')
+! key = last_dash[1];
+ else
+ {
+ key = get_special_key_code(last_dash + 1);
+--- 2805,2831 ----
+ */
+ if (bp >= last_dash)
+ {
++ if (STRNICMP(last_dash + 1, "char-", 5) == 0
++ && VIM_ISDIGIT(last_dash[6]))
++ {
++ /* <Char-123> or <Char-033> or <Char-0x33> */
++ vim_str2nr(last_dash + 6, NULL, NULL, TRUE, TRUE, NULL, &n);
++ *modp = modifiers;
++ *srcp = end_of_name;
++ return (int)n;
++ }
++
+ /*
+ * Modifier with single letter, or special key name.
+ */
+! #ifdef FEAT_MBYTE
+! if (has_mbyte)
+! l = mb_ptr2len(last_dash + 1);
+! else
+! #endif
+! l = 1;
+! if (modifiers != 0 && last_dash[l + 1] == '>')
+! key = PTR2CHAR(last_dash + 1);
+ else
+ {
+ key = get_special_key_code(last_dash + 1);
+*** ../vim-7.3.283/src/version.c 2011-08-17 17:18:14.000000000 +0200
+--- src/version.c 2011-08-17 20:27:47.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 284,
+ /**/
+
+--
+Snoring is prohibited unless all bedroom windows are closed and securely
+locked.
+ [real standing law in Massachusetts, United States of America]
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.285 b/source/ap/vim/patches/7.3.285
new file mode 100644
index 000000000..24be28bc0
--- /dev/null
+++ b/source/ap/vim/patches/7.3.285
@@ -0,0 +1,144 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.285
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.285 (after 7.3.284)
+Problem: Mapping <Char-123> no longer works.
+Solution: Properly check for "char-". Add a test for it.
+Files: src/misc2.c, src/testdir/test75.in, src/testdir/test75.ok
+
+
+*** ../vim-7.3.284/src/misc2.c 2011-08-17 20:33:18.000000000 +0200
+--- src/misc2.c 2011-08-19 22:08:37.000000000 +0200
+***************
+*** 2781,2786 ****
+--- 2781,2792 ----
+ }
+ if (bp[0] == 't' && bp[1] == '_' && bp[2] && bp[3])
+ bp += 3; /* skip t_xx, xx may be '-' or '>' */
++ else if (STRNICMP(bp, "char-", 5) == 0)
++ {
++ vim_str2nr(bp + 5, NULL, &l, TRUE, TRUE, NULL, NULL);
++ bp += l + 5;
++ break;
++ }
+ }
+
+ if (*bp == '>') /* found matching '>' */
+***************
+*** 2810,2836 ****
+ {
+ /* <Char-123> or <Char-033> or <Char-0x33> */
+ vim_str2nr(last_dash + 6, NULL, NULL, TRUE, TRUE, NULL, &n);
+! *modp = modifiers;
+! *srcp = end_of_name;
+! return (int)n;
+ }
+-
+- /*
+- * Modifier with single letter, or special key name.
+- */
+- #ifdef FEAT_MBYTE
+- if (has_mbyte)
+- l = mb_ptr2len(last_dash + 1);
+- else
+- #endif
+- l = 1;
+- if (modifiers != 0 && last_dash[l + 1] == '>')
+- key = PTR2CHAR(last_dash + 1);
+ else
+ {
+! key = get_special_key_code(last_dash + 1);
+! if (!keep_x_key)
+! key = handle_x_keys(key);
+ }
+
+ /*
+--- 2816,2842 ----
+ {
+ /* <Char-123> or <Char-033> or <Char-0x33> */
+ vim_str2nr(last_dash + 6, NULL, NULL, TRUE, TRUE, NULL, &n);
+! key = (int)n;
+ }
+ else
+ {
+! /*
+! * Modifier with single letter, or special key name.
+! */
+! #ifdef FEAT_MBYTE
+! if (has_mbyte)
+! l = mb_ptr2len(last_dash + 1);
+! else
+! #endif
+! l = 1;
+! if (modifiers != 0 && last_dash[l + 1] == '>')
+! key = PTR2CHAR(last_dash + 1);
+! else
+! {
+! key = get_special_key_code(last_dash + 1);
+! if (!keep_x_key)
+! key = handle_x_keys(key);
+! }
+ }
+
+ /*
+*** ../vim-7.3.284/src/testdir/test75.in 2010-10-20 21:22:17.000000000 +0200
+--- src/testdir/test75.in 2011-08-19 22:05:13.000000000 +0200
+***************
+*** 2,7 ****
+--- 2,8 ----
+
+ STARTTEST
+ :so small.vim
++ :set cpo-=<
+ :" Test maparg() with a string result
+ :map foo<C-V> is<F4>foo
+ :vnoremap <script> <buffer> <expr> <silent> bar isbar
+***************
+*** 9,14 ****
+--- 10,20 ----
+ :call append('$', string(maparg('foo<C-V>', '', 0, 1)))
+ :call append('$', string(maparg('bar', '', 0, 1)))
+ :"
++ :map abc x<char-114>x
++ :call append('$', maparg('abc'))
++ :map abc y<S-char-114>y
++ :call append('$', maparg('abc'))
++ :"
+ :/^eof/+1,$w! test.out
+ :qa!
+ ENDTEST
+*** ../vim-7.3.284/src/testdir/test75.ok 2010-10-20 21:22:17.000000000 +0200
+--- src/testdir/test75.ok 2011-08-19 21:53:26.000000000 +0200
+***************
+*** 1,3 ****
+--- 1,5 ----
+ is<F4>foo
+ {'silent': 0, 'noremap': 0, 'lhs': 'foo<C-V>', 'mode': ' ', 'expr': 0, 'sid': 0, 'rhs': 'is<F4>foo', 'buffer': 0}
+ {'silent': 1, 'noremap': 1, 'lhs': 'bar', 'mode': 'v', 'expr': 1, 'sid': 0, 'rhs': 'isbar', 'buffer': 1}
++ xrx
++ yRy
+*** ../vim-7.3.284/src/version.c 2011-08-17 20:33:18.000000000 +0200
+--- src/version.c 2011-08-19 22:15:22.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 285,
+ /**/
+
+
+--
+No man may purchase alcohol without written consent from his wife.
+ [real standing law in Pennsylvania, United States of America]
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.286 b/source/ap/vim/patches/7.3.286
new file mode 100644
index 000000000..308d5105c
--- /dev/null
+++ b/source/ap/vim/patches/7.3.286
@@ -0,0 +1,84 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.286
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.286
+Problem: Crash when using "zd" on a large number of folds. (Sam King)
+Solution: Recompute pointer after reallocating array. Move fewer entries
+ when making room.
+Files: src/fold.c
+
+
+*** ../vim-7.3.285/src/fold.c 2010-08-15 21:57:27.000000000 +0200
+--- src/fold.c 2011-08-26 16:03:56.000000000 +0200
+***************
+*** 1469,1479 ****
+ }
+ else
+ {
+! /* move nested folds one level up, to overwrite the fold that is
+ * deleted. */
+ moved = fp->fd_nested.ga_len;
+ if (ga_grow(gap, (int)(moved - 1)) == OK)
+ {
+ /* adjust fd_top and fd_flags for the moved folds */
+ nfp = (fold_T *)fp->fd_nested.ga_data;
+ for (i = 0; i < moved; ++i)
+--- 1469,1482 ----
+ }
+ else
+ {
+! /* Move nested folds one level up, to overwrite the fold that is
+ * deleted. */
+ moved = fp->fd_nested.ga_len;
+ if (ga_grow(gap, (int)(moved - 1)) == OK)
+ {
++ /* Get "fp" again, the array may have been reallocated. */
++ fp = (fold_T *)gap->ga_data + idx;
++
+ /* adjust fd_top and fd_flags for the moved folds */
+ nfp = (fold_T *)fp->fd_nested.ga_data;
+ for (i = 0; i < moved; ++i)
+***************
+*** 1486,1494 ****
+ }
+
+ /* move the existing folds down to make room */
+! if (idx < gap->ga_len)
+ mch_memmove(fp + moved, fp + 1,
+! sizeof(fold_T) * (gap->ga_len - idx));
+ /* move the contained folds one level up */
+ mch_memmove(fp, nfp, (size_t)(sizeof(fold_T) * moved));
+ vim_free(nfp);
+--- 1489,1497 ----
+ }
+
+ /* move the existing folds down to make room */
+! if (idx + 1 < gap->ga_len)
+ mch_memmove(fp + moved, fp + 1,
+! sizeof(fold_T) * (gap->ga_len - (idx + 1)));
+ /* move the contained folds one level up */
+ mch_memmove(fp, nfp, (size_t)(sizeof(fold_T) * moved));
+ vim_free(nfp);
+*** ../vim-7.3.285/src/version.c 2011-08-19 22:28:58.000000000 +0200
+--- src/version.c 2011-08-26 16:07:59.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 286,
+ /**/
+
+--
+To keep milk from turning sour: Keep it in the cow.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.287 b/source/ap/vim/patches/7.3.287
new file mode 100644
index 000000000..5c6da035f
--- /dev/null
+++ b/source/ap/vim/patches/7.3.287
@@ -0,0 +1,100 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.287
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.287
+Problem: Can't compile with MSVC and tiny options.
+Solution: Move variables and #ifdefs. (Sergey Khorev)
+Files: src/os_win32.c
+
+
+*** ../vim-7.3.286/src/os_win32.c 2011-08-10 17:07:56.000000000 +0200
+--- src/os_win32.c 2011-08-27 15:07:28.000000000 +0200
+***************
+*** 3419,3426 ****
+ {
+ DWORD availableBytes = 0;
+ DWORD i;
+- int c;
+- char_u *p;
+ int ret;
+ DWORD len;
+ DWORD toRead;
+--- 3419,3424 ----
+***************
+*** 3479,3484 ****
+--- 3477,3484 ----
+ else if (has_mbyte)
+ {
+ int l;
++ int c;
++ char_u *p;
+
+ len += *buffer_off;
+ buffer[len] = NUL;
+***************
+*** 3558,3566 ****
+ int noread_cnt = 0;
+ garray_T ga;
+ int delay = 1;
+- # ifdef FEAT_MBYTE
+ DWORD buffer_off = 0; /* valid bytes in buffer[] */
+- # endif
+
+ SECURITY_ATTRIBUTES saAttr;
+
+--- 3558,3564 ----
+***************
+*** 3777,3790 ****
+
+ if (WaitForSingleObject(pi.hProcess, delay) != WAIT_TIMEOUT)
+ {
+! dump_pipe(options, g_hChildStd_OUT_Rd,
+! &ga, buffer, &buffer_off);
+ break;
+ }
+
+ ++noread_cnt;
+! dump_pipe(options, g_hChildStd_OUT_Rd,
+! &ga, buffer, &buffer_off);
+
+ /* We start waiting for a very short time and then increase it, so
+ * that we respond quickly when the process is quick, and don't
+--- 3775,3786 ----
+
+ if (WaitForSingleObject(pi.hProcess, delay) != WAIT_TIMEOUT)
+ {
+! dump_pipe(options, g_hChildStd_OUT_Rd, &ga, buffer, &buffer_off);
+ break;
+ }
+
+ ++noread_cnt;
+! dump_pipe(options, g_hChildStd_OUT_Rd, &ga, buffer, &buffer_off);
+
+ /* We start waiting for a very short time and then increase it, so
+ * that we respond quickly when the process is quick, and don't
+*** ../vim-7.3.286/src/version.c 2011-08-26 16:12:55.000000000 +0200
+--- src/version.c 2011-08-27 15:08:27.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 287,
+ /**/
+
+--
+SUPERIMPOSE "England AD 787". After a few more seconds we hear hoofbeats in
+the distance. They come slowly closer. Then out of the mist comes KING
+ARTHUR followed by a SERVANT who is banging two half coconuts together.
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.288 b/source/ap/vim/patches/7.3.288
new file mode 100644
index 000000000..d1f662681
--- /dev/null
+++ b/source/ap/vim/patches/7.3.288
@@ -0,0 +1,76 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.288
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.288
+Problem: has('python') may give an error message for not being able to load
+ the library after using python3.
+Solution: Only give the error when the verbose argument is true.
+Files: src/if_python.c, src/if_python3.c
+
+
+*** ../vim-7.3.287/src/if_python.c 2011-06-19 00:27:46.000000000 +0200
+--- src/if_python.c 2011-08-21 17:03:52.000000000 +0200
+***************
+*** 368,374 ****
+ * standard C extension libraries of one or both python versions. */
+ if (python3_loaded())
+ {
+! EMSG(_("E836: This Vim cannot execute :python after using :py3"));
+ return FAIL;
+ }
+ #endif
+--- 368,375 ----
+ * standard C extension libraries of one or both python versions. */
+ if (python3_loaded())
+ {
+! if (verbose)
+! EMSG(_("E836: This Vim cannot execute :python after using :py3"));
+ return FAIL;
+ }
+ #endif
+*** ../vim-7.3.287/src/if_python3.c 2011-07-15 15:54:39.000000000 +0200
+--- src/if_python3.c 2011-08-21 17:05:19.000000000 +0200
+***************
+*** 367,373 ****
+ * standard C extension libraries of one or both python versions. */
+ if (python_loaded())
+ {
+! EMSG(_("E837: This Vim cannot execute :py3 after using :python"));
+ return FAIL;
+ }
+ # endif
+--- 367,374 ----
+ * standard C extension libraries of one or both python versions. */
+ if (python_loaded())
+ {
+! if (verbose)
+! EMSG(_("E837: This Vim cannot execute :py3 after using :python"));
+ return FAIL;
+ }
+ # endif
+*** ../vim-7.3.287/src/version.c 2011-08-27 15:10:00.000000000 +0200
+--- src/version.c 2011-08-28 15:59:11.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 288,
+ /**/
+
+--
+FIRST SOLDIER: So they wouldn't be able to bring a coconut back anyway.
+SECOND SOLDIER: Wait a minute! Suppose two swallows carried it together?
+FIRST SOLDIER: No, they'd have to have it on a line.
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.289 b/source/ap/vim/patches/7.3.289
new file mode 100644
index 000000000..30258e429
--- /dev/null
+++ b/source/ap/vim/patches/7.3.289
@@ -0,0 +1,56 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.289
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.289
+Problem: Complete function isn't called when the leader changed.
+Solution: Call ins_compl_restart() when the leader changed. (Taro Muraoka)
+Files: src/edit.c
+
+
+*** ../vim-7.3.288/src/edit.c 2011-05-19 17:25:36.000000000 +0200
+--- src/edit.c 2011-08-28 15:53:47.000000000 +0200
+***************
+*** 3367,3372 ****
+--- 3367,3381 ----
+ ins_bytes(compl_leader + ins_compl_len());
+ compl_used_match = FALSE;
+
++ #ifdef FEAT_COMPL_FUNC
++ /*
++ * To call eval 'completefunc' when leader is changed, restart completion
++ * every time.
++ */
++ if (ctrl_x_mode == CTRL_X_FUNCTION || ctrl_x_mode == CTRL_X_OMNI)
++ ins_compl_restart();
++ #endif
++
+ if (compl_started)
+ ins_compl_set_original_text(compl_leader);
+ else
+*** ../vim-7.3.288/src/version.c 2011-08-28 16:00:14.000000000 +0200
+--- src/version.c 2011-08-28 16:01:22.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 289,
+ /**/
+
+--
+THEOREM: VI is perfect.
+PROOF: VI in roman numerals is 6. The natural numbers < 6 which divide 6 are
+1, 2, and 3. 1+2+3 = 6. So 6 is a perfect number. Therefore, VI is perfect.
+QED
+ -- Arthur Tateishi
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.290 b/source/ap/vim/patches/7.3.290
new file mode 100644
index 000000000..b50cacfc4
--- /dev/null
+++ b/source/ap/vim/patches/7.3.290
@@ -0,0 +1,75 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.290
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.290
+Problem: When a BufWriteCmd autocommand resets 'modified' this doesn't
+ change older buffer states to be marked as 'modified' like
+ ":write" does. (Yukihiro Nakadaira)
+Solution: When the BufWriteCmd resets 'modified' then adjust the undo
+ information like ":write" does.
+Files: src/fileio.c
+
+
+*** ../vim-7.3.289/src/fileio.c 2011-07-20 18:29:33.000000000 +0200
+--- src/fileio.c 2011-08-29 21:49:27.000000000 +0200
+***************
+*** 3342,3349 ****
+ }
+ else if (reset_changed && whole)
+ {
+! if (!(did_cmd = apply_autocmds_exarg(EVENT_BUFWRITECMD,
+! sfname, sfname, FALSE, curbuf, eap)))
+ {
+ #ifdef FEAT_QUICKFIX
+ if (overwriting && bt_nofile(curbuf))
+--- 3342,3363 ----
+ }
+ else if (reset_changed && whole)
+ {
+! int was_changed = curbufIsChanged();
+!
+! did_cmd = apply_autocmds_exarg(EVENT_BUFWRITECMD,
+! sfname, sfname, FALSE, curbuf, eap);
+! if (did_cmd)
+! {
+! if (was_changed && !curbufIsChanged())
+! {
+! /* Written everything correctly and BufWriteCmd has reset
+! * 'modified': Correct the undo information so that an
+! * undo now sets 'modified'. */
+! u_unchanged(curbuf);
+! u_update_save_nr(curbuf);
+! }
+! }
+! else
+ {
+ #ifdef FEAT_QUICKFIX
+ if (overwriting && bt_nofile(curbuf))
+*** ../vim-7.3.289/src/version.c 2011-08-28 16:02:23.000000000 +0200
+--- src/version.c 2011-09-02 11:37:25.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 290,
+ /**/
+
+--
+OLD WOMAN: Well, how did you become king, then?
+ARTHUR: The Lady of the Lake, her arm clad in the purest shimmering samite,
+ held Excalibur aloft from the bosom of the water to signify by Divine
+ Providence ... that I, Arthur, was to carry Excalibur ... That is
+ why I am your king!
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.291 b/source/ap/vim/patches/7.3.291
new file mode 100644
index 000000000..1d394e4c9
--- /dev/null
+++ b/source/ap/vim/patches/7.3.291
@@ -0,0 +1,125 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.291
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.291
+Problem: Configure doesn't work properly with Python3.
+Solution: Put -ldl before $LDFLAGS. Add PY3_NO_RTLD_GLOBAL. (Roland
+ Puntaier)
+Files: src/config.h.in, src/auto/configure, src/configure.in
+
+
+*** ../vim-7.3.290/src/config.h.in 2010-10-27 16:49:41.000000000 +0200
+--- src/config.h.in 2011-09-02 11:22:21.000000000 +0200
+***************
+*** 346,351 ****
+--- 346,354 ----
+ /* Define if dynamic python does not require RTLD_GLOBAL */
+ #undef PY_NO_RTLD_GLOBAL
+
++ /* Define if dynamic python3 does not require RTLD_GLOBAL */
++ #undef PY3_NO_RTLD_GLOBAL
++
+ /* Define if you want to include the Ruby interpreter. */
+ #undef FEAT_RUBY
+
+*** ../vim-7.3.290/src/auto/configure 2011-07-15 13:09:46.000000000 +0200
+--- src/auto/configure 2011-09-02 11:23:15.000000000 +0200
+***************
+*** 5733,5739 ****
+ cflags_save=$CFLAGS
+ CFLAGS="$CFLAGS $PYTHON_CFLAGS"
+ ldflags_save=$LDFLAGS
+! LDFLAGS="$LDFLAGS -ldl"
+ if test "$cross_compiling" = yes; then :
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+ $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+--- 5733,5739 ----
+ cflags_save=$CFLAGS
+ CFLAGS="$CFLAGS $PYTHON_CFLAGS"
+ ldflags_save=$LDFLAGS
+! LDFLAGS="-ldl $LDFLAGS"
+ if test "$cross_compiling" = yes; then :
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+ $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+***************
+*** 5798,5804 ****
+ cflags_save=$CFLAGS
+ CFLAGS="$CFLAGS $PYTHON3_CFLAGS"
+ ldflags_save=$LDFLAGS
+! LDFLAGS="$LDFLAGS -ldl"
+ if test "$cross_compiling" = yes; then :
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+ $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+--- 5798,5804 ----
+ cflags_save=$CFLAGS
+ CFLAGS="$CFLAGS $PYTHON3_CFLAGS"
+ ldflags_save=$LDFLAGS
+! LDFLAGS="-ldl $LDFLAGS"
+ if test "$cross_compiling" = yes; then :
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+ $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+*** ../vim-7.3.290/src/configure.in 2011-07-15 13:09:46.000000000 +0200
+--- src/configure.in 2011-09-02 11:19:51.000000000 +0200
+***************
+*** 1161,1167 ****
+ cflags_save=$CFLAGS
+ CFLAGS="$CFLAGS $PYTHON_CFLAGS"
+ ldflags_save=$LDFLAGS
+! LDFLAGS="$LDFLAGS -ldl"
+ AC_RUN_IFELSE([
+ #include <dlfcn.h>
+ /* If this program fails, then RTLD_GLOBAL is needed.
+--- 1161,1168 ----
+ cflags_save=$CFLAGS
+ CFLAGS="$CFLAGS $PYTHON_CFLAGS"
+ ldflags_save=$LDFLAGS
+! dnl -ldl must go first to make this work on Archlinux (Roland Puntaier)
+! LDFLAGS="-ldl $LDFLAGS"
+ AC_RUN_IFELSE([
+ #include <dlfcn.h>
+ /* If this program fails, then RTLD_GLOBAL is needed.
+***************
+*** 1205,1211 ****
+ cflags_save=$CFLAGS
+ CFLAGS="$CFLAGS $PYTHON3_CFLAGS"
+ ldflags_save=$LDFLAGS
+! LDFLAGS="$LDFLAGS -ldl"
+ AC_RUN_IFELSE([
+ #include <dlfcn.h>
+ #include <wchar.h>
+--- 1206,1213 ----
+ cflags_save=$CFLAGS
+ CFLAGS="$CFLAGS $PYTHON3_CFLAGS"
+ ldflags_save=$LDFLAGS
+! dnl -ldl must go first to make this work on Archlinux (Roland Puntaier)
+! LDFLAGS="-ldl $LDFLAGS"
+ AC_RUN_IFELSE([
+ #include <dlfcn.h>
+ #include <wchar.h>
+*** ../vim-7.3.290/src/version.c 2011-09-02 11:56:15.000000000 +0200
+--- src/version.c 2011-09-02 12:25:13.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 291,
+ /**/
+
+--
+DENNIS: Look, strange women lying on their backs in ponds handing out
+ swords ... that's no basis for a system of government. Supreme
+ executive power derives from a mandate from the masses, not from some
+ farcical aquatic ceremony.
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.292 b/source/ap/vim/patches/7.3.292
new file mode 100644
index 000000000..fc9480fee
--- /dev/null
+++ b/source/ap/vim/patches/7.3.292
@@ -0,0 +1,55 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.292
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.292
+Problem: Crash when using fold markers and selecting a visual block that
+ includes a folded line and goes to end of line. (Sam Lidder)
+Solution: Check for the column to be MAXCOL. (James Vega)
+Files: src/screen.c
+
+
+*** ../vim-7.3.291/src/screen.c 2011-08-10 14:32:33.000000000 +0200
+--- src/screen.c 2011-09-02 13:58:18.000000000 +0200
+***************
+*** 2531,2537 ****
+ /* Visual block mode: highlight the chars part of the block */
+ if (wp->w_old_cursor_fcol + txtcol < (colnr_T)W_WIDTH(wp))
+ {
+! if (wp->w_old_cursor_lcol + txtcol < (colnr_T)W_WIDTH(wp))
+ len = wp->w_old_cursor_lcol;
+ else
+ len = W_WIDTH(wp) - txtcol;
+--- 2531,2539 ----
+ /* Visual block mode: highlight the chars part of the block */
+ if (wp->w_old_cursor_fcol + txtcol < (colnr_T)W_WIDTH(wp))
+ {
+! if (wp->w_old_cursor_lcol != MAXCOL
+! && wp->w_old_cursor_lcol + txtcol
+! < (colnr_T)W_WIDTH(wp))
+ len = wp->w_old_cursor_lcol;
+ else
+ len = W_WIDTH(wp) - txtcol;
+*** ../vim-7.3.291/src/version.c 2011-09-02 12:27:20.000000000 +0200
+--- src/version.c 2011-09-02 14:00:03.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 292,
+ /**/
+
+--
+Hacker: Someone skilled in computer programming (good guy).
+Cracker: A hacker that uses his skills to crack software (bad guy).
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.293 b/source/ap/vim/patches/7.3.293
new file mode 100644
index 000000000..4072e32f1
--- /dev/null
+++ b/source/ap/vim/patches/7.3.293
@@ -0,0 +1,74 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.293
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.293
+Problem: MSVC compiler has a problem with non-ASCII characters.
+Solution: Avoid non-ASCII characters. (Hong Xu)
+Files: src/ascii.h, src/spell.c
+
+
+*** ../vim-7.3.292/src/ascii.h 2011-05-10 16:41:13.000000000 +0200
+--- src/ascii.h 2011-09-02 14:12:48.000000000 +0200
+***************
+*** 123,129 ****
+ #define DCS 0x90 /* Device Control String */
+ #define STERM 0x9c /* String Terminator */
+
+! #define POUND '£'
+
+ #define CTRL_F_STR "\056"
+ #define CTRL_H_STR "\026"
+--- 123,129 ----
+ #define DCS 0x90 /* Device Control String */
+ #define STERM 0x9c /* String Terminator */
+
+! #define POUND '\xA3'
+
+ #define CTRL_F_STR "\056"
+ #define CTRL_H_STR "\026"
+*** ../vim-7.3.292/src/spell.c 2011-04-11 21:35:03.000000000 +0200
+--- src/spell.c 2011-09-02 14:13:30.000000000 +0200
+***************
+*** 11197,11203 ****
+ c = *s++;
+
+ #ifdef FEAT_MBYTE
+! /* We only change ß to SS when we are certain latin1 is used. It
+ * would cause weird errors in other 8-bit encodings. */
+ if (enc_latin1like && c == 0xdf)
+ {
+--- 11197,11203 ----
+ c = *s++;
+
+ #ifdef FEAT_MBYTE
+! /* We only change 0xdf to SS when we are certain latin1 is used. It
+ * would cause weird errors in other 8-bit encodings. */
+ if (enc_latin1like && c == 0xdf)
+ {
+*** ../vim-7.3.292/src/version.c 2011-09-02 14:07:31.000000000 +0200
+--- src/version.c 2011-09-02 14:13:57.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 293,
+ /**/
+
+--
+ A village. Sound of chanting of Latin canon, punctuated by short, sharp
+ cracks. It comes nearer. We see it is a line of MONKS ala SEVENTH SEAL
+ flagellation scene, chanting and banging themselves on the foreheads with
+ wooden boards.
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.294 b/source/ap/vim/patches/7.3.294
new file mode 100644
index 000000000..84252ba3e
--- /dev/null
+++ b/source/ap/vim/patches/7.3.294
@@ -0,0 +1,58 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.294
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.294 (after 7.3.289)
+Problem: Patch 289 causes more problems than it solves.
+Solution: Rever the patch untill a better solution is found.
+Files: src/edit.c
+
+
+*** ../vim-7.3.293/src/edit.c 2011-08-28 16:02:23.000000000 +0200
+--- src/edit.c 2011-09-05 20:07:49.000000000 +0200
+***************
+*** 3367,3381 ****
+ ins_bytes(compl_leader + ins_compl_len());
+ compl_used_match = FALSE;
+
+- #ifdef FEAT_COMPL_FUNC
+- /*
+- * To call eval 'completefunc' when leader is changed, restart completion
+- * every time.
+- */
+- if (ctrl_x_mode == CTRL_X_FUNCTION || ctrl_x_mode == CTRL_X_OMNI)
+- ins_compl_restart();
+- #endif
+-
+ if (compl_started)
+ ins_compl_set_original_text(compl_leader);
+ else
+--- 3367,3372 ----
+*** ../vim-7.3.293/src/version.c 2011-09-02 14:18:14.000000000 +0200
+--- src/version.c 2011-09-05 20:08:27.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 294,
+ /**/
+
+--
+Scientists decoded the first message from an alien civilization:
+ SIMPLY SEND 6 TIMES 10 TO THE 50 ATOMS OF HYDROGEN TO THE STAR
+SYSTEM AT THE TOP OF THE LIST, CROSS OFF THAT STAR SYSTEM, THEN PUT
+YOUR STAR SYSTEM AT THE BOTTOM OF THE LIST AND SEND IT TO 100 OTHER
+STAR SYSTEMS. WITHIN ONE TENTH GALACTIC ROTATION YOU WILL RECEIVE
+ENOUGH HYDROGREN TO POWER YOUR CIVILIZATION UNTIL ENTROPY REACHES ITS
+MAXIMUM! IT REALLY WORKS!
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.295 b/source/ap/vim/patches/7.3.295
new file mode 100644
index 000000000..fad7ea3e4
--- /dev/null
+++ b/source/ap/vim/patches/7.3.295
@@ -0,0 +1,109 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.295
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.295
+Problem: When filtering text with an external command Vim may not read all
+ the output.
+Solution: When select() is interrupted loop and try again. (James Vega)
+Files: src/os_unix.c
+
+
+*** ../vim-7.3.294/src/os_unix.c 2011-08-04 20:31:50.000000000 +0200
+--- src/os_unix.c 2011-09-07 13:34:09.000000000 +0200
+***************
+*** 4819,4825 ****
+
+ /*
+ * Wait "msec" msec until a character is available from file descriptor "fd".
+! * Time == -1 will block forever.
+ * When a GUI is being used, this will not be used for input -- webb
+ * Returns also, when a request from Sniff is waiting -- toni.
+ * Or when a Linux GPM mouse event is waiting.
+--- 4819,4826 ----
+
+ /*
+ * Wait "msec" msec until a character is available from file descriptor "fd".
+! * "msec" == 0 will check for characters once.
+! * "msec" == -1 will block until a character is available.
+ * When a GUI is being used, this will not be used for input -- webb
+ * Returns also, when a request from Sniff is waiting -- toni.
+ * Or when a Linux GPM mouse event is waiting.
+***************
+*** 5057,5063 ****
+ /*
+ * Select on ready for reading and exceptional condition (end of file).
+ */
+! FD_ZERO(&rfds); /* calls bzero() on a sun */
+ FD_ZERO(&efds);
+ FD_SET(fd, &rfds);
+ # if !defined(__QNX__) && !defined(__CYGWIN32__)
+--- 5058,5065 ----
+ /*
+ * Select on ready for reading and exceptional condition (end of file).
+ */
+! select_eintr:
+! FD_ZERO(&rfds);
+ FD_ZERO(&efds);
+ FD_SET(fd, &rfds);
+ # if !defined(__QNX__) && !defined(__CYGWIN32__)
+***************
+*** 5117,5122 ****
+--- 5119,5132 ----
+ # else
+ ret = select(maxfd + 1, &rfds, NULL, &efds, tvp);
+ # endif
++ # ifdef EINTR
++ if (ret == -1 && errno == EINTR)
++ /* Interrupted by a signal, need to try again. We ignore msec
++ * here, because we do want to check even after a timeout if
++ * characters are available. Needed for reading output of an
++ * external command after the process has finished. */
++ goto select_eintr;
++ # endif
+ # ifdef __TANDEM
+ if (ret == -1 && errno == ENOTSUP)
+ {
+***************
+*** 5124,5130 ****
+ FD_ZERO(&efds);
+ ret = 0;
+ }
+! #endif
+ # ifdef FEAT_MZSCHEME
+ if (ret == 0 && mzquantum_used)
+ /* loop if MzThreads must be scheduled and timeout occurred */
+--- 5134,5140 ----
+ FD_ZERO(&efds);
+ ret = 0;
+ }
+! # endif
+ # ifdef FEAT_MZSCHEME
+ if (ret == 0 && mzquantum_used)
+ /* loop if MzThreads must be scheduled and timeout occurred */
+*** ../vim-7.3.294/src/version.c 2011-09-05 20:13:37.000000000 +0200
+--- src/version.c 2011-09-07 14:05:05.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 295,
+ /**/
+
+--
+"You're fired." (1980)
+"You're laid off." (1985)
+"You're downsized." (1990)
+"You're rightsized." (1992)
+ (Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.296 b/source/ap/vim/patches/7.3.296
new file mode 100644
index 000000000..80369d1af
--- /dev/null
+++ b/source/ap/vim/patches/7.3.296
@@ -0,0 +1,222 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.296
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.296
+Problem: When writing to an external command a zombie process may be left
+ behind.
+Solution: Wait on the process. (James Vega)
+Files: src/os_unix.c
+
+
+*** ../vim-7.3.295/src/os_unix.c 2011-09-07 14:06:38.000000000 +0200
+--- src/os_unix.c 2011-09-07 14:54:11.000000000 +0200
+***************
+*** 154,159 ****
+--- 154,166 ----
+
+ static void may_core_dump __ARGS((void));
+
++ #ifdef HAVE_UNION_WAIT
++ typedef union wait waitstatus;
++ #else
++ typedef int waitstatus;
++ #endif
++ static int wait4pid __ARGS((pid_t, waitstatus *));
++
+ static int WaitForChar __ARGS((long));
+ #if defined(__BEOS__)
+ int RealWaitForChar __ARGS((int, long, int *));
+***************
+*** 3660,3665 ****
+--- 3667,3713 ----
+ /* Nothing to do. */
+ }
+
++ /*
++ * Wait for process "child" to end.
++ * Return "child" if it exited properly, <= 0 on error.
++ */
++ static pid_t
++ wait4pid(child, status)
++ pid_t child;
++ waitstatus *status;
++ {
++ pid_t wait_pid = 0;
++
++ while (wait_pid != child)
++ {
++ # ifdef _THREAD_SAFE
++ /* Ugly hack: when compiled with Python threads are probably
++ * used, in which case wait() sometimes hangs for no obvious
++ * reason. Use waitpid() instead and loop (like the GUI). */
++ # ifdef __NeXT__
++ wait_pid = wait4(child, status, WNOHANG, (struct rusage *)0);
++ # else
++ wait_pid = waitpid(child, status, WNOHANG);
++ # endif
++ if (wait_pid == 0)
++ {
++ /* Wait for 1/100 sec before trying again. */
++ mch_delay(10L, TRUE);
++ continue;
++ }
++ # else
++ wait_pid = wait(status);
++ # endif
++ if (wait_pid <= 0
++ # ifdef ECHILD
++ && errno == ECHILD
++ # endif
++ )
++ break;
++ }
++ return wait_pid;
++ }
++
+ int
+ mch_call_shell(cmd, options)
+ char_u *cmd;
+***************
+*** 4234,4240 ****
+ {
+ MSG_PUTS(_("\nCannot fork\n"));
+ }
+! else if (wpid == 0)
+ {
+ linenr_T lnum = curbuf->b_op_start.lnum;
+ int written = 0;
+--- 4282,4288 ----
+ {
+ MSG_PUTS(_("\nCannot fork\n"));
+ }
+! else if (wpid == 0) /* child */
+ {
+ linenr_T lnum = curbuf->b_op_start.lnum;
+ int written = 0;
+***************
+*** 4242,4248 ****
+ char_u *s;
+ size_t l;
+
+- /* child */
+ close(fromshell_fd);
+ for (;;)
+ {
+--- 4290,4295 ----
+***************
+*** 4287,4293 ****
+ }
+ _exit(0);
+ }
+! else
+ {
+ close(toshell_fd);
+ toshell_fd = -1;
+--- 4334,4340 ----
+ }
+ _exit(0);
+ }
+! else /* parent */
+ {
+ close(toshell_fd);
+ toshell_fd = -1;
+***************
+*** 4584,4590 ****
+ * typed characters (otherwise we would lose typeahead).
+ */
+ # ifdef __NeXT__
+! wait_pid = wait4(pid, &status, WNOHANG, (struct rusage *) 0);
+ # else
+ wait_pid = waitpid(pid, &status, WNOHANG);
+ # endif
+--- 4631,4637 ----
+ * typed characters (otherwise we would lose typeahead).
+ */
+ # ifdef __NeXT__
+! wait_pid = wait4(pid, &status, WNOHANG, (struct rusage *)0);
+ # else
+ wait_pid = waitpid(pid, &status, WNOHANG);
+ # endif
+***************
+*** 4633,4665 ****
+ * Don't wait if wait_pid was already set above, indicating the
+ * child already exited.
+ */
+! while (wait_pid != pid)
+! {
+! # ifdef _THREAD_SAFE
+! /* Ugly hack: when compiled with Python threads are probably
+! * used, in which case wait() sometimes hangs for no obvious
+! * reason. Use waitpid() instead and loop (like the GUI). */
+! # ifdef __NeXT__
+! wait_pid = wait4(pid, &status, WNOHANG, (struct rusage *)0);
+! # else
+! wait_pid = waitpid(pid, &status, WNOHANG);
+! # endif
+! if (wait_pid == 0)
+! {
+! /* Wait for 1/100 sec before trying again. */
+! mch_delay(10L, TRUE);
+! continue;
+! }
+! # else
+! wait_pid = wait(&status);
+! # endif
+! if (wait_pid <= 0
+! # ifdef ECHILD
+! && errno == ECHILD
+! # endif
+! )
+! break;
+! }
+
+ # ifdef FEAT_GUI
+ /* Close slave side of pty. Only do this after the child has
+--- 4680,4687 ----
+ * Don't wait if wait_pid was already set above, indicating the
+ * child already exited.
+ */
+! if (wait_pid != pid)
+! wait_pid = wait4pid(pid, &status);
+
+ # ifdef FEAT_GUI
+ /* Close slave side of pty. Only do this after the child has
+***************
+*** 4672,4678 ****
+--- 4694,4703 ----
+ /* Make sure the child that writes to the external program is
+ * dead. */
+ if (wpid > 0)
++ {
+ kill(wpid, SIGKILL);
++ wait4pid(wpid, NULL);
++ }
+
+ /*
+ * Set to raw mode right now, otherwise a CTRL-C after
+*** ../vim-7.3.295/src/version.c 2011-09-07 14:06:39.000000000 +0200
+--- src/version.c 2011-09-07 15:03:24.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 296,
+ /**/
+
+--
+If your company is not involved in something called "ISO 9000" you probably
+have no idea what it is. If your company _is_ involved in ISO 9000 then you
+definitely have no idea what it is.
+ (Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.297 b/source/ap/vim/patches/7.3.297
new file mode 100644
index 000000000..09be76841
--- /dev/null
+++ b/source/ap/vim/patches/7.3.297
@@ -0,0 +1,130 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.297
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.297
+Problem: Can't load Perl 5.14 dynamically.
+Solution: Add code in #ifdefs. (Charles Cooper)
+Files: if_perl.xs
+
+
+*** ../vim-7.3.296/src/if_perl.xs 2011-07-27 14:15:41.000000000 +0200
+--- src/if_perl.xs 2011-09-07 18:47:07.000000000 +0200
+***************
+*** 147,153 ****
+--- 147,158 ----
+ # define Perl_save_int dll_Perl_save_int
+ # define Perl_stack_grow dll_Perl_stack_grow
+ # define Perl_set_context dll_Perl_set_context
++ # if (PERL_REVISION == 5) && (PERL_VERSION >= 14)
++ # define Perl_sv_2bool_flags dll_Perl_sv_2bool_flags
++ # define Perl_xs_apiversion_bootcheck dll_Perl_xs_apiversion_bootcheck
++ # else
+ # define Perl_sv_2bool dll_Perl_sv_2bool
++ # endif
+ # define Perl_sv_2iv dll_Perl_sv_2iv
+ # define Perl_sv_2mortal dll_Perl_sv_2mortal
+ # if (PERL_REVISION == 5) && (PERL_VERSION >= 8)
+***************
+*** 252,258 ****
+--- 257,268 ----
+ static void (*Perl_save_int)(pTHX_ int*);
+ static SV** (*Perl_stack_grow)(pTHX_ SV**, SV**p, int);
+ static SV** (*Perl_set_context)(void*);
++ #if (PERL_REVISION == 5) && (PERL_VERSION >= 14)
++ static bool (*Perl_sv_2bool_flags)(pTHX_ SV*, I32);
++ static void (*Perl_xs_apiversion_bootcheck)(pTHX_ SV *module, const char *api_p, STRLEN api_len);
++ #else
+ static bool (*Perl_sv_2bool)(pTHX_ SV*);
++ #endif
+ static IV (*Perl_sv_2iv)(pTHX_ SV*);
+ static SV* (*Perl_sv_2mortal)(pTHX_ SV*);
+ #if (PERL_REVISION == 5) && (PERL_VERSION >= 8)
+***************
+*** 360,366 ****
+--- 370,381 ----
+ {"Perl_save_int", (PERL_PROC*)&Perl_save_int},
+ {"Perl_stack_grow", (PERL_PROC*)&Perl_stack_grow},
+ {"Perl_set_context", (PERL_PROC*)&Perl_set_context},
++ #if (PERL_REVISION == 5) && (PERL_VERSION >= 14)
++ {"Perl_sv_2bool_flags", (PERL_PROC*)&Perl_sv_2bool_flags},
++ {"Perl_xs_apiversion_bootcheck",(PERL_PROC*)&Perl_xs_apiversion_bootcheck},
++ #else
+ {"Perl_sv_2bool", (PERL_PROC*)&Perl_sv_2bool},
++ #endif
+ {"Perl_sv_2iv", (PERL_PROC*)&Perl_sv_2iv},
+ {"Perl_sv_2mortal", (PERL_PROC*)&Perl_sv_2mortal},
+ #if (PERL_REVISION == 5) && (PERL_VERSION >= 8)
+***************
+*** 407,412 ****
+--- 422,430 ----
+ {"Perl_sv_free2", (PERL_PROC*)&Perl_sv_free2},
+ {"Perl_sys_init", (PERL_PROC*)&Perl_sys_init},
+ {"Perl_sys_term", (PERL_PROC*)&Perl_sys_term},
++ {"Perl_call_list", (PERL_PROC*)&Perl_call_list},
++ # if (PERL_REVISION == 5) && (PERL_VERSION >= 14)
++ # else
+ {"Perl_ISv_ptr", (PERL_PROC*)&Perl_ISv_ptr},
+ {"Perl_Istack_max_ptr", (PERL_PROC*)&Perl_Istack_max_ptr},
+ {"Perl_Istack_base_ptr", (PERL_PROC*)&Perl_Istack_base_ptr},
+***************
+*** 418,432 ****
+ {"Perl_Imarkstack_max_ptr", (PERL_PROC*)&Perl_Imarkstack_max_ptr},
+ {"Perl_Istack_sp_ptr", (PERL_PROC*)&Perl_Istack_sp_ptr},
+ {"Perl_Iop_ptr", (PERL_PROC*)&Perl_Iop_ptr},
+- {"Perl_call_list", (PERL_PROC*)&Perl_call_list},
+ {"Perl_Iscopestack_ix_ptr", (PERL_PROC*)&Perl_Iscopestack_ix_ptr},
+ {"Perl_Iunitcheckav_ptr", (PERL_PROC*)&Perl_Iunitcheckav_ptr},
+ #endif
+ {"Perl_Idefgv_ptr", (PERL_PROC*)&Perl_Idefgv_ptr},
+ {"Perl_Ierrgv_ptr", (PERL_PROC*)&Perl_Ierrgv_ptr},
+ {"Perl_Isv_yes_ptr", (PERL_PROC*)&Perl_Isv_yes_ptr},
+- {"boot_DynaLoader", (PERL_PROC*)&boot_DynaLoader},
+ {"Perl_Gthr_key_ptr", (PERL_PROC*)&Perl_Gthr_key_ptr},
+ {"", NULL},
+ };
+
+--- 436,453 ----
+ {"Perl_Imarkstack_max_ptr", (PERL_PROC*)&Perl_Imarkstack_max_ptr},
+ {"Perl_Istack_sp_ptr", (PERL_PROC*)&Perl_Istack_sp_ptr},
+ {"Perl_Iop_ptr", (PERL_PROC*)&Perl_Iop_ptr},
+ {"Perl_Iscopestack_ix_ptr", (PERL_PROC*)&Perl_Iscopestack_ix_ptr},
+ {"Perl_Iunitcheckav_ptr", (PERL_PROC*)&Perl_Iunitcheckav_ptr},
++ # endif
+ #endif
++ #if (PERL_REVISION == 5) && (PERL_VERSION >= 14)
++ #else
+ {"Perl_Idefgv_ptr", (PERL_PROC*)&Perl_Idefgv_ptr},
+ {"Perl_Ierrgv_ptr", (PERL_PROC*)&Perl_Ierrgv_ptr},
+ {"Perl_Isv_yes_ptr", (PERL_PROC*)&Perl_Isv_yes_ptr},
+ {"Perl_Gthr_key_ptr", (PERL_PROC*)&Perl_Gthr_key_ptr},
++ #endif
++ {"boot_DynaLoader", (PERL_PROC*)&boot_DynaLoader},
+ {"", NULL},
+ };
+
+*** ../vim-7.3.296/src/version.c 2011-09-07 15:04:26.000000000 +0200
+--- src/version.c 2011-09-07 18:45:28.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 297,
+ /**/
+
+--
+At some point in the project somebody will start whining about the need to
+determine the project "requirements". This involves interviewing people who
+don't know what they want but, curiously, know exactly when they need it.
+ (Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.298 b/source/ap/vim/patches/7.3.298
new file mode 100644
index 000000000..65a51aa04
--- /dev/null
+++ b/source/ap/vim/patches/7.3.298
@@ -0,0 +1,167 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.298
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.298
+Problem: Built-in colors are different from rgb.txt.
+Solution: Adjust the color values. (Benjamin Haskell)
+Files: src/gui_photon.c, src/gui_w48.c
+
+
+*** ../vim-7.3.297/src/gui_photon.c 2011-08-10 12:19:00.000000000 +0200
+--- src/gui_photon.c 2011-09-07 18:55:09.000000000 +0200
+***************
+*** 2007,2014 ****
+ static GuiColourTable table[] =
+ {
+ {"Black", RGB(0x00, 0x00, 0x00)},
+! {"DarkGray", RGB(0x80, 0x80, 0x80)},
+! {"DarkGrey", RGB(0x80, 0x80, 0x80)},
+ {"Gray", RGB(0xC0, 0xC0, 0xC0)},
+ {"Grey", RGB(0xC0, 0xC0, 0xC0)},
+ {"LightGray", RGB(0xD3, 0xD3, 0xD3)},
+--- 2007,2014 ----
+ static GuiColourTable table[] =
+ {
+ {"Black", RGB(0x00, 0x00, 0x00)},
+! {"DarkGray", RGB(0xA9, 0xA9, 0xA9)},
+! {"DarkGrey", RGB(0xA9, 0xA9, 0xA9)},
+ {"Gray", RGB(0xC0, 0xC0, 0xC0)},
+ {"Grey", RGB(0xC0, 0xC0, 0xC0)},
+ {"LightGray", RGB(0xD3, 0xD3, 0xD3)},
+***************
+*** 2037,2055 ****
+ {"LightRed", RGB(0xFF, 0xA0, 0xA0)},
+ {"DarkBlue", RGB(0x00, 0x00, 0x80)},
+ {"Blue", RGB(0x00, 0x00, 0xFF)},
+! {"LightBlue", RGB(0xA0, 0xA0, 0xFF)},
+ {"DarkGreen", RGB(0x00, 0x80, 0x00)},
+ {"Green", RGB(0x00, 0xFF, 0x00)},
+! {"LightGreen", RGB(0xA0, 0xFF, 0xA0)},
+ {"DarkCyan", RGB(0x00, 0x80, 0x80)},
+ {"Cyan", RGB(0x00, 0xFF, 0xFF)},
+! {"LightCyan", RGB(0xA0, 0xFF, 0xFF)},
+ {"DarkMagenta", RGB(0x80, 0x00, 0x80)},
+ {"Magenta", RGB(0xFF, 0x00, 0xFF)},
+ {"LightMagenta", RGB(0xFF, 0xA0, 0xFF)},
+ {"Brown", RGB(0x80, 0x40, 0x40)},
+ {"Yellow", RGB(0xFF, 0xFF, 0x00)},
+! {"LightYellow", RGB(0xFF, 0xFF, 0xA0)},
+ {"SeaGreen", RGB(0x2E, 0x8B, 0x57)},
+ {"Orange", RGB(0xFF, 0xA5, 0x00)},
+ {"Purple", RGB(0xA0, 0x20, 0xF0)},
+--- 2037,2055 ----
+ {"LightRed", RGB(0xFF, 0xA0, 0xA0)},
+ {"DarkBlue", RGB(0x00, 0x00, 0x80)},
+ {"Blue", RGB(0x00, 0x00, 0xFF)},
+! {"LightBlue", RGB(0xAD, 0xD8, 0xE6)},
+ {"DarkGreen", RGB(0x00, 0x80, 0x00)},
+ {"Green", RGB(0x00, 0xFF, 0x00)},
+! {"LightGreen", RGB(0x90, 0xEE, 0x90)},
+ {"DarkCyan", RGB(0x00, 0x80, 0x80)},
+ {"Cyan", RGB(0x00, 0xFF, 0xFF)},
+! {"LightCyan", RGB(0xE0, 0xFF, 0xFF)},
+ {"DarkMagenta", RGB(0x80, 0x00, 0x80)},
+ {"Magenta", RGB(0xFF, 0x00, 0xFF)},
+ {"LightMagenta", RGB(0xFF, 0xA0, 0xFF)},
+ {"Brown", RGB(0x80, 0x40, 0x40)},
+ {"Yellow", RGB(0xFF, 0xFF, 0x00)},
+! {"LightYellow", RGB(0xFF, 0xFF, 0xE0)},
+ {"SeaGreen", RGB(0x2E, 0x8B, 0x57)},
+ {"Orange", RGB(0xFF, 0xA5, 0x00)},
+ {"Purple", RGB(0xA0, 0x20, 0xF0)},
+*** ../vim-7.3.297/src/gui_w48.c 2011-08-10 17:07:56.000000000 +0200
+--- src/gui_w48.c 2011-09-07 18:55:09.000000000 +0200
+***************
+*** 1411,1422 ****
+ static guicolor_tTable table[] =
+ {
+ {"Black", RGB(0x00, 0x00, 0x00)},
+! {"DarkGray", RGB(0x80, 0x80, 0x80)},
+! {"DarkGrey", RGB(0x80, 0x80, 0x80)},
+ {"Gray", RGB(0xC0, 0xC0, 0xC0)},
+ {"Grey", RGB(0xC0, 0xC0, 0xC0)},
+! {"LightGray", RGB(0xE0, 0xE0, 0xE0)},
+! {"LightGrey", RGB(0xE0, 0xE0, 0xE0)},
+ {"Gray10", RGB(0x1A, 0x1A, 0x1A)},
+ {"Grey10", RGB(0x1A, 0x1A, 0x1A)},
+ {"Gray20", RGB(0x33, 0x33, 0x33)},
+--- 1411,1422 ----
+ static guicolor_tTable table[] =
+ {
+ {"Black", RGB(0x00, 0x00, 0x00)},
+! {"DarkGray", RGB(0xA9, 0xA9, 0xA9)},
+! {"DarkGrey", RGB(0xA9, 0xA9, 0xA9)},
+ {"Gray", RGB(0xC0, 0xC0, 0xC0)},
+ {"Grey", RGB(0xC0, 0xC0, 0xC0)},
+! {"LightGray", RGB(0xD3, 0xD3, 0xD3)},
+! {"LightGrey", RGB(0xD3, 0xD3, 0xD3)},
+ {"Gray10", RGB(0x1A, 0x1A, 0x1A)},
+ {"Grey10", RGB(0x1A, 0x1A, 0x1A)},
+ {"Gray20", RGB(0x33, 0x33, 0x33)},
+***************
+*** 1441,1459 ****
+ {"LightRed", RGB(0xFF, 0xA0, 0xA0)},
+ {"DarkBlue", RGB(0x00, 0x00, 0x80)},
+ {"Blue", RGB(0x00, 0x00, 0xFF)},
+! {"LightBlue", RGB(0xA0, 0xA0, 0xFF)},
+ {"DarkGreen", RGB(0x00, 0x80, 0x00)},
+ {"Green", RGB(0x00, 0xFF, 0x00)},
+! {"LightGreen", RGB(0xA0, 0xFF, 0xA0)},
+ {"DarkCyan", RGB(0x00, 0x80, 0x80)},
+ {"Cyan", RGB(0x00, 0xFF, 0xFF)},
+! {"LightCyan", RGB(0xA0, 0xFF, 0xFF)},
+ {"DarkMagenta", RGB(0x80, 0x00, 0x80)},
+ {"Magenta", RGB(0xFF, 0x00, 0xFF)},
+ {"LightMagenta", RGB(0xFF, 0xA0, 0xFF)},
+ {"Brown", RGB(0x80, 0x40, 0x40)},
+ {"Yellow", RGB(0xFF, 0xFF, 0x00)},
+! {"LightYellow", RGB(0xFF, 0xFF, 0xA0)},
+ {"DarkYellow", RGB(0xBB, 0xBB, 0x00)},
+ {"SeaGreen", RGB(0x2E, 0x8B, 0x57)},
+ {"Orange", RGB(0xFF, 0xA5, 0x00)},
+--- 1441,1459 ----
+ {"LightRed", RGB(0xFF, 0xA0, 0xA0)},
+ {"DarkBlue", RGB(0x00, 0x00, 0x80)},
+ {"Blue", RGB(0x00, 0x00, 0xFF)},
+! {"LightBlue", RGB(0xAD, 0xD8, 0xE6)},
+ {"DarkGreen", RGB(0x00, 0x80, 0x00)},
+ {"Green", RGB(0x00, 0xFF, 0x00)},
+! {"LightGreen", RGB(0x90, 0xEE, 0x90)},
+ {"DarkCyan", RGB(0x00, 0x80, 0x80)},
+ {"Cyan", RGB(0x00, 0xFF, 0xFF)},
+! {"LightCyan", RGB(0xE0, 0xFF, 0xFF)},
+ {"DarkMagenta", RGB(0x80, 0x00, 0x80)},
+ {"Magenta", RGB(0xFF, 0x00, 0xFF)},
+ {"LightMagenta", RGB(0xFF, 0xA0, 0xFF)},
+ {"Brown", RGB(0x80, 0x40, 0x40)},
+ {"Yellow", RGB(0xFF, 0xFF, 0x00)},
+! {"LightYellow", RGB(0xFF, 0xFF, 0xE0)},
+ {"DarkYellow", RGB(0xBB, 0xBB, 0x00)},
+ {"SeaGreen", RGB(0x2E, 0x8B, 0x57)},
+ {"Orange", RGB(0xFF, 0xA5, 0x00)},
+*** ../vim-7.3.297/src/version.c 2011-09-07 18:47:19.000000000 +0200
+--- src/version.c 2011-09-07 18:55:27.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 298,
+ /**/
+
+--
+You can test a person's importance in the organization by asking how much RAM
+his computer has. Anybody who knows the answer to that question is not a
+decision-maker.
+ (Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.299 b/source/ap/vim/patches/7.3.299
new file mode 100644
index 000000000..4f755d909
--- /dev/null
+++ b/source/ap/vim/patches/7.3.299
@@ -0,0 +1,516 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.299
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.299
+Problem: Source code not in Vim style.
+Solution: Adjust the style. (Elias Diem)
+Files: src/gui_photon.c
+
+
+*** ../vim-7.3.298/src/gui_photon.c 2011-09-07 18:58:24.000000000 +0200
+--- src/gui_photon.c 2011-09-07 19:02:59.000000000 +0200
+***************
+*** 535,547 ****
+ &src_taken,
+ buf,
+ 6,
+! &dst_made );
+
+! add_to_input_buf( buf, dst_made );
+ }
+ else
+ {
+! add_to_input_buf( string, len );
+ }
+
+ return Pt_CONSUME;
+--- 535,547 ----
+ &src_taken,
+ buf,
+ 6,
+! &dst_made);
+
+! add_to_input_buf(buf, dst_made);
+ }
+ else
+ {
+! add_to_input_buf(string, len);
+ }
+
+ return Pt_CONSUME;
+***************
+*** 549,579 ****
+ len = 0;
+ #endif
+ ch = key->key_cap;
+! if( ch < 0xff )
+ {
+ /* FIXME: is this the right thing to do? */
+! if( modifiers & MOD_MASK_CTRL )
+ {
+ modifiers &= ~MOD_MASK_CTRL;
+
+! if( ( ch >= 'a' && ch <= 'z' ) ||
+ ch == '[' ||
+ ch == ']' ||
+! ch == '\\' )
+! ch = Ctrl_chr( ch );
+! else if( ch == '2' )
+ ch = NUL;
+! else if( ch == '6' )
+ ch = 0x1e;
+! else if( ch == '-' )
+ ch = 0x1f;
+ else
+ modifiers |= MOD_MASK_CTRL;
+ }
+
+! if( modifiers & MOD_MASK_ALT )
+ {
+! ch = Meta( ch );
+ modifiers &= ~MOD_MASK_ALT;
+ }
+ }
+--- 549,579 ----
+ len = 0;
+ #endif
+ ch = key->key_cap;
+! if (ch < 0xff)
+ {
+ /* FIXME: is this the right thing to do? */
+! if (modifiers & MOD_MASK_CTRL)
+ {
+ modifiers &= ~MOD_MASK_CTRL;
+
+! if ((ch >= 'a' && ch <= 'z') ||
+ ch == '[' ||
+ ch == ']' ||
+! ch == '\\')
+! ch = Ctrl_chr(ch);
+! else if (ch == '2')
+ ch = NUL;
+! else if (ch == '6')
+ ch = 0x1e;
+! else if (ch == '-')
+ ch = 0x1f;
+ else
+ modifiers |= MOD_MASK_CTRL;
+ }
+
+! if (modifiers & MOD_MASK_ALT)
+ {
+! ch = Meta(ch);
+ modifiers &= ~MOD_MASK_ALT;
+ }
+ }
+***************
+*** 586,604 ****
+ modifiers &= ~MOD_MASK_SHIFT;
+ }
+
+! ch = simplify_key( ch, &modifiers );
+! if( modifiers )
+ {
+ string[ len++ ] = CSI;
+ string[ len++ ] = KS_MODIFIER;
+ string[ len++ ] = modifiers;
+ }
+
+! if( IS_SPECIAL( ch ) )
+ {
+ string[ len++ ] = CSI;
+! string[ len++ ] = K_SECOND( ch );
+! string[ len++ ] = K_THIRD( ch );
+ }
+ else
+ {
+--- 586,604 ----
+ modifiers &= ~MOD_MASK_SHIFT;
+ }
+
+! ch = simplify_key(ch, &modifiers);
+! if (modifiers)
+ {
+ string[ len++ ] = CSI;
+ string[ len++ ] = KS_MODIFIER;
+ string[ len++ ] = modifiers;
+ }
+
+! if (IS_SPECIAL(ch))
+ {
+ string[ len++ ] = CSI;
+! string[ len++ ] = K_SECOND(ch);
+! string[ len++ ] = K_THIRD(ch);
+ }
+ else
+ {
+***************
+*** 619,627 ****
+ string[ len++ ] = KE_CSI;
+ }
+
+! if( len > 0 )
+ {
+! add_to_input_buf( string, len );
+ return Pt_CONSUME;
+ }
+ }
+--- 619,627 ----
+ string[ len++ ] = KE_CSI;
+ }
+
+! if (len > 0)
+ {
+! add_to_input_buf(string, len);
+ return Pt_CONSUME;
+ }
+ }
+***************
+*** 630,646 ****
+ }
+
+ static int
+! gui_ph_handle_mouse( PtWidget_t *widget, void *data, PtCallbackInfo_t *info )
+ {
+ PhPointerEvent_t *pointer;
+ PhRect_t *pos;
+ int button = 0, repeated_click, modifiers = 0x0;
+ short mouse_x, mouse_y;
+
+! pointer = PhGetData( info->event );
+! pos = PhGetRects( info->event );
+
+! gui_mch_mousehide( MOUSE_SHOW );
+
+ /*
+ * Coordinates need to be relative to the base window,
+--- 630,646 ----
+ }
+
+ static int
+! gui_ph_handle_mouse(PtWidget_t *widget, void *data, PtCallbackInfo_t *info)
+ {
+ PhPointerEvent_t *pointer;
+ PhRect_t *pos;
+ int button = 0, repeated_click, modifiers = 0x0;
+ short mouse_x, mouse_y;
+
+! pointer = PhGetData(info->event);
+! pos = PhGetRects(info->event);
+
+! gui_mch_mousehide(MOUSE_SHOW);
+
+ /*
+ * Coordinates need to be relative to the base window,
+***************
+*** 649,675 ****
+ mouse_x = pos->ul.x + gui.border_width;
+ mouse_y = pos->ul.y + gui.border_width;
+
+! if( info->event->type == Ph_EV_PTR_MOTION_NOBUTTON )
+ {
+! gui_mouse_moved( mouse_x, mouse_y );
+ return Pt_CONTINUE;
+ }
+
+! if( pointer->key_mods & Pk_KM_Shift )
+ modifiers |= MOUSE_SHIFT;
+! if( pointer->key_mods & Pk_KM_Ctrl )
+ modifiers |= MOUSE_CTRL;
+! if( pointer->key_mods & Pk_KM_Alt )
+ modifiers |= MOUSE_ALT;
+
+ /*
+ * FIXME More than one button may be involved, but for
+ * now just deal with one
+ */
+! if( pointer->buttons & Ph_BUTTON_SELECT )
+ button = MOUSE_LEFT;
+
+! if( pointer->buttons & Ph_BUTTON_MENU )
+ {
+ button = MOUSE_RIGHT;
+ /* Need the absolute coordinates for the popup menu */
+--- 649,675 ----
+ mouse_x = pos->ul.x + gui.border_width;
+ mouse_y = pos->ul.y + gui.border_width;
+
+! if (info->event->type == Ph_EV_PTR_MOTION_NOBUTTON)
+ {
+! gui_mouse_moved(mouse_x, mouse_y);
+ return Pt_CONTINUE;
+ }
+
+! if (pointer->key_mods & Pk_KM_Shift)
+ modifiers |= MOUSE_SHIFT;
+! if (pointer->key_mods & Pk_KM_Ctrl)
+ modifiers |= MOUSE_CTRL;
+! if (pointer->key_mods & Pk_KM_Alt)
+ modifiers |= MOUSE_ALT;
+
+ /*
+ * FIXME More than one button may be involved, but for
+ * now just deal with one
+ */
+! if (pointer->buttons & Ph_BUTTON_SELECT)
+ button = MOUSE_LEFT;
+
+! if (pointer->buttons & Ph_BUTTON_MENU)
+ {
+ button = MOUSE_RIGHT;
+ /* Need the absolute coordinates for the popup menu */
+***************
+*** 677,705 ****
+ abs_mouse.y = pointer->pos.y;
+ }
+
+! if( pointer->buttons & Ph_BUTTON_ADJUST )
+ button = MOUSE_MIDDLE;
+
+ /* Catch a real release (not phantom or other releases */
+! if( info->event->type == Ph_EV_BUT_RELEASE )
+ button = MOUSE_RELEASE;
+
+! if( info->event->type & Ph_EV_PTR_MOTION_BUTTON )
+ button = MOUSE_DRAG;
+
+ #if 0
+ /* Vim doesn't use button repeats */
+! if( info->event->type & Ph_EV_BUT_REPEAT )
+ button = MOUSE_DRAG;
+ #endif
+
+ /* Don't do anything if it is one of the phantom mouse release events */
+! if( ( button != MOUSE_RELEASE ) ||
+! ( info->event->subtype == Ph_EV_RELEASE_REAL ) )
+ {
+ repeated_click = (pointer->click_count >= 2) ? TRUE : FALSE;
+
+! gui_send_mouse_event( button , mouse_x, mouse_y, repeated_click, modifiers );
+ }
+
+ return Pt_CONTINUE;
+--- 677,705 ----
+ abs_mouse.y = pointer->pos.y;
+ }
+
+! if (pointer->buttons & Ph_BUTTON_ADJUST)
+ button = MOUSE_MIDDLE;
+
+ /* Catch a real release (not phantom or other releases */
+! if (info->event->type == Ph_EV_BUT_RELEASE)
+ button = MOUSE_RELEASE;
+
+! if (info->event->type & Ph_EV_PTR_MOTION_BUTTON)
+ button = MOUSE_DRAG;
+
+ #if 0
+ /* Vim doesn't use button repeats */
+! if (info->event->type & Ph_EV_BUT_REPEAT)
+ button = MOUSE_DRAG;
+ #endif
+
+ /* Don't do anything if it is one of the phantom mouse release events */
+! if ((button != MOUSE_RELEASE) ||
+! (info->event->subtype == Ph_EV_RELEASE_REAL))
+ {
+ repeated_click = (pointer->click_count >= 2) ? TRUE : FALSE;
+
+! gui_send_mouse_event(button , mouse_x, mouse_y, repeated_click, modifiers);
+ }
+
+ return Pt_CONTINUE;
+***************
+*** 707,741 ****
+
+ /* Handle a focus change of the PtRaw widget */
+ static int
+! gui_ph_handle_focus( PtWidget_t *widget, void *data, PtCallbackInfo_t *info )
+ {
+! if( info->reason == Pt_CB_LOST_FOCUS )
+ {
+! PtRemoveEventHandler( gui.vimTextArea, Ph_EV_PTR_MOTION_NOBUTTON,
+! gui_ph_handle_mouse, NULL );
+
+! gui_mch_mousehide( MOUSE_SHOW );
+ }
+ else
+ {
+! PtAddEventHandler( gui.vimTextArea, Ph_EV_PTR_MOTION_NOBUTTON,
+! gui_ph_handle_mouse, NULL );
+ }
+ return Pt_CONTINUE;
+ }
+
+ static void
+! gui_ph_handle_raw_draw( PtWidget_t *widget, PhTile_t *damage )
+ {
+ PhRect_t *r;
+ PhPoint_t offset;
+ PhPoint_t translation;
+
+! if( is_ignore_draw == TRUE )
+ return;
+
+! PtSuperClassDraw( PtBasic, widget, damage );
+! PgGetTranslation( &translation );
+ PgClearTranslation();
+
+ #if 0
+--- 707,741 ----
+
+ /* Handle a focus change of the PtRaw widget */
+ static int
+! gui_ph_handle_focus(PtWidget_t *widget, void *data, PtCallbackInfo_t *info)
+ {
+! if (info->reason == Pt_CB_LOST_FOCUS)
+ {
+! PtRemoveEventHandler(gui.vimTextArea, Ph_EV_PTR_MOTION_NOBUTTON,
+! gui_ph_handle_mouse, NULL);
+
+! gui_mch_mousehide(MOUSE_SHOW);
+ }
+ else
+ {
+! PtAddEventHandler(gui.vimTextArea, Ph_EV_PTR_MOTION_NOBUTTON,
+! gui_ph_handle_mouse, NULL);
+ }
+ return Pt_CONTINUE;
+ }
+
+ static void
+! gui_ph_handle_raw_draw(PtWidget_t *widget, PhTile_t *damage)
+ {
+ PhRect_t *r;
+ PhPoint_t offset;
+ PhPoint_t translation;
+
+! if (is_ignore_draw == TRUE)
+ return;
+
+! PtSuperClassDraw(PtBasic, widget, damage);
+! PgGetTranslation(&translation);
+ PgClearTranslation();
+
+ #if 0
+***************
+*** 750,770 ****
+ out_flush();
+ #endif
+
+! PtWidgetOffset( widget, &offset );
+! PhTranslatePoint( &offset, PtWidgetPos( gui.vimTextArea, NULL ) );
+
+ #if 1
+ /* Redraw individual damage regions */
+! if( damage->next != NULL )
+ damage = damage->next;
+
+! while( damage != NULL )
+ {
+ r = &damage->rect;
+ gui_redraw(
+ r->ul.x - offset.x, r->ul.y - offset.y,
+ r->lr.x - r->ul.x + 1,
+! r->lr.y - r->ul.y + 1 );
+ damage = damage->next;
+ }
+ #else
+--- 750,770 ----
+ out_flush();
+ #endif
+
+! PtWidgetOffset(widget, &offset);
+! PhTranslatePoint(&offset, PtWidgetPos(gui.vimTextArea, NULL));
+
+ #if 1
+ /* Redraw individual damage regions */
+! if (damage->next != NULL)
+ damage = damage->next;
+
+! while(damage != NULL)
+ {
+ r = &damage->rect;
+ gui_redraw(
+ r->ul.x - offset.x, r->ul.y - offset.y,
+ r->lr.x - r->ul.x + 1,
+! r->lr.y - r->ul.y + 1);
+ damage = damage->next;
+ }
+ #else
+***************
+*** 773,796 ****
+ gui_redraw(
+ r->ul.x - offset.x, r->ul.y - offset.y,
+ r->lr.x - r->ul.x + 1,
+! r->lr.y - r->ul.y + 1 );
+ #endif
+
+! PgSetTranslation( &translation, 0 );
+ }
+
+ static int
+ gui_ph_handle_pulldown_menu(
+ PtWidget_t *widget,
+ void *data,
+! PtCallbackInfo_t *info )
+ {
+! if( data != NULL )
+ {
+ vimmenu_T *menu = (vimmenu_T *) data;
+
+! PtPositionMenu( menu->submenu_id, NULL );
+! PtRealizeWidget( menu->submenu_id );
+ }
+
+ return Pt_CONTINUE;
+--- 773,796 ----
+ gui_redraw(
+ r->ul.x - offset.x, r->ul.y - offset.y,
+ r->lr.x - r->ul.x + 1,
+! r->lr.y - r->ul.y + 1);
+ #endif
+
+! PgSetTranslation(&translation, 0);
+ }
+
+ static int
+ gui_ph_handle_pulldown_menu(
+ PtWidget_t *widget,
+ void *data,
+! PtCallbackInfo_t *info)
+ {
+! if (data != NULL)
+ {
+ vimmenu_T *menu = (vimmenu_T *) data;
+
+! PtPositionMenu(menu->submenu_id, NULL);
+! PtRealizeWidget(menu->submenu_id);
+ }
+
+ return Pt_CONTINUE;
+*** ../vim-7.3.298/src/version.c 2011-09-07 18:58:24.000000000 +0200
+--- src/version.c 2011-09-07 19:01:17.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 299,
+ /**/
+
+--
+The only way the average employee can speak to an executive is by taking a
+second job as a golf caddie.
+ (Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.300 b/source/ap/vim/patches/7.3.300
new file mode 100644
index 000000000..132b14a74
--- /dev/null
+++ b/source/ap/vim/patches/7.3.300
@@ -0,0 +1,74 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.300
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.300
+Problem: Python doesn't parse multi-byte argument correctly.
+Solution: Use "t" instead of "s". (lilydjwg)
+Files: src/if_py_both.h
+
+
+*** ../vim-7.3.299/src/if_py_both.h 2011-07-07 15:08:53.000000000 +0200
+--- src/if_py_both.h 2011-09-07 19:25:12.000000000 +0200
+***************
+*** 74,80 ****
+ char *str = NULL;
+ int error = ((OutputObject *)(self))->error;
+
+! if (!PyArg_ParseTuple(args, "es#", ENC_OPT, &str, &len))
+ return NULL;
+
+ Py_BEGIN_ALLOW_THREADS
+--- 74,80 ----
+ char *str = NULL;
+ int error = ((OutputObject *)(self))->error;
+
+! if (!PyArg_ParseTuple(args, "et#", ENC_OPT, &str, &len))
+ return NULL;
+
+ Py_BEGIN_ALLOW_THREADS
+***************
+*** 114,120 ****
+ char *str = NULL;
+ PyInt len;
+
+! if (!PyArg_Parse(line, "es#", ENC_OPT, &str, &len)) {
+ PyErr_SetString(PyExc_TypeError, _("writelines() requires list of strings"));
+ Py_DECREF(list);
+ return NULL;
+--- 114,120 ----
+ char *str = NULL;
+ PyInt len;
+
+! if (!PyArg_Parse(line, "et#", ENC_OPT, &str, &len)) {
+ PyErr_SetString(PyExc_TypeError, _("writelines() requires list of strings"));
+ Py_DECREF(list);
+ return NULL;
+*** ../vim-7.3.299/src/version.c 2011-09-07 19:08:57.000000000 +0200
+--- src/version.c 2011-09-07 19:26:05.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 300,
+ /**/
+
+--
+A salesperson says: Translation:
+"backward compatible" Old technology
+"Premium" Overpriced
+"Can't keep it on the shelf" Unavailable
+"Stands alone" Piece of shit
+"Proprietary" Incompatible
+ (Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.301 b/source/ap/vim/patches/7.3.301
new file mode 100644
index 000000000..bb52974dc
--- /dev/null
+++ b/source/ap/vim/patches/7.3.301
@@ -0,0 +1,97 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.301
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.301
+Problem: When 'smartindent' and 'copyindent' are set a Tab is used even
+ though 'expandtab' is set.
+Solution: Do not insert Tabs. Add a test. (Christian Brabandt)
+Files: src/misc1.c, src/testdir/test19.in, src/testdir/test19.ok
+
+
+*** ../vim-7.3.300/src/misc1.c 2011-07-27 17:31:42.000000000 +0200
+--- src/misc1.c 2011-09-07 19:37:04.000000000 +0200
+***************
+*** 363,369 ****
+
+ /* Fill to next tabstop with a tab, if possible */
+ tab_pad = (int)curbuf->b_p_ts - (ind_done % (int)curbuf->b_p_ts);
+! if (todo >= tab_pad)
+ {
+ todo -= tab_pad;
+ ++ind_len;
+--- 363,369 ----
+
+ /* Fill to next tabstop with a tab, if possible */
+ tab_pad = (int)curbuf->b_p_ts - (ind_done % (int)curbuf->b_p_ts);
+! if (todo >= tab_pad && !curbuf->b_p_et)
+ {
+ todo -= tab_pad;
+ ++ind_len;
+***************
+*** 372,378 ****
+ }
+
+ /* Add tabs required for indent */
+! while (todo >= (int)curbuf->b_p_ts)
+ {
+ todo -= (int)curbuf->b_p_ts;
+ ++ind_len;
+--- 372,378 ----
+ }
+
+ /* Add tabs required for indent */
+! while (todo >= (int)curbuf->b_p_ts && !curbuf->b_p_et)
+ {
+ todo -= (int)curbuf->b_p_ts;
+ ++ind_len;
+*** ../vim-7.3.300/src/testdir/test19.in 2010-08-15 21:57:29.000000000 +0200
+--- src/testdir/test19.in 2011-09-07 19:46:17.000000000 +0200
+***************
+*** 12,17 ****
+--- 12,20 ----
+ 0wR 
+ :" Test replacing with Tabs
+ 0wR 
++ :" Test that copyindent works with expandtab set
++ :set expandtab smartindent copyindent ts=8 sw=8 sts=8
++ :exe "norm! o{\<cr>x"
+ :?^start?,$w! test.out
+ :qa!
+ ENDTEST
+*** ../vim-7.3.300/src/testdir/test19.ok 2010-08-15 21:57:29.000000000 +0200
+--- src/testdir/test19.ok 2011-09-07 19:37:04.000000000 +0200
+***************
+*** 5,7 ****
+--- 5,9 ----
+ a cde
+ hi
+ test text
++ {
++ x
+*** ../vim-7.3.300/src/version.c 2011-09-07 19:30:17.000000000 +0200
+--- src/version.c 2011-09-07 19:38:48.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 301,
+ /**/
+
+--
+I recommend ordering large cargo containers of paper towels to make up
+whatever budget underruns you have. Paper products are always useful and they
+have the advantage of being completely flushable if you need to make room in
+the storage area later.
+ (Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.302 b/source/ap/vim/patches/7.3.302
new file mode 100644
index 000000000..f8d2c2499
--- /dev/null
+++ b/source/ap/vim/patches/7.3.302
@@ -0,0 +1,68 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.302
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.302 (after 7.3.301)
+Problem: Test 19 fails without 'smartindent' and +eval.
+Solution: Don't use ":exe". Source small.vim.
+Files: src/testdir/test19.in
+
+
+*** ../vim-7.3.301/src/testdir/test19.in 2011-09-07 19:58:04.000000000 +0200
+--- src/testdir/test19.in 2011-09-08 20:32:33.000000000 +0200
+***************
+*** 1,6 ****
+--- 1,7 ----
+ Tests for "r<Tab>" with 'smarttab' and 'expandtab' set/not set.
+
+ STARTTEST
++ :so small.vim
+ :set smarttab expandtab ts=8 sw=4
+ :" make sure that backspace works, no matter what termcap is used
+ :set t_kD=x7f t_kb=x08
+***************
+*** 14,21 ****
+ 0wR 
+ :" Test that copyindent works with expandtab set
+ :set expandtab smartindent copyindent ts=8 sw=8 sts=8
+! :exe "norm! o{\<cr>x"
+! :?^start?,$w! test.out
+ :qa!
+ ENDTEST
+
+--- 15,22 ----
+ 0wR 
+ :" Test that copyindent works with expandtab set
+ :set expandtab smartindent copyindent ts=8 sw=8 sts=8
+! o{
+! x:?^start?,$w! test.out
+ :qa!
+ ENDTEST
+
+*** ../vim-7.3.301/src/version.c 2011-09-07 19:58:04.000000000 +0200
+--- src/version.c 2011-09-08 23:22:01.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 302,
+ /**/
+
+--
+Engineers are always delighted to share wisdom, even in areas in which they
+have no experience whatsoever. Their logic provides them with inherent
+insight into any field of expertise. This can be a problem when dealing with
+the illogical people who believe that knowledge can only be derived through
+experience.
+ (Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.303 b/source/ap/vim/patches/7.3.303
new file mode 100644
index 000000000..f85bf68d6
--- /dev/null
+++ b/source/ap/vim/patches/7.3.303
@@ -0,0 +1,55 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.303
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.303 (after 7.3.296)
+Problem: Compilation error.
+Solution: Correct return type from int to pid_t. (Danek Duvall)
+Files: src/os_unix.c
+
+
+*** ../vim-7.3.302/src/os_unix.c 2011-09-07 15:04:26.000000000 +0200
+--- src/os_unix.c 2011-09-08 20:47:47.000000000 +0200
+***************
+*** 159,165 ****
+ #else
+ typedef int waitstatus;
+ #endif
+! static int wait4pid __ARGS((pid_t, waitstatus *));
+
+ static int WaitForChar __ARGS((long));
+ #if defined(__BEOS__)
+--- 159,165 ----
+ #else
+ typedef int waitstatus;
+ #endif
+! static pid_t wait4pid __ARGS((pid_t, waitstatus *));
+
+ static int WaitForChar __ARGS((long));
+ #if defined(__BEOS__)
+*** ../vim-7.3.302/src/version.c 2011-09-08 23:22:35.000000000 +0200
+--- src/version.c 2011-09-08 23:23:43.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 303,
+ /**/
+
+--
+For humans, honesty is a matter of degree. Engineers are always honest in
+matters of technology and human relationships. That's why it's a good idea
+to keep engineers away from customers, romantic interests, and other people
+who can't handle the truth.
+ (Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.304 b/source/ap/vim/patches/7.3.304
new file mode 100644
index 000000000..6abfe9cc2
--- /dev/null
+++ b/source/ap/vim/patches/7.3.304
@@ -0,0 +1,103 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.304
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.304
+Problem: Strawberry Perl doesn't work on MS-Windows.
+Solution: Use xsubpp if needed. (Yasuhiro Matsumoto)
+Files: src/Make_ming.mak, src/Make_mvc.mak
+
+
+*** ../vim-7.3.303/src/Make_ming.mak 2011-06-19 01:30:01.000000000 +0200
+--- src/Make_ming.mak 2011-09-14 10:44:55.000000000 +0200
+***************
+*** 108,113 ****
+--- 108,120 ----
+ # on NT, it's here:
+ PERLLIB=$(PERL)/lib
+ PERLLIBS=$(PERLLIB)/Core
++ XSUBPP=$(PERLLIB)/ExtUtils/xsubpp
++ XSUBPP_EXISTS=$(shell perl -e "print 1 unless -e '$(XSUBPP)'")
++ ifeq "$(XSUBPP_EXISTS)" ""
++ XSUBPP=perl $(XSUBPP)
++ else
++ XSUBPP=xsubpp
++ endif
+ endif
+
+ # uncomment 'LUA' if you want a Lua-enabled version
+***************
+*** 696,702 ****
+ endif
+
+ if_perl.c: if_perl.xs typemap
+! perl $(PERLLIB)/ExtUtils/xsubpp -prototypes -typemap \
+ $(PERLLIB)/ExtUtils/typemap if_perl.xs > $@
+
+ $(OUTDIR)/netbeans.o: netbeans.c $(INCL) $(NBDEBUG_INCL) $(NBDEBUG_SRC)
+--- 703,709 ----
+ endif
+
+ if_perl.c: if_perl.xs typemap
+! $(XSUBPP) -prototypes -typemap \
+ $(PERLLIB)/ExtUtils/typemap if_perl.xs > $@
+
+ $(OUTDIR)/netbeans.o: netbeans.c $(INCL) $(NBDEBUG_INCL) $(NBDEBUG_SRC)
+*** ../vim-7.3.303/src/Make_mvc.mak 2011-06-12 20:31:25.000000000 +0200
+--- src/Make_mvc.mak 2011-09-14 10:46:08.000000000 +0200
+***************
+*** 785,790 ****
+--- 785,795 ----
+ PERL_INC = /I $(PERL_INCDIR)
+ PERL_OBJ = $(OUTDIR)\if_perl.obj $(OUTDIR)\if_perlsfio.obj
+ XSUBPP = $(PERL)\lib\ExtUtils\xsubpp
++ !if exist($(XSUBPP)
++ XSUBPP = $(PERL_EXE) $(XSUBPP)
++ !else
++ XSUBPP = xsubpp
++ !endif
+ XSUBPP_TYPEMAP = $(PERL)\lib\ExtUtils\typemap
+
+ !endif
+***************
+*** 1041,1047 ****
+ $(CC) $(CFLAGS) $(LUA_INC) if_lua.c
+
+ if_perl.c : if_perl.xs typemap
+! $(PERL_EXE) $(XSUBPP) -prototypes -typemap $(XSUBPP_TYPEMAP) \
+ -typemap typemap if_perl.xs > if_perl.c
+
+ $(OUTDIR)/if_perl.obj: $(OUTDIR) if_perl.c $(INCL)
+--- 1046,1052 ----
+ $(CC) $(CFLAGS) $(LUA_INC) if_lua.c
+
+ if_perl.c : if_perl.xs typemap
+! $(XSUBPP) -prototypes -typemap $(XSUBPP_TYPEMAP) \
+ -typemap typemap if_perl.xs > if_perl.c
+
+ $(OUTDIR)/if_perl.obj: $(OUTDIR) if_perl.c $(INCL)
+*** ../vim-7.3.303/src/version.c 2011-09-08 23:24:09.000000000 +0200
+--- src/version.c 2011-09-14 10:47:41.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 304,
+ /**/
+
+--
+It's totally unfair to suggest - as many have - that engineers are socially
+inept. Engineers simply have different objectives when it comes to social
+interaction.
+ (Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.305 b/source/ap/vim/patches/7.3.305
new file mode 100644
index 000000000..e70fd5940
--- /dev/null
+++ b/source/ap/vim/patches/7.3.305
@@ -0,0 +1,58 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.305
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.305
+Problem: Auto-loading a function while editing the command line causes
+ scrolling up the display.
+Solution: Don't set msg_scroll when defining a function and the user is not
+ typing. (Yasuhiro Matsumoto)
+Files: src/eval.c
+
+
+*** ../vim-7.3.304/src/eval.c 2011-08-17 15:23:16.000000000 +0200
+--- src/eval.c 2011-09-14 14:28:21.000000000 +0200
+***************
+*** 20786,20792 ****
+ nesting = 0;
+ for (;;)
+ {
+! msg_scroll = TRUE;
+ need_wait_return = FALSE;
+ sourcing_lnum_off = sourcing_lnum;
+
+--- 20786,20793 ----
+ nesting = 0;
+ for (;;)
+ {
+! if (KeyTyped)
+! msg_scroll = TRUE;
+ need_wait_return = FALSE;
+ sourcing_lnum_off = sourcing_lnum;
+
+*** ../vim-7.3.304/src/version.c 2011-09-14 10:49:44.000000000 +0200
+--- src/version.c 2011-09-14 14:30:49.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 305,
+ /**/
+
+--
+If someone questions your market projections, simply point out that your
+target market is "People who are nuts" and "People who will buy any damn
+thing". Nobody is going to tell you there aren't enough of those people
+to go around.
+ (Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.306 b/source/ap/vim/patches/7.3.306
new file mode 100644
index 000000000..62bd4cfce
--- /dev/null
+++ b/source/ap/vim/patches/7.3.306
@@ -0,0 +1,244 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.306
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.306
+Problem: When closing a window there is a chance that deleting a scrollbar
+ triggers a GUI resize, which uses the window while it is not in a
+ valid state.
+Solution: Set the buffer pointer to NULL to be able to detect the invalid
+ situation. Fix a few places that used the buffer pointer
+ incorrectly.
+Files: src/buffer.c, src/ex_cmds.c, src/term.c, src/window.c
+
+
+*** ../vim-7.3.305/src/buffer.c 2011-05-19 13:40:47.000000000 +0200
+--- src/buffer.c 2011-09-10 13:46:59.000000000 +0200
+***************
+*** 416,421 ****
+--- 416,423 ----
+ #endif
+
+ buf_freeall(buf, (del_buf ? BFA_DEL : 0) + (wipe_buf ? BFA_WIPE : 0));
++ if (win_valid(win) && win->w_buffer == buf)
++ win->w_buffer = NULL; /* make sure we don't use the buffer now */
+
+ #ifdef FEAT_AUTOCMD
+ /* Autocommands may have deleted the buffer. */
+***************
+*** 560,565 ****
+--- 562,571 ----
+ #ifdef FEAT_DIFF
+ diff_buf_delete(buf); /* Can't use 'diff' for unloaded buffer. */
+ #endif
++ #ifdef FEAT_SYN_HL
++ if (curwin->w_buffer == buf)
++ reset_synblock(curwin); /* remove any ownsyntax */
++ #endif
+
+ #ifdef FEAT_FOLDING
+ /* No folds in an empty buffer. */
+***************
+*** 1346,1351 ****
+--- 1352,1361 ----
+ # endif
+ #endif
+ {
++ #ifdef FEAT_SYN_HL
++ if (prevbuf == curwin->w_buffer)
++ reset_synblock(curwin);
++ #endif
+ #ifdef FEAT_WINDOWS
+ if (unload)
+ close_windows(prevbuf, FALSE);
+***************
+*** 1395,1404 ****
+ foldUpdateAll(curwin); /* update folds (later). */
+ #endif
+
+- #ifdef FEAT_SYN_HL
+- reset_synblock(curwin);
+- curwin->w_s = &(buf->b_s);
+- #endif
+ /* Get the buffer in the current window. */
+ curwin->w_buffer = buf;
+ curbuf = buf;
+--- 1405,1410 ----
+***************
+*** 1409,1414 ****
+--- 1415,1424 ----
+ diff_buf_add(curbuf);
+ #endif
+
++ #ifdef FEAT_SYN_HL
++ curwin->w_s = &(buf->b_s);
++ #endif
++
+ /* Cursor on first line by default. */
+ curwin->w_cursor.lnum = 1;
+ curwin->w_cursor.col = 0;
+*** ../vim-7.3.305/src/ex_cmds.c 2011-07-07 16:20:45.000000000 +0200
+--- src/ex_cmds.c 2011-09-10 13:39:13.000000000 +0200
+***************
+*** 3619,3628 ****
+ */
+ check_arg_idx(curwin);
+
+- #ifdef FEAT_SYN_HL
+- reset_synblock(curwin); /* remove any ownsyntax */
+- #endif
+-
+ #ifdef FEAT_AUTOCMD
+ if (!auto_buf)
+ #endif
+--- 3619,3624 ----
+*** ../vim-7.3.305/src/term.c 2011-05-10 16:41:13.000000000 +0200
+--- src/term.c 2011-09-14 14:39:39.000000000 +0200
+***************
+*** 3017,3028 ****
+ if (width < 0 || height < 0) /* just checking... */
+ return;
+
+! if (State == HITRETURN || State == SETWSIZE) /* postpone the resizing */
+ {
+ State = SETWSIZE;
+ return;
+ }
+
+ ++busy;
+
+ #ifdef AMIGA
+--- 3017,3036 ----
+ if (width < 0 || height < 0) /* just checking... */
+ return;
+
+! if (State == HITRETURN || State == SETWSIZE)
+ {
++ /* postpone the resizing */
+ State = SETWSIZE;
+ return;
+ }
+
++ /* curwin->w_buffer can be NULL when we are closing a window and the
++ * buffer has already been closed and removing a scrollbar causes a resize
++ * event. Don't resize then, it will happen after entering another buffer.
++ */
++ if (curwin->w_buffer == NULL)
++ return;
++
+ ++busy;
+
+ #ifdef AMIGA
+*** ../vim-7.3.305/src/window.c 2011-01-08 14:45:57.000000000 +0100
+--- src/window.c 2011-09-10 14:04:56.000000000 +0200
+***************
+*** 1226,1240 ****
+ }
+ newp->w_tagstackidx = oldp->w_tagstackidx;
+ newp->w_tagstacklen = oldp->w_tagstacklen;
+! # ifdef FEAT_FOLDING
+ copyFoldingState(oldp, newp);
+! # endif
+
+ win_init_some(newp, oldp);
+
+! # ifdef FEAT_SYN_HL
+ check_colorcolumn(newp);
+! # endif
+ }
+
+ /*
+--- 1226,1240 ----
+ }
+ newp->w_tagstackidx = oldp->w_tagstackidx;
+ newp->w_tagstacklen = oldp->w_tagstacklen;
+! #ifdef FEAT_FOLDING
+ copyFoldingState(oldp, newp);
+! #endif
+
+ win_init_some(newp, oldp);
+
+! #ifdef FEAT_SYN_HL
+ check_colorcolumn(newp);
+! #endif
+ }
+
+ /*
+***************
+*** 2212,2217 ****
+--- 2212,2222 ----
+ out_flush();
+ #endif
+
++ #ifdef FEAT_SYN_HL
++ /* Free independent synblock before the buffer is freed. */
++ reset_synblock(win);
++ #endif
++
+ /*
+ * Close the link to the buffer.
+ */
+***************
+*** 2222,2228 ****
+ if (!win_valid(win) || last_window() || curtab != prev_curtab)
+ return;
+
+! /* Free the memory used for the window. */
+ wp = win_free_mem(win, &dir, NULL);
+
+ /* Make sure curwin isn't invalid. It can cause severe trouble when
+--- 2227,2234 ----
+ if (!win_valid(win) || last_window() || curtab != prev_curtab)
+ return;
+
+! /* Free the memory used for the window and get the window that received
+! * the screen space. */
+ wp = win_free_mem(win, &dir, NULL);
+
+ /* Make sure curwin isn't invalid. It can cause severe trouble when
+***************
+*** 3247,3252 ****
+--- 3253,3261 ----
+ else
+ wp->w_farsi = W_CONV;
+ #endif
++ #ifdef FEAT_SYN_HL
++ wp->w_s = &wp->w_buffer->b_s;
++ #endif
+ }
+
+ /*
+***************
+*** 4437,4443 ****
+ #endif /* FEAT_GUI */
+
+ #ifdef FEAT_SYN_HL
+- reset_synblock(wp); /* free independent synblock */
+ vim_free(wp->w_p_cc_cols);
+ #endif
+
+--- 4446,4451 ----
+*** ../vim-7.3.305/src/version.c 2011-09-14 14:33:47.000000000 +0200
+--- src/version.c 2011-09-14 14:35:30.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 306,
+ /**/
+
+--
+A consultant is a person who takes your money and annoys your employees while
+tirelessly searching for the best way to extend the consulting contract.
+ (Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.307 b/source/ap/vim/patches/7.3.307
new file mode 100644
index 000000000..3fd95e112
--- /dev/null
+++ b/source/ap/vim/patches/7.3.307
@@ -0,0 +1,180 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.307
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.307
+Problem: Python 3 doesn't support slice assignment.
+Solution: Implement slices. (Brett Overesch, Roland Puntaier)
+Files: src/if_python3.c
+
+
+*** ../vim-7.3.306/src/if_python3.c 2011-08-28 16:00:14.000000000 +0200
+--- src/if_python3.c 2011-09-14 15:01:26.000000000 +0200
+***************
+*** 855,862 ****
+
+ static Py_ssize_t BufferLength(PyObject *);
+ static PyObject *BufferItem(PyObject *, Py_ssize_t);
+! static PyObject* BufferSubscript(PyObject *self, PyObject* idx);
+! static Py_ssize_t BufferAsSubscript(PyObject *self, PyObject* idx, PyObject* val);
+
+
+ /* Line range type - Implementation functions
+--- 855,862 ----
+
+ static Py_ssize_t BufferLength(PyObject *);
+ static PyObject *BufferItem(PyObject *, Py_ssize_t);
+! static PyObject* BufferSubscript(PyObject *self, PyObject *idx);
+! static Py_ssize_t BufferAsSubscript(PyObject *self, PyObject *idx, PyObject *val);
+
+
+ /* Line range type - Implementation functions
+***************
+*** 865,872 ****
+
+ #define RangeType_Check(obj) ((obj)->ob_base.ob_type == &RangeType)
+
+! static PyObject* RangeSubscript(PyObject *self, PyObject* idx);
+ static Py_ssize_t RangeAsItem(PyObject *, Py_ssize_t, PyObject *);
+
+ /* Current objects type - Implementation functions
+ * -----------------------------------------------
+--- 865,873 ----
+
+ #define RangeType_Check(obj) ((obj)->ob_base.ob_type == &RangeType)
+
+! static PyObject* RangeSubscript(PyObject *self, PyObject *idx);
+ static Py_ssize_t RangeAsItem(PyObject *, Py_ssize_t, PyObject *);
++ static Py_ssize_t RangeAsSubscript(PyObject *self, PyObject *idx, PyObject *val);
+
+ /* Current objects type - Implementation functions
+ * -----------------------------------------------
+***************
+*** 1035,1041 ****
+ &step, &slicelen) < 0) {
+ return NULL;
+ }
+! return BufferSlice(self,start,stop);
+ } else {
+ PyErr_SetString(PyExc_IndexError, "Index must be int or slice");
+ return NULL;
+--- 1036,1042 ----
+ &step, &slicelen) < 0) {
+ return NULL;
+ }
+! return BufferSlice(self, start, stop);
+ } else {
+ PyErr_SetString(PyExc_IndexError, "Index must be int or slice");
+ return NULL;
+***************
+*** 1084,1090 ****
+ PyMappingMethods RangeAsMapping = {
+ /* mp_length */ (lenfunc)RangeLength,
+ /* mp_subscript */ (binaryfunc)RangeSubscript,
+! /* mp_ass_subscript */ (objobjargproc)0,
+ };
+
+ /* Line range object - Implementation
+--- 1085,1091 ----
+ PyMappingMethods RangeAsMapping = {
+ /* mp_length */ (lenfunc)RangeLength,
+ /* mp_subscript */ (binaryfunc)RangeSubscript,
+! /* mp_ass_subscript */ (objobjargproc)RangeAsSubscript,
+ };
+
+ /* Line range object - Implementation
+***************
+*** 1123,1128 ****
+--- 1124,1138 ----
+ &((RangeObject *)(self))->end);
+ }
+
++ static Py_ssize_t
++ RangeAsSlice(PyObject *self, Py_ssize_t lo, Py_ssize_t hi, PyObject *val)
++ {
++ return RBAsSlice(((RangeObject *)(self))->buf, lo, hi, val,
++ ((RangeObject *)(self))->start,
++ ((RangeObject *)(self))->end,
++ &((RangeObject *)(self))->end);
++ }
++
+ static PyObject *
+ RangeSubscript(PyObject *self, PyObject* idx)
+ {
+***************
+*** 1138,1150 ****
+ &step, &slicelen) < 0) {
+ return NULL;
+ }
+! return RangeSlice(self,start,stop+1);
+ } else {
+ PyErr_SetString(PyExc_IndexError, "Index must be int or slice");
+ return NULL;
+ }
+ }
+
+ /* Buffer list object - Definitions
+ */
+
+--- 1148,1183 ----
+ &step, &slicelen) < 0) {
+ return NULL;
+ }
+! return RangeSlice(self, start, stop);
+ } else {
+ PyErr_SetString(PyExc_IndexError, "Index must be int or slice");
+ return NULL;
+ }
+ }
+
++ static Py_ssize_t
++ RangeAsSubscript(PyObject *self, PyObject *idx, PyObject *val)
++ {
++ if (PyLong_Check(idx)) {
++ long n = PyLong_AsLong(idx);
++ return RangeAsItem(self, n, val);
++ } else if (PySlice_Check(idx)) {
++ Py_ssize_t start, stop, step, slicelen;
++
++ if (PySlice_GetIndicesEx((PySliceObject *)idx,
++ ((RangeObject *)(self))->end-((RangeObject *)(self))->start+1,
++ &start, &stop,
++ &step, &slicelen) < 0) {
++ return -1;
++ }
++ return RangeAsSlice(self, start, stop, val);
++ } else {
++ PyErr_SetString(PyExc_IndexError, "Index must be int or slice");
++ return -1;
++ }
++ }
++
++
+ /* Buffer list object - Definitions
+ */
+
+*** ../vim-7.3.306/src/version.c 2011-09-14 14:43:21.000000000 +0200
+--- src/version.c 2011-09-14 14:58:16.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 307,
+ /**/
+
+--
+The process for understanding customers primarily involves sitting around with
+other marketing people and talking about what you would to if you were dumb
+enough to be a customer.
+ (Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.308 b/source/ap/vim/patches/7.3.308
new file mode 100644
index 000000000..36e5de516
--- /dev/null
+++ b/source/ap/vim/patches/7.3.308
@@ -0,0 +1,260 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.308
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.308
+Problem: Writing to 'verbosefile' has problems, e.g. for :highlight.
+Solution: Do not use a separate verbose_write() function but write with the
+ same code that does redirecting. (Yasuhiro Matsumoto)
+Files: src/message.c
+
+
+*** ../vim-7.3.307/src/message.c 2011-08-17 20:33:18.000000000 +0200
+--- src/message.c 2011-09-14 15:32:57.000000000 +0200
+***************
+*** 39,45 ****
+ static void msg_screen_putchar __ARGS((int c, int attr));
+ static int msg_check_screen __ARGS((void));
+ static void redir_write __ARGS((char_u *s, int maxlen));
+- static void verbose_write __ARGS((char_u *s, int maxlen));
+ #ifdef FEAT_CON_DIALOG
+ static char_u *msg_show_console_dialog __ARGS((char_u *message, char_u *buttons, int dfltbutton));
+ static int confirm_msg_used = FALSE; /* displaying confirm_msg */
+--- 39,44 ----
+***************
+*** 58,63 ****
+--- 57,65 ----
+ static struct msg_hist *last_msg_hist = NULL;
+ static int msg_hist_len = 0;
+
++ static FILE *verbose_fd = NULL;
++ static int verbose_did_open = FALSE;
++
+ /*
+ * When writing messages to the screen, there are many different situations.
+ * A number of variables is used to remember the current state:
+***************
+*** 1551,1557 ****
+ #ifdef FEAT_MBYTE
+ if (has_mbyte && !IS_SPECIAL(c))
+ {
+! int len = (*mb_ptr2len)(str);
+
+ /* For multi-byte characters check for an illegal byte. */
+ if (has_mbyte && MB_BYTE2LEN(*str) > len)
+--- 1553,1559 ----
+ #ifdef FEAT_MBYTE
+ if (has_mbyte && !IS_SPECIAL(c))
+ {
+! int len = (*mb_ptr2len)(str);
+
+ /* For multi-byte characters check for an illegal byte. */
+ if (has_mbyte && MB_BYTE2LEN(*str) > len)
+***************
+*** 1560,1569 ****
+ *sp = str + 1;
+ return buf;
+ }
+! /* Since 'special' is TRUE the multi-byte character 'c' will be
+! * processed by get_special_key_name() */
+! c = (*mb_ptr2char)(str);
+! *sp = str + len;
+ }
+ else
+ #endif
+--- 1562,1571 ----
+ *sp = str + 1;
+ return buf;
+ }
+! /* Since 'special' is TRUE the multi-byte character 'c' will be
+! * processed by get_special_key_name() */
+! c = (*mb_ptr2char)(str);
+! *sp = str + len;
+ }
+ else
+ #endif
+***************
+*** 3065,3076 ****
+ if (redir_off)
+ return;
+
+! /*
+! * If 'verbosefile' is set write message in that file.
+! * Must come before the rest because of updating "msg_col".
+! */
+! if (*p_vfile != NUL)
+! verbose_write(s, maxlen);
+
+ if (redirecting())
+ {
+--- 3067,3075 ----
+ if (redir_off)
+ return;
+
+! /* If 'verbosefile' is set prepare for writing in that file. */
+! if (*p_vfile != NUL && verbose_fd == NULL)
+! verbose_open();
+
+ if (redirecting())
+ {
+***************
+*** 3084,3092 ****
+ write_reg_contents(redir_reg, (char_u *)" ", -1, TRUE);
+ else if (redir_vname)
+ var_redir_str((char_u *)" ", -1);
+! else if (redir_fd)
+ #endif
+ fputs(" ", redir_fd);
+ ++cur_col;
+ }
+ }
+--- 3083,3094 ----
+ write_reg_contents(redir_reg, (char_u *)" ", -1, TRUE);
+ else if (redir_vname)
+ var_redir_str((char_u *)" ", -1);
+! else
+ #endif
++ if (redir_fd != NULL)
+ fputs(" ", redir_fd);
++ if (verbose_fd != NULL)
++ fputs(" ", verbose_fd);
+ ++cur_col;
+ }
+ }
+***************
+*** 3098,3110 ****
+ var_redir_str(s, maxlen);
+ #endif
+
+! /* Adjust the current column */
+ while (*s != NUL && (maxlen < 0 || (int)(s - str) < maxlen))
+ {
+ #ifdef FEAT_EVAL
+! if (!redir_reg && !redir_vname && redir_fd != NULL)
+ #endif
+! putc(*s, redir_fd);
+ if (*s == '\r' || *s == '\n')
+ cur_col = 0;
+ else if (*s == '\t')
+--- 3100,3115 ----
+ var_redir_str(s, maxlen);
+ #endif
+
+! /* Write and adjust the current column. */
+ while (*s != NUL && (maxlen < 0 || (int)(s - str) < maxlen))
+ {
+ #ifdef FEAT_EVAL
+! if (!redir_reg && !redir_vname)
+ #endif
+! if (redir_fd != NULL)
+! putc(*s, redir_fd);
+! if (verbose_fd != NULL)
+! putc(*s, verbose_fd);
+ if (*s == '\r' || *s == '\n')
+ cur_col = 0;
+ else if (*s == '\t')
+***************
+*** 3122,3128 ****
+ int
+ redirecting()
+ {
+! return redir_fd != NULL
+ #ifdef FEAT_EVAL
+ || redir_reg || redir_vname
+ #endif
+--- 3127,3133 ----
+ int
+ redirecting()
+ {
+! return redir_fd != NULL || *p_vfile != NUL
+ #ifdef FEAT_EVAL
+ || redir_reg || redir_vname
+ #endif
+***************
+*** 3180,3188 ****
+ cmdline_row = msg_row;
+ }
+
+- static FILE *verbose_fd = NULL;
+- static int verbose_did_open = FALSE;
+-
+ /*
+ * Called when 'verbosefile' is set: stop writing to the file.
+ */
+--- 3185,3190 ----
+***************
+*** 3220,3268 ****
+ }
+
+ /*
+- * Write a string to 'verbosefile'.
+- * When "maxlen" is -1 write the whole string, otherwise up to "maxlen" bytes.
+- */
+- static void
+- verbose_write(str, maxlen)
+- char_u *str;
+- int maxlen;
+- {
+- char_u *s = str;
+- static int cur_col = 0;
+-
+- /* Open the file when called the first time. */
+- if (verbose_fd == NULL)
+- verbose_open();
+-
+- if (verbose_fd != NULL)
+- {
+- /* If the string doesn't start with CR or NL, go to msg_col */
+- if (*s != '\n' && *s != '\r')
+- {
+- while (cur_col < msg_col)
+- {
+- fputs(" ", verbose_fd);
+- ++cur_col;
+- }
+- }
+-
+- /* Adjust the current column */
+- while (*s != NUL && (maxlen < 0 || (int)(s - str) < maxlen))
+- {
+- putc(*s, verbose_fd);
+- if (*s == '\r' || *s == '\n')
+- cur_col = 0;
+- else if (*s == '\t')
+- cur_col += (8 - cur_col % 8);
+- else
+- ++cur_col;
+- ++s;
+- }
+- }
+- }
+-
+- /*
+ * Give a warning message (for searching).
+ * Use 'w' highlighting and may repeat the message after redrawing
+ */
+--- 3222,3227 ----
+*** ../vim-7.3.307/src/version.c 2011-09-14 15:01:54.000000000 +0200
+--- src/version.c 2011-09-14 15:38:31.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 308,
+ /**/
+
+--
+The average life of an organization chart is six months. You can safely
+ignore any order from your boss that would take six months to complete.
+ (Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.309 b/source/ap/vim/patches/7.3.309
new file mode 100644
index 000000000..f274284bd
--- /dev/null
+++ b/source/ap/vim/patches/7.3.309
@@ -0,0 +1,105 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.309
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.309 (after 7.3.307)
+Problem: Warnings for pointer types.
+Solution: Change PySliceObject to PyObject.
+Files: src/if_python3.c
+
+
+*** ../vim-7.3.308/src/if_python3.c 2011-09-14 15:01:54.000000000 +0200
+--- src/if_python3.c 2011-09-14 15:30:45.000000000 +0200
+***************
+*** 1030,1036 ****
+ } else if (PySlice_Check(idx)) {
+ Py_ssize_t start, stop, step, slicelen;
+
+! if (PySlice_GetIndicesEx((PySliceObject *)idx,
+ (Py_ssize_t)((BufferObject *)(self))->buf->b_ml.ml_line_count+1,
+ &start, &stop,
+ &step, &slicelen) < 0) {
+--- 1030,1036 ----
+ } else if (PySlice_Check(idx)) {
+ Py_ssize_t start, stop, step, slicelen;
+
+! if (PySlice_GetIndicesEx((PyObject *)idx,
+ (Py_ssize_t)((BufferObject *)(self))->buf->b_ml.ml_line_count+1,
+ &start, &stop,
+ &step, &slicelen) < 0) {
+***************
+*** 1054,1060 ****
+ } else if (PySlice_Check(idx)) {
+ Py_ssize_t start, stop, step, slicelen;
+
+! if (PySlice_GetIndicesEx((PySliceObject *)idx,
+ (Py_ssize_t)((BufferObject *)(self))->buf->b_ml.ml_line_count+1,
+ &start, &stop,
+ &step, &slicelen) < 0) {
+--- 1054,1060 ----
+ } else if (PySlice_Check(idx)) {
+ Py_ssize_t start, stop, step, slicelen;
+
+! if (PySlice_GetIndicesEx((PyObject *)idx,
+ (Py_ssize_t)((BufferObject *)(self))->buf->b_ml.ml_line_count+1,
+ &start, &stop,
+ &step, &slicelen) < 0) {
+***************
+*** 1142,1148 ****
+ } else if (PySlice_Check(idx)) {
+ Py_ssize_t start, stop, step, slicelen;
+
+! if (PySlice_GetIndicesEx((PySliceObject *)idx,
+ ((RangeObject *)(self))->end-((RangeObject *)(self))->start+1,
+ &start, &stop,
+ &step, &slicelen) < 0) {
+--- 1142,1148 ----
+ } else if (PySlice_Check(idx)) {
+ Py_ssize_t start, stop, step, slicelen;
+
+! if (PySlice_GetIndicesEx((PyObject *)idx,
+ ((RangeObject *)(self))->end-((RangeObject *)(self))->start+1,
+ &start, &stop,
+ &step, &slicelen) < 0) {
+***************
+*** 1164,1170 ****
+ } else if (PySlice_Check(idx)) {
+ Py_ssize_t start, stop, step, slicelen;
+
+! if (PySlice_GetIndicesEx((PySliceObject *)idx,
+ ((RangeObject *)(self))->end-((RangeObject *)(self))->start+1,
+ &start, &stop,
+ &step, &slicelen) < 0) {
+--- 1164,1170 ----
+ } else if (PySlice_Check(idx)) {
+ Py_ssize_t start, stop, step, slicelen;
+
+! if (PySlice_GetIndicesEx((PyObject *)idx,
+ ((RangeObject *)(self))->end-((RangeObject *)(self))->start+1,
+ &start, &stop,
+ &step, &slicelen) < 0) {
+*** ../vim-7.3.308/src/version.c 2011-09-14 15:39:26.000000000 +0200
+--- src/version.c 2011-09-14 15:40:17.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 309,
+ /**/
+
+--
+Never enter the boss's office unless it's absolutely necessary. Every boss
+saves one corner of the desk for useless assignments that are doled out like
+Halloween candy to each visitor.
+ (Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.310 b/source/ap/vim/patches/7.3.310
new file mode 100644
index 000000000..e3ffa5a4c
--- /dev/null
+++ b/source/ap/vim/patches/7.3.310
@@ -0,0 +1,3524 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.310
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.310
+Problem: Code not following Vim style.
+Solution: Fix the style. (Elias Diem)
+Files: src/gui_photon.c
+
+
+*** ../vim-7.3.309/src/gui_photon.c 2011-09-07 19:08:57.000000000 +0200
+--- src/gui_photon.c 2011-09-14 16:01:55.000000000 +0200
+***************
+*** 477,483 ****
+ }
+ #endif
+
+! for(i = 0; special_keys[i].key_sym != 0; i++)
+ {
+ if (special_keys[i].key_sym == key->key_cap)
+ {
+--- 477,483 ----
+ }
+ #endif
+
+! for (i = 0; special_keys[i].key_sym != 0; i++)
+ {
+ if (special_keys[i].key_sym == key->key_cap)
+ {
+***************
+*** 758,764 ****
+ if (damage->next != NULL)
+ damage = damage->next;
+
+! while(damage != NULL)
+ {
+ r = &damage->rect;
+ gui_redraw(
+--- 758,764 ----
+ if (damage->next != NULL)
+ damage = damage->next;
+
+! while (damage != NULL)
+ {
+ r = &damage->rect;
+ gui_redraw(
+***************
+*** 798,809 ****
+
+ /* This is used for pulldown/popup menus and also toolbar buttons */
+ static int
+! gui_ph_handle_menu( PtWidget_t *widget, void *data, PtCallbackInfo_t *info )
+ {
+! if( data != NULL )
+ {
+ vimmenu_T *menu = (vimmenu_T *) data;
+! gui_menu_cb( menu );
+ }
+ return Pt_CONTINUE;
+ }
+--- 798,809 ----
+
+ /* This is used for pulldown/popup menus and also toolbar buttons */
+ static int
+! gui_ph_handle_menu(PtWidget_t *widget, void *data, PtCallbackInfo_t *info)
+ {
+! if (data != NULL)
+ {
+ vimmenu_T *menu = (vimmenu_T *) data;
+! gui_menu_cb(menu);
+ }
+ return Pt_CONTINUE;
+ }
+***************
+*** 813,821 ****
+ gui_ph_handle_menu_unrealized(
+ PtWidget_t *widget,
+ void *data,
+! PtCallbackInfo_t *info )
+ {
+! PtGiveFocus( gui.vimTextArea, NULL );
+ return Pt_CONTINUE;
+ }
+
+--- 813,821 ----
+ gui_ph_handle_menu_unrealized(
+ PtWidget_t *widget,
+ void *data,
+! PtCallbackInfo_t *info)
+ {
+! PtGiveFocus(gui.vimTextArea, NULL);
+ return Pt_CONTINUE;
+ }
+
+***************
+*** 823,831 ****
+ gui_ph_handle_window_open(
+ PtWidget_t *widget,
+ void *data,
+! PtCallbackInfo_t *info )
+ {
+! gui_set_shellsize( FALSE, TRUE, RESIZE_BOTH );
+ return Pt_CONTINUE;
+ }
+
+--- 823,831 ----
+ gui_ph_handle_window_open(
+ PtWidget_t *widget,
+ void *data,
+! PtCallbackInfo_t *info)
+ {
+! gui_set_shellsize(FALSE, TRUE, RESIZE_BOTH);
+ return Pt_CONTINUE;
+ }
+
+***************
+*** 836,909 ****
+
+ /* TODO: Set a clipping rect? */
+ static void
+! gui_ph_draw_start( void )
+ {
+ PhGC_t *gc;
+
+ gc = PgGetGC();
+! PgSetRegion( PtWidgetRid( PtFindDisjoint( gui.vimTextArea ) ) );
+! PgClearClippingsCx( gc );
+! PgClearTranslationCx( gc );
+
+! PtWidgetOffset( gui.vimTextArea, &gui_ph_raw_offset );
+! PhTranslatePoint( &gui_ph_raw_offset, PtWidgetPos( gui.vimTextArea, NULL ) );
+
+! PgSetTranslation( &gui_ph_raw_offset, Pg_RELATIVE );
+ }
+
+ static void
+! gui_ph_draw_end( void )
+ {
+ gui_ph_raw_offset.x = -gui_ph_raw_offset.x;
+ gui_ph_raw_offset.y = -gui_ph_raw_offset.y;
+! PgSetTranslation( &gui_ph_raw_offset, Pg_RELATIVE );
+ }
+
+ #ifdef USE_PANEL_GROUP
+ static vimmenu_T *
+! gui_ph_find_buffer_item( char_u *name )
+ {
+ vimmenu_T *top_level = root_menu;
+ vimmenu_T *items = NULL;
+
+! while( top_level != NULL &&
+! ( STRCMP( top_level->dname, "Buffers" ) != 0 ) )
+ top_level = top_level->next;
+
+! if( top_level != NULL )
+ {
+ items = top_level->children;
+
+! while( items != NULL &&
+! ( STRCMP( items->dname, name ) != 0 ) )
+ items = items->next;
+ }
+ return items;
+ }
+
+ static void
+! gui_ph_pg_set_buffer_num( int_u buf_num )
+ {
+ int i;
+ char search[16];
+ char *mark;
+
+! if( gui.vimTextArea == NULL || buf_num == 0 )
+ return;
+
+ search[0] = '(';
+! ultoa( buf_num, &search[1], 10 );
+! STRCAT( search, ")" );
+
+! for( i = 0; i < num_panels; i++ )
+ {
+ /* find the last "(" in the panel title and see if the buffer
+ * number in the title matches the one we're looking for */
+! mark = STRRCHR( panel_titles[ i ], '(' );
+! if( mark != NULL && STRCMP( mark, search ) == 0 )
+ {
+! PtSetResource( gui.vimPanelGroup, Pt_ARG_PG_CURRENT_INDEX,
+! i, 0 );
+ }
+ }
+ }
+--- 836,909 ----
+
+ /* TODO: Set a clipping rect? */
+ static void
+! gui_ph_draw_start(void)
+ {
+ PhGC_t *gc;
+
+ gc = PgGetGC();
+! PgSetRegion(PtWidgetRid(PtFindDisjoint(gui.vimTextArea)));
+! PgClearClippingsCx(gc);
+! PgClearTranslationCx(gc);
+
+! PtWidgetOffset(gui.vimTextArea, &gui_ph_raw_offset);
+! PhTranslatePoint(&gui_ph_raw_offset, PtWidgetPos(gui.vimTextArea, NULL));
+
+! PgSetTranslation(&gui_ph_raw_offset, Pg_RELATIVE);
+ }
+
+ static void
+! gui_ph_draw_end(void)
+ {
+ gui_ph_raw_offset.x = -gui_ph_raw_offset.x;
+ gui_ph_raw_offset.y = -gui_ph_raw_offset.y;
+! PgSetTranslation(&gui_ph_raw_offset, Pg_RELATIVE);
+ }
+
+ #ifdef USE_PANEL_GROUP
+ static vimmenu_T *
+! gui_ph_find_buffer_item(char_u *name)
+ {
+ vimmenu_T *top_level = root_menu;
+ vimmenu_T *items = NULL;
+
+! while (top_level != NULL &&
+! (STRCMP(top_level->dname, "Buffers") != 0))
+ top_level = top_level->next;
+
+! if (top_level != NULL)
+ {
+ items = top_level->children;
+
+! while (items != NULL &&
+! (STRCMP(items->dname, name) != 0))
+ items = items->next;
+ }
+ return items;
+ }
+
+ static void
+! gui_ph_pg_set_buffer_num(int_u buf_num)
+ {
+ int i;
+ char search[16];
+ char *mark;
+
+! if (gui.vimTextArea == NULL || buf_num == 0)
+ return;
+
+ search[0] = '(';
+! ultoa(buf_num, &search[1], 10);
+! STRCAT(search, ")");
+
+! for (i = 0; i < num_panels; i++)
+ {
+ /* find the last "(" in the panel title and see if the buffer
+ * number in the title matches the one we're looking for */
+! mark = STRRCHR(panel_titles[ i ], '(');
+! if (mark != NULL && STRCMP(mark, search) == 0)
+ {
+! PtSetResource(gui.vimPanelGroup, Pt_ARG_PG_CURRENT_INDEX,
+! i, 0);
+ }
+ }
+ }
+***************
+*** 912,930 ****
+ gui_ph_handle_pg_change(
+ PtWidget_t *widget,
+ void *data,
+! PtCallbackInfo_t *info )
+ {
+ vimmenu_T *menu;
+ PtPanelGroupCallback_t *panel;
+
+! if( info->event != NULL )
+ {
+ panel = info->cbdata;
+! if( panel->new_panel != NULL )
+ {
+! menu = gui_ph_find_buffer_item( panel->new_panel );
+! if( menu )
+! gui_menu_cb( menu );
+ }
+ }
+ return Pt_CONTINUE;
+--- 912,930 ----
+ gui_ph_handle_pg_change(
+ PtWidget_t *widget,
+ void *data,
+! PtCallbackInfo_t *info)
+ {
+ vimmenu_T *menu;
+ PtPanelGroupCallback_t *panel;
+
+! if (info->event != NULL)
+ {
+ panel = info->cbdata;
+! if (panel->new_panel != NULL)
+ {
+! menu = gui_ph_find_buffer_item(panel->new_panel);
+! if (menu)
+! gui_menu_cb(menu);
+ }
+ }
+ return Pt_CONTINUE;
+***************
+*** 935,951 ****
+ short *top,
+ short *bottom,
+ short *left,
+! short *right )
+ {
+ unsigned short abs_raw_x, abs_raw_y, abs_panel_x, abs_panel_y;
+ const unsigned short *margin_top, *margin_bottom;
+ const unsigned short *margin_left, *margin_right;
+
+! PtGetAbsPosition( gui.vimTextArea, &abs_raw_x, &abs_raw_y );
+! PtGetAbsPosition( gui.vimPanelGroup, &abs_panel_x, &abs_panel_y );
+
+! PtGetResource( gui.vimPanelGroup, Pt_ARG_MARGIN_RIGHT, &margin_right, 0 );
+! PtGetResource( gui.vimPanelGroup, Pt_ARG_MARGIN_BOTTOM, &margin_bottom, 0 );
+
+ abs_raw_x -= abs_panel_x;
+ abs_raw_y -= abs_panel_y;
+--- 935,951 ----
+ short *top,
+ short *bottom,
+ short *left,
+! short *right)
+ {
+ unsigned short abs_raw_x, abs_raw_y, abs_panel_x, abs_panel_y;
+ const unsigned short *margin_top, *margin_bottom;
+ const unsigned short *margin_left, *margin_right;
+
+! PtGetAbsPosition(gui.vimTextArea, &abs_raw_x, &abs_raw_y);
+! PtGetAbsPosition(gui.vimPanelGroup, &abs_panel_x, &abs_panel_y);
+
+! PtGetResource(gui.vimPanelGroup, Pt_ARG_MARGIN_RIGHT, &margin_right, 0);
+! PtGetResource(gui.vimPanelGroup, Pt_ARG_MARGIN_BOTTOM, &margin_bottom, 0);
+
+ abs_raw_x -= abs_panel_x;
+ abs_raw_y -= abs_panel_y;
+***************
+*** 959,979 ****
+
+ /* Used for the tabs for PtPanelGroup */
+ static int
+! gui_ph_is_buffer_item( vimmenu_T *menu, vimmenu_T *parent )
+ {
+ char *mark;
+
+! if( STRCMP( parent->dname, "Buffers" ) == 0 )
+ {
+ /* Look for '(' digits ')' */
+! mark = vim_strchr( menu->dname, '(' );
+! if( mark != NULL )
+ {
+ mark++;
+! while( isdigit( *mark ) )
+ mark++;
+
+! if( *mark == ')' )
+ return TRUE;
+ }
+ }
+--- 959,979 ----
+
+ /* Used for the tabs for PtPanelGroup */
+ static int
+! gui_ph_is_buffer_item(vimmenu_T *menu, vimmenu_T *parent)
+ {
+ char *mark;
+
+! if (STRCMP(parent->dname, "Buffers") == 0)
+ {
+ /* Look for '(' digits ')' */
+! mark = vim_strchr(menu->dname, '(');
+! if (mark != NULL)
+ {
+ mark++;
+! while (isdigit(*mark))
+ mark++;
+
+! if (*mark == ')')
+ return TRUE;
+ }
+ }
+***************
+*** 981,1043 ****
+ }
+
+ static void
+! gui_ph_pg_add_buffer(char *name )
+ {
+ char **new_titles = NULL;
+
+! new_titles = (char **) alloc( ( num_panels + 1 ) * sizeof( char ** ) );
+! if( new_titles != NULL )
+ {
+! if( num_panels > 0 )
+! memcpy( new_titles, panel_titles, num_panels * sizeof( char ** ) );
+
+ new_titles[ num_panels++ ] = name;
+
+! PtSetResource( gui.vimPanelGroup, Pt_ARG_PG_PANEL_TITLES, new_titles,
+! num_panels );
+
+! vim_free( panel_titles );
+ panel_titles = new_titles;
+ }
+ }
+
+ static void
+! gui_ph_pg_remove_buffer( char *name )
+ {
+ int i;
+ char **new_titles = NULL;
+
+ /* If there is only 1 panel, we just use the temporary place holder */
+! if( num_panels > 1 )
+ {
+! new_titles = (char **) alloc( ( num_panels - 1 ) * sizeof( char ** ) );
+! if( new_titles != NULL )
+ {
+ char **s = new_titles;
+ /* Copy all the titles except the one we're removing */
+! for( i = 0; i < num_panels; i++ )
+ {
+! if( STRCMP( panel_titles[ i ], name ) != 0 )
+ {
+ *s++ = panel_titles[ i ];
+ }
+ }
+ num_panels--;
+
+! PtSetResource( gui.vimPanelGroup, Pt_ARG_PG_PANEL_TITLES, new_titles,
+! num_panels );
+
+! vim_free( panel_titles );
+ panel_titles = new_titles;
+ }
+ }
+ else
+ {
+ num_panels--;
+! PtSetResource( gui.vimPanelGroup, Pt_ARG_PG_PANEL_TITLES, &empty_title,
+! 1 );
+
+! vim_free( panel_titles );
+ panel_titles = NULL;
+ }
+ }
+--- 981,1043 ----
+ }
+
+ static void
+! gui_ph_pg_add_buffer(char *name)
+ {
+ char **new_titles = NULL;
+
+! new_titles = (char **) alloc((num_panels + 1) * sizeof(char **));
+! if (new_titles != NULL)
+ {
+! if (num_panels > 0)
+! memcpy(new_titles, panel_titles, num_panels * sizeof(char **));
+
+ new_titles[ num_panels++ ] = name;
+
+! PtSetResource(gui.vimPanelGroup, Pt_ARG_PG_PANEL_TITLES, new_titles,
+! num_panels);
+
+! vim_free(panel_titles);
+ panel_titles = new_titles;
+ }
+ }
+
+ static void
+! gui_ph_pg_remove_buffer(char *name)
+ {
+ int i;
+ char **new_titles = NULL;
+
+ /* If there is only 1 panel, we just use the temporary place holder */
+! if (num_panels > 1)
+ {
+! new_titles = (char **) alloc((num_panels - 1) * sizeof(char **));
+! if (new_titles != NULL)
+ {
+ char **s = new_titles;
+ /* Copy all the titles except the one we're removing */
+! for (i = 0; i < num_panels; i++)
+ {
+! if (STRCMP(panel_titles[ i ], name) != 0)
+ {
+ *s++ = panel_titles[ i ];
+ }
+ }
+ num_panels--;
+
+! PtSetResource(gui.vimPanelGroup, Pt_ARG_PG_PANEL_TITLES, new_titles,
+! num_panels);
+
+! vim_free(panel_titles);
+ panel_titles = new_titles;
+ }
+ }
+ else
+ {
+ num_panels--;
+! PtSetResource(gui.vimPanelGroup, Pt_ARG_PG_PANEL_TITLES, &empty_title,
+! 1);
+
+! vim_free(panel_titles);
+ panel_titles = NULL;
+ }
+ }
+***************
+*** 1047,1060 ****
+ gui_ph_handle_buffer_remove(
+ PtWidget_t *widget,
+ void *data,
+! PtCallbackInfo_t *info )
+ {
+ vimmenu_T *menu;
+
+! if( data != NULL )
+ {
+ menu = (vimmenu_T *) data;
+! gui_ph_pg_remove_buffer( menu->dname );
+ }
+
+ return Pt_CONTINUE;
+--- 1047,1060 ----
+ gui_ph_handle_buffer_remove(
+ PtWidget_t *widget,
+ void *data,
+! PtCallbackInfo_t *info)
+ {
+ vimmenu_T *menu;
+
+! if (data != NULL)
+ {
+ menu = (vimmenu_T *) data;
+! gui_ph_pg_remove_buffer(menu->dname);
+ }
+
+ return Pt_CONTINUE;
+***************
+*** 1062,1074 ****
+ #endif
+
+ static int
+! gui_ph_pane_resize( PtWidget_t *widget, void *data, PtCallbackInfo_t *info )
+ {
+! if( PtWidgetIsRealized( widget ) )
+ {
+ is_ignore_draw = TRUE;
+! PtStartFlux( gui.vimContainer );
+! PtContainerHold( gui.vimContainer );
+ }
+
+ return Pt_CONTINUE;
+--- 1062,1074 ----
+ #endif
+
+ static int
+! gui_ph_pane_resize(PtWidget_t *widget, void *data, PtCallbackInfo_t *info)
+ {
+! if (PtWidgetIsRealized(widget))
+ {
+ is_ignore_draw = TRUE;
+! PtStartFlux(gui.vimContainer);
+! PtContainerHold(gui.vimContainer);
+ }
+
+ return Pt_CONTINUE;
+***************
+*** 1078,1084 ****
+
+ #ifdef FEAT_MBYTE
+ void
+! gui_ph_encoding_changed( int new_encoding )
+ {
+ /* Default encoding is latin1 */
+ char *charset = "latin1";
+--- 1078,1084 ----
+
+ #ifdef FEAT_MBYTE
+ void
+! gui_ph_encoding_changed(int new_encoding)
+ {
+ /* Default encoding is latin1 */
+ char *charset = "latin1";
+***************
+*** 1094,1106 ****
+ { DBCS_CHS, "gb" }
+ };
+
+! for( i = 0; i < ARRAY_LENGTH( charsets ); i++ )
+ {
+! if( new_encoding == charsets[ i ].encoding )
+ charset = charsets[ i ].name;
+ }
+
+! charset_translate = PxTranslateSet( charset_translate, charset );
+ }
+ #endif
+
+--- 1094,1106 ----
+ { DBCS_CHS, "gb" }
+ };
+
+! for (i = 0; i < ARRAY_LENGTH(charsets); i++)
+ {
+! if (new_encoding == charsets[ i ].encoding)
+ charset = charsets[ i ].name;
+ }
+
+! charset_translate = PxTranslateSet(charset_translate, charset);
+ }
+ #endif
+
+***************
+*** 1112,1118 ****
+ int *argc;
+ char **argv;
+ {
+! PtInit( NULL );
+ }
+
+ int
+--- 1112,1118 ----
+ int *argc;
+ char **argv;
+ {
+! PtInit(NULL);
+ }
+
+ int
+***************
+*** 1124,1213 ****
+ PhDim_t window_size = {100, 100}; /* Arbitrary values */
+ PhPoint_t pos = {0, 0};
+
+! gui.event_buffer = (PhEvent_t *) alloc( EVENT_BUFFER_SIZE );
+! if( gui.event_buffer == NULL )
+ return FAIL;
+
+ /* Get a translation so we can convert from ISO Latin-1 to UTF */
+! charset_translate = PxTranslateSet( NULL, "latin1" );
+
+ /* The +2 is for the 1 pixel dark line on each side */
+ gui.border_offset = gui.border_width = GUI_PH_MARGIN + 2;
+
+ /* Handle close events ourselves */
+! PtSetArg( &args[ n++ ], Pt_ARG_WINDOW_MANAGED_FLAGS, Pt_FALSE, Ph_WM_CLOSE );
+! PtSetArg( &args[ n++ ], Pt_ARG_WINDOW_NOTIFY_FLAGS, Pt_TRUE,
+! Ph_WM_CLOSE | Ph_WM_RESIZE | Ph_WM_FOCUS );
+! PtSetArg( &args[ n++ ], Pt_ARG_DIM, &window_size, 0 );
+! gui.vimWindow = PtCreateWidget( PtWindow, NULL, n, args );
+! if( gui.vimWindow == NULL )
+ return FAIL;
+
+! PtAddCallback( gui.vimWindow, Pt_CB_WINDOW, gui_ph_handle_window_cb, NULL );
+! PtAddCallback( gui.vimWindow, Pt_CB_WINDOW_OPENING,
+! gui_ph_handle_window_open, NULL );
+
+ n = 0;
+! PtSetArg( &args[ n++ ], Pt_ARG_ANCHOR_FLAGS, Pt_ANCHOR_ALL, Pt_IS_ANCHORED );
+! PtSetArg( &args[ n++ ], Pt_ARG_DIM, &window_size, 0 );
+! PtSetArg( &args[ n++ ], Pt_ARG_POS, &pos, 0 );
+
+ #ifdef USE_PANEL_GROUP
+ /* Put in a temprary place holder title */
+! PtSetArg( &args[ n++ ], Pt_ARG_PG_PANEL_TITLES, &empty_title, 1 );
+
+! gui.vimPanelGroup = PtCreateWidget( PtPanelGroup, gui.vimWindow, n, args );
+! if( gui.vimPanelGroup == NULL )
+ return FAIL;
+
+! PtAddCallback( gui.vimPanelGroup, Pt_CB_PG_PANEL_SWITCHING,
+! gui_ph_handle_pg_change, NULL );
+ #else
+ /* Turn off all edge decorations */
+! PtSetArg( &args[ n++ ], Pt_ARG_BASIC_FLAGS, Pt_FALSE, Pt_ALL );
+! PtSetArg( &args[ n++ ], Pt_ARG_BEVEL_WIDTH, 0, 0 );
+! PtSetArg( &args[ n++ ], Pt_ARG_MARGIN_WIDTH, 0, 0 );
+! PtSetArg( &args[ n++ ], Pt_ARG_MARGIN_HEIGHT, 0, 0 );
+! PtSetArg( &args[ n++ ], Pt_ARG_CONTAINER_FLAGS, Pt_TRUE, Pt_AUTO_EXTENT );
+
+! gui.vimContainer = PtCreateWidget( PtPane, gui.vimWindow, n, args );
+! if( gui.vimContainer == NULL )
+ return FAIL;
+
+! PtAddCallback( gui.vimContainer, Pt_CB_RESIZE, gui_ph_pane_resize, NULL );
+ #endif
+
+ /* Size for the text area is set in gui_mch_set_text_area_pos */
+ n = 0;
+
+! PtSetArg( &args[ n++ ], Pt_ARG_RAW_DRAW_F, gui_ph_handle_raw_draw, 1 );
+! PtSetArg( &args[ n++ ], Pt_ARG_BEVEL_WIDTH, GUI_PH_MARGIN, 0 );
+ /*
+ * Using focus render also causes the whole widget to be redrawn
+ * whenever it changes focus, which is very annoying :p
+ */
+! PtSetArg( &args[ n++ ], Pt_ARG_FLAGS, Pt_TRUE,
+! Pt_GETS_FOCUS | Pt_HIGHLIGHTED );
+ #ifndef FEAT_MOUSESHAPE
+! PtSetArg( &args[ n++ ], Pt_ARG_CURSOR_TYPE, GUI_PH_MOUSE_TYPE, 0 );
+! PtSetArg( &args[ n++ ], Pt_ARG_CURSOR_COLOR, gui_ph_mouse_color, 0 );
+ #endif
+
+! gui.vimTextArea = PtCreateWidget( PtRaw, Pt_DFLT_PARENT, n, args );
+! if( gui.vimTextArea == NULL)
+ return FAIL;
+
+ /* TODO: use PtAddEventHandlers instead? */
+ /* Not using Ph_EV_BUT_REPEAT because vim wouldn't use it anyway */
+! PtAddEventHandler( gui.vimTextArea,
+ Ph_EV_BUT_PRESS | Ph_EV_BUT_RELEASE | Ph_EV_PTR_MOTION_BUTTON,
+! gui_ph_handle_mouse, NULL );
+! PtAddEventHandler( gui.vimTextArea, Ph_EV_KEY,
+! gui_ph_handle_keyboard, NULL );
+! PtAddCallback( gui.vimTextArea, Pt_CB_GOT_FOCUS,
+! gui_ph_handle_focus, NULL );
+! PtAddCallback( gui.vimTextArea, Pt_CB_LOST_FOCUS,
+! gui_ph_handle_focus, NULL );
+
+ /*
+ * Now that the text area widget has been created, set up the colours,
+--- 1124,1213 ----
+ PhDim_t window_size = {100, 100}; /* Arbitrary values */
+ PhPoint_t pos = {0, 0};
+
+! gui.event_buffer = (PhEvent_t *) alloc(EVENT_BUFFER_SIZE);
+! if (gui.event_buffer == NULL)
+ return FAIL;
+
+ /* Get a translation so we can convert from ISO Latin-1 to UTF */
+! charset_translate = PxTranslateSet(NULL, "latin1");
+
+ /* The +2 is for the 1 pixel dark line on each side */
+ gui.border_offset = gui.border_width = GUI_PH_MARGIN + 2;
+
+ /* Handle close events ourselves */
+! PtSetArg(&args[ n++ ], Pt_ARG_WINDOW_MANAGED_FLAGS, Pt_FALSE, Ph_WM_CLOSE);
+! PtSetArg(&args[ n++ ], Pt_ARG_WINDOW_NOTIFY_FLAGS, Pt_TRUE,
+! Ph_WM_CLOSE | Ph_WM_RESIZE | Ph_WM_FOCUS);
+! PtSetArg(&args[ n++ ], Pt_ARG_DIM, &window_size, 0);
+! gui.vimWindow = PtCreateWidget(PtWindow, NULL, n, args);
+! if (gui.vimWindow == NULL)
+ return FAIL;
+
+! PtAddCallback(gui.vimWindow, Pt_CB_WINDOW, gui_ph_handle_window_cb, NULL);
+! PtAddCallback(gui.vimWindow, Pt_CB_WINDOW_OPENING,
+! gui_ph_handle_window_open, NULL);
+
+ n = 0;
+! PtSetArg(&args[ n++ ], Pt_ARG_ANCHOR_FLAGS, Pt_ANCHOR_ALL, Pt_IS_ANCHORED);
+! PtSetArg(&args[ n++ ], Pt_ARG_DIM, &window_size, 0);
+! PtSetArg(&args[ n++ ], Pt_ARG_POS, &pos, 0);
+
+ #ifdef USE_PANEL_GROUP
+ /* Put in a temprary place holder title */
+! PtSetArg(&args[ n++ ], Pt_ARG_PG_PANEL_TITLES, &empty_title, 1);
+
+! gui.vimPanelGroup = PtCreateWidget(PtPanelGroup, gui.vimWindow, n, args);
+! if (gui.vimPanelGroup == NULL)
+ return FAIL;
+
+! PtAddCallback(gui.vimPanelGroup, Pt_CB_PG_PANEL_SWITCHING,
+! gui_ph_handle_pg_change, NULL);
+ #else
+ /* Turn off all edge decorations */
+! PtSetArg(&args[ n++ ], Pt_ARG_BASIC_FLAGS, Pt_FALSE, Pt_ALL);
+! PtSetArg(&args[ n++ ], Pt_ARG_BEVEL_WIDTH, 0, 0);
+! PtSetArg(&args[ n++ ], Pt_ARG_MARGIN_WIDTH, 0, 0);
+! PtSetArg(&args[ n++ ], Pt_ARG_MARGIN_HEIGHT, 0, 0);
+! PtSetArg(&args[ n++ ], Pt_ARG_CONTAINER_FLAGS, Pt_TRUE, Pt_AUTO_EXTENT);
+
+! gui.vimContainer = PtCreateWidget(PtPane, gui.vimWindow, n, args);
+! if (gui.vimContainer == NULL)
+ return FAIL;
+
+! PtAddCallback(gui.vimContainer, Pt_CB_RESIZE, gui_ph_pane_resize, NULL);
+ #endif
+
+ /* Size for the text area is set in gui_mch_set_text_area_pos */
+ n = 0;
+
+! PtSetArg(&args[ n++ ], Pt_ARG_RAW_DRAW_F, gui_ph_handle_raw_draw, 1);
+! PtSetArg(&args[ n++ ], Pt_ARG_BEVEL_WIDTH, GUI_PH_MARGIN, 0);
+ /*
+ * Using focus render also causes the whole widget to be redrawn
+ * whenever it changes focus, which is very annoying :p
+ */
+! PtSetArg(&args[ n++ ], Pt_ARG_FLAGS, Pt_TRUE,
+! Pt_GETS_FOCUS | Pt_HIGHLIGHTED);
+ #ifndef FEAT_MOUSESHAPE
+! PtSetArg(&args[ n++ ], Pt_ARG_CURSOR_TYPE, GUI_PH_MOUSE_TYPE, 0);
+! PtSetArg(&args[ n++ ], Pt_ARG_CURSOR_COLOR, gui_ph_mouse_color, 0);
+ #endif
+
+! gui.vimTextArea = PtCreateWidget(PtRaw, Pt_DFLT_PARENT, n, args);
+! if (gui.vimTextArea == NULL)
+ return FAIL;
+
+ /* TODO: use PtAddEventHandlers instead? */
+ /* Not using Ph_EV_BUT_REPEAT because vim wouldn't use it anyway */
+! PtAddEventHandler(gui.vimTextArea,
+ Ph_EV_BUT_PRESS | Ph_EV_BUT_RELEASE | Ph_EV_PTR_MOTION_BUTTON,
+! gui_ph_handle_mouse, NULL);
+! PtAddEventHandler(gui.vimTextArea, Ph_EV_KEY,
+! gui_ph_handle_keyboard, NULL);
+! PtAddCallback(gui.vimTextArea, Pt_CB_GOT_FOCUS,
+! gui_ph_handle_focus, NULL);
+! PtAddCallback(gui.vimTextArea, Pt_CB_LOST_FOCUS,
+! gui_ph_handle_focus, NULL);
+
+ /*
+ * Now that the text area widget has been created, set up the colours,
+***************
+*** 1218,1278 ****
+ * Create the two timers, not as accurate as using the kernel timer
+ * functions, but good enough
+ */
+! gui_ph_timer_cursor = PtCreateWidget( PtTimer, gui.vimWindow, 0, NULL );
+! if( gui_ph_timer_cursor == NULL )
+ return FAIL;
+
+! gui_ph_timer_timeout = PtCreateWidget( PtTimer, gui.vimWindow, 0, NULL );
+! if( gui_ph_timer_timeout == NULL )
+ return FAIL;
+
+! PtAddCallback( gui_ph_timer_cursor, Pt_CB_TIMER_ACTIVATE,
+ gui_ph_handle_timer_cursor, NULL);
+! PtAddCallback( gui_ph_timer_timeout, Pt_CB_TIMER_ACTIVATE,
+ gui_ph_handle_timer_timeout, NULL);
+
+ #ifdef FEAT_MENU
+ n = 0;
+! PtSetArg( &args[ n++ ], Pt_ARG_WIDTH, window_size.w, 0 );
+! PtSetArg( &args[ n++ ], Pt_ARG_ANCHOR_FLAGS, Pt_ANCHOR_LEFT_RIGHT,
+! Pt_IS_ANCHORED );
+! gui.vimToolBarGroup = PtCreateWidget( PtToolbarGroup, gui.vimWindow,
+! n, args );
+! if( gui.vimToolBarGroup == NULL )
+ return FAIL;
+
+! PtAddCallback( gui.vimToolBarGroup, Pt_CB_RESIZE,
+! gui_ph_handle_menu_resize, NULL );
+
+ n = 0;
+ flags = 0;
+! PtSetArg( &args[ n++ ], Pt_ARG_WIDTH, window_size.w, 0 );
+! if( ! vim_strchr( p_go, GO_MENUS ) )
+ {
+ flags |= Pt_DELAY_REALIZE;
+! PtSetArg( &args[ n++ ], Pt_ARG_FLAGS, Pt_TRUE, flags );
+ }
+! gui.vimMenuBar = PtCreateWidget( PtMenuBar, gui.vimToolBarGroup, n, args );
+! if( gui.vimMenuBar == NULL )
+ return FAIL;
+
+ # ifdef FEAT_TOOLBAR
+ n = 0;
+
+! PtSetArg( &args[ n++ ], Pt_ARG_ANCHOR_FLAGS,
+! Pt_ANCHOR_LEFT_RIGHT |Pt_TOP_ANCHORED_TOP, Pt_IS_ANCHORED );
+! PtSetArg( &args[ n++ ], Pt_ARG_RESIZE_FLAGS, Pt_TRUE,
+! Pt_RESIZE_Y_AS_REQUIRED );
+! PtSetArg( &args[ n++ ], Pt_ARG_WIDTH, window_size.w, 0 );
+
+ flags = Pt_GETS_FOCUS;
+! if( ! vim_strchr( p_go, GO_TOOLBAR ) )
+ flags |= Pt_DELAY_REALIZE;
+
+! PtSetArg( &args[ n++ ], Pt_ARG_FLAGS, Pt_DELAY_REALIZE, flags );
+
+! gui.vimToolBar = PtCreateWidget( PtToolbar, gui.vimToolBarGroup, n, args );
+! if( gui.vimToolBar == NULL )
+ return FAIL;
+
+ /*
+--- 1218,1278 ----
+ * Create the two timers, not as accurate as using the kernel timer
+ * functions, but good enough
+ */
+! gui_ph_timer_cursor = PtCreateWidget(PtTimer, gui.vimWindow, 0, NULL);
+! if (gui_ph_timer_cursor == NULL)
+ return FAIL;
+
+! gui_ph_timer_timeout = PtCreateWidget(PtTimer, gui.vimWindow, 0, NULL);
+! if (gui_ph_timer_timeout == NULL)
+ return FAIL;
+
+! PtAddCallback(gui_ph_timer_cursor, Pt_CB_TIMER_ACTIVATE,
+ gui_ph_handle_timer_cursor, NULL);
+! PtAddCallback(gui_ph_timer_timeout, Pt_CB_TIMER_ACTIVATE,
+ gui_ph_handle_timer_timeout, NULL);
+
+ #ifdef FEAT_MENU
+ n = 0;
+! PtSetArg(&args[ n++ ], Pt_ARG_WIDTH, window_size.w, 0);
+! PtSetArg(&args[ n++ ], Pt_ARG_ANCHOR_FLAGS, Pt_ANCHOR_LEFT_RIGHT,
+! Pt_IS_ANCHORED);
+! gui.vimToolBarGroup = PtCreateWidget(PtToolbarGroup, gui.vimWindow,
+! n, args);
+! if (gui.vimToolBarGroup == NULL)
+ return FAIL;
+
+! PtAddCallback(gui.vimToolBarGroup, Pt_CB_RESIZE,
+! gui_ph_handle_menu_resize, NULL);
+
+ n = 0;
+ flags = 0;
+! PtSetArg(&args[ n++ ], Pt_ARG_WIDTH, window_size.w, 0);
+! if (! vim_strchr(p_go, GO_MENUS))
+ {
+ flags |= Pt_DELAY_REALIZE;
+! PtSetArg(&args[ n++ ], Pt_ARG_FLAGS, Pt_TRUE, flags);
+ }
+! gui.vimMenuBar = PtCreateWidget(PtMenuBar, gui.vimToolBarGroup, n, args);
+! if (gui.vimMenuBar == NULL)
+ return FAIL;
+
+ # ifdef FEAT_TOOLBAR
+ n = 0;
+
+! PtSetArg(&args[ n++ ], Pt_ARG_ANCHOR_FLAGS,
+! Pt_ANCHOR_LEFT_RIGHT |Pt_TOP_ANCHORED_TOP, Pt_IS_ANCHORED);
+! PtSetArg(&args[ n++ ], Pt_ARG_RESIZE_FLAGS, Pt_TRUE,
+! Pt_RESIZE_Y_AS_REQUIRED);
+! PtSetArg(&args[ n++ ], Pt_ARG_WIDTH, window_size.w, 0);
+
+ flags = Pt_GETS_FOCUS;
+! if (! vim_strchr(p_go, GO_TOOLBAR))
+ flags |= Pt_DELAY_REALIZE;
+
+! PtSetArg(&args[ n++ ], Pt_ARG_FLAGS, Pt_DELAY_REALIZE, flags);
+
+! gui.vimToolBar = PtCreateWidget(PtToolbar, gui.vimToolBarGroup, n, args);
+! if (gui.vimToolBar == NULL)
+ return FAIL;
+
+ /*
+***************
+*** 1310,1329 ****
+ if (gui_win_x != -1 && gui_win_y != -1)
+ gui_mch_set_winpos(gui_win_x, gui_win_y);
+
+! return (PtRealizeWidget( gui.vimWindow ) == 0) ? OK : FAIL;
+ }
+
+ void
+ gui_mch_exit(int rc)
+ {
+! PtDestroyWidget( gui.vimWindow );
+
+! PxTranslateSet( charset_translate, NULL );
+
+! vim_free( gui.event_buffer );
+
+ #ifdef USE_PANEL_GROUPS
+! vim_free( panel_titles );
+ #endif
+ }
+
+--- 1310,1329 ----
+ if (gui_win_x != -1 && gui_win_y != -1)
+ gui_mch_set_winpos(gui_win_x, gui_win_y);
+
+! return (PtRealizeWidget(gui.vimWindow) == 0) ? OK : FAIL;
+ }
+
+ void
+ gui_mch_exit(int rc)
+ {
+! PtDestroyWidget(gui.vimWindow);
+
+! PxTranslateSet(charset_translate, NULL);
+
+! vim_free(gui.event_buffer);
+
+ #ifdef USE_PANEL_GROUPS
+! vim_free(panel_titles);
+ #endif
+ }
+
+***************
+*** 1333,1339 ****
+ /* When no events are available, photon will call this function, working is
+ * set to FALSE, and the gui_mch_update loop will exit. */
+ static int
+! exit_gui_mch_update( void *data )
+ {
+ *(int *)data = FALSE;
+ return Pt_END;
+--- 1333,1339 ----
+ /* When no events are available, photon will call this function, working is
+ * set to FALSE, and the gui_mch_update loop will exit. */
+ static int
+! exit_gui_mch_update(void *data)
+ {
+ *(int *)data = FALSE;
+ return Pt_END;
+***************
+*** 1344,1351 ****
+ {
+ int working = TRUE;
+
+! PtAppAddWorkProc( NULL, exit_gui_mch_update, &working );
+! while( ( working == TRUE ) && !vim_is_input_buf_full())
+ {
+ PtProcessEvent();
+ }
+--- 1344,1351 ----
+ {
+ int working = TRUE;
+
+! PtAppAddWorkProc(NULL, exit_gui_mch_update, &working);
+! while ((working == TRUE) && !vim_is_input_buf_full())
+ {
+ PtProcessEvent();
+ }
+***************
+*** 1356,1378 ****
+ {
+ is_timeout = FALSE;
+
+! if( wtime > 0 )
+! PtSetResource( gui_ph_timer_timeout, Pt_ARG_TIMER_INITIAL, wtime, 0 );
+
+! while( 1 )
+ {
+ PtProcessEvent();
+! if( input_available() )
+ {
+! PtSetResource( gui_ph_timer_timeout, Pt_ARG_TIMER_INITIAL, 0, 0 );
+ return OK;
+ }
+! else if( is_timeout == TRUE )
+ return FAIL;
+ }
+ }
+
+! #if defined( FEAT_BROWSE ) || defined( PROTO )
+ /*
+ * Put up a file requester.
+ * Returns the selected name in allocated memory, or NULL for Cancel.
+--- 1356,1378 ----
+ {
+ is_timeout = FALSE;
+
+! if (wtime > 0)
+! PtSetResource(gui_ph_timer_timeout, Pt_ARG_TIMER_INITIAL, wtime, 0);
+
+! while (1)
+ {
+ PtProcessEvent();
+! if (input_available())
+ {
+! PtSetResource(gui_ph_timer_timeout, Pt_ARG_TIMER_INITIAL, 0, 0);
+ return OK;
+ }
+! else if (is_timeout == TRUE)
+ return FAIL;
+ }
+ }
+
+! #if defined(FEAT_BROWSE) || defined(PROTO)
+ /*
+ * Put up a file requester.
+ * Returns the selected name in allocated memory, or NULL for Cancel.
+***************
+*** 1398,1409 ****
+ char_u *open_text = NULL;
+
+ flags = 0;
+! memset( &file, 0, sizeof( file ) );
+
+! default_path = alloc( MAXPATHL + 1 + NAME_MAX + 1 );
+! if( default_path != NULL )
+ {
+! if( saving == TRUE )
+ {
+ /* Don't need Pt_FSR_CONFIRM_EXISTING, vim will ask anyway */
+ flags |= Pt_FSR_NO_FCHECK;
+--- 1398,1409 ----
+ char_u *open_text = NULL;
+
+ flags = 0;
+! memset(&file, 0, sizeof(file));
+
+! default_path = alloc(MAXPATHL + 1 + NAME_MAX + 1);
+! if (default_path != NULL)
+ {
+! if (saving == TRUE)
+ {
+ /* Don't need Pt_FSR_CONFIRM_EXISTING, vim will ask anyway */
+ flags |= Pt_FSR_NO_FCHECK;
+***************
+*** 1411,1433 ****
+ }
+
+ /* combine the directory and filename into a single path */
+! if( initdir == NULL || *initdir == NUL )
+ {
+! mch_dirname( default_path, MAXPATHL );
+ initdir = default_path;
+ }
+ else
+ {
+! STRCPY( default_path, initdir );
+ initdir = default_path;
+ }
+
+! if( default_name != NULL )
+ {
+! if( default_path[ STRLEN( default_path ) - 1 ] != '/' )
+! STRCAT( default_path, "/" );
+
+! STRCAT( default_path, default_name );
+ }
+
+ /* TODO: add a filter? */
+--- 1411,1433 ----
+ }
+
+ /* combine the directory and filename into a single path */
+! if (initdir == NULL || *initdir == NUL)
+ {
+! mch_dirname(default_path, MAXPATHL);
+ initdir = default_path;
+ }
+ else
+ {
+! STRCPY(default_path, initdir);
+ initdir = default_path;
+ }
+
+! if (default_name != NULL)
+ {
+! if (default_path[ STRLEN(default_path) - 1 ] != '/')
+! STRCAT(default_path, "/");
+
+! STRCAT(default_path, default_name);
+ }
+
+ /* TODO: add a filter? */
+***************
+*** 1441,1495 ****
+ NULL,
+ NULL,
+ &file,
+! flags );
+
+! vim_free( default_path );
+
+! if( file.ret == Pt_FSDIALOG_BTN1 )
+ return vim_strsave(file.path);
+ }
+ return NULL;
+ }
+ #endif
+
+! #if defined( FEAT_GUI_DIALOG ) || defined( PROTO )
+ static PtWidget_t *gui_ph_dialog_text = NULL;
+
+ static int
+! gui_ph_dialog_close( int button, void *data )
+ {
+ PtModalCtrl_t *modal_ctrl = data;
+ char_u *dialog_text, *vim_text;
+
+! if( gui_ph_dialog_text != NULL )
+ {
+! PtGetResource( gui_ph_dialog_text, Pt_ARG_TEXT_STRING, &dialog_text, 0 );
+! PtGetResource( gui_ph_dialog_text, Pt_ARG_POINTER, &vim_text, 0 );
+! STRNCPY( vim_text, dialog_text, IOSIZE - 1 );
+ }
+
+! PtModalUnblock( modal_ctrl, (void *) button );
+
+ return Pt_TRUE;
+ }
+
+ static int
+! gui_ph_dialog_text_enter( PtWidget_t *widget, void *data, PtCallbackInfo_t *info )
+ {
+! if( info->reason_subtype == Pt_EDIT_ACTIVATE )
+! gui_ph_dialog_close( 1, data );
+ return Pt_CONTINUE;
+ }
+
+ static int
+! gui_ph_dialog_esc( PtWidget_t *widget, void *data, PtCallbackInfo_t *info )
+ {
+ PhKeyEvent_t *key;
+
+! key = PhGetData( info->event );
+! if( ( key->key_flags & Pk_KF_Cap_Valid ) && ( key->key_cap == Pk_Escape ) )
+ {
+! gui_ph_dialog_close( 0, data );
+ return Pt_CONSUME;
+ }
+ return Pt_PROCESS;
+--- 1441,1495 ----
+ NULL,
+ NULL,
+ &file,
+! flags);
+
+! vim_free(default_path);
+
+! if (file.ret == Pt_FSDIALOG_BTN1)
+ return vim_strsave(file.path);
+ }
+ return NULL;
+ }
+ #endif
+
+! #if defined(FEAT_GUI_DIALOG) || defined(PROTO)
+ static PtWidget_t *gui_ph_dialog_text = NULL;
+
+ static int
+! gui_ph_dialog_close(int button, void *data)
+ {
+ PtModalCtrl_t *modal_ctrl = data;
+ char_u *dialog_text, *vim_text;
+
+! if (gui_ph_dialog_text != NULL)
+ {
+! PtGetResource(gui_ph_dialog_text, Pt_ARG_TEXT_STRING, &dialog_text, 0);
+! PtGetResource(gui_ph_dialog_text, Pt_ARG_POINTER, &vim_text, 0);
+! STRNCPY(vim_text, dialog_text, IOSIZE - 1);
+ }
+
+! PtModalUnblock(modal_ctrl, (void *) button);
+
+ return Pt_TRUE;
+ }
+
+ static int
+! gui_ph_dialog_text_enter(PtWidget_t *widget, void *data, PtCallbackInfo_t *info)
+ {
+! if (info->reason_subtype == Pt_EDIT_ACTIVATE)
+! gui_ph_dialog_close(1, data);
+ return Pt_CONTINUE;
+ }
+
+ static int
+! gui_ph_dialog_esc(PtWidget_t *widget, void *data, PtCallbackInfo_t *info)
+ {
+ PhKeyEvent_t *key;
+
+! key = PhGetData(info->event);
+! if ((key->key_flags & Pk_KF_Cap_Valid) && (key->key_cap == Pk_Escape))
+ {
+! gui_ph_dialog_close(0, data);
+ return Pt_CONSUME;
+ }
+ return Pt_PROCESS;
+***************
+*** 1518,1557 ****
+
+ button_count = len = i = 0;
+
+! if( buttons == NULL || *buttons == NUL )
+ return -1;
+
+ /* There is one less separator than buttons, so bump up the button count */
+ button_count = 1;
+
+ /* Count string length and number of seperators */
+! for( str = buttons; *str; str++ )
+ {
+ len++;
+! if( *str == DLG_BUTTON_SEP )
+ button_count++;
+ }
+
+! if ( title == NULL )
+ title = "Vim";
+
+! buttons_copy = alloc( len + 1 );
+! button_array = (char_u **) alloc( button_count * sizeof( char_u * ) );
+! if( buttons_copy != NULL && button_array != NULL )
+ {
+! STRCPY( buttons_copy, buttons );
+
+ /*
+ * Convert DLG_BUTTON_SEP into NUL's and fill in
+ * button_array with the pointer to each NUL terminated string
+ */
+ str = buttons_copy;
+! for( i = 0; i < button_count; i++ )
+ {
+ button_array[ i ] = str;
+! for( ; *str; str++ )
+ {
+! if( *str == DLG_BUTTON_SEP )
+ {
+ *str++ = NUL;
+ break;
+--- 1518,1557 ----
+
+ button_count = len = i = 0;
+
+! if (buttons == NULL || *buttons == NUL)
+ return -1;
+
+ /* There is one less separator than buttons, so bump up the button count */
+ button_count = 1;
+
+ /* Count string length and number of seperators */
+! for (str = buttons; *str; str++)
+ {
+ len++;
+! if (*str == DLG_BUTTON_SEP)
+ button_count++;
+ }
+
+! if (title == NULL)
+ title = "Vim";
+
+! buttons_copy = alloc(len + 1);
+! button_array = (char_u **) alloc(button_count * sizeof(char_u *));
+! if (buttons_copy != NULL && button_array != NULL)
+ {
+! STRCPY(buttons_copy, buttons);
+
+ /*
+ * Convert DLG_BUTTON_SEP into NUL's and fill in
+ * button_array with the pointer to each NUL terminated string
+ */
+ str = buttons_copy;
+! for (i = 0; i < button_count; i++)
+ {
+ button_array[ i ] = str;
+! for (; *str; str++)
+ {
+! if (*str == DLG_BUTTON_SEP)
+ {
+ *str++ = NUL;
+ break;
+***************
+*** 1565,1571 ****
+ NULL,
+ message, NULL,
+ button_count, (const char **) button_array, NULL,
+! default_button, 0, Pt_MODAL );
+ #else
+ /* Writing the dialog ourselves lets us add extra features, like
+ * trapping the escape key and returning 0 to vim */
+--- 1565,1571 ----
+ NULL,
+ message, NULL,
+ button_count, (const char **) button_array, NULL,
+! default_button, 0, Pt_MODAL);
+ #else
+ /* Writing the dialog ourselves lets us add extra features, like
+ * trapping the escape key and returning 0 to vim */
+***************
+*** 1576,1607 ****
+ PtModalCtrl_t modal_ctrl;
+ PtDialogInfo_t di;
+
+! memset( &di, 0, sizeof( di ) );
+! memset( &modal_ctrl, 0, sizeof( modal_ctrl ) );
+
+ n = 0;
+! PtSetArg( &args[n++], Pt_ARG_GROUP_ROWS_COLS, 0, 0 );
+! PtSetArg( &args[n++], Pt_ARG_WIDTH, 350, 0 );
+! PtSetArg( &args[n++], Pt_ARG_GROUP_ORIENTATION,
+! Pt_GROUP_VERTICAL, 0 );
+! PtSetArg( &args[n++], Pt_ARG_GROUP_FLAGS,
+! Pt_TRUE, Pt_GROUP_NO_KEYS | Pt_GROUP_STRETCH_HORIZONTAL );
+! PtSetArg( &args[n++], Pt_ARG_CONTAINER_FLAGS, Pt_FALSE, Pt_TRUE );
+! pane = PtCreateWidget( PtGroup, NULL, n, args );
+
+ n = 0;
+! PtSetArg( &args[n++], Pt_ARG_TEXT_STRING, message, 0 );
+! PtCreateWidget( PtLabel, pane, n, args );
+
+! if( textfield != NULL )
+ {
+ n = 0;
+! PtSetArg( &args[n++], Pt_ARG_MAX_LENGTH, IOSIZE - 1, 0 );
+! PtSetArg( &args[n++], Pt_ARG_TEXT_STRING, textfield, 0 );
+! PtSetArg( &args[n++], Pt_ARG_POINTER, textfield, 0 );
+! gui_ph_dialog_text = PtCreateWidget( PtText, pane, n, args );
+! PtAddCallback( gui_ph_dialog_text, Pt_CB_ACTIVATE,
+! gui_ph_dialog_text_enter, &modal_ctrl );
+ }
+
+ di.parent = gui.vimWindow;
+--- 1576,1607 ----
+ PtModalCtrl_t modal_ctrl;
+ PtDialogInfo_t di;
+
+! memset(&di, 0, sizeof(di));
+! memset(&modal_ctrl, 0, sizeof(modal_ctrl));
+
+ n = 0;
+! PtSetArg(&args[n++], Pt_ARG_GROUP_ROWS_COLS, 0, 0);
+! PtSetArg(&args[n++], Pt_ARG_WIDTH, 350, 0);
+! PtSetArg(&args[n++], Pt_ARG_GROUP_ORIENTATION,
+! Pt_GROUP_VERTICAL, 0);
+! PtSetArg(&args[n++], Pt_ARG_GROUP_FLAGS,
+! Pt_TRUE, Pt_GROUP_NO_KEYS | Pt_GROUP_STRETCH_HORIZONTAL);
+! PtSetArg(&args[n++], Pt_ARG_CONTAINER_FLAGS, Pt_FALSE, Pt_TRUE);
+! pane = PtCreateWidget(PtGroup, NULL, n, args);
+
+ n = 0;
+! PtSetArg(&args[n++], Pt_ARG_TEXT_STRING, message, 0);
+! PtCreateWidget(PtLabel, pane, n, args);
+
+! if (textfield != NULL)
+ {
+ n = 0;
+! PtSetArg(&args[n++], Pt_ARG_MAX_LENGTH, IOSIZE - 1, 0);
+! PtSetArg(&args[n++], Pt_ARG_TEXT_STRING, textfield, 0);
+! PtSetArg(&args[n++], Pt_ARG_POINTER, textfield, 0);
+! gui_ph_dialog_text = PtCreateWidget(PtText, pane, n, args);
+! PtAddCallback(gui_ph_dialog_text, Pt_CB_ACTIVATE,
+! gui_ph_dialog_text_enter, &modal_ctrl);
+ }
+
+ di.parent = gui.vimWindow;
+***************
+*** 1616,1641 ****
+ di.callback = gui_ph_dialog_close;
+ di.data = &modal_ctrl;
+
+! dialog = PtCreateDialog( &di );
+! PtAddFilterCallback( dialog, Ph_EV_KEY,
+! gui_ph_dialog_esc, &modal_ctrl );
+
+! if( gui_ph_dialog_text != NULL )
+! PtGiveFocus( gui_ph_dialog_text, NULL );
+
+ /* Open dialog, block the vim window and wait for the dialog to close */
+! PtRealizeWidget( dialog );
+! PtMakeModal( dialog, Ph_CURSOR_NOINPUT, Ph_CURSOR_DEFAULT_COLOR );
+! dialog_result = (int) PtModalBlock( &modal_ctrl, 0 );
+
+! PtDestroyWidget( dialog );
+ gui_ph_dialog_text = NULL;
+ }
+ #endif
+ }
+
+! vim_free( button_array );
+! vim_free( buttons_copy );
+
+ return dialog_result;
+ }
+--- 1616,1641 ----
+ di.callback = gui_ph_dialog_close;
+ di.data = &modal_ctrl;
+
+! dialog = PtCreateDialog(&di);
+! PtAddFilterCallback(dialog, Ph_EV_KEY,
+! gui_ph_dialog_esc, &modal_ctrl);
+
+! if (gui_ph_dialog_text != NULL)
+! PtGiveFocus(gui_ph_dialog_text, NULL);
+
+ /* Open dialog, block the vim window and wait for the dialog to close */
+! PtRealizeWidget(dialog);
+! PtMakeModal(dialog, Ph_CURSOR_NOINPUT, Ph_CURSOR_DEFAULT_COLOR);
+! dialog_result = (int) PtModalBlock(&modal_ctrl, 0);
+
+! PtDestroyWidget(dialog);
+ gui_ph_dialog_text = NULL;
+ }
+ #endif
+ }
+
+! vim_free(button_array);
+! vim_free(buttons_copy);
+
+ return dialog_result;
+ }
+***************
+*** 1648,1654 ****
+ {
+ PhPoint_t *pos;
+
+! pos = PtWidgetPos( gui.vimWindow, NULL );
+
+ *x = pos->x;
+ *y = pos->y;
+--- 1648,1654 ----
+ {
+ PhPoint_t *pos;
+
+! pos = PtWidgetPos(gui.vimWindow, NULL);
+
+ *x = pos->x;
+ *y = pos->y;
+***************
+*** 1661,1667 ****
+ {
+ PhPoint_t pos = { x, y };
+
+! PtSetResource( gui.vimWindow, Pt_ARG_POS, &pos, 0 );
+ }
+
+ void
+--- 1661,1667 ----
+ {
+ PhPoint_t pos = { x, y };
+
+! PtSetResource(gui.vimWindow, Pt_ARG_POS, &pos, 0);
+ }
+
+ void
+***************
+*** 1677,1686 ****
+ window_size.h += pg_margin_top + pg_margin_bottom;
+ #endif
+
+! PtSetResource( gui.vimWindow, Pt_ARG_MINIMUM_DIM, &min_size, 0 );
+! PtSetResource( gui.vimWindow, Pt_ARG_DIM, &window_size, 0 );
+
+! if( ! PtWidgetIsRealized( gui.vimWindow ) )
+ gui_ph_resize_container();
+ }
+
+--- 1677,1686 ----
+ window_size.h += pg_margin_top + pg_margin_bottom;
+ #endif
+
+! PtSetResource(gui.vimWindow, Pt_ARG_MINIMUM_DIM, &min_size, 0);
+! PtSetResource(gui.vimWindow, Pt_ARG_DIM, &window_size, 0);
+
+! if (! PtWidgetIsRealized(gui.vimWindow))
+ gui_ph_resize_container();
+ }
+
+***************
+*** 1693,1700 ****
+ {
+ PhRect_t console;
+
+! PhWindowQueryVisible( Ph_QUERY_WORKSPACE, 0,
+! PhInputGroup( NULL ), &console );
+
+ *screen_w = console.lr.x - console.ul.x + 1;
+ *screen_h = console.lr.y - console.ul.y + 1;
+--- 1693,1700 ----
+ {
+ PhRect_t console;
+
+! PhWindowQueryVisible(Ph_QUERY_WORKSPACE, 0,
+! PhInputGroup(NULL), &console);
+
+ *screen_w = console.lr.x - console.ul.x + 1;
+ *screen_h = console.lr.y - console.ul.y + 1;
+***************
+*** 1705,1715 ****
+ {
+ PhWindowEvent_t event;
+
+! memset( &event, 0, sizeof (event) );
+ event.event_f = Ph_WM_HIDE;
+ event.event_state = Ph_WM_EVSTATE_HIDE;
+! event.rid = PtWidgetRid( gui.vimWindow );
+! PtForwardWindowEvent( &event );
+ }
+
+ #if defined(FEAT_EVAL) || defined(PROTO)
+--- 1705,1715 ----
+ {
+ PhWindowEvent_t event;
+
+! memset(&event, 0, sizeof (event));
+ event.event_f = Ph_WM_HIDE;
+ event.event_state = Ph_WM_EVSTATE_HIDE;
+! event.rid = PtWidgetRid(gui.vimWindow);
+! PtForwardWindowEvent(&event);
+ }
+
+ #if defined(FEAT_EVAL) || defined(PROTO)
+***************
+*** 1721,1731 ****
+ {
+ PhWindowEvent_t event;
+
+! memset( &event, 0, sizeof (event) );
+ event.event_f = Ph_WM_TOFRONT;
+ event.event_state = Ph_WM_EVSTATE_FFRONT;
+! event.rid = PtWidgetRid( gui.vimWindow );
+! PtForwardWindowEvent( &event );
+ }
+ #endif
+
+--- 1721,1731 ----
+ {
+ PhWindowEvent_t event;
+
+! memset(&event, 0, sizeof (event));
+ event.event_f = Ph_WM_TOFRONT;
+ event.event_state = Ph_WM_EVSTATE_FFRONT;
+! event.rid = PtWidgetRid(gui.vimWindow);
+! PtForwardWindowEvent(&event);
+ }
+ #endif
+
+***************
+*** 1733,1741 ****
+ gui_mch_settitle(char_u *title, char_u *icon)
+ {
+ #ifdef USE_PANEL_GROUP
+! gui_ph_pg_set_buffer_num( curwin->w_buffer->b_fnum );
+ #endif
+! PtSetResource( gui.vimWindow, Pt_ARG_WINDOW_TITLE, title, 0 );
+ /* Not sure what to do with the icon text, set balloon text somehow? */
+ }
+
+--- 1733,1741 ----
+ gui_mch_settitle(char_u *title, char_u *icon)
+ {
+ #ifdef USE_PANEL_GROUP
+! gui_ph_pg_set_buffer_num(curwin->w_buffer->b_fnum);
+ #endif
+! PtSetResource(gui.vimWindow, Pt_ARG_WINDOW_TITLE, title, 0);
+ /* Not sure what to do with the icon text, set balloon text somehow? */
+ }
+
+***************
+*** 1748,1757 ****
+ int n = 0;
+ PtArg_t args[3];
+
+! PtSetArg( &args[ n++ ], Pt_ARG_MAXIMUM, max, 0 );
+! PtSetArg( &args[ n++ ], Pt_ARG_SLIDER_SIZE, size, 0 );
+! PtSetArg( &args[ n++ ], Pt_ARG_GAUGE_VALUE, val, 0 );
+! PtSetResources( sb->id, n, args );
+ }
+
+ void
+--- 1748,1757 ----
+ int n = 0;
+ PtArg_t args[3];
+
+! PtSetArg(&args[ n++ ], Pt_ARG_MAXIMUM, max, 0);
+! PtSetArg(&args[ n++ ], Pt_ARG_SLIDER_SIZE, size, 0);
+! PtSetArg(&args[ n++ ], Pt_ARG_GAUGE_VALUE, val, 0);
+! PtSetResources(sb->id, n, args);
+ }
+
+ void
+***************
+*** 1759,1765 ****
+ {
+ PhArea_t area = {{ x, y }, { w, h }};
+
+! PtSetResource( sb->id, Pt_ARG_AREA, &area, 0 );
+ }
+
+ void
+--- 1759,1765 ----
+ {
+ PhArea_t area = {{ x, y }, { w, h }};
+
+! PtSetResource(sb->id, Pt_ARG_AREA, &area, 0);
+ }
+
+ void
+***************
+*** 1775,1786 ****
+ *
+ * Also, don't let the scrollbar get focus
+ */
+! PtSetArg( &args[ n++ ], Pt_ARG_FLAGS, Pt_DELAY_REALIZE,
+! Pt_DELAY_REALIZE | Pt_GETS_FOCUS );
+! PtSetArg( &args[ n++ ], Pt_ARG_SCROLLBAR_FLAGS, Pt_SCROLLBAR_SHOW_ARROWS, 0);
+ #if 0
+ /* Don't need this anchoring for the scrollbars */
+! if( orient == SBAR_HORIZ )
+ {
+ anchor_flags = Pt_BOTTOM_ANCHORED_BOTTOM |
+ Pt_LEFT_ANCHORED_LEFT | Pt_RIGHT_ANCHORED_RIGHT;
+--- 1775,1786 ----
+ *
+ * Also, don't let the scrollbar get focus
+ */
+! PtSetArg(&args[ n++ ], Pt_ARG_FLAGS, Pt_DELAY_REALIZE,
+! Pt_DELAY_REALIZE | Pt_GETS_FOCUS);
+! PtSetArg(&args[ n++ ], Pt_ARG_SCROLLBAR_FLAGS, Pt_SCROLLBAR_SHOW_ARROWS, 0);
+ #if 0
+ /* Don't need this anchoring for the scrollbars */
+! if (orient == SBAR_HORIZ)
+ {
+ anchor_flags = Pt_BOTTOM_ANCHORED_BOTTOM |
+ Pt_LEFT_ANCHORED_LEFT | Pt_RIGHT_ANCHORED_RIGHT;
+***************
+*** 1788,1827 ****
+ else
+ {
+ anchor_flags = Pt_BOTTOM_ANCHORED_BOTTOM | Pt_TOP_ANCHORED_TOP;
+! if( sb->wp != NULL )
+ {
+! if( sb == &sb->wp->w_scrollbars[ SBAR_LEFT ] )
+ anchor_flags |= Pt_LEFT_ANCHORED_LEFT;
+ else
+ anchor_flags |= Pt_RIGHT_ANCHORED_RIGHT;
+ }
+ }
+! PtSetArg( &args[ n++ ], Pt_ARG_ANCHOR_FLAGS, anchor_flags, Pt_IS_ANCHORED );
+ #endif
+! PtSetArg( &args[ n++ ], Pt_ARG_ORIENTATION,
+! (orient == SBAR_HORIZ) ? Pt_HORIZONTAL : Pt_VERTICAL, 0 );
+ #ifdef USE_PANEL_GROUP
+! sb->id = PtCreateWidget( PtScrollbar, gui.vimPanelGroup, n, args );
+ #else
+! sb->id = PtCreateWidget( PtScrollbar, gui.vimContainer, n, args );
+ #endif
+
+! PtAddCallback( sb->id, Pt_CB_SCROLLBAR_MOVE, gui_ph_handle_scrollbar, sb );
+ }
+
+ void
+ gui_mch_enable_scrollbar(scrollbar_T *sb, int flag)
+ {
+! if( flag != 0 )
+! PtRealizeWidget( sb->id );
+ else
+! PtUnrealizeWidget( sb->id );
+ }
+
+ void
+ gui_mch_destroy_scrollbar(scrollbar_T *sb)
+ {
+! PtDestroyWidget( sb->id );
+ sb->id = NULL;
+ }
+
+--- 1788,1827 ----
+ else
+ {
+ anchor_flags = Pt_BOTTOM_ANCHORED_BOTTOM | Pt_TOP_ANCHORED_TOP;
+! if (sb->wp != NULL)
+ {
+! if (sb == &sb->wp->w_scrollbars[ SBAR_LEFT ])
+ anchor_flags |= Pt_LEFT_ANCHORED_LEFT;
+ else
+ anchor_flags |= Pt_RIGHT_ANCHORED_RIGHT;
+ }
+ }
+! PtSetArg(&args[ n++ ], Pt_ARG_ANCHOR_FLAGS, anchor_flags, Pt_IS_ANCHORED);
+ #endif
+! PtSetArg(&args[ n++ ], Pt_ARG_ORIENTATION,
+! (orient == SBAR_HORIZ) ? Pt_HORIZONTAL : Pt_VERTICAL, 0);
+ #ifdef USE_PANEL_GROUP
+! sb->id = PtCreateWidget(PtScrollbar, gui.vimPanelGroup, n, args);
+ #else
+! sb->id = PtCreateWidget(PtScrollbar, gui.vimContainer, n, args);
+ #endif
+
+! PtAddCallback(sb->id, Pt_CB_SCROLLBAR_MOVE, gui_ph_handle_scrollbar, sb);
+ }
+
+ void
+ gui_mch_enable_scrollbar(scrollbar_T *sb, int flag)
+ {
+! if (flag != 0)
+! PtRealizeWidget(sb->id);
+ else
+! PtUnrealizeWidget(sb->id);
+ }
+
+ void
+ gui_mch_destroy_scrollbar(scrollbar_T *sb)
+ {
+! PtDestroyWidget(sb->id);
+ sb->id = NULL;
+ }
+
+***************
+*** 1866,1873 ****
+ return;
+
+ if (shape == MSHAPE_HIDE || gui.pointer_hidden)
+! PtSetResource( gui.vimTextArea, Pt_ARG_CURSOR_TYPE, Ph_CURSOR_NONE,
+! 0 );
+ else
+ {
+ if (shape >= MSHAPE_NUMBERED)
+--- 1866,1873 ----
+ return;
+
+ if (shape == MSHAPE_HIDE || gui.pointer_hidden)
+! PtSetResource(gui.vimTextArea, Pt_ARG_CURSOR_TYPE, Ph_CURSOR_NONE,
+! 0);
+ else
+ {
+ if (shape >= MSHAPE_NUMBERED)
+***************
+*** 1875,1881 ****
+ else
+ id = mshape_ids[shape];
+
+! PtSetResource( gui.vimTextArea, Pt_ARG_CURSOR_TYPE, id, 0 );
+ }
+ if (shape != MSHAPE_HIDE)
+ last_shape = shape;
+--- 1875,1881 ----
+ else
+ id = mshape_ids[shape];
+
+! PtSetResource(gui.vimTextArea, Pt_ARG_CURSOR_TYPE, id, 0);
+ }
+ if (shape != MSHAPE_HIDE)
+ last_shape = shape;
+***************
+*** 1885,1903 ****
+ void
+ gui_mch_mousehide(int hide)
+ {
+! if( gui.pointer_hidden != hide )
+ {
+ gui.pointer_hidden = hide;
+ #ifdef FEAT_MOUSESHAPE
+! if( hide )
+! PtSetResource( gui.vimTextArea, Pt_ARG_CURSOR_TYPE,
+! Ph_CURSOR_NONE, 0 );
+ else
+! mch_set_mouse_shape( last_shape );
+ #else
+! PtSetResource( gui.vimTextArea, Pt_ARG_CURSOR_TYPE,
+! ( hide == MOUSE_SHOW ) ? GUI_PH_MOUSE_TYPE : Ph_CURSOR_NONE,
+! 0 );
+ #endif
+ }
+ }
+--- 1885,1903 ----
+ void
+ gui_mch_mousehide(int hide)
+ {
+! if (gui.pointer_hidden != hide)
+ {
+ gui.pointer_hidden = hide;
+ #ifdef FEAT_MOUSESHAPE
+! if (hide)
+! PtSetResource(gui.vimTextArea, Pt_ARG_CURSOR_TYPE,
+! Ph_CURSOR_NONE, 0);
+ else
+! mch_set_mouse_shape(last_shape);
+ #else
+! PtSetResource(gui.vimTextArea, Pt_ARG_CURSOR_TYPE,
+! (hide == MOUSE_SHOW) ? GUI_PH_MOUSE_TYPE : Ph_CURSOR_NONE,
+! 0);
+ #endif
+ }
+ }
+***************
+*** 1910,1917 ****
+
+ /* FIXME: does this return the correct position,
+ * with respect to the border? */
+! PhQueryCursor( PhInputGroup( NULL ), &info );
+! PtGetAbsPosition( gui.vimTextArea , &ix, &iy );
+
+ *x = info.pos.x - ix;
+ *y = info.pos.y - iy;
+--- 1910,1917 ----
+
+ /* FIXME: does this return the correct position,
+ * with respect to the border? */
+! PhQueryCursor(PhInputGroup(NULL), &info);
+! PtGetAbsPosition(gui.vimTextArea , &ix, &iy);
+
+ *x = info.pos.x - ix;
+ *y = info.pos.y - iy;
+***************
+*** 1922,1930 ****
+ {
+ short abs_x, abs_y;
+
+! PtGetAbsPosition( gui.vimTextArea, &abs_x, &abs_y );
+ /* Add the border offset? */
+! PhMoveCursorAbs( PhInputGroup( NULL ), abs_x + x, abs_y + y );
+ }
+
+ /****************************************************************************/
+--- 1922,1930 ----
+ {
+ short abs_x, abs_y;
+
+! PtGetAbsPosition(gui.vimTextArea, &abs_x, &abs_y);
+ /* Add the border offset? */
+! PhMoveCursorAbs(PhInputGroup(NULL), abs_x + x, abs_y + y);
+ }
+
+ /****************************************************************************/
+***************
+*** 1952,1974 ****
+ color_diff = gui_get_lightness(gui_ph_mouse_color)
+ - gui_get_lightness(gui.back_pixel);
+
+! if( abs( color_diff ) < 64 )
+ {
+ short r, g, b;
+ /* not a great algorithm... */
+! r = PgRedValue( gui_ph_mouse_color ) ^ 255;
+! g = PgGreenValue( gui_ph_mouse_color ) ^ 255;
+! b = PgBlueValue( gui_ph_mouse_color ) ^ 255;
+
+ #ifndef FEAT_MOUSESHAPE
+! gui_ph_mouse_color = PgRGB( r, g, b );
+! PtSetResource( gui.vimTextArea, Pt_ARG_CURSOR_COLOR,
+! gui_ph_mouse_color, 0 );
+ #endif
+ }
+ #endif
+
+! PtSetResource( gui.vimTextArea, Pt_ARG_FILL_COLOR, gui.back_pixel, 0 );
+ }
+
+ static int
+--- 1952,1974 ----
+ color_diff = gui_get_lightness(gui_ph_mouse_color)
+ - gui_get_lightness(gui.back_pixel);
+
+! if (abs(color_diff) < 64)
+ {
+ short r, g, b;
+ /* not a great algorithm... */
+! r = PgRedValue(gui_ph_mouse_color) ^ 255;
+! g = PgGreenValue(gui_ph_mouse_color) ^ 255;
+! b = PgBlueValue(gui_ph_mouse_color) ^ 255;
+
+ #ifndef FEAT_MOUSESHAPE
+! gui_ph_mouse_color = PgRGB(r, g, b);
+! PtSetResource(gui.vimTextArea, Pt_ARG_CURSOR_COLOR,
+! gui_ph_mouse_color, 0);
+ #endif
+ }
+ #endif
+
+! PtSetResource(gui.vimTextArea, Pt_ARG_FILL_COLOR, gui.back_pixel, 0);
+ }
+
+ static int
+***************
+*** 2058,2076 ****
+ };
+
+ /* is name #rrggbb format? */
+! if( name[0] == '#' && STRLEN( name ) == 7 )
+ {
+! r = hex_digit( name[1] ) * 16 + hex_digit( name[2] );
+! g = hex_digit( name[3] ) * 16 + hex_digit( name[4] );
+! b = hex_digit( name[5] ) * 16 + hex_digit( name[6] );
+! if( r < 0 || g < 0 || b < 0 )
+ return INVALCOLOR;
+ return RGB(r, g, b);
+ }
+
+! for( i = 0; i < ARRAY_LENGTH( table ); i++ )
+ {
+! if( STRICMP( name, table[i].name ) == 0 )
+ return table[i].colour;
+ }
+
+--- 2058,2076 ----
+ };
+
+ /* is name #rrggbb format? */
+! if (name[0] == '#' && STRLEN(name) == 7)
+ {
+! r = hex_digit(name[1]) * 16 + hex_digit(name[2]);
+! g = hex_digit(name[3]) * 16 + hex_digit(name[4]);
+! b = hex_digit(name[5]) * 16 + hex_digit(name[6]);
+! if (r < 0 || g < 0 || b < 0)
+ return INVALCOLOR;
+ return RGB(r, g, b);
+ }
+
+! for (i = 0; i < ARRAY_LENGTH(table); i++)
+ {
+! if (STRICMP(name, table[i].name) == 0)
+ return table[i].colour;
+ }
+
+***************
+*** 2129,2141 ****
+ void
+ gui_mch_set_fg_color(guicolor_T color)
+ {
+! PgSetTextColor( color );
+ }
+
+ void
+ gui_mch_set_bg_color(guicolor_T color)
+ {
+! PgSetFillColor( color );
+ }
+
+ void
+--- 2129,2141 ----
+ void
+ gui_mch_set_fg_color(guicolor_T color)
+ {
+! PgSetTextColor(color);
+ }
+
+ void
+ gui_mch_set_bg_color(guicolor_T color)
+ {
+! PgSetFillColor(color);
+ }
+
+ void
+***************
+*** 2148,2168 ****
+ {
+ PhRect_t rect;
+
+! rect.ul.x = FILL_X( col );
+! rect.ul.y = FILL_Y( row );
+
+ /* FIXME: This has an off by one pixel problem */
+ rect.lr.x = rect.ul.x + nc * gui.char_width;
+ rect.lr.y = rect.ul.y + nr * gui.char_height;
+! if( nc > 0 )
+ rect.lr.x -= 1;
+! if( nr > 0 )
+ rect.lr.y -= 1;
+
+ DRAW_START;
+! PgSetDrawMode( Pg_DrawModeDSTINVERT );
+! PgDrawRect( &rect, Pg_DRAW_FILL );
+! PgSetDrawMode( Pg_DrawModeSRCCOPY );
+ DRAW_END;
+ }
+
+--- 2148,2168 ----
+ {
+ PhRect_t rect;
+
+! rect.ul.x = FILL_X(col);
+! rect.ul.y = FILL_Y(row);
+
+ /* FIXME: This has an off by one pixel problem */
+ rect.lr.x = rect.ul.x + nc * gui.char_width;
+ rect.lr.y = rect.ul.y + nr * gui.char_height;
+! if (nc > 0)
+ rect.lr.x -= 1;
+! if (nr > 0)
+ rect.lr.y -= 1;
+
+ DRAW_START;
+! PgSetDrawMode(Pg_DrawModeDSTINVERT);
+! PgDrawRect(&rect, Pg_DRAW_FILL);
+! PgSetDrawMode(Pg_DrawModeSRCCOPY);
+ DRAW_END;
+ }
+
+***************
+*** 2170,2182 ****
+ gui_mch_clear_block(int row1, int col1, int row2, int col2)
+ {
+ PhRect_t block = {
+! { FILL_X( col1 ), FILL_Y( row1 ) },
+! { FILL_X( col2 + 1 ) - 1, FILL_Y( row2 + 1 ) - 1}
+ };
+
+ DRAW_START;
+! gui_mch_set_bg_color( gui.back_pixel );
+! PgDrawRect( &block, Pg_DRAW_FILL );
+ DRAW_END;
+ }
+
+--- 2170,2182 ----
+ gui_mch_clear_block(int row1, int col1, int row2, int col2)
+ {
+ PhRect_t block = {
+! { FILL_X(col1), FILL_Y(row1) },
+! { FILL_X(col2 + 1) - 1, FILL_Y(row2 + 1) - 1}
+ };
+
+ DRAW_START;
+! gui_mch_set_bg_color(gui.back_pixel);
+! PgDrawRect(&block, Pg_DRAW_FILL);
+ DRAW_END;
+ }
+
+***************
+*** 2189,2200 ****
+ Rows * gui.char_height + gui.border_width - 1 }
+ };
+
+! if( is_ignore_draw == TRUE )
+ return;
+
+ DRAW_START;
+! gui_mch_set_bg_color( gui.back_pixel );
+! PgDrawRect( &text_rect, Pg_DRAW_FILL );
+ DRAW_END;
+ }
+
+--- 2189,2200 ----
+ Rows * gui.char_height + gui.border_width - 1 }
+ };
+
+! if (is_ignore_draw == TRUE)
+ return;
+
+ DRAW_START;
+! gui_mch_set_bg_color(gui.back_pixel);
+! PgDrawRect(&text_rect, Pg_DRAW_FILL);
+ DRAW_END;
+ }
+
+***************
+*** 2204,2231 ****
+ PhRect_t rect;
+ PhPoint_t delta;
+
+! rect.ul.x = FILL_X( gui.scroll_region_left );
+! rect.ul.y = FILL_Y( row + num_lines );
+
+! rect.lr.x = FILL_X( gui.scroll_region_right + 1 ) - 1;
+! rect.lr.y = FILL_Y( gui.scroll_region_bot + 1) - 1;
+
+! PtWidgetOffset( gui.vimTextArea, &gui_ph_raw_offset );
+! PhTranslatePoint( &gui_ph_raw_offset, PtWidgetPos(gui.vimTextArea, NULL));
+! PhTranslateRect( &rect, &gui_ph_raw_offset );
+
+ delta.x = 0;
+ delta.y = -num_lines * gui.char_height;
+
+ PgFlush();
+
+! PhBlit( PtWidgetRid( PtFindDisjoint( gui.vimTextArea ) ), &rect, &delta );
+
+ gui_clear_block(
+ gui.scroll_region_bot - num_lines + 1,
+ gui.scroll_region_left,
+ gui.scroll_region_bot,
+! gui.scroll_region_right );
+ }
+
+ void
+--- 2204,2231 ----
+ PhRect_t rect;
+ PhPoint_t delta;
+
+! rect.ul.x = FILL_X(gui.scroll_region_left);
+! rect.ul.y = FILL_Y(row + num_lines);
+
+! rect.lr.x = FILL_X(gui.scroll_region_right + 1) - 1;
+! rect.lr.y = FILL_Y(gui.scroll_region_bot + 1) - 1;
+
+! PtWidgetOffset(gui.vimTextArea, &gui_ph_raw_offset);
+! PhTranslatePoint(&gui_ph_raw_offset, PtWidgetPos(gui.vimTextArea, NULL));
+! PhTranslateRect(&rect, &gui_ph_raw_offset);
+
+ delta.x = 0;
+ delta.y = -num_lines * gui.char_height;
+
+ PgFlush();
+
+! PhBlit(PtWidgetRid(PtFindDisjoint(gui.vimTextArea)), &rect, &delta);
+
+ gui_clear_block(
+ gui.scroll_region_bot - num_lines + 1,
+ gui.scroll_region_left,
+ gui.scroll_region_bot,
+! gui.scroll_region_right);
+ }
+
+ void
+***************
+*** 2234,2258 ****
+ PhRect_t rect;
+ PhPoint_t delta;
+
+! rect.ul.x = FILL_X( gui.scroll_region_left );
+! rect.ul.y = FILL_Y( row );
+
+! rect.lr.x = FILL_X( gui.scroll_region_right + 1 ) - 1;
+! rect.lr.y = FILL_Y( gui.scroll_region_bot - num_lines + 1 ) - 1;
+
+! PtWidgetOffset( gui.vimTextArea, &gui_ph_raw_offset );
+! PhTranslatePoint( &gui_ph_raw_offset, PtWidgetPos( gui.vimTextArea, NULL ) );
+! PhTranslateRect( &rect, &gui_ph_raw_offset );
+
+ delta.x = 0;
+ delta.y = num_lines * gui.char_height;
+
+ PgFlush();
+
+! PhBlit( PtWidgetRid( PtFindDisjoint( gui.vimTextArea ) ) , &rect, &delta );
+
+! gui_clear_block( row, gui.scroll_region_left,
+! row + num_lines - 1, gui.scroll_region_right );
+ }
+
+ void
+--- 2234,2258 ----
+ PhRect_t rect;
+ PhPoint_t delta;
+
+! rect.ul.x = FILL_X(gui.scroll_region_left);
+! rect.ul.y = FILL_Y(row);
+
+! rect.lr.x = FILL_X(gui.scroll_region_right + 1) - 1;
+! rect.lr.y = FILL_Y(gui.scroll_region_bot - num_lines + 1) - 1;
+
+! PtWidgetOffset(gui.vimTextArea, &gui_ph_raw_offset);
+! PhTranslatePoint(&gui_ph_raw_offset, PtWidgetPos(gui.vimTextArea, NULL));
+! PhTranslateRect(&rect, &gui_ph_raw_offset);
+
+ delta.x = 0;
+ delta.y = num_lines * gui.char_height;
+
+ PgFlush();
+
+! PhBlit(PtWidgetRid(PtFindDisjoint(gui.vimTextArea)) , &rect, &delta);
+
+! gui_clear_block(row, gui.scroll_region_left,
+! row + num_lines - 1, gui.scroll_region_right);
+ }
+
+ void
+***************
+*** 2261,2297 ****
+ static char *utf8_buffer = NULL;
+ static int utf8_len = 0;
+
+! PhPoint_t pos = { TEXT_X( col ), TEXT_Y( row ) };
+ PhRect_t rect;
+
+! if( is_ignore_draw == TRUE )
+ return;
+
+ DRAW_START;
+
+! if( !( flags & DRAW_TRANSP ) )
+ {
+ PgDrawIRect(
+! FILL_X( col ), FILL_Y( row ),
+! FILL_X( col + len ) - 1, FILL_Y( row + 1 ) - 1,
+! Pg_DRAW_FILL );
+ }
+
+! if( flags & DRAW_UNDERL )
+! PgSetUnderline( gui.norm_pixel, Pg_TRANSPARENT, 0 );
+
+! if( charset_translate != NULL
+ #ifdef FEAT_MBYTE
+ && enc_utf8 == 0
+ #endif
+! )
+ {
+ int src_taken, dst_made;
+
+ /* Use a static buffer to avoid large amounts of de/allocations */
+! if( utf8_len < len )
+ {
+! utf8_buffer = realloc( utf8_buffer, len * MB_LEN_MAX );
+ utf8_len = len;
+ }
+
+--- 2261,2297 ----
+ static char *utf8_buffer = NULL;
+ static int utf8_len = 0;
+
+! PhPoint_t pos = { TEXT_X(col), TEXT_Y(row) };
+ PhRect_t rect;
+
+! if (is_ignore_draw == TRUE)
+ return;
+
+ DRAW_START;
+
+! if (!(flags & DRAW_TRANSP))
+ {
+ PgDrawIRect(
+! FILL_X(col), FILL_Y(row),
+! FILL_X(col + len) - 1, FILL_Y(row + 1) - 1,
+! Pg_DRAW_FILL);
+ }
+
+! if (flags & DRAW_UNDERL)
+! PgSetUnderline(gui.norm_pixel, Pg_TRANSPARENT, 0);
+
+! if (charset_translate != NULL
+ #ifdef FEAT_MBYTE
+ && enc_utf8 == 0
+ #endif
+! )
+ {
+ int src_taken, dst_made;
+
+ /* Use a static buffer to avoid large amounts of de/allocations */
+! if (utf8_len < len)
+ {
+! utf8_buffer = realloc(utf8_buffer, len * MB_LEN_MAX);
+ utf8_len = len;
+ }
+
+***************
+*** 2302,2337 ****
+ &src_taken,
+ utf8_buffer,
+ utf8_len,
+! &dst_made );
+ s = utf8_buffer;
+ len = dst_made;
+ }
+
+! PgDrawText( s, len, &pos, 0 );
+
+! if( flags & DRAW_BOLD )
+ {
+ /* FIXME: try and only calculate these values once... */
+! rect.ul.x = FILL_X( col ) + 1;
+! rect.ul.y = FILL_Y( row );
+! rect.lr.x = FILL_X( col + len ) - 1;
+! rect.lr.y = FILL_Y( row + 1) - 1;
+! /* PgSetUserClip( NULL ) causes the scrollbar to not redraw... */
+ #if 0
+ pos.x++;
+
+! PgSetUserClip( &rect );
+! PgDrawText( s, len, &pos, 0 );
+! PgSetUserClip( NULL );
+ #else
+! rect.lr.y -= ( p_linespace + 1 ) / 2;
+ /* XXX: DrawTextArea doesn't work with phditto */
+! PgDrawTextArea( s, len, &rect, Pg_TEXT_BOTTOM );
+ #endif
+ }
+
+! if( flags & DRAW_UNDERL )
+! PgSetUnderline( Pg_TRANSPARENT, Pg_TRANSPARENT, 0 );
+
+ DRAW_END;
+ }
+--- 2302,2337 ----
+ &src_taken,
+ utf8_buffer,
+ utf8_len,
+! &dst_made);
+ s = utf8_buffer;
+ len = dst_made;
+ }
+
+! PgDrawText(s, len, &pos, 0);
+
+! if (flags & DRAW_BOLD)
+ {
+ /* FIXME: try and only calculate these values once... */
+! rect.ul.x = FILL_X(col) + 1;
+! rect.ul.y = FILL_Y(row);
+! rect.lr.x = FILL_X(col + len) - 1;
+! rect.lr.y = FILL_Y(row + 1) - 1;
+! /* PgSetUserClip(NULL) causes the scrollbar to not redraw... */
+ #if 0
+ pos.x++;
+
+! PgSetUserClip(&rect);
+! PgDrawText(s, len, &pos, 0);
+! PgSetUserClip(NULL);
+ #else
+! rect.lr.y -= (p_linespace + 1) / 2;
+ /* XXX: DrawTextArea doesn't work with phditto */
+! PgDrawTextArea(s, len, &rect, Pg_TEXT_BOTTOM);
+ #endif
+ }
+
+! if (flags & DRAW_UNDERL)
+! PgSetUnderline(Pg_TRANSPARENT, Pg_TRANSPARENT, 0);
+
+ DRAW_END;
+ }
+***************
+*** 2346,2359 ****
+
+ /* FIXME: Double width characters */
+
+! r.ul.x = FILL_X( gui.col );
+! r.ul.y = FILL_Y( gui.row );
+ r.lr.x = r.ul.x + gui.char_width - 1;
+ r.lr.y = r.ul.y + gui.char_height - 1;
+
+ DRAW_START;
+! PgSetStrokeColor( color );
+! PgDrawRect( &r, Pg_DRAW_STROKE );
+ DRAW_END;
+ }
+
+--- 2346,2359 ----
+
+ /* FIXME: Double width characters */
+
+! r.ul.x = FILL_X(gui.col);
+! r.ul.y = FILL_Y(gui.row);
+ r.lr.x = r.ul.x + gui.char_width - 1;
+ r.lr.y = r.ul.y + gui.char_height - 1;
+
+ DRAW_START;
+! PgSetStrokeColor(color);
+! PgDrawRect(&r, Pg_DRAW_STROKE);
+ DRAW_END;
+ }
+
+***************
+*** 2362,2375 ****
+ {
+ PhRect_t r;
+
+! r.ul.x = FILL_X( gui.col );
+! r.ul.y = FILL_Y( gui.row ) + gui.char_height - h;
+ r.lr.x = r.ul.x + w - 1;
+ r.lr.y = r.ul.y + h - 1;
+
+ DRAW_START;
+! gui_mch_set_bg_color( color );
+! PgDrawRect( &r, Pg_DRAW_FILL );
+ DRAW_END;
+ }
+
+--- 2362,2375 ----
+ {
+ PhRect_t r;
+
+! r.ul.x = FILL_X(gui.col);
+! r.ul.y = FILL_Y(gui.row) + gui.char_height - h;
+ r.lr.x = r.ul.x + w - 1;
+ r.lr.y = r.ul.y + h - 1;
+
+ DRAW_START;
+! gui_mch_set_bg_color(color);
+! PgDrawRect(&r, Pg_DRAW_FILL);
+ DRAW_END;
+ }
+
+***************
+*** 2385,2394 ****
+ gui_mch_start_blink(void)
+ {
+ /* Only turn on the timer on if none of the times are zero */
+! if( blink_waittime && blink_ontime && blink_offtime && gui.in_focus)
+ {
+! PtSetResource( gui_ph_timer_cursor, Pt_ARG_TIMER_INITIAL,
+! blink_waittime, 0 );
+ blink_state = BLINK_ON;
+ gui_update_cursor(TRUE, FALSE);
+ }
+--- 2385,2394 ----
+ gui_mch_start_blink(void)
+ {
+ /* Only turn on the timer on if none of the times are zero */
+! if (blink_waittime && blink_ontime && blink_offtime && gui.in_focus)
+ {
+! PtSetResource(gui_ph_timer_cursor, Pt_ARG_TIMER_INITIAL,
+! blink_waittime, 0);
+ blink_state = BLINK_ON;
+ gui_update_cursor(TRUE, FALSE);
+ }
+***************
+*** 2397,2405 ****
+ void
+ gui_mch_stop_blink(void)
+ {
+! PtSetResource( gui_ph_timer_cursor, Pt_ARG_TIMER_INITIAL, 0, 0 );
+
+! if( blink_state == BLINK_OFF )
+ gui_update_cursor(TRUE, FALSE);
+
+ blink_state = BLINK_NONE;
+--- 2397,2405 ----
+ void
+ gui_mch_stop_blink(void)
+ {
+! PtSetResource(gui_ph_timer_cursor, Pt_ARG_TIMER_INITIAL, 0, 0);
+
+! if (blink_state == BLINK_OFF)
+ gui_update_cursor(TRUE, FALSE);
+
+ blink_state = BLINK_NONE;
+***************
+*** 2417,2431 ****
+ void
+ gui_mch_flash(int msec)
+ {
+! PgSetFillXORColor( Pg_BLACK, Pg_WHITE );
+! PgSetDrawMode( Pg_DRAWMODE_XOR );
+ gui_mch_clear_all();
+ gui_mch_flush();
+
+! ui_delay( (long) msec, TRUE );
+
+ gui_mch_clear_all();
+! PgSetDrawMode( Pg_DRAWMODE_OPAQUE );
+ gui_mch_flush();
+ }
+
+--- 2417,2431 ----
+ void
+ gui_mch_flash(int msec)
+ {
+! PgSetFillXORColor(Pg_BLACK, Pg_WHITE);
+! PgSetDrawMode(Pg_DRAWMODE_XOR);
+ gui_mch_clear_all();
+ gui_mch_flush();
+
+! ui_delay((long) msec, TRUE);
+
+ gui_mch_clear_all();
+! PgSetDrawMode(Pg_DRAWMODE_OPAQUE);
+ gui_mch_flush();
+ }
+
+***************
+*** 2440,2446 ****
+ {
+ PhArea_t area = {{x, y}, {w, h}};
+
+! PtSetResource( gui.vimTextArea, Pt_ARG_AREA, &area, 0 );
+ }
+
+ int
+--- 2440,2446 ----
+ {
+ PhArea_t area = {{x, y}, {w, h}};
+
+! PtSetResource(gui.vimTextArea, Pt_ARG_AREA, &area, 0);
+ }
+
+ int
+***************
+*** 2496,2514 ****
+ };
+
+ static PhImage_t *
+! gui_ph_toolbar_load_icon( char_u *iconfile )
+ {
+ static PhImage_t external_icon;
+ PhImage_t *temp_phi = NULL;
+
+! temp_phi = PxLoadImage( iconfile, NULL );
+! if( temp_phi != NULL )
+ {
+ /* The label widget will free the image/palette/etc. for us when
+ * it's destroyed */
+ temp_phi->flags |= Ph_RELEASE_IMAGE_ALL;
+! memcpy( &external_icon, temp_phi, sizeof( external_icon ) );
+! free( temp_phi );
+
+ temp_phi = &external_icon;
+ }
+--- 2496,2514 ----
+ };
+
+ static PhImage_t *
+! gui_ph_toolbar_load_icon(char_u *iconfile)
+ {
+ static PhImage_t external_icon;
+ PhImage_t *temp_phi = NULL;
+
+! temp_phi = PxLoadImage(iconfile, NULL);
+! if (temp_phi != NULL)
+ {
+ /* The label widget will free the image/palette/etc. for us when
+ * it's destroyed */
+ temp_phi->flags |= Ph_RELEASE_IMAGE_ALL;
+! memcpy(&external_icon, temp_phi, sizeof(external_icon));
+! free(temp_phi);
+
+ temp_phi = &external_icon;
+ }
+***************
+*** 2523,2551 ****
+ * PhImage_t are copied, and the original PhImage_t aren't needed anymore).
+ */
+ static PhImage_t *
+! gui_ph_toolbar_find_icon( vimmenu_T *menu )
+ {
+ char_u full_pathname[ MAXPATHL + 1 ];
+ PhImage_t *icon = NULL;
+
+! if( menu->icon_builtin == FALSE )
+ {
+! if( menu->iconfile != NULL )
+ /* TODO: use gui_find_iconfile() */
+! icon = gui_ph_toolbar_load_icon( menu->iconfile );
+
+ /* TODO: Restrict loading to just .png? Search for any format? */
+! if( ( icon == NULL ) &&
+! ( ( gui_find_bitmap( menu->name, full_pathname, "gif" ) == OK ) ||
+! ( gui_find_bitmap( menu->name, full_pathname, "png" ) == OK ) ) )
+! icon = gui_ph_toolbar_load_icon( full_pathname );
+
+! if( icon != NULL )
+ return icon;
+ }
+
+! if( menu->iconidx >= 0 &&
+! ( menu->iconidx < ARRAY_LENGTH( gui_ph_toolbar_images ) ) )
+ {
+ return gui_ph_toolbar_images[menu->iconidx];
+ }
+--- 2523,2551 ----
+ * PhImage_t are copied, and the original PhImage_t aren't needed anymore).
+ */
+ static PhImage_t *
+! gui_ph_toolbar_find_icon(vimmenu_T *menu)
+ {
+ char_u full_pathname[ MAXPATHL + 1 ];
+ PhImage_t *icon = NULL;
+
+! if (menu->icon_builtin == FALSE)
+ {
+! if (menu->iconfile != NULL)
+ /* TODO: use gui_find_iconfile() */
+! icon = gui_ph_toolbar_load_icon(menu->iconfile);
+
+ /* TODO: Restrict loading to just .png? Search for any format? */
+! if ((icon == NULL) &&
+! ((gui_find_bitmap(menu->name, full_pathname, "gif") == OK) ||
+! (gui_find_bitmap(menu->name, full_pathname, "png") == OK)))
+! icon = gui_ph_toolbar_load_icon(full_pathname);
+
+! if (icon != NULL)
+ return icon;
+ }
+
+! if (menu->iconidx >= 0 &&
+! (menu->iconidx < ARRAY_LENGTH(gui_ph_toolbar_images)))
+ {
+ return gui_ph_toolbar_images[menu->iconidx];
+ }
+***************
+*** 2554,2567 ****
+ }
+ #endif
+
+! #if defined( FEAT_MENU ) || defined( PROTO )
+ void
+ gui_mch_enable_menu(int flag)
+ {
+! if( flag != 0 )
+! PtRealizeWidget( gui.vimMenuBar );
+ else
+! PtUnrealizeWidget( gui.vimMenuBar );
+ }
+
+ void
+--- 2554,2567 ----
+ }
+ #endif
+
+! #if defined(FEAT_MENU) || defined(PROTO)
+ void
+ gui_mch_enable_menu(int flag)
+ {
+! if (flag != 0)
+! PtRealizeWidget(gui.vimMenuBar);
+ else
+! PtUnrealizeWidget(gui.vimMenuBar);
+ }
+
+ void
+***************
+*** 2572,2601 ****
+
+ /* Change the position of a menu button in the parent */
+ static void
+! gui_ph_position_menu( PtWidget_t *widget, int priority )
+ {
+ PtWidget_t *traverse;
+ vimmenu_T *menu;
+
+! traverse = PtWidgetChildBack( PtWidgetParent( widget ) );
+
+ /* Iterate through the list of widgets in traverse, until
+ * we find the position we want to insert our widget into */
+ /* TODO: traverse from front to back, possible speedup? */
+! while( traverse != NULL )
+ {
+! PtGetResource( traverse, Pt_ARG_POINTER, &menu, 0 );
+
+! if( menu != NULL &&
+ priority < menu->priority &&
+! widget != traverse )
+ {
+ /* Insert the widget before the current traverse widget */
+! PtWidgetInsert( widget, traverse, 1 );
+ return;
+ }
+
+! traverse = PtWidgetBrotherInFront( traverse );
+ }
+ }
+
+--- 2572,2601 ----
+
+ /* Change the position of a menu button in the parent */
+ static void
+! gui_ph_position_menu(PtWidget_t *widget, int priority)
+ {
+ PtWidget_t *traverse;
+ vimmenu_T *menu;
+
+! traverse = PtWidgetChildBack(PtWidgetParent(widget));
+
+ /* Iterate through the list of widgets in traverse, until
+ * we find the position we want to insert our widget into */
+ /* TODO: traverse from front to back, possible speedup? */
+! while (traverse != NULL)
+ {
+! PtGetResource(traverse, Pt_ARG_POINTER, &menu, 0);
+
+! if (menu != NULL &&
+ priority < menu->priority &&
+! widget != traverse)
+ {
+ /* Insert the widget before the current traverse widget */
+! PtWidgetInsert(widget, traverse, 1);
+ return;
+ }
+
+! traverse = PtWidgetBrotherInFront(traverse);
+ }
+ }
+
+***************
+*** 2611,2621 ****
+
+ menu->submenu_id = menu->id = NULL;
+
+! if( menu_is_menubar( menu->name ) )
+ {
+
+! accel_key = vim_strchr( menu->name, '&' );
+! if( accel_key != NULL )
+ {
+ mnemonic_str[0] = accel_key[1];
+ mnemonic_str[1] = NUL;
+--- 2611,2621 ----
+
+ menu->submenu_id = menu->id = NULL;
+
+! if (menu_is_menubar(menu->name))
+ {
+
+! accel_key = vim_strchr(menu->name, '&');
+! if (accel_key != NULL)
+ {
+ mnemonic_str[0] = accel_key[1];
+ mnemonic_str[1] = NUL;
+***************
+*** 2623,2673 ****
+
+ /* Create the menu button */
+ n = 0;
+! PtSetArg( &args[ n++ ], Pt_ARG_TEXT_STRING, menu->dname, 0 );
+! PtSetArg( &args[ n++ ], Pt_ARG_ACCEL_TEXT, menu->actext, 0 );
+! if( accel_key != NULL )
+! PtSetArg( &args[ n++ ], Pt_ARG_ACCEL_KEY, mnemonic_str, 0 );
+! PtSetArg( &args[ n++ ], Pt_ARG_POINTER, menu, 0 );
+
+! if( parent != NULL )
+! PtSetArg( &args[ n++ ], Pt_ARG_BUTTON_TYPE, Pt_MENU_RIGHT, 0 );
+
+! menu->id = PtCreateWidget( PtMenuButton,
+ (parent == NULL) ? gui.vimMenuBar : parent->submenu_id,
+! n, args );
+
+! PtAddCallback( menu->id, Pt_CB_ARM, gui_ph_handle_pulldown_menu, menu );
+
+ /* Create the actual menu */
+ n = 0;
+! if( parent != NULL )
+! PtSetArg( &args[ n++ ], Pt_ARG_MENU_FLAGS, Pt_TRUE, Pt_MENU_CHILD );
+
+! menu->submenu_id = PtCreateWidget( PtMenu, menu->id, n, args );
+
+! if( parent == NULL )
+ {
+! PtAddCallback( menu->submenu_id, Pt_CB_UNREALIZED,
+! gui_ph_handle_menu_unrealized, menu );
+
+! if( menu->mnemonic != 0 )
+ {
+! PtAddHotkeyHandler( gui.vimWindow, tolower( menu->mnemonic ),
+! Pk_KM_Alt, 0, menu, gui_ph_handle_pulldown_menu );
+ }
+ }
+
+! gui_ph_position_menu( menu->id, menu->priority );
+
+ /* Redraw menubar here instead of gui_mch_draw_menubar */
+! if( gui.menu_is_active )
+! PtRealizeWidget( menu->id );
+ }
+! else if( menu_is_popup( menu->name ) )
+ {
+! menu->submenu_id = PtCreateWidget( PtMenu, gui.vimWindow, 0, NULL );
+! PtAddCallback( menu->submenu_id, Pt_CB_UNREALIZED,
+! gui_ph_handle_menu_unrealized, menu );
+ }
+ }
+
+--- 2623,2673 ----
+
+ /* Create the menu button */
+ n = 0;
+! PtSetArg(&args[ n++ ], Pt_ARG_TEXT_STRING, menu->dname, 0);
+! PtSetArg(&args[ n++ ], Pt_ARG_ACCEL_TEXT, menu->actext, 0);
+! if (accel_key != NULL)
+! PtSetArg(&args[ n++ ], Pt_ARG_ACCEL_KEY, mnemonic_str, 0);
+! PtSetArg(&args[ n++ ], Pt_ARG_POINTER, menu, 0);
+
+! if (parent != NULL)
+! PtSetArg(&args[ n++ ], Pt_ARG_BUTTON_TYPE, Pt_MENU_RIGHT, 0);
+
+! menu->id = PtCreateWidget(PtMenuButton,
+ (parent == NULL) ? gui.vimMenuBar : parent->submenu_id,
+! n, args);
+
+! PtAddCallback(menu->id, Pt_CB_ARM, gui_ph_handle_pulldown_menu, menu);
+
+ /* Create the actual menu */
+ n = 0;
+! if (parent != NULL)
+! PtSetArg(&args[ n++ ], Pt_ARG_MENU_FLAGS, Pt_TRUE, Pt_MENU_CHILD);
+
+! menu->submenu_id = PtCreateWidget(PtMenu, menu->id, n, args);
+
+! if (parent == NULL)
+ {
+! PtAddCallback(menu->submenu_id, Pt_CB_UNREALIZED,
+! gui_ph_handle_menu_unrealized, menu);
+
+! if (menu->mnemonic != 0)
+ {
+! PtAddHotkeyHandler(gui.vimWindow, tolower(menu->mnemonic),
+! Pk_KM_Alt, 0, menu, gui_ph_handle_pulldown_menu);
+ }
+ }
+
+! gui_ph_position_menu(menu->id, menu->priority);
+
+ /* Redraw menubar here instead of gui_mch_draw_menubar */
+! if (gui.menu_is_active)
+! PtRealizeWidget(menu->id);
+ }
+! else if (menu_is_popup(menu->name))
+ {
+! menu->submenu_id = PtCreateWidget(PtMenu, gui.vimWindow, 0, NULL);
+! PtAddCallback(menu->submenu_id, Pt_CB_UNREALIZED,
+! gui_ph_handle_menu_unrealized, menu);
+ }
+ }
+
+***************
+*** 2681,2784 ****
+ PtArg_t args[13];
+
+ n = 0;
+! PtSetArg( &args[ n++ ], Pt_ARG_POINTER, menu, 0 );
+
+ #ifdef FEAT_TOOLBAR
+! if( menu_is_toolbar( parent->name ) )
+ {
+! if( menu_is_separator( menu->name ) )
+ {
+! PtSetArg( &args[ n++ ], Pt_ARG_SEP_FLAGS,
+! Pt_SEP_VERTICAL, Pt_SEP_ORIENTATION );
+! PtSetArg( &args[ n++ ], Pt_ARG_SEP_TYPE, Pt_ETCHED_IN, 0 );
+! PtSetArg( &args[ n++ ], Pt_ARG_ANCHOR_FLAGS,
+! Pt_TRUE, Pt_ANCHOR_TOP_BOTTOM );
+! PtSetArg( &args[ n++ ], Pt_ARG_WIDTH, 2, 0 );
+! menu->id = PtCreateWidget( PtSeparator, gui.vimToolBar, n, args );
+ }
+ else
+ {
+! if( strstr( (const char *) p_toolbar, "text" ) != NULL )
+ {
+! PtSetArg( &args[ n++ ], Pt_ARG_BALLOON_POSITION,
+! Pt_BALLOON_BOTTOM, 0 );
+! PtSetArg( &args[ n++ ], Pt_ARG_TEXT_STRING, menu->dname, 0 );
+! PtSetArg( &args[ n++ ], Pt_ARG_TEXT_FONT, "TextFont08", 0 );
+ }
+! if( ( strstr( (const char *) p_toolbar, "icons" ) != NULL ) &&
+! ( gui_ph_toolbar_images != NULL ) )
+ {
+! PtSetArg( &args[ n++ ], Pt_ARG_LABEL_IMAGE,
+! gui_ph_toolbar_find_icon( menu ), 0 );
+! PtSetArg( &args[ n++ ], Pt_ARG_LABEL_TYPE, Pt_TEXT_IMAGE, 0 );
+! PtSetArg( &args[ n++ ], Pt_ARG_TEXT_IMAGE_SPACING, 0, 0 );
+ }
+! if( strstr( (const char *) p_toolbar, "tooltips" ) != NULL )
+ {
+! PtSetArg( &args[ n++ ], Pt_ARG_LABEL_BALLOON,
+! gui_ph_show_tooltip, 0 );
+! PtSetArg( &args[ n++ ], Pt_ARG_LABEL_FLAGS,
+! Pt_TRUE, Pt_SHOW_BALLOON );
+ }
+! PtSetArg( &args[ n++ ], Pt_ARG_MARGIN_HEIGHT, 1, 0 );
+! PtSetArg( &args[ n++ ], Pt_ARG_MARGIN_WIDTH, 1, 0 );
+! PtSetArg( &args[ n++ ], Pt_ARG_FLAGS, Pt_FALSE,
+! Pt_HIGHLIGHTED | Pt_GETS_FOCUS );
+! PtSetArg( &args[ n++ ], Pt_ARG_FILL_COLOR, Pg_TRANSPARENT, 0 );
+! menu->id = PtCreateWidget( PtButton, gui.vimToolBar, n, args );
+
+! PtAddCallback( menu->id, Pt_CB_ACTIVATE, gui_ph_handle_menu, menu );
+ }
+ /* Update toolbar if it's open */
+! if( PtWidgetIsRealized( gui.vimToolBar ) )
+! PtRealizeWidget( menu->id );
+ }
+ else
+ #endif
+! if( menu_is_separator( menu->name ) )
+ {
+! menu->id = PtCreateWidget( PtSeparator, parent->submenu_id, n, args );
+ }
+ else
+ {
+! accel_key = vim_strchr( menu->name, '&' );
+! if( accel_key != NULL )
+ {
+ mnemonic_str[0] = accel_key[1];
+ mnemonic_str[1] = NUL;
+ }
+
+! PtSetArg( &args[ n++ ], Pt_ARG_TEXT_STRING, menu->dname, 0 );
+! if( accel_key != NULL )
+! PtSetArg( &args[ n++ ], Pt_ARG_ACCEL_KEY, mnemonic_str,
+! 0 );
+
+! PtSetArg( &args[ n++ ], Pt_ARG_ACCEL_TEXT, menu->actext, 0 );
+
+! menu->id = PtCreateWidget( PtMenuButton, parent->submenu_id, n, args );
+
+! PtAddCallback( menu->id, Pt_CB_ACTIVATE, gui_ph_handle_menu, menu );
+
+ #ifdef USE_PANEL_GROUP
+! if( gui_ph_is_buffer_item( menu, parent ) == TRUE )
+ {
+! PtAddCallback( menu->id, Pt_CB_DESTROYED,
+! gui_ph_handle_buffer_remove, menu );
+! gui_ph_pg_add_buffer( menu->dname );
+ }
+ #endif
+ }
+
+! gui_ph_position_menu( menu->id, menu->priority );
+ }
+
+ void
+ gui_mch_destroy_menu(vimmenu_T *menu)
+ {
+! if( menu->submenu_id != NULL )
+! PtDestroyWidget( menu->submenu_id );
+! if( menu->id != NULL )
+! PtDestroyWidget( menu->id );
+
+ menu->submenu_id = NULL;
+ menu->id = NULL;
+--- 2681,2784 ----
+ PtArg_t args[13];
+
+ n = 0;
+! PtSetArg(&args[ n++ ], Pt_ARG_POINTER, menu, 0);
+
+ #ifdef FEAT_TOOLBAR
+! if (menu_is_toolbar(parent->name))
+ {
+! if (menu_is_separator(menu->name))
+ {
+! PtSetArg(&args[ n++ ], Pt_ARG_SEP_FLAGS,
+! Pt_SEP_VERTICAL, Pt_SEP_ORIENTATION);
+! PtSetArg(&args[ n++ ], Pt_ARG_SEP_TYPE, Pt_ETCHED_IN, 0);
+! PtSetArg(&args[ n++ ], Pt_ARG_ANCHOR_FLAGS,
+! Pt_TRUE, Pt_ANCHOR_TOP_BOTTOM);
+! PtSetArg(&args[ n++ ], Pt_ARG_WIDTH, 2, 0);
+! menu->id = PtCreateWidget(PtSeparator, gui.vimToolBar, n, args);
+ }
+ else
+ {
+! if (strstr((const char *) p_toolbar, "text") != NULL)
+ {
+! PtSetArg(&args[ n++ ], Pt_ARG_BALLOON_POSITION,
+! Pt_BALLOON_BOTTOM, 0);
+! PtSetArg(&args[ n++ ], Pt_ARG_TEXT_STRING, menu->dname, 0);
+! PtSetArg(&args[ n++ ], Pt_ARG_TEXT_FONT, "TextFont08", 0);
+ }
+! if ((strstr((const char *) p_toolbar, "icons") != NULL) &&
+! (gui_ph_toolbar_images != NULL))
+ {
+! PtSetArg(&args[ n++ ], Pt_ARG_LABEL_IMAGE,
+! gui_ph_toolbar_find_icon(menu), 0);
+! PtSetArg(&args[ n++ ], Pt_ARG_LABEL_TYPE, Pt_TEXT_IMAGE, 0);
+! PtSetArg(&args[ n++ ], Pt_ARG_TEXT_IMAGE_SPACING, 0, 0);
+ }
+! if (strstr((const char *) p_toolbar, "tooltips") != NULL)
+ {
+! PtSetArg(&args[ n++ ], Pt_ARG_LABEL_BALLOON,
+! gui_ph_show_tooltip, 0);
+! PtSetArg(&args[ n++ ], Pt_ARG_LABEL_FLAGS,
+! Pt_TRUE, Pt_SHOW_BALLOON);
+ }
+! PtSetArg(&args[ n++ ], Pt_ARG_MARGIN_HEIGHT, 1, 0);
+! PtSetArg(&args[ n++ ], Pt_ARG_MARGIN_WIDTH, 1, 0);
+! PtSetArg(&args[ n++ ], Pt_ARG_FLAGS, Pt_FALSE,
+! Pt_HIGHLIGHTED | Pt_GETS_FOCUS);
+! PtSetArg(&args[ n++ ], Pt_ARG_FILL_COLOR, Pg_TRANSPARENT, 0);
+! menu->id = PtCreateWidget(PtButton, gui.vimToolBar, n, args);
+
+! PtAddCallback(menu->id, Pt_CB_ACTIVATE, gui_ph_handle_menu, menu);
+ }
+ /* Update toolbar if it's open */
+! if (PtWidgetIsRealized(gui.vimToolBar))
+! PtRealizeWidget(menu->id);
+ }
+ else
+ #endif
+! if (menu_is_separator(menu->name))
+ {
+! menu->id = PtCreateWidget(PtSeparator, parent->submenu_id, n, args);
+ }
+ else
+ {
+! accel_key = vim_strchr(menu->name, '&');
+! if (accel_key != NULL)
+ {
+ mnemonic_str[0] = accel_key[1];
+ mnemonic_str[1] = NUL;
+ }
+
+! PtSetArg(&args[ n++ ], Pt_ARG_TEXT_STRING, menu->dname, 0);
+! if (accel_key != NULL)
+! PtSetArg(&args[ n++ ], Pt_ARG_ACCEL_KEY, mnemonic_str,
+! 0);
+
+! PtSetArg(&args[ n++ ], Pt_ARG_ACCEL_TEXT, menu->actext, 0);
+
+! menu->id = PtCreateWidget(PtMenuButton, parent->submenu_id, n, args);
+
+! PtAddCallback(menu->id, Pt_CB_ACTIVATE, gui_ph_handle_menu, menu);
+
+ #ifdef USE_PANEL_GROUP
+! if (gui_ph_is_buffer_item(menu, parent) == TRUE)
+ {
+! PtAddCallback(menu->id, Pt_CB_DESTROYED,
+! gui_ph_handle_buffer_remove, menu);
+! gui_ph_pg_add_buffer(menu->dname);
+ }
+ #endif
+ }
+
+! gui_ph_position_menu(menu->id, menu->priority);
+ }
+
+ void
+ gui_mch_destroy_menu(vimmenu_T *menu)
+ {
+! if (menu->submenu_id != NULL)
+! PtDestroyWidget(menu->submenu_id);
+! if (menu->id != NULL)
+! PtDestroyWidget(menu->id);
+
+ menu->submenu_id = NULL;
+ menu->id = NULL;
+***************
+*** 2789,2800 ****
+ {
+ long flags, mask, fields;
+
+! if( menu->id == NULL )
+ return;
+
+! flags = PtWidgetFlags( menu->id );
+! if( PtWidgetIsClass( menu->id, PtMenuButton ) &&
+! PtWidgetIsClass( PtWidgetParent( menu->id ), PtMenu ) )
+ {
+ fields = Pt_FALSE;
+ mask = Pt_SELECTABLE | Pt_HIGHLIGHTED;
+--- 2789,2800 ----
+ {
+ long flags, mask, fields;
+
+! if (menu->id == NULL)
+ return;
+
+! flags = PtWidgetFlags(menu->id);
+! if (PtWidgetIsClass(menu->id, PtMenuButton) &&
+! PtWidgetIsClass(PtWidgetParent(menu->id), PtMenu))
+ {
+ fields = Pt_FALSE;
+ mask = Pt_SELECTABLE | Pt_HIGHLIGHTED;
+***************
+*** 2805,2815 ****
+ mask = Pt_BLOCKED | Pt_GHOST;
+ }
+
+! if( ! grey )
+ fields = ~fields;
+
+! PtSetResource( menu->id, Pt_ARG_FLAGS, fields,
+! mask );
+ }
+
+ void
+--- 2805,2815 ----
+ mask = Pt_BLOCKED | Pt_GHOST;
+ }
+
+! if (! grey)
+ fields = ~fields;
+
+! PtSetResource(menu->id, Pt_ARG_FLAGS, fields,
+! mask);
+ }
+
+ void
+***************
+*** 2830,2837 ****
+ void
+ gui_mch_show_popupmenu(vimmenu_T *menu)
+ {
+! PtSetResource( menu->submenu_id, Pt_ARG_POS, &abs_mouse, 0 );
+! PtRealizeWidget( menu->submenu_id );
+ }
+
+ void
+--- 2830,2837 ----
+ void
+ gui_mch_show_popupmenu(vimmenu_T *menu)
+ {
+! PtSetResource(menu->submenu_id, Pt_ARG_POS, &abs_mouse, 0);
+! PtRealizeWidget(menu->submenu_id);
+ }
+
+ void
+***************
+*** 2842,2855 ****
+
+ #endif
+
+! #if defined( FEAT_TOOLBAR ) || defined( PROTO )
+ void
+ gui_mch_show_toolbar(int showit)
+ {
+! if( showit )
+! PtRealizeWidget( gui.vimToolBar );
+ else
+! PtUnrealizeWidget( gui.vimToolBar );
+ }
+ #endif
+
+--- 2842,2855 ----
+
+ #endif
+
+! #if defined(FEAT_TOOLBAR) || defined(PROTO)
+ void
+ gui_mch_show_toolbar(int showit)
+ {
+! if (showit)
+! PtRealizeWidget(gui.vimToolBar);
+ else
+! PtUnrealizeWidget(gui.vimToolBar);
+ }
+ #endif
+
+***************
+*** 2870,2903 ****
+ FontQueryInfo info;
+ int_u style;
+
+! font_tag = alloc( MAX_FONT_TAG );
+! if( font_tag != NULL )
+ {
+! if( PfGenerateFontName( font_name, font_flags, font_size,
+! font_tag ) != NULL )
+ {
+ /* Enforce some limits on the font used */
+ style = PHFONT_INFO_FIXED;
+
+! if( enforce & PF_STYLE_BOLD )
+ style |= PHFONT_INFO_BOLD;
+! if( enforce & PF_STYLE_ANTIALIAS )
+ style |= PHFONT_INFO_ALIAS;
+! if( enforce & PF_STYLE_ITALIC )
+ style |= PHFONT_INFO_ITALIC;
+
+! PfQueryFontInfo( font_tag, &info );
+
+! if( info.size == 0 )
+ font_size = 0;
+
+ /* Make sure font size matches, and that the font style
+ * at least has the bits we're checking for */
+! if( font_size == info.size &&
+! style == (info.style & style) )
+ return (GuiFont)font_tag;
+ }
+! vim_free( font_tag );
+ }
+ return NULL;
+ }
+--- 2870,2903 ----
+ FontQueryInfo info;
+ int_u style;
+
+! font_tag = alloc(MAX_FONT_TAG);
+! if (font_tag != NULL)
+ {
+! if (PfGenerateFontName(font_name, font_flags, font_size,
+! font_tag) != NULL)
+ {
+ /* Enforce some limits on the font used */
+ style = PHFONT_INFO_FIXED;
+
+! if (enforce & PF_STYLE_BOLD)
+ style |= PHFONT_INFO_BOLD;
+! if (enforce & PF_STYLE_ANTIALIAS)
+ style |= PHFONT_INFO_ALIAS;
+! if (enforce & PF_STYLE_ITALIC)
+ style |= PHFONT_INFO_ITALIC;
+
+! PfQueryFontInfo(font_tag, &info);
+
+! if (info.size == 0)
+ font_size = 0;
+
+ /* Make sure font size matches, and that the font style
+ * at least has the bits we're checking for */
+! if (font_size == info.size &&
+! style == (info.style & style))
+ return (GuiFont)font_tag;
+ }
+! vim_free(font_tag);
+ }
+ return NULL;
+ }
+***************
+*** 2919,2936 ****
+ char_u *vim_font,
+ char_u **font_name,
+ int_u *font_flags,
+! int_u *font_size )
+ {
+ char_u *mark;
+ int_u name_len, size;
+
+! mark = vim_strchr( vim_font, ':' );
+! if( mark == NULL )
+! name_len = STRLEN( vim_font );
+ else
+! name_len = (int_u) ( mark - vim_font );
+
+! *font_name = vim_strnsave( vim_font, name_len );
+ if (*font_name != NULL)
+ {
+ if (mark != NULL)
+--- 2919,2936 ----
+ char_u *vim_font,
+ char_u **font_name,
+ int_u *font_flags,
+! int_u *font_size)
+ {
+ char_u *mark;
+ int_u name_len, size;
+
+! mark = vim_strchr(vim_font, ':');
+! if (mark == NULL)
+! name_len = STRLEN(vim_font);
+ else
+! name_len = (int_u) (mark - vim_font);
+
+! *font_name = vim_strnsave(vim_font, name_len);
+ if (*font_name != NULL)
+ {
+ if (mark != NULL)
+***************
+*** 2944,2950 ****
+ case 'i': *font_flags |= PF_STYLE_ITALIC; break;
+
+ case 's':
+! size = getdigits( &mark );
+ /* Restrict the size to some vague limits */
+ if (size < 1 || size > 100)
+ size = 8;
+--- 2944,2950 ----
+ case 'i': *font_flags |= PF_STYLE_ITALIC; break;
+
+ case 's':
+! size = getdigits(&mark);
+ /* Restrict the size to some vague limits */
+ if (size < 1 || size > 100)
+ size = 8;
+***************
+*** 2979,3031 ****
+ vim_font_name = "PC Terminal";
+ }
+
+! if (STRCMP( vim_font_name, "*" ) == 0)
+ {
+! font_tag = PtFontSelection( gui.vimWindow, NULL, NULL,
+! "pcterm12", -1, PHFONT_FIXED, NULL );
+
+ if (font_tag == NULL)
+ return FAIL;
+
+! gui_mch_free_font( gui.norm_font );
+ gui.norm_font = font_tag;
+
+! PfQueryFontInfo( font_tag, &info );
+! font_name = vim_strsave( info.font );
+ }
+ else
+ {
+! if (gui_ph_parse_font_name( vim_font_name, &font_name, &font_flags,
+! &font_size ) == FALSE)
+ return FAIL;
+
+! font_tag = gui_ph_get_font( font_name, font_flags, font_size, 0 );
+ if (font_tag == NULL)
+ {
+! vim_free( font_name );
+ return FAIL;
+ }
+
+! gui_mch_free_font( gui.norm_font );
+ gui.norm_font = font_tag;
+ }
+
+! gui_mch_free_font( gui.bold_font );
+! gui.bold_font = gui_ph_get_font( font_name, font_flags | PF_STYLE_BOLD,
+! font_size, PF_STYLE_BOLD );
+!
+! gui_mch_free_font( gui.ital_font );
+! gui.ital_font = gui_ph_get_font( font_name, font_flags | PF_STYLE_ITALIC,
+! font_size, PF_STYLE_ITALIC );
+
+ /* This extent was brought to you by the letter 'g' */
+! PfExtentText( &extent, NULL, font_tag, "g", 1 );
+
+ gui.char_width = extent.lr.x - extent.ul.x + 1;
+ gui.char_height = (- extent.ul.y) + extent.lr.y + 1;
+ gui.char_ascent = - extent.ul.y;
+
+! vim_free( font_name );
+ return OK;
+ }
+
+--- 2979,3031 ----
+ vim_font_name = "PC Terminal";
+ }
+
+! if (STRCMP(vim_font_name, "*") == 0)
+ {
+! font_tag = PtFontSelection(gui.vimWindow, NULL, NULL,
+! "pcterm12", -1, PHFONT_FIXED, NULL);
+
+ if (font_tag == NULL)
+ return FAIL;
+
+! gui_mch_free_font(gui.norm_font);
+ gui.norm_font = font_tag;
+
+! PfQueryFontInfo(font_tag, &info);
+! font_name = vim_strsave(info.font);
+ }
+ else
+ {
+! if (gui_ph_parse_font_name(vim_font_name, &font_name, &font_flags,
+! &font_size) == FALSE)
+ return FAIL;
+
+! font_tag = gui_ph_get_font(font_name, font_flags, font_size, 0);
+ if (font_tag == NULL)
+ {
+! vim_free(font_name);
+ return FAIL;
+ }
+
+! gui_mch_free_font(gui.norm_font);
+ gui.norm_font = font_tag;
+ }
+
+! gui_mch_free_font(gui.bold_font);
+! gui.bold_font = gui_ph_get_font(font_name, font_flags | PF_STYLE_BOLD,
+! font_size, PF_STYLE_BOLD);
+!
+! gui_mch_free_font(gui.ital_font);
+! gui.ital_font = gui_ph_get_font(font_name, font_flags | PF_STYLE_ITALIC,
+! font_size, PF_STYLE_ITALIC);
+
+ /* This extent was brought to you by the letter 'g' */
+! PfExtentText(&extent, NULL, font_tag, "g", 1);
+
+ gui.char_width = extent.lr.x - extent.ul.x + 1;
+ gui.char_height = (- extent.ul.y) + extent.lr.y + 1;
+ gui.char_ascent = - extent.ul.y;
+
+! vim_free(font_name);
+ return OK;
+ }
+
+***************
+*** 3037,3043 ****
+ {
+ FontQueryInfo info;
+
+! PfQueryFontInfo( gui.norm_font, &info );
+
+ gui.char_height = - info.ascender + info.descender + p_linespace;
+ gui.char_ascent = - info.ascender + p_linespace / 2;
+--- 3037,3043 ----
+ {
+ FontQueryInfo info;
+
+! PfQueryFontInfo(gui.norm_font, &info);
+
+ gui.char_height = - info.ascender + info.descender + p_linespace;
+ gui.char_ascent = - info.ascender + p_linespace / 2;
+***************
+*** 3053,3070 ****
+ int_u font_size = 12;
+ int_u font_flags = 0;
+
+! if (gui_ph_parse_font_name( vim_font_name, &font_name, &font_flags,
+! &font_size ) != FALSE)
+ {
+! font_tag = gui_ph_get_font( font_name, font_flags, font_size, -1 );
+! vim_free( font_name );
+
+ if (font_tag != NULL)
+ return (GuiFont)font_tag;
+ }
+
+ if (report_error)
+! EMSG2(e_font, vim_font_name );
+
+ return FAIL;
+ }
+--- 3053,3070 ----
+ int_u font_size = 12;
+ int_u font_flags = 0;
+
+! if (gui_ph_parse_font_name(vim_font_name, &font_name, &font_flags,
+! &font_size) != FALSE)
+ {
+! font_tag = gui_ph_get_font(font_name, font_flags, font_size, -1);
+! vim_free(font_name);
+
+ if (font_tag != NULL)
+ return (GuiFont)font_tag;
+ }
+
+ if (report_error)
+! EMSG2(e_font, vim_font_name);
+
+ return FAIL;
+ }
+***************
+*** 3088,3099 ****
+ void
+ gui_mch_set_font(GuiFont font)
+ {
+! PgSetFont( font );
+ }
+
+ void
+ gui_mch_free_font(GuiFont font)
+ {
+! vim_free( font );
+ }
+
+--- 3088,3099 ----
+ void
+ gui_mch_set_font(GuiFont font)
+ {
+! PgSetFont(font);
+ }
+
+ void
+ gui_mch_free_font(GuiFont font)
+ {
+! vim_free(font);
+ }
+
+*** ../vim-7.3.309/src/version.c 2011-09-14 15:41:54.000000000 +0200
+--- src/version.c 2011-09-14 16:01:50.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 310,
+ /**/
+
+--
+An operatingsystem is just a name you give to the rest of bloating
+idiosyncratic machine-based-features you left out of your editor.
+ (author unknown)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.311 b/source/ap/vim/patches/7.3.311
new file mode 100644
index 000000000..13aec74a9
--- /dev/null
+++ b/source/ap/vim/patches/7.3.311
@@ -0,0 +1,351 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.311
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.311 (replaces 7.3.289)
+Problem: Complete function isn't called when the leader changed.
+Solution: Allow the complete function to return a dictionary with a flag
+ that indicates ins_compl_restart() is to be called when the leader
+ changes. (Taro Muraoka)
+Files: runtime/insert.txt, src/edit.c, src/eval.c, src/proto/eval.pro
+
+
+*** ../vim-7.3.310/src/edit.c 2011-09-05 20:13:37.000000000 +0200
+--- src/edit.c 2011-09-14 16:43:14.000000000 +0200
+***************
+*** 135,140 ****
+--- 135,142 ----
+ static int compl_cont_mode = 0;
+ static expand_T compl_xp;
+
++ static int compl_opt_refresh_always = FALSE;
++
+ static void ins_ctrl_x __ARGS((void));
+ static int has_compl_option __ARGS((int dict_opt));
+ static int ins_compl_accept_char __ARGS((int c));
+***************
+*** 153,161 ****
+ static void ins_compl_free __ARGS((void));
+ static void ins_compl_clear __ARGS((void));
+ static int ins_compl_bs __ARGS((void));
+ static void ins_compl_new_leader __ARGS((void));
+ static void ins_compl_addleader __ARGS((int c));
+! static int ins_compl_len __ARGS((void));
+ static void ins_compl_restart __ARGS((void));
+ static void ins_compl_set_original_text __ARGS((char_u *str));
+ static void ins_compl_addfrommatch __ARGS((void));
+--- 155,164 ----
+ static void ins_compl_free __ARGS((void));
+ static void ins_compl_clear __ARGS((void));
+ static int ins_compl_bs __ARGS((void));
++ static int ins_compl_need_restart __ARGS((void));
+ static void ins_compl_new_leader __ARGS((void));
+ static void ins_compl_addleader __ARGS((int c));
+! static int ins_compl_len __ARGS((void));
+ static void ins_compl_restart __ARGS((void));
+ static void ins_compl_set_original_text __ARGS((char_u *str));
+ static void ins_compl_addfrommatch __ARGS((void));
+***************
+*** 163,168 ****
+--- 166,172 ----
+ static buf_T *ins_compl_next_buf __ARGS((buf_T *buf, int flag));
+ #if defined(FEAT_COMPL_FUNC) || defined(FEAT_EVAL)
+ static void ins_compl_add_list __ARGS((list_T *list));
++ static void ins_compl_add_dict __ARGS((dict_T *dict));
+ #endif
+ static int ins_compl_get_exp __ARGS((pos_T *ini));
+ static void ins_compl_delete __ARGS((void));
+***************
+*** 3341,3347 ****
+ /* Deleted more than what was used to find matches or didn't finish
+ * finding all matches: need to look for matches all over again. */
+ if (curwin->w_cursor.col <= compl_col + compl_length
+! || compl_was_interrupted)
+ ins_compl_restart();
+
+ vim_free(compl_leader);
+--- 3345,3351 ----
+ /* Deleted more than what was used to find matches or didn't finish
+ * finding all matches: need to look for matches all over again. */
+ if (curwin->w_cursor.col <= compl_col + compl_length
+! || ins_compl_need_restart())
+ ins_compl_restart();
+
+ vim_free(compl_leader);
+***************
+*** 3355,3360 ****
+--- 3359,3378 ----
+ }
+
+ /*
++ * Return TRUE when we need to find matches again, ins_compl_restart() is to
++ * be called.
++ */
++ static int
++ ins_compl_need_restart()
++ {
++ /* Return TRUE if we didn't complete finding matches or when the
++ * 'completefunc' returned "always" in the "refresh" dictionary item. */
++ return compl_was_interrupted
++ || ((ctrl_x_mode == CTRL_X_FUNCTION || ctrl_x_mode == CTRL_X_OMNI)
++ && compl_opt_refresh_always);
++ }
++
++ /*
+ * Called after changing "compl_leader".
+ * Show the popup menu with a different set of matches.
+ * May also search for matches again if the previous search was interrupted.
+***************
+*** 3443,3449 ****
+ ins_char(c);
+
+ /* If we didn't complete finding matches we must search again. */
+! if (compl_was_interrupted)
+ ins_compl_restart();
+
+ vim_free(compl_leader);
+--- 3461,3467 ----
+ ins_char(c);
+
+ /* If we didn't complete finding matches we must search again. */
+! if (ins_compl_need_restart())
+ ins_compl_restart();
+
+ vim_free(compl_leader);
+***************
+*** 3871,3882 ****
+ int type; /* CTRL_X_OMNI or CTRL_X_FUNCTION */
+ char_u *base;
+ {
+! list_T *matchlist;
+ char_u *args[2];
+ char_u *funcname;
+ pos_T pos;
+ win_T *curwin_save;
+ buf_T *curbuf_save;
+
+ funcname = (type == CTRL_X_FUNCTION) ? curbuf->b_p_cfu : curbuf->b_p_ofu;
+ if (*funcname == NUL)
+--- 3889,3902 ----
+ int type; /* CTRL_X_OMNI or CTRL_X_FUNCTION */
+ char_u *base;
+ {
+! list_T *matchlist = NULL;
+! dict_T *matchdict = NULL;
+ char_u *args[2];
+ char_u *funcname;
+ pos_T pos;
+ win_T *curwin_save;
+ buf_T *curbuf_save;
++ typval_T rettv;
+
+ funcname = (type == CTRL_X_FUNCTION) ? curbuf->b_p_cfu : curbuf->b_p_ofu;
+ if (*funcname == NUL)
+***************
+*** 3889,3895 ****
+ pos = curwin->w_cursor;
+ curwin_save = curwin;
+ curbuf_save = curbuf;
+! matchlist = call_func_retlist(funcname, 2, args, FALSE);
+ if (curwin_save != curwin || curbuf_save != curbuf)
+ {
+ EMSG(_(e_complwin));
+--- 3909,3933 ----
+ pos = curwin->w_cursor;
+ curwin_save = curwin;
+ curbuf_save = curbuf;
+!
+! /* Call a function, which returns a list or dict. */
+! if (call_vim_function(funcname, 2, args, FALSE, &rettv) == OK)
+! {
+! switch (rettv.v_type)
+! {
+! case VAR_LIST:
+! matchlist = rettv.vval.v_list;
+! break;
+! case VAR_DICT:
+! matchdict = rettv.vval.v_dict;
+! break;
+! default:
+! /* TODO: Give error message? */
+! clear_tv(&rettv);
+! break;
+! }
+! }
+!
+ if (curwin_save != curwin || curbuf_save != curbuf)
+ {
+ EMSG(_(e_complwin));
+***************
+*** 3902,3911 ****
+--- 3940,3954 ----
+ EMSG(_(e_compldel));
+ goto theend;
+ }
++
+ if (matchlist != NULL)
+ ins_compl_add_list(matchlist);
++ else if (matchdict != NULL)
++ ins_compl_add_dict(matchdict);
+
+ theend:
++ if (matchdict != NULL)
++ dict_unref(matchdict);
+ if (matchlist != NULL)
+ list_unref(matchlist);
+ }
+***************
+*** 3934,3939 ****
+--- 3977,4009 ----
+ }
+
+ /*
++ * Add completions from a dict.
++ */
++ static void
++ ins_compl_add_dict(dict)
++ dict_T *dict;
++ {
++ dictitem_T *refresh;
++ dictitem_T *words;
++
++ /* Check for optional "refresh" item. */
++ compl_opt_refresh_always = FALSE;
++ refresh = dict_find(dict, (char_u *)"refresh", 7);
++ if (refresh != NULL && refresh->di_tv.v_type == VAR_STRING)
++ {
++ char_u *v = refresh->di_tv.vval.v_string;
++
++ if (v != NULL && STRCMP(v, (char_u *)"always") == 0)
++ compl_opt_refresh_always = TRUE;
++ }
++
++ /* Add completions from a "words" list. */
++ words = dict_find(dict, (char_u *)"words", 5);
++ if (words != NULL && words->di_tv.v_type == VAR_LIST)
++ ins_compl_add_list(words->di_tv.vval.v_list);
++ }
++
++ /*
+ * Add a match to the list of matches from a typeval_T.
+ * If the given string is already in the list of completions, then return
+ * NOTDONE, otherwise add it to the list and return OK. If there is an error,
+***************
+*** 5088,5093 ****
+--- 5158,5169 ----
+ return FAIL;
+ }
+
++ /*
++ * Reset extended parameters of completion, when start new
++ * completion.
++ */
++ compl_opt_refresh_always = FALSE;
++
+ if (col < 0)
+ col = curs_col;
+ compl_col = col;
+*** ../vim-7.3.310/src/eval.c 2011-09-14 14:33:47.000000000 +0200
+--- src/eval.c 2011-09-14 16:16:47.000000000 +0200
+***************
+*** 380,388 ****
+
+ static void prepare_vimvar __ARGS((int idx, typval_T *save_tv));
+ static void restore_vimvar __ARGS((int idx, typval_T *save_tv));
+- #if defined(FEAT_USR_CMDS) && defined(FEAT_CMDL_COMPL)
+- static int call_vim_function __ARGS((char_u *func, int argc, char_u **argv, int safe, typval_T *rettv));
+- #endif
+ static int ex_let_vars __ARGS((char_u *arg, typval_T *tv, int copy, int semicolon, int var_count, char_u *nextchars));
+ static char_u *skip_var_list __ARGS((char_u *arg, int *var_count, int *semicolon));
+ static char_u *skip_var_one __ARGS((char_u *arg));
+--- 380,385 ----
+***************
+*** 451,457 ****
+ static void set_ref_in_list __ARGS((list_T *l, int copyID));
+ static void set_ref_in_item __ARGS((typval_T *tv, int copyID));
+ static int rettv_dict_alloc __ARGS((typval_T *rettv));
+- static void dict_unref __ARGS((dict_T *d));
+ static void dict_free __ARGS((dict_T *d, int recurse));
+ static dictitem_T *dictitem_copy __ARGS((dictitem_T *org));
+ static void dictitem_remove __ARGS((dict_T *dict, dictitem_T *item));
+--- 448,453 ----
+***************
+*** 1563,1569 ****
+ * arguments are currently supported.
+ * Returns OK or FAIL.
+ */
+! static int
+ call_vim_function(func, argc, argv, safe, rettv)
+ char_u *func;
+ int argc;
+--- 1559,1565 ----
+ * arguments are currently supported.
+ * Returns OK or FAIL.
+ */
+! int
+ call_vim_function(func, argc, argv, safe, rettv)
+ char_u *func;
+ int argc;
+***************
+*** 6903,6909 ****
+ * Unreference a Dictionary: decrement the reference count and free it when it
+ * becomes zero.
+ */
+! static void
+ dict_unref(d)
+ dict_T *d;
+ {
+--- 6899,6905 ----
+ * Unreference a Dictionary: decrement the reference count and free it when it
+ * becomes zero.
+ */
+! void
+ dict_unref(d)
+ dict_T *d;
+ {
+*** ../vim-7.3.310/src/proto/eval.pro 2010-08-15 21:57:28.000000000 +0200
+--- src/proto/eval.pro 2011-09-14 16:16:47.000000000 +0200
+***************
+*** 23,28 ****
+--- 23,29 ----
+ list_T *eval_spell_expr __ARGS((char_u *badword, char_u *expr));
+ int get_spellword __ARGS((list_T *list, char_u **pp));
+ typval_T *eval_expr __ARGS((char_u *arg, char_u **nextcmd));
++ int call_vim_function __ARGS((char_u *func, int argc, char_u **argv, int safe, typval_T *rettv));
+ void *call_func_retstr __ARGS((char_u *func, int argc, char_u **argv, int safe));
+ long call_func_retnr __ARGS((char_u *func, int argc, char_u **argv, int safe));
+ void *call_func_retlist __ARGS((char_u *func, int argc, char_u **argv, int safe));
+***************
+*** 52,57 ****
+--- 53,59 ----
+ int list_append_string __ARGS((list_T *l, char_u *str, int len));
+ int garbage_collect __ARGS((void));
+ dict_T *dict_alloc __ARGS((void));
++ void dict_unref __ARGS((dict_T *d));
+ dictitem_T *dictitem_alloc __ARGS((char_u *key));
+ void dictitem_free __ARGS((dictitem_T *item));
+ int dict_add __ARGS((dict_T *d, dictitem_T *item));
+*** ../vim-7.3.310/src/version.c 2011-09-14 16:04:52.000000000 +0200
+--- src/version.c 2011-09-14 16:25:08.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 311,
+ /**/
+
+--
+Contrary to popular belief, it's often your clothing that gets promoted, not
+you.
+ (Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.312 b/source/ap/vim/patches/7.3.312
new file mode 100644
index 000000000..d2480e093
--- /dev/null
+++ b/source/ap/vim/patches/7.3.312
@@ -0,0 +1,58 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.312
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.312 (after 7.3.306)
+Problem: Can't compile with tiny features.
+Solution: Add #ifdef around win_valid().
+Files: src/buffer.c
+
+
+*** ../vim-7.3.311/src/buffer.c 2011-09-14 14:43:21.000000000 +0200
+--- src/buffer.c 2011-09-14 17:46:24.000000000 +0200
+***************
+*** 416,422 ****
+ #endif
+
+ buf_freeall(buf, (del_buf ? BFA_DEL : 0) + (wipe_buf ? BFA_WIPE : 0));
+! if (win_valid(win) && win->w_buffer == buf)
+ win->w_buffer = NULL; /* make sure we don't use the buffer now */
+
+ #ifdef FEAT_AUTOCMD
+--- 416,426 ----
+ #endif
+
+ buf_freeall(buf, (del_buf ? BFA_DEL : 0) + (wipe_buf ? BFA_WIPE : 0));
+! if (
+! #ifdef FEAT_WINDOWS
+! win_valid(win) &&
+! #endif
+! win->w_buffer == buf)
+ win->w_buffer = NULL; /* make sure we don't use the buffer now */
+
+ #ifdef FEAT_AUTOCMD
+*** ../vim-7.3.311/src/version.c 2011-09-14 16:52:02.000000000 +0200
+--- src/version.c 2011-09-14 17:27:24.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 312,
+ /**/
+
+--
+You have heard the saying that if you put a thousand monkeys in a room with a
+thousand typewriters and waited long enough, eventually you would have a room
+full of dead monkeys.
+ (Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.313 b/source/ap/vim/patches/7.3.313
new file mode 100644
index 000000000..ca818b8b8
--- /dev/null
+++ b/source/ap/vim/patches/7.3.313
@@ -0,0 +1,53 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.313
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.313 (after 7.3.307)
+Problem: One more warning when compiling with dynamic Python 3.
+Solution: Change PySliceObject to PyObject.
+Files: src/if_python3.c
+
+
+*** ../vim-7.3.312/src/if_python3.c 2011-09-14 15:41:54.000000000 +0200
+--- src/if_python3.c 2011-09-14 18:54:49.000000000 +0200
+***************
+*** 194,200 ****
+ static int (*py3_PySys_SetObject)(char *, PyObject *);
+ static PyObject* (*py3_PyList_Append)(PyObject *, PyObject *);
+ static Py_ssize_t (*py3_PyList_Size)(PyObject *);
+! static int (*py3_PySlice_GetIndicesEx)(PySliceObject *r, Py_ssize_t length,
+ Py_ssize_t *start, Py_ssize_t *stop, Py_ssize_t *step, Py_ssize_t *slicelength);
+ static PyObject* (*py3_PyErr_NoMemory)(void);
+ static void (*py3_Py_Finalize)(void);
+--- 194,200 ----
+ static int (*py3_PySys_SetObject)(char *, PyObject *);
+ static PyObject* (*py3_PyList_Append)(PyObject *, PyObject *);
+ static Py_ssize_t (*py3_PyList_Size)(PyObject *);
+! static int (*py3_PySlice_GetIndicesEx)(PyObject *r, Py_ssize_t length,
+ Py_ssize_t *start, Py_ssize_t *stop, Py_ssize_t *step, Py_ssize_t *slicelength);
+ static PyObject* (*py3_PyErr_NoMemory)(void);
+ static void (*py3_Py_Finalize)(void);
+*** ../vim-7.3.312/src/version.c 2011-09-14 17:50:05.000000000 +0200
+--- src/version.c 2011-09-14 18:56:03.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 313,
+ /**/
+
+--
+All good vision statements are created by groups of people with bloated
+bladders who would rather be doing anything else.
+ (Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.314 b/source/ap/vim/patches/7.3.314
new file mode 100644
index 000000000..76415d65b
--- /dev/null
+++ b/source/ap/vim/patches/7.3.314
@@ -0,0 +1,54 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.314
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.314 (after 7.3.304)
+Problem: Missing parenthesis.
+Solution: Add it. (Benjamin R. Haskell)
+Files: src/Make_mvc.mak
+
+
+*** ../vim-7.3.313/src/Make_mvc.mak 2011-09-14 10:49:44.000000000 +0200
+--- src/Make_mvc.mak 2011-09-14 18:56:24.000000000 +0200
+***************
+*** 785,791 ****
+ PERL_INC = /I $(PERL_INCDIR)
+ PERL_OBJ = $(OUTDIR)\if_perl.obj $(OUTDIR)\if_perlsfio.obj
+ XSUBPP = $(PERL)\lib\ExtUtils\xsubpp
+! !if exist($(XSUBPP)
+ XSUBPP = $(PERL_EXE) $(XSUBPP)
+ !else
+ XSUBPP = xsubpp
+--- 785,791 ----
+ PERL_INC = /I $(PERL_INCDIR)
+ PERL_OBJ = $(OUTDIR)\if_perl.obj $(OUTDIR)\if_perlsfio.obj
+ XSUBPP = $(PERL)\lib\ExtUtils\xsubpp
+! !if exist($(XSUBPP))
+ XSUBPP = $(PERL_EXE) $(XSUBPP)
+ !else
+ XSUBPP = xsubpp
+*** ../vim-7.3.313/src/version.c 2011-09-14 18:59:35.000000000 +0200
+--- src/version.c 2011-09-14 19:01:12.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 314,
+ /**/
+
+--
+Often you're less important than your furniture. If you think about it, you
+can get fired but your furniture stays behind, gainfully employed at the
+company that didn't need _you_ anymore.
+ (Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.315 b/source/ap/vim/patches/7.3.315
new file mode 100644
index 000000000..2240f7b74
--- /dev/null
+++ b/source/ap/vim/patches/7.3.315
@@ -0,0 +1,475 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.315
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.315
+Problem: Opening a window before forking causes problems for GTK.
+Solution: Fork first, create the window in the child and report back to the
+ parent process whether it worked. If successful the parent exits,
+ if unsuccessful the child exits and the parent continues in the
+ terminal. (Tim Starling)
+Files: src/gui.c
+
+
+*** ../vim-7.3.314/src/gui.c 2011-08-10 17:44:41.000000000 +0200
+--- src/gui.c 2011-09-14 17:34:30.000000000 +0200
+***************
+*** 37,42 ****
+--- 37,60 ----
+ static void gui_set_bg_color __ARGS((char_u *name));
+ static win_T *xy2win __ARGS((int x, int y));
+
++ #if defined(UNIX) && !defined(__BEOS__) && !defined(MACOS_X) \
++ && !defined(__APPLE__)
++ # define MAY_FORK
++ static void gui_do_fork __ARGS((void));
++
++ static int gui_read_child_pipe __ARGS((int fd));
++
++ /* Return values for gui_read_child_pipe */
++ enum {
++ GUI_CHILD_IO_ERROR,
++ GUI_CHILD_OK,
++ GUI_CHILD_FAILED
++ };
++
++ #endif /* MAY_FORK */
++
++ static void gui_attempt_start __ARGS((void));
++
+ static int can_update_cursor = TRUE; /* can display the cursor */
+
+ /*
+***************
+*** 59,105 ****
+ gui_start()
+ {
+ char_u *old_term;
+- #if defined(UNIX) && !defined(__BEOS__) && !defined(MACOS_X) \
+- && !defined(__APPLE__)
+- # define MAY_FORK
+- int dofork = TRUE;
+- #endif
+ static int recursive = 0;
+
+ old_term = vim_strsave(T_NAME);
+
+- /*
+- * Set_termname() will call gui_init() to start the GUI.
+- * Set the "starting" flag, to indicate that the GUI will start.
+- *
+- * We don't want to open the GUI shell until after we've read .gvimrc,
+- * otherwise we don't know what font we will use, and hence we don't know
+- * what size the shell should be. So if there are errors in the .gvimrc
+- * file, they will have to go to the terminal: Set full_screen to FALSE.
+- * full_screen will be set to TRUE again by a successful termcapinit().
+- */
+ settmode(TMODE_COOK); /* stop RAW mode */
+ if (full_screen)
+ cursor_on(); /* needed for ":gui" in .vimrc */
+- gui.starting = TRUE;
+ full_screen = FALSE;
+
+! #ifdef FEAT_GUI_GTK
+! gui.event_time = GDK_CURRENT_TIME;
+! #endif
+
+ #ifdef MAY_FORK
+! if (!gui.dofork || vim_strchr(p_go, GO_FORG) || recursive)
+! dofork = FALSE;
+ #endif
+! ++recursive;
+!
+! termcapinit((char_u *)"builtin_gui");
+! gui.starting = recursive - 1;
+
+ if (!gui.in_use) /* failed to start GUI */
+ {
+! termcapinit(old_term); /* back to old term settings */
+ settmode(TMODE_RAW); /* restart RAW mode */
+ #ifdef FEAT_TITLE
+ set_title_defaults(); /* set 'title' and 'icon' again */
+--- 77,123 ----
+ gui_start()
+ {
+ char_u *old_term;
+ static int recursive = 0;
+
+ old_term = vim_strsave(T_NAME);
+
+ settmode(TMODE_COOK); /* stop RAW mode */
+ if (full_screen)
+ cursor_on(); /* needed for ":gui" in .vimrc */
+ full_screen = FALSE;
+
+! ++recursive;
+
+ #ifdef MAY_FORK
+! /*
+! * Quit the current process and continue in the child.
+! * Makes "gvim file" disconnect from the shell it was started in.
+! * Don't do this when Vim was started with "-f" or the 'f' flag is present
+! * in 'guioptions'.
+! */
+! if (gui.dofork && !vim_strchr(p_go, GO_FORG) && recursive <= 1)
+! {
+! gui_do_fork();
+! }
+! else
+ #endif
+! {
+! gui_attempt_start();
+! }
+
+ if (!gui.in_use) /* failed to start GUI */
+ {
+! /* Back to old term settings
+! *
+! * FIXME: If we got here because a child process failed and flagged to
+! * the parent to resume, and X11 is enabled with FEAT_TITLE, this will
+! * hit an X11 I/O error and do a longjmp(), leaving recursive
+! * permanently set to 1. This is probably not as big a problem as it
+! * sounds, because gui_mch_init() in both gui_x11.c and gui_gtk_x11.c
+! * return "OK" unconditionally, so it would be very difficult to
+! * actually hit this case.
+! */
+! termcapinit(old_term);
+ settmode(TMODE_RAW); /* restart RAW mode */
+ #ifdef FEAT_TITLE
+ set_title_defaults(); /* set 'title' and 'icon' again */
+***************
+*** 108,113 ****
+--- 126,166 ----
+
+ vim_free(old_term);
+
++ #ifdef FEAT_AUTOCMD
++ /* If the GUI started successfully, trigger the GUIEnter event, otherwise
++ * the GUIFailed event. */
++ gui_mch_update();
++ apply_autocmds(gui.in_use ? EVENT_GUIENTER : EVENT_GUIFAILED,
++ NULL, NULL, FALSE, curbuf);
++ #endif
++ --recursive;
++ }
++
++ /*
++ * Set_termname() will call gui_init() to start the GUI.
++ * Set the "starting" flag, to indicate that the GUI will start.
++ *
++ * We don't want to open the GUI shell until after we've read .gvimrc,
++ * otherwise we don't know what font we will use, and hence we don't know
++ * what size the shell should be. So if there are errors in the .gvimrc
++ * file, they will have to go to the terminal: Set full_screen to FALSE.
++ * full_screen will be set to TRUE again by a successful termcapinit().
++ */
++ static void
++ gui_attempt_start()
++ {
++ static int recursive = 0;
++
++ ++recursive;
++ gui.starting = TRUE;
++
++ #ifdef FEAT_GUI_GTK
++ gui.event_time = GDK_CURRENT_TIME;
++ #endif
++
++ termcapinit((char_u *)"builtin_gui");
++ gui.starting = recursive - 1;
++
+ #if defined(FEAT_GUI_GTK) || defined(FEAT_GUI_X11)
+ if (gui.in_use)
+ {
+***************
+*** 123,218 ****
+ display_errors();
+ }
+ #endif
+
+! #if defined(MAY_FORK) && !defined(__QNXNTO__)
+! /*
+! * Quit the current process and continue in the child.
+! * Makes "gvim file" disconnect from the shell it was started in.
+! * Don't do this when Vim was started with "-f" or the 'f' flag is present
+! * in 'guioptions'.
+! */
+! if (gui.in_use && dofork)
+ {
+! int pipefd[2]; /* pipe between parent and child */
+! int pipe_error;
+! char dummy;
+! pid_t pid = -1;
+!
+! /* Setup a pipe between the child and the parent, so that the parent
+! * knows when the child has done the setsid() call and is allowed to
+! * exit. */
+! pipe_error = (pipe(pipefd) < 0);
+! pid = fork();
+! if (pid > 0) /* Parent */
+ {
+! /* Give the child some time to do the setsid(), otherwise the
+! * exit() may kill the child too (when starting gvim from inside a
+! * gvim). */
+! if (pipe_error)
+! ui_delay(300L, TRUE);
+! else
+ {
+! /* The read returns when the child closes the pipe (or when
+! * the child dies for some reason). */
+! close(pipefd[1]);
+! ignored = (int)read(pipefd[0], &dummy, (size_t)1);
+! close(pipefd[0]);
+ }
+!
+! /* When swapping screens we may need to go to the next line, e.g.,
+! * after a hit-enter prompt and using ":gui". */
+! if (newline_on_exit)
+! mch_errmsg("\r\n");
+!
+! /*
+! * The parent must skip the normal exit() processing, the child
+! * will do it. For example, GTK messes up signals when exiting.
+! */
+! _exit(0);
+ }
+
+! # if defined(HAVE_SETSID) || defined(HAVE_SETPGID)
+ /*
+! * Change our process group. On some systems/shells a CTRL-C in the
+! * shell where Vim was started would otherwise kill gvim!
+ */
+! if (pid == 0) /* child */
+ # if defined(HAVE_SETSID)
+! (void)setsid();
+ # else
+! (void)setpgid(0, 0);
+ # endif
+ # endif
+! if (!pipe_error)
+! {
+! close(pipefd[0]);
+! close(pipefd[1]);
+! }
+
+ # if defined(FEAT_GUI_GNOME) && defined(FEAT_SESSION)
+! /* Tell the session manager our new PID */
+! gui_mch_forked();
+ # endif
+ }
+- #else
+- # if defined(__QNXNTO__)
+- if (gui.in_use && dofork)
+- procmgr_daemon(0, PROCMGR_DAEMON_KEEPUMASK | PROCMGR_DAEMON_NOCHDIR |
+- PROCMGR_DAEMON_NOCLOSE | PROCMGR_DAEMON_NODEVNULL);
+- # endif
+- #endif
+
+! #ifdef FEAT_AUTOCMD
+! /* If the GUI started successfully, trigger the GUIEnter event, otherwise
+! * the GUIFailed event. */
+! gui_mch_update();
+! apply_autocmds(gui.in_use ? EVENT_GUIENTER : EVENT_GUIFAILED,
+! NULL, NULL, FALSE, curbuf);
+ #endif
+
+! --recursive;
+ }
+
+ /*
+ * Call this when vim starts up, whether or not the GUI is started
+ */
+--- 176,346 ----
+ display_errors();
+ }
+ #endif
++ --recursive;
++ }
+
+! #ifdef MAY_FORK
+!
+! /* for waitpid() */
+! # if defined(HAVE_SYS_WAIT_H) || defined(HAVE_UNION_WAIT)
+! # include <sys/wait.h>
+! # endif
+!
+! /*
+! * Create a new process, by forking. In the child, start the GUI, and in
+! * the parent, exit.
+! *
+! * If something goes wrong, this will return with gui.in_use still set
+! * to FALSE, in which case the caller should continue execution without
+! * the GUI.
+! *
+! * If the child fails to start the GUI, then the child will exit and the
+! * parent will return. If the child succeeds, then the parent will exit
+! * and the child will return.
+! */
+! static void
+! gui_do_fork()
+! {
+! #ifdef __QNXNTO__
+! procmgr_daemon(0, PROCMGR_DAEMON_KEEPUMASK | PROCMGR_DAEMON_NOCHDIR |
+! PROCMGR_DAEMON_NOCLOSE | PROCMGR_DAEMON_NODEVNULL);
+! gui_attempt_start();
+! return;
+! #else
+! int pipefd[2]; /* pipe between parent and child */
+! int pipe_error;
+! int status;
+! int exit_status;
+! pid_t pid = -1;
+! FILE *parent_file;
+!
+! /* Setup a pipe between the child and the parent, so that the parent
+! * knows when the child has done the setsid() call and is allowed to
+! * exit. */
+! pipe_error = (pipe(pipefd) < 0);
+! pid = fork();
+! if (pid < 0) /* Fork error */
+ {
+! EMSG(_("E851: Failed to create a new process for the GUI"));
+! return;
+! }
+! else if (pid > 0) /* Parent */
+! {
+! /* Give the child some time to do the setsid(), otherwise the
+! * exit() may kill the child too (when starting gvim from inside a
+! * gvim). */
+! if (!pipe_error)
+ {
+! /* The read returns when the child closes the pipe (or when
+! * the child dies for some reason). */
+! close(pipefd[1]);
+! status = gui_read_child_pipe(pipefd[0]);
+! if (status == GUI_CHILD_FAILED)
+ {
+! /* The child failed to start the GUI, so the caller must
+! * continue. There may be more error information written
+! * to stderr by the child. */
+! # ifdef __NeXT__
+! wait4(pid, &exit_status, 0, (struct rusage *)0);
+! # else
+! waitpid(pid, &exit_status, 0);
+! # endif
+! EMSG(_("E852: The child process failed to start the GUI"));
+! return;
+ }
+! else if (status == GUI_CHILD_IO_ERROR)
+! {
+! pipe_error = TRUE;
+! }
+! /* else GUI_CHILD_OK: parent exit */
+ }
+
+! if (pipe_error)
+! ui_delay(300L, TRUE);
+!
+! /* When swapping screens we may need to go to the next line, e.g.,
+! * after a hit-enter prompt and using ":gui". */
+! if (newline_on_exit)
+! mch_errmsg("\r\n");
+!
+ /*
+! * The parent must skip the normal exit() processing, the child
+! * will do it. For example, GTK messes up signals when exiting.
+ */
+! _exit(0);
+! }
+! /* Child */
+!
+! # if defined(HAVE_SETSID) || defined(HAVE_SETPGID)
+! /*
+! * Change our process group. On some systems/shells a CTRL-C in the
+! * shell where Vim was started would otherwise kill gvim!
+! */
+ # if defined(HAVE_SETSID)
+! (void)setsid();
+ # else
+! (void)setpgid(0, 0);
+ # endif
+ # endif
+! if (!pipe_error)
+! close(pipefd[0]);
+
+ # if defined(FEAT_GUI_GNOME) && defined(FEAT_SESSION)
+! /* Tell the session manager our new PID */
+! gui_mch_forked();
+ # endif
++
++ if (!pipe_error)
++ parent_file = fdopen(pipefd[1], "w");
++ else
++ parent_file = NULL;
++
++ /* Try to start the GUI */
++ gui_attempt_start();
++
++ /* Notify the parent */
++ if (parent_file != NULL)
++ {
++ fputs(gui.in_use ? "ok" : "fail", parent_file);
++ fclose(parent_file);
+ }
+
+! /* If we failed to start the GUI, exit now. */
+! if (!gui.in_use)
+! exit(1);
+ #endif
++ }
+
+! /*
+! * Read from a pipe assumed to be connected to the child process (this
+! * function is called from the parent).
+! * Return GUI_CHILD_OK if the child successfully started the GUI,
+! * GUY_CHILD_FAILED if the child failed, or GUI_CHILD_IO_ERROR if there was
+! * some other error.
+! *
+! * The file descriptor will be closed before the function returns.
+! */
+! static int
+! gui_read_child_pipe(int fd)
+! {
+! size_t bytes_read;
+! FILE *file;
+! char buffer[10];
+!
+! file = fdopen(fd, "r");
+! if (!file)
+! return GUI_CHILD_IO_ERROR;
+!
+! bytes_read = fread(buffer, sizeof(char), sizeof(buffer)-1, file);
+! buffer[bytes_read] = '\0';
+! fclose(file);
+! if (strcmp(buffer, "ok") == 0)
+! return GUI_CHILD_OK;
+! return GUI_CHILD_FAILED;
+ }
+
++ #endif /* MAY_FORK */
++
+ /*
+ * Call this when vim starts up, whether or not the GUI is started
+ */
+*** ../vim-7.3.314/src/version.c 2011-09-14 19:01:38.000000000 +0200
+--- src/version.c 2011-09-14 19:02:45.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 315,
+ /**/
+
+--
+A)bort, R)etry, B)ang it with a large hammer
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.316 b/source/ap/vim/patches/7.3.316
new file mode 100644
index 000000000..96a7d42b3
--- /dev/null
+++ b/source/ap/vim/patches/7.3.316
@@ -0,0 +1,48 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.316
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.316 (after 7.3.306)
+Problem: Crash when 'colorcolumn' is set and closing buffer.
+Solution: Check for w_buffer to be NULL. (Yasuhiro Matsumoto)
+Files: src/option.c
+
+
+*** ../vim-7.3.315/src/option.c 2011-06-12 22:13:37.000000000 +0200
+--- src/option.c 2011-09-21 13:26:31.000000000 +0200
+***************
+*** 7036,7041 ****
+--- 7036,7044 ----
+ int i;
+ int j = 0;
+
++ if (wp->w_buffer == NULL)
++ return NULL; /* buffer was closed */
++
+ for (s = wp->w_p_cc; *s != NUL && count < 255;)
+ {
+ if (*s == '-' || *s == '+')
+*** ../vim-7.3.315/src/version.c 2011-09-14 19:04:35.000000000 +0200
+--- src/version.c 2011-09-21 13:40:05.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 316,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+25. You believe nothing looks sexier than a man in boxer shorts illuminated
+ only by a 17" inch svga monitor.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.317 b/source/ap/vim/patches/7.3.317
new file mode 100644
index 000000000..220cae218
--- /dev/null
+++ b/source/ap/vim/patches/7.3.317
@@ -0,0 +1,116 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.317
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.317
+Problem: Calling debug.debug() in Lua may cause Vim to hang.
+Solution: Add a better debug method. (Rob Hoelz, Luis Carvalho)
+Files: src/if_lua.c
+
+
+*** ../vim-7.3.316/src/if_lua.c 2011-01-17 19:53:20.000000000 +0100
+--- src/if_lua.c 2011-09-21 17:15:21.000000000 +0200
+***************
+*** 100,105 ****
+--- 100,106 ----
+ #define lua_setfield dll_lua_setfield
+ #define lua_rawset dll_lua_rawset
+ #define lua_rawseti dll_lua_rawseti
++ #define lua_remove dll_lua_remove
+ #define lua_setmetatable dll_lua_setmetatable
+ #define lua_call dll_lua_call
+ #define lua_pcall dll_lua_pcall
+***************
+*** 161,166 ****
+--- 162,168 ----
+ void (*dll_lua_setfield) (lua_State *L, int idx, const char *k);
+ void (*dll_lua_rawset) (lua_State *L, int idx);
+ void (*dll_lua_rawseti) (lua_State *L, int idx, int n);
++ void (*dll_lua_remove) (lua_State *L, int idx);
+ int (*dll_lua_setmetatable) (lua_State *L, int objindex);
+ void (*dll_lua_call) (lua_State *L, int nargs, int nresults);
+ int (*dll_lua_pcall) (lua_State *L, int nargs, int nresults, int errfunc);
+***************
+*** 229,234 ****
+--- 231,237 ----
+ {"lua_setfield", (luaV_function) &dll_lua_setfield},
+ {"lua_rawset", (luaV_function) &dll_lua_rawset},
+ {"lua_rawseti", (luaV_function) &dll_lua_rawseti},
++ {"lua_remove", (luaV_function) &dll_lua_remove},
+ {"lua_setmetatable", (luaV_function) &dll_lua_setmetatable},
+ {"lua_call", (luaV_function) &dll_lua_call},
+ {"lua_pcall", (luaV_function) &dll_lua_pcall},
+***************
+*** 924,929 ****
+--- 927,957 ----
+ }
+
+ static int
++ luaV_debug(lua_State *L)
++ {
++ lua_settop(L, 0);
++ lua_getglobal(L, "vim");
++ lua_getfield(L, -1, "eval");
++ lua_remove(L, -2); /* vim.eval at position 1 */
++ for (;;)
++ {
++ const char *input;
++ size_t l;
++ lua_pushvalue(L, 1); /* vim.eval */
++ lua_pushliteral(L, "input('lua_debug> ')");
++ lua_call(L, 1, 1); /* return string */
++ input = lua_tolstring(L, -1, &l);
++ if (l == 0 || strcmp(input, "cont") == 0)
++ return 0;
++ msg_putchar('\n'); /* avoid outputting on input line */
++ if (luaL_loadbuffer(L, input, l, "=(debug command)")
++ || lua_pcall(L, 0, 0, 0))
++ luaV_emsg(L);
++ lua_settop(L, 1); /* remove eventual returns, but keep vim.eval */
++ }
++ }
++
++ static int
+ luaV_command(lua_State *L)
+ {
+ do_cmdline_cmd((char_u *) luaL_checkstring(L, 1));
+***************
+*** 1082,1087 ****
+--- 1110,1120 ----
+ /* print */
+ lua_pushcfunction(L, luaV_print);
+ lua_setglobal(L, "print");
++ /* debug.debug */
++ lua_getglobal(L, "debug");
++ lua_pushcfunction(L, luaV_debug);
++ lua_setfield(L, -2, "debug");
++ lua_pop(L, 1);
+ /* free */
+ lua_pushlightuserdata(L, (void *) LUAVIM_FREE);
+ lua_pushcfunction(L, luaV_free);
+*** ../vim-7.3.316/src/version.c 2011-09-21 13:40:13.000000000 +0200
+--- src/version.c 2011-09-21 17:14:01.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 317,
+ /**/
+
+--
+Q: What is the difference betwee open-source and commercial software?
+A: If you have a problem with commercial software you can call a phone
+ number and they will tell you it might be solved in a future version.
+ For open-source software there isn't a phone number to call, but you
+ get the solution within a day.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.318 b/source/ap/vim/patches/7.3.318
new file mode 100644
index 000000000..369448023
--- /dev/null
+++ b/source/ap/vim/patches/7.3.318
@@ -0,0 +1,90 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.318
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.318
+Problem: "C" on the last line deletes that line if it's blank.
+Solution: Only delete the last line for a delete operation. (James Vega)
+Files: src/ops.c
+
+
+*** ../vim-7.3.317/src/ops.c 2011-08-10 12:10:55.000000000 +0200
+--- src/ops.c 2011-09-21 17:32:36.000000000 +0200
+***************
+*** 1922,1928 ****
+ curwin->w_cursor.coladd = 0;
+ }
+ #endif
+! if (oap->inclusive && oap->end.lnum == curbuf->b_ml.ml_line_count
+ && n > (int)STRLEN(ml_get(oap->end.lnum)))
+ {
+ /* Special case: gH<Del> deletes the last line. */
+--- 1922,1930 ----
+ curwin->w_cursor.coladd = 0;
+ }
+ #endif
+! if (oap->op_type == OP_DELETE
+! && oap->inclusive
+! && oap->end.lnum == curbuf->b_ml.ml_line_count
+ && n > (int)STRLEN(ml_get(oap->end.lnum)))
+ {
+ /* Special case: gH<Del> deletes the last line. */
+***************
+*** 3331,3338 ****
+ if (regname == '=')
+ {
+ /* For the = register we need to split the string at NL
+! * characters. */
+! /* Loop twice: count the number of lines and save them. */
+ for (;;)
+ {
+ y_size = 0;
+--- 3333,3340 ----
+ if (regname == '=')
+ {
+ /* For the = register we need to split the string at NL
+! * characters.
+! * Loop twice: count the number of lines and save them. */
+ for (;;)
+ {
+ y_size = 0;
+***************
+*** 3348,3354 ****
+ if (y_array != NULL)
+ *ptr = NUL;
+ ++ptr;
+! /* A trailing '\n' makes the string linewise */
+ if (*ptr == NUL)
+ {
+ y_type = MLINE;
+--- 3350,3356 ----
+ if (y_array != NULL)
+ *ptr = NUL;
+ ++ptr;
+! /* A trailing '\n' makes the register linewise. */
+ if (*ptr == NUL)
+ {
+ y_type = MLINE;
+*** ../vim-7.3.317/src/version.c 2011-09-21 17:15:34.000000000 +0200
+--- src/version.c 2011-09-21 17:31:48.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 318,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+26. You check your mail. It says "no new messages." So you check it again.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.319 b/source/ap/vim/patches/7.3.319
new file mode 100644
index 000000000..68448ab63
--- /dev/null
+++ b/source/ap/vim/patches/7.3.319
@@ -0,0 +1,154 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.319
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.319 (after 7.3.311)
+Problem: Redobuff doesn't always include changes of the completion leader.
+Solution: Insert backspaces as needed. (idea by Taro Muraoka)
+Files: src/edit.c
+
+
+*** ../vim-7.3.318/src/edit.c 2011-09-14 16:52:02.000000000 +0200
+--- src/edit.c 2011-09-21 17:59:10.000000000 +0200
+***************
+*** 163,168 ****
+--- 163,169 ----
+ static void ins_compl_set_original_text __ARGS((char_u *str));
+ static void ins_compl_addfrommatch __ARGS((void));
+ static int ins_compl_prep __ARGS((int c));
++ static void ins_compl_fixRedoBufForLeader __ARGS((char_u *ptr_arg));
+ static buf_T *ins_compl_next_buf __ARGS((buf_T *buf, int flag));
+ #if defined(FEAT_COMPL_FUNC) || defined(FEAT_EVAL)
+ static void ins_compl_add_list __ARGS((list_T *list));
+***************
+*** 3713,3721 ****
+ * memory that was used, and make sure we can redo the insert. */
+ if (compl_curr_match != NULL || compl_leader != NULL || c == Ctrl_E)
+ {
+- char_u *p;
+- int temp = 0;
+-
+ /*
+ * If any of the original typed text has been changed, eg when
+ * ignorecase is set, we must add back-spaces to the redo
+--- 3714,3719 ----
+***************
+*** 3726,3750 ****
+ */
+ if (compl_curr_match != NULL && compl_used_match && c != Ctrl_E)
+ ptr = compl_curr_match->cp_str;
+- else if (compl_leader != NULL)
+- ptr = compl_leader;
+ else
+! ptr = compl_orig_text;
+! if (compl_orig_text != NULL)
+! {
+! p = compl_orig_text;
+! for (temp = 0; p[temp] != NUL && p[temp] == ptr[temp];
+! ++temp)
+! ;
+! #ifdef FEAT_MBYTE
+! if (temp > 0)
+! temp -= (*mb_head_off)(compl_orig_text, p + temp);
+! #endif
+! for (p += temp; *p != NUL; mb_ptr_adv(p))
+! AppendCharToRedobuff(K_BS);
+! }
+! if (ptr != NULL)
+! AppendToRedobuffLit(ptr + temp, -1);
+ }
+
+ #ifdef FEAT_CINDENT
+--- 3724,3732 ----
+ */
+ if (compl_curr_match != NULL && compl_used_match && c != Ctrl_E)
+ ptr = compl_curr_match->cp_str;
+ else
+! ptr = NULL;
+! ins_compl_fixRedoBufForLeader(ptr);
+ }
+
+ #ifdef FEAT_CINDENT
+***************
+*** 3834,3839 ****
+--- 3816,3859 ----
+ }
+
+ /*
++ * Fix the redo buffer for the completion leader replacing some of the typed
++ * text. This inserts backspaces and appends the changed text.
++ * "ptr" is the known leader text or NUL.
++ */
++ static void
++ ins_compl_fixRedoBufForLeader(ptr_arg)
++ char_u *ptr_arg;
++ {
++ int len;
++ char_u *p;
++ char_u *ptr = ptr_arg;
++
++ if (ptr == NULL)
++ {
++ if (compl_leader != NULL)
++ ptr = compl_leader;
++ else
++ return; /* nothing to do */
++ }
++ if (compl_orig_text != NULL)
++ {
++ p = compl_orig_text;
++ for (len = 0; p[len] != NUL && p[len] == ptr[len]; ++len)
++ ;
++ #ifdef FEAT_MBYTE
++ if (len > 0)
++ len -= (*mb_head_off)(p, p + len);
++ #endif
++ for (p += len; *p != NUL; mb_ptr_adv(p))
++ AppendCharToRedobuff(K_BS);
++ }
++ else
++ len = 0;
++ if (ptr != NULL)
++ AppendToRedobuffLit(ptr + len, -1);
++ }
++
++ /*
+ * Loops through the list of windows, loaded-buffers or non-loaded-buffers
+ * (depending on flag) starting from buf and looking for a non-scanned
+ * buffer (other than curbuf). curbuf is special, if it is called with
+***************
+*** 5241,5246 ****
+--- 5261,5270 ----
+ else
+ edit_submode = (char_u *)_(CTRL_X_MSG(ctrl_x_mode));
+
++ /* If any of the original typed text has been changed we need to fix
++ * the redo buffer. */
++ ins_compl_fixRedoBufForLeader(NULL);
++
+ /* Always add completion for the original text. */
+ vim_free(compl_orig_text);
+ compl_orig_text = vim_strnsave(line + compl_col, compl_length);
+*** ../vim-7.3.318/src/version.c 2011-09-21 17:33:49.000000000 +0200
+--- src/version.c 2011-09-21 18:21:07.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 319,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+27. You refer to your age as 3.x.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.320 b/source/ap/vim/patches/7.3.320
new file mode 100644
index 000000000..3b957c290
--- /dev/null
+++ b/source/ap/vim/patches/7.3.320
@@ -0,0 +1,130 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.320
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.320
+Problem: When a 0xa0 character is in a sourced file the error message for
+ unrecognized command does not show the problem.
+Solution: Display 0xa0 as <a0>.
+Files: src/ex_docmd.c
+
+
+*** ../vim-7.3.319/src/ex_docmd.c 2011-07-20 16:36:35.000000000 +0200
+--- src/ex_docmd.c 2011-09-21 19:02:15.000000000 +0200
+***************
+*** 61,66 ****
+--- 61,67 ----
+ static char_u *do_one_cmd __ARGS((char_u **, int, char_u *(*fgetline)(int, void *, int), void *cookie));
+ static int if_level = 0; /* depth in :if */
+ #endif
++ static void append_command __ARGS((char_u *cmd));
+ static char_u *find_command __ARGS((exarg_T *eap, int *full));
+
+ static void ex_abbreviate __ARGS((exarg_T *eap));
+***************
+*** 2136,2145 ****
+ {
+ STRCPY(IObuff, _("E492: Not an editor command"));
+ if (!sourcing)
+! {
+! STRCAT(IObuff, ": ");
+! STRNCAT(IObuff, *cmdlinep, 40);
+! }
+ errormsg = IObuff;
+ }
+ goto doend;
+--- 2137,2143 ----
+ {
+ STRCPY(IObuff, _("E492: Not an editor command"));
+ if (!sourcing)
+! append_command(*cmdlinep);
+ errormsg = IObuff;
+ }
+ goto doend;
+***************
+*** 2708,2715 ****
+ STRCPY(IObuff, errormsg);
+ errormsg = IObuff;
+ }
+! STRCAT(errormsg, ": ");
+! STRNCAT(errormsg, *cmdlinep, IOSIZE - STRLEN(IObuff) - 1);
+ }
+ emsg(errormsg);
+ }
+--- 2706,2712 ----
+ STRCPY(IObuff, errormsg);
+ errormsg = IObuff;
+ }
+! append_command(*cmdlinep);
+ }
+ emsg(errormsg);
+ }
+***************
+*** 2797,2802 ****
+--- 2794,2835 ----
+ }
+
+ /*
++ * Append "cmd" to the error message in IObuff.
++ * Takes care of limiting the length and handling 0xa0, which would be
++ * invisible otherwise.
++ */
++ static void
++ append_command(cmd)
++ char_u *cmd;
++ {
++ char_u *s = cmd;
++ char_u *d;
++
++ STRCAT(IObuff, ": ");
++ d = IObuff + STRLEN(IObuff);
++ while (*s != NUL && d - IObuff < IOSIZE - 7)
++ {
++ if (
++ #ifdef FEAT_MBYTE
++ enc_utf8 ? (s[0] == 0xc2 && s[1] == 0xa0) :
++ #endif
++ *s == 0xa0)
++ {
++ s +=
++ #ifdef FEAT_MBYTE
++ enc_utf8 ? 2 :
++ #endif
++ 1;
++ STRCPY(d, "<a0>");
++ d += 4;
++ }
++ else
++ MB_COPY_CHAR(s, d);
++ }
++ *d = NUL;
++ }
++
++ /*
+ * Find an Ex command by its name, either built-in or user.
+ * Start of the name can be found at eap->cmd.
+ * Returns pointer to char after the command name.
+*** ../vim-7.3.319/src/version.c 2011-09-21 18:23:02.000000000 +0200
+--- src/version.c 2011-09-21 19:04:35.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 320,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+28. You have comandeered your teenager's phone line for the net and even his
+ friends know not to call on his line anymore.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.321 b/source/ap/vim/patches/7.3.321
new file mode 100644
index 000000000..6303b013c
--- /dev/null
+++ b/source/ap/vim/patches/7.3.321
@@ -0,0 +1,304 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.321
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.321
+Problem: Code not following Vim style.
+Solution: Fix the style. (Elias Diem)
+Files: src/os_qnx.c
+
+
+*** ../vim-7.3.320/src/os_qnx.c 2011-06-19 01:14:22.000000000 +0200
+--- src/os_qnx.c 2011-09-21 19:48:08.000000000 +0200
+***************
+*** 24,33 ****
+ #if defined(FEAT_GUI_PHOTON)
+ PhChannelParms_t parms;
+
+! memset( &parms, 0, sizeof( parms ) );
+ parms.flags = Ph_DYNAMIC_BUFFER;
+
+! is_photon_available = (PhAttach( NULL, &parms ) != NULL) ? TRUE : FALSE;
+ #endif
+ }
+
+--- 24,33 ----
+ #if defined(FEAT_GUI_PHOTON)
+ PhChannelParms_t parms;
+
+! memset(&parms, 0, sizeof(parms));
+ parms.flags = Ph_DYNAMIC_BUFFER;
+
+! is_photon_available = (PhAttach(NULL, &parms) != NULL) ? TRUE : FALSE;
+ #endif
+ }
+
+***************
+*** 39,46 ****
+ /* Turn on the clipboard for a console vim when photon is running */
+ void qnx_clip_init()
+ {
+! if( is_photon_available == TRUE && !gui.in_use)
+! clip_init( TRUE );
+ }
+
+ /*****************************************************************************/
+--- 39,46 ----
+ /* Turn on the clipboard for a console vim when photon is running */
+ void qnx_clip_init()
+ {
+! if (is_photon_available == TRUE && !gui.in_use)
+! clip_init(TRUE);
+ }
+
+ /*****************************************************************************/
+***************
+*** 48,79 ****
+
+ /* No support for owning the clipboard */
+ int
+! clip_mch_own_selection( VimClipboard *cbd )
+ {
+ return FALSE;
+ }
+
+ void
+! clip_mch_lose_selection( VimClipboard *cbd )
+ {
+ }
+
+ void
+! clip_mch_request_selection( VimClipboard *cbd )
+ {
+ int type = MLINE, clip_length = 0, is_type_set = FALSE;
+ void *cbdata;
+ PhClipHeader *clip_header;
+ char_u *clip_text = NULL;
+
+! cbdata = PhClipboardPasteStart( PhInputGroup( NULL ));
+! if( cbdata != NULL )
+ {
+ /* Look for the vim specific clip first */
+! clip_header = PhClipboardPasteType( cbdata, CLIP_TYPE_VIM );
+! if( clip_header != NULL && clip_header->data != NULL )
+ {
+! switch( *(char *) clip_header->data )
+ {
+ default: /* fallthrough to line type */
+ case 'L': type = MLINE; break;
+--- 48,79 ----
+
+ /* No support for owning the clipboard */
+ int
+! clip_mch_own_selection(VimClipboard *cbd)
+ {
+ return FALSE;
+ }
+
+ void
+! clip_mch_lose_selection(VimClipboard *cbd)
+ {
+ }
+
+ void
+! clip_mch_request_selection(VimClipboard *cbd)
+ {
+ int type = MLINE, clip_length = 0, is_type_set = FALSE;
+ void *cbdata;
+ PhClipHeader *clip_header;
+ char_u *clip_text = NULL;
+
+! cbdata = PhClipboardPasteStart(PhInputGroup(NULL));
+! if (cbdata != NULL)
+ {
+ /* Look for the vim specific clip first */
+! clip_header = PhClipboardPasteType(cbdata, CLIP_TYPE_VIM);
+! if (clip_header != NULL && clip_header->data != NULL)
+ {
+! switch(*(char *) clip_header->data)
+ {
+ default: /* fallthrough to line type */
+ case 'L': type = MLINE; break;
+***************
+*** 86,112 ****
+ }
+
+ /* Try for just normal text */
+! clip_header = PhClipboardPasteType( cbdata, CLIP_TYPE_TEXT );
+! if( clip_header != NULL )
+ {
+ clip_text = clip_header->data;
+ clip_length = clip_header->length - 1;
+
+! if( clip_text != NULL && is_type_set == FALSE )
+ type = MAUTO;
+ }
+
+! if( (clip_text != NULL) && (clip_length > 0) )
+ {
+! clip_yank_selection( type, clip_text, clip_length, cbd );
+ }
+
+! PhClipboardPasteFinish( cbdata );
+ }
+ }
+
+ void
+! clip_mch_set_selection( VimClipboard *cbd )
+ {
+ int type;
+ long_u len;
+--- 86,112 ----
+ }
+
+ /* Try for just normal text */
+! clip_header = PhClipboardPasteType(cbdata, CLIP_TYPE_TEXT);
+! if (clip_header != NULL)
+ {
+ clip_text = clip_header->data;
+ clip_length = clip_header->length - 1;
+
+! if (clip_text != NULL && is_type_set == FALSE)
+ type = MAUTO;
+ }
+
+! if ((clip_text != NULL) && (clip_length > 0))
+ {
+! clip_yank_selection(type, clip_text, clip_length, cbd);
+ }
+
+! PhClipboardPasteFinish(cbdata);
+ }
+ }
+
+ void
+! clip_mch_set_selection(VimClipboard *cbd)
+ {
+ int type;
+ long_u len;
+***************
+*** 114,144 ****
+ PhClipHeader clip_header[2];
+
+ /* Prevent recursion from clip_get_selection() */
+! if( cbd->owned == TRUE )
+ return;
+
+ cbd->owned = TRUE;
+! clip_get_selection( cbd );
+ cbd->owned = FALSE;
+
+! type = clip_convert_selection( &str, &len, cbd );
+! if( type >= 0 )
+ {
+! text_clip = lalloc( len + 1, TRUE ); /* Normal text */
+
+! if( text_clip && vim_clip )
+ {
+! memset( clip_header, 0, sizeof( clip_header ) );
+
+! STRNCPY( clip_header[0].type, CLIP_TYPE_VIM, 8 );
+! clip_header[0].length = sizeof( vim_clip );
+ clip_header[0].data = vim_clip;
+
+! STRNCPY( clip_header[1].type, CLIP_TYPE_TEXT, 8 );
+ clip_header[1].length = len + 1;
+ clip_header[1].data = text_clip;
+
+! switch( type )
+ {
+ default: /* fallthrough to MLINE */
+ case MLINE: *vim_clip = 'L'; break;
+--- 114,144 ----
+ PhClipHeader clip_header[2];
+
+ /* Prevent recursion from clip_get_selection() */
+! if (cbd->owned == TRUE)
+ return;
+
+ cbd->owned = TRUE;
+! clip_get_selection(cbd);
+ cbd->owned = FALSE;
+
+! type = clip_convert_selection(&str, &len, cbd);
+! if (type >= 0)
+ {
+! text_clip = lalloc(len + 1, TRUE); /* Normal text */
+
+! if (text_clip && vim_clip)
+ {
+! memset(clip_header, 0, sizeof(clip_header));
+
+! STRNCPY(clip_header[0].type, CLIP_TYPE_VIM, 8);
+! clip_header[0].length = sizeof(vim_clip);
+ clip_header[0].data = vim_clip;
+
+! STRNCPY(clip_header[1].type, CLIP_TYPE_TEXT, 8);
+ clip_header[1].length = len + 1;
+ clip_header[1].data = text_clip;
+
+! switch(type)
+ {
+ default: /* fallthrough to MLINE */
+ case MLINE: *vim_clip = 'L'; break;
+***************
+*** 148,161 ****
+ #endif
+ }
+
+! vim_strncpy( text_clip, str, len );
+
+ vim_clip[ 1 ] = NUL;
+
+! PhClipboardCopy( PhInputGroup( NULL ), 2, clip_header);
+ }
+! vim_free( text_clip );
+ }
+! vim_free( str );
+ }
+ #endif
+--- 148,161 ----
+ #endif
+ }
+
+! vim_strncpy(text_clip, str, len);
+
+ vim_clip[ 1 ] = NUL;
+
+! PhClipboardCopy(PhInputGroup(NULL), 2, clip_header);
+ }
+! vim_free(text_clip);
+ }
+! vim_free(str);
+ }
+ #endif
+*** ../vim-7.3.320/src/version.c 2011-09-21 19:10:42.000000000 +0200
+--- src/version.c 2011-09-21 19:47:50.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 321,
+ /**/
+
+--
+Bypasses are devices that allow some people to dash from point A to
+point B very fast while other people dash from point B to point A very
+fast. People living at point C, being a point directly in between, are
+often given to wonder what's so great about point A that so many people
+from point B are so keen to get there and what's so great about point B
+that so many people from point A are so keen to get there. They often
+wish that people would just once and for all work out where the hell
+they wanted to be.
+ -- Douglas Adams, "The Hitchhiker's Guide to the Galaxy"
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.322 b/source/ap/vim/patches/7.3.322
new file mode 100644
index 000000000..d81b9ec63
--- /dev/null
+++ b/source/ap/vim/patches/7.3.322
@@ -0,0 +1,52 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.322
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.322
+Problem: #ifdef for PDP_RETVAL doesn't work, INT_PTR can be a typedef.
+Solution: Check the MSC version and 64 bit flags. (Sergiu Dotenco)
+Files: src/os_mswin.c
+
+
+*** ../vim-7.3.321/src/os_mswin.c 2011-08-10 17:07:56.000000000 +0200
+--- src/os_mswin.c 2011-09-21 20:09:05.000000000 +0200
+***************
+*** 1781,1787 ****
+ }
+
+ /* Attempt to make this work for old and new compilers */
+! #if !defined(_MSC_VER) || (_MSC_VER < 1300) || !defined(INT_PTR)
+ # define PDP_RETVAL BOOL
+ #else
+ # define PDP_RETVAL INT_PTR
+--- 1781,1787 ----
+ }
+
+ /* Attempt to make this work for old and new compilers */
+! #if !defined(_WIN64) && (!defined(_MSC_VER) || _MSC_VER < 1300)
+ # define PDP_RETVAL BOOL
+ #else
+ # define PDP_RETVAL INT_PTR
+*** ../vim-7.3.321/src/version.c 2011-09-21 19:50:00.000000000 +0200
+--- src/version.c 2011-09-21 20:08:29.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 322,
+ /**/
+
+--
+Don't Panic!
+ -- The Hitchhiker's Guide to the Galaxy
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.323 b/source/ap/vim/patches/7.3.323
new file mode 100644
index 000000000..10f6d1939
--- /dev/null
+++ b/source/ap/vim/patches/7.3.323
@@ -0,0 +1,52 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.323
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.323
+Problem: The default 'errorformat' does not ignore some "included from"
+ lines.
+Solution: Add a few more patterns. (Ben Boeckel)
+Files: src/option.h
+
+
+*** ../vim-7.3.322/src/option.h 2011-07-27 13:59:12.000000000 +0200
+--- src/option.h 2011-09-30 14:32:13.000000000 +0200
+***************
+*** 33,39 ****
+ # ifdef EBCDIC
+ #define DFLT_EFM "%*[^ ] %*[^ ] %f:%l%*[ ]%m,%*[^\"]\"%f\"%*\\D%l: %m,\"%f\"%*\\D%l: %m,%f:%l:%c:%m,%f(%l):%m,%f:%l:%m,\"%f\"\\, line %l%*\\D%c%*[^ ] %m,%D%*\\a[%*\\d]: Entering directory `%f',%X%*\\a[%*\\d]: Leaving directory `%f',%DMaking %*\\a in %f,%f|%l| %m"
+ # else
+! #define DFLT_EFM "%*[^\"]\"%f\"%*\\D%l: %m,\"%f\"%*\\D%l: %m,%-G%f:%l: (Each undeclared identifier is reported only once,%-G%f:%l: for each function it appears in.),%-GIn file included from %f:%l:%c:,%-GIn file included from %f:%l:%c,%-GIn file included from %f:%l,%-Gfrom %f:%l:%c,%-Gfrom %f:%l,%f:%l:%c:%m,%f(%l):%m,%f:%l:%m,\"%f\"\\, line %l%*\\D%c%*[^ ] %m,%D%*\\a[%*\\d]: Entering directory `%f',%X%*\\a[%*\\d]: Leaving directory `%f',%D%*\\a: Entering directory `%f',%X%*\\a: Leaving directory `%f',%DMaking %*\\a in %f,%f|%l| %m"
+ # endif
+ # endif
+ # endif
+--- 33,39 ----
+ # ifdef EBCDIC
+ #define DFLT_EFM "%*[^ ] %*[^ ] %f:%l%*[ ]%m,%*[^\"]\"%f\"%*\\D%l: %m,\"%f\"%*\\D%l: %m,%f:%l:%c:%m,%f(%l):%m,%f:%l:%m,\"%f\"\\, line %l%*\\D%c%*[^ ] %m,%D%*\\a[%*\\d]: Entering directory `%f',%X%*\\a[%*\\d]: Leaving directory `%f',%DMaking %*\\a in %f,%f|%l| %m"
+ # else
+! #define DFLT_EFM "%*[^\"]\"%f\"%*\\D%l: %m,\"%f\"%*\\D%l: %m,%-G%f:%l: (Each undeclared identifier is reported only once,%-G%f:%l: for each function it appears in.),%-GIn file included from %f:%l:%c:,%-GIn file included from %f:%l:%c\\,,%-GIn file included from %f:%l:%c,%-GIn file included from %f:%l,%-G%*[ ]from %f:%l:%c,%-G%*[ ]from %f:%l:,%-G%*[ ]from %f:%l\\,,%-G%*[ ]from %f:%l,%f:%l:%c:%m,%f(%l):%m,%f:%l:%m,\"%f\"\\, line %l%*\\D%c%*[^ ] %m,%D%*\\a[%*\\d]: Entering directory `%f',%X%*\\a[%*\\d]: Leaving directory `%f',%D%*\\a: Entering directory `%f',%X%*\\a: Leaving directory `%f',%DMaking %*\\a in %f,%f|%l| %m"
+ # endif
+ # endif
+ # endif
+*** ../vim-7.3.322/src/version.c 2011-09-21 20:09:38.000000000 +0200
+--- src/version.c 2011-09-30 14:38:59.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 323,
+ /**/
+
+--
+Due knot trussed yore spell chequer two fined awl miss steaks.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.324 b/source/ap/vim/patches/7.3.324
new file mode 100644
index 000000000..59b5c6c07
--- /dev/null
+++ b/source/ap/vim/patches/7.3.324
@@ -0,0 +1,53 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.324
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.324 (after 7.3.237)
+Problem: Completion for ":compiler" shows color scheme names.
+Solution: Fix the directory name. (James Vega)
+Files: src/ex_getln.c
+
+
+*** ../vim-7.3.323/src/ex_getln.c 2011-08-17 16:25:43.000000000 +0200
+--- src/ex_getln.c 2011-09-30 16:22:14.000000000 +0200
+***************
+*** 4546,4552 ****
+ }
+ if (xp->xp_context == EXPAND_COMPILER)
+ {
+! char *directories[] = {"colors", NULL};
+ return ExpandRTDir(pat, num_file, file, directories);
+ }
+ if (xp->xp_context == EXPAND_OWNSYNTAX)
+--- 4546,4552 ----
+ }
+ if (xp->xp_context == EXPAND_COMPILER)
+ {
+! char *directories[] = {"compiler", NULL};
+ return ExpandRTDir(pat, num_file, file, directories);
+ }
+ if (xp->xp_context == EXPAND_OWNSYNTAX)
+*** ../vim-7.3.323/src/version.c 2011-09-30 14:44:49.000000000 +0200
+--- src/version.c 2011-09-30 16:23:15.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 324,
+ /**/
+
+
+--
+hundred-and-one symptoms of being an internet addict:
+31. You code your homework in HTML and give your instructor the URL.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.325 b/source/ap/vim/patches/7.3.325
new file mode 100644
index 000000000..80ebc6deb
--- /dev/null
+++ b/source/ap/vim/patches/7.3.325
@@ -0,0 +1,64 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.325
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.325
+Problem: A duplicated function argument gives an internal error.
+Solution: Give a proper error message. (based on patch by Tyru)
+Files: src/eval.c
+
+
+*** ../vim-7.3.324/src/eval.c 2011-09-14 16:52:02.000000000 +0200
+--- src/eval.c 2011-09-30 16:32:20.000000000 +0200
+***************
+*** 20461,20466 ****
+--- 20461,20467 ----
+ exarg_T *eap;
+ {
+ char_u *theline;
++ int i;
+ int j;
+ int c;
+ int saved_did_emsg;
+***************
+*** 20707,20712 ****
+--- 20708,20722 ----
+ arg = vim_strsave(arg);
+ if (arg == NULL)
+ goto erret;
++
++ /* Check for duplicate argument name. */
++ for (i = 0; i < newargs.ga_len; ++i)
++ if (STRCMP(((char_u **)(newargs.ga_data))[i], arg) == 0)
++ {
++ EMSG2(_("E853: Duplicate argument name: %s"), arg);
++ goto erret;
++ }
++
+ ((char_u **)(newargs.ga_data))[newargs.ga_len] = arg;
+ *p = c;
+ newargs.ga_len++;
+*** ../vim-7.3.324/src/version.c 2011-09-30 16:23:21.000000000 +0200
+--- src/version.c 2011-09-30 16:39:16.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 325,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+32. You don't know what sex three of your closest friends are, because they
+ have neutral nicknames and you never bothered to ask.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.326 b/source/ap/vim/patches/7.3.326
new file mode 100644
index 000000000..4ad52e960
--- /dev/null
+++ b/source/ap/vim/patches/7.3.326
@@ -0,0 +1,285 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.326
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.326
+Problem: MingW 4.6 no longer supports the -mno-cygwin option.
+Solution: Split the Cygwin and MingW makefiles. (Matsushita Shougo)
+Files: src/GvimExt/Make_cyg.mak, src/GvimExt/Make_ming.mak,
+ src/Make_cyg.mak, src/Make_ming.mak, src/xxd/Make_ming.mak,
+ Filelist
+
+
+*** ../vim-7.3.325/src/GvimExt/Make_cyg.mak 2011-09-30 16:55:18.000000000 +0200
+--- src/GvimExt/Make_cyg.mak 2011-09-30 16:45:49.000000000 +0200
+***************
+*** 0 ****
+--- 1,77 ----
++ # Project: gvimext
++ # Generates gvimext.dll with gcc.
++ # To be used with Cygwin.
++ #
++ # Originally, the DLL base address was fixed: -Wl,--image-base=0x1C000000
++ # Now it is allocated dymanically by the linker by evaluating all DLLs
++ # already loaded in memory. The binary image contains as well information
++ # for automatic pseudo-rebasing, if needed by the system. ALV 2004-02-29
++
++ # If cross-compiling set this to yes, else set it to no
++ CROSS = no
++ #CROSS = yes
++ # For the old MinGW 2.95 (the one you get e.g. with debian woody)
++ # set the following variable to yes and check if the executables are
++ # really named that way.
++ # If you have a newer MinGW or you are using cygwin set it to no and
++ # check also the executables
++ MINGWOLD = no
++
++ # Link against the shared versions of libgcc/libstdc++ by default. Set
++ # STATIC_STDCPLUS to "yes" to link against static versions instead.
++ STATIC_STDCPLUS=no
++ #STATIC_STDCPLUS=yes
++
++ # Note: -static-libstdc++ is not available until gcc 4.5.x.
++ LDFLAGS += -shared
++ ifeq (yes, $(STATIC_STDCPLUS))
++ LDFLAGS += -static-libgcc -static-libstdc++
++ endif
++
++ ifeq ($(CROSS),yes)
++ DEL = rm
++ ifeq ($(MINGWOLD),yes)
++ CXXFLAGS := -O2 -mno-cygwin -fvtable-thunks
++ else
++ CXXFLAGS := -O2 -mno-cygwin
++ endif
++ else
++ CXXFLAGS := -O2 -mno-cygwin
++ ifneq (sh.exe, $(SHELL))
++ DEL = rm
++ else
++ DEL = del
++ endif
++ endif
++ CXX := $(CROSS_COMPILE)g++
++ WINDRES := $(CROSS_COMPILE)windres
++ WINDRES_CXX = $(CXX)
++ WINDRES_FLAGS = --preprocessor="$(WINDRES_CXX) -E -xc" -DRC_INVOKED
++ LIBS := -luuid
++ RES := gvimext.res
++ DEFFILE = gvimext_ming.def
++ OBJ := gvimext.o
++
++ DLL := gvimext.dll
++
++ .PHONY: all all-before all-after clean clean-custom
++
++ all: all-before $(DLL) all-after
++
++ $(DLL): $(OBJ) $(RES) $(DEFFILE)
++ $(CXX) $(LDFLAGS) $(CXXFLAGS) -s -o $@ \
++ -Wl,--enable-auto-image-base \
++ -Wl,--enable-auto-import \
++ -Wl,--whole-archive \
++ $^ \
++ -Wl,--no-whole-archive \
++ $(LIBS)
++
++ gvimext.o: gvimext.cpp
++ $(CXX) $(CXXFLAGS) -DFEAT_GETTEXT -c $? -o $@
++
++ $(RES): gvimext_ming.rc
++ $(WINDRES) $(WINDRES_FLAGS) --input-format=rc --output-format=coff -DMING $? -o $@
++
++ clean: clean-custom
++ -$(DEL) $(OBJ) $(RES) $(DLL)
+*** ../vim-7.3.325/src/GvimExt/Make_ming.mak 2010-12-30 14:50:46.000000000 +0100
+--- src/GvimExt/Make_ming.mak 2011-09-30 16:47:09.000000000 +0200
+***************
+*** 1,6 ****
+ # Project: gvimext
+ # Generates gvimext.dll with gcc.
+! # Can be used for Cygwin and MingW (MingW ignores -mno-cygwin)
+ #
+ # Originally, the DLL base address was fixed: -Wl,--image-base=0x1C000000
+ # Now it is allocated dymanically by the linker by evaluating all DLLs
+--- 1,6 ----
+ # Project: gvimext
+ # Generates gvimext.dll with gcc.
+! # To be used with MingW.
+ #
+ # Originally, the DLL base address was fixed: -Wl,--image-base=0x1C000000
+ # Now it is allocated dymanically by the linker by evaluating all DLLs
+***************
+*** 31,42 ****
+ ifeq ($(CROSS),yes)
+ DEL = rm
+ ifeq ($(MINGWOLD),yes)
+! CXXFLAGS := -O2 -mno-cygwin -fvtable-thunks
+ else
+! CXXFLAGS := -O2 -mno-cygwin
+ endif
+ else
+! CXXFLAGS := -O2 -mno-cygwin
+ ifneq (sh.exe, $(SHELL))
+ DEL = rm
+ else
+--- 31,42 ----
+ ifeq ($(CROSS),yes)
+ DEL = rm
+ ifeq ($(MINGWOLD),yes)
+! CXXFLAGS := -O2 -fvtable-thunks
+ else
+! CXXFLAGS := -O2
+ endif
+ else
+! CXXFLAGS := -O2
+ ifneq (sh.exe, $(SHELL))
+ DEL = rm
+ else
+***************
+*** 75,78 ****
+
+ clean: clean-custom
+ -$(DEL) $(OBJ) $(RES) $(DLL)
+-
+--- 75,77 ----
+*** ../vim-7.3.325/src/Make_cyg.mak 2010-11-03 21:59:23.000000000 +0100
+--- src/Make_cyg.mak 2011-09-30 16:48:11.000000000 +0200
+***************
+*** 536,542 ****
+ $(MAKE) -C xxd -f Make_cyg.mak CC=$(CC) USEDLL=$(USEDLL)
+
+ GvimExt/gvimext.dll: GvimExt/gvimext.cpp GvimExt/gvimext.rc GvimExt/gvimext.h
+! $(MAKE) -C GvimExt -f Make_ming.mak CROSS_COMPILE=$(CROSS_COMPILE)
+
+ vimrun.exe: vimrun.c
+ $(CC) $(CFLAGS) -o vimrun.exe vimrun.c $(LIBS)
+--- 536,542 ----
+ $(MAKE) -C xxd -f Make_cyg.mak CC=$(CC) USEDLL=$(USEDLL)
+
+ GvimExt/gvimext.dll: GvimExt/gvimext.cpp GvimExt/gvimext.rc GvimExt/gvimext.h
+! $(MAKE) -C GvimExt -f Make_cyg.mak CROSS_COMPILE=$(CROSS_COMPILE)
+
+ vimrun.exe: vimrun.c
+ $(CC) $(CFLAGS) -o vimrun.exe vimrun.c $(LIBS)
+***************
+*** 565,571 ****
+ endif
+ -$(DEL) pathdef.c
+ $(MAKE) -C xxd -f Make_cyg.mak clean
+! $(MAKE) -C GvimExt -f Make_ming.mak clean
+
+ distclean: clean
+ -$(DEL) obj$(DIRSLASH)*.o
+--- 565,571 ----
+ endif
+ -$(DEL) pathdef.c
+ $(MAKE) -C xxd -f Make_cyg.mak clean
+! $(MAKE) -C GvimExt -f Make_cyg.mak clean
+
+ distclean: clean
+ -$(DEL) obj$(DIRSLASH)*.o
+*** ../vim-7.3.325/src/Make_ming.mak 2011-09-14 10:49:44.000000000 +0200
+--- src/Make_ming.mak 2011-09-30 16:48:11.000000000 +0200
+***************
+*** 641,647 ****
+ upx vim.exe
+
+ xxd/xxd.exe: xxd/xxd.c
+! $(MAKE) -C xxd -f Make_cyg.mak CC=$(CC)
+
+ GvimExt/gvimext.dll: GvimExt/gvimext.cpp GvimExt/gvimext.rc GvimExt/gvimext.h
+ $(MAKE) -C GvimExt -f Make_ming.mak CROSS=$(CROSS) CROSS_COMPILE=$(CROSS_COMPILE)
+--- 641,647 ----
+ upx vim.exe
+
+ xxd/xxd.exe: xxd/xxd.c
+! $(MAKE) -C xxd -f Make_ming.mak CC=$(CC)
+
+ GvimExt/gvimext.dll: GvimExt/gvimext.cpp GvimExt/gvimext.rc GvimExt/gvimext.h
+ $(MAKE) -C GvimExt -f Make_ming.mak CROSS=$(CROSS) CROSS_COMPILE=$(CROSS_COMPILE)
+***************
+*** 659,665 ****
+ -$(DEL) mzscheme_base.c
+ endif
+ $(MAKE) -C GvimExt -f Make_ming.mak clean
+! $(MAKE) -C xxd -f Make_cyg.mak clean
+
+ ###########################################################################
+ INCL = vim.h feature.h os_win32.h os_dos.h ascii.h keymap.h term.h macros.h \
+--- 659,665 ----
+ -$(DEL) mzscheme_base.c
+ endif
+ $(MAKE) -C GvimExt -f Make_ming.mak clean
+! $(MAKE) -C xxd -f Make_ming.mak clean
+
+ ###########################################################################
+ INCL = vim.h feature.h os_win32.h os_dos.h ascii.h keymap.h term.h macros.h \
+*** ../vim-7.3.325/src/xxd/Make_ming.mak 2011-09-30 16:55:18.000000000 +0200
+--- src/xxd/Make_ming.mak 2011-09-30 16:48:34.000000000 +0200
+***************
+*** 0 ****
+--- 1,28 ----
++ # The most simplistic Makefile, for MinGW gcc on MS-DOS
++
++ ifndef USEDLL
++ USEDLL = no
++ endif
++
++ ifeq (yes, $(USEDLL))
++ DEFINES =
++ LIBS = -lc
++ else
++ DEFINES =
++ LIBS =
++ endif
++
++ CC = gcc
++ CFLAGS = -O2 -Wall -DWIN32 $(DEFINES)
++
++ ifneq (sh.exe, $(SHELL))
++ DEL = rm
++ else
++ DEL = del
++ endif
++
++ xxd.exe: xxd.c
++ $(CC) $(CFLAGS) -s -o xxd.exe xxd.c $(LIBS)
++
++ clean:
++ -$(DEL) xxd.exe
+*** ../vim-7.3.325/Filelist 2011-06-12 20:36:00.000000000 +0200
+--- Filelist 2011-09-30 16:49:29.000000000 +0200
+***************
+*** 313,318 ****
+--- 313,319 ----
+ src/xxd/Make_bc5.mak \
+ src/xxd/Make_cyg.mak \
+ src/xxd/Make_djg.mak \
++ src/xxd/Make_ming.mak \
+ src/xxd/Make_mvc.mak \
+ nsis/gvim.nsi \
+ nsis/README.txt \
+*** ../vim-7.3.325/src/version.c 2011-09-30 16:39:41.000000000 +0200
+--- src/version.c 2011-09-30 16:49:57.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 326,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+33. You name your children Eudora, Mozilla and Dotcom.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.327 b/source/ap/vim/patches/7.3.327
new file mode 100644
index 000000000..1de5a9964
--- /dev/null
+++ b/source/ap/vim/patches/7.3.327
@@ -0,0 +1,64 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.327
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.327
+Problem: When jumping to a help tag a closed fold doesn't open.
+Solution: Save and restore KeyTyped. (Yasuhiro Matsumoto)
+Files: src/ex_cmds.c
+
+
+*** ../vim-7.3.326/src/ex_cmds.c 2011-09-14 14:43:21.000000000 +0200
+--- src/ex_cmds.c 2011-09-30 17:24:03.000000000 +0200
+***************
+*** 5508,5513 ****
+--- 5508,5516 ----
+ int len;
+ char_u *lang;
+ #endif
++ #ifdef FEAT_FOLDING
++ int old_KeyTyped = KeyTyped;
++ #endif
+
+ if (eap != NULL)
+ {
+***************
+*** 5671,5676 ****
+--- 5674,5685 ----
+ if (!p_im)
+ restart_edit = 0; /* don't want insert mode in help file */
+
++ #ifdef FEAT_FOLDING
++ /* Restore KeyTyped, setting 'filetype=help' may reset it.
++ * It is needed for do_tag top open folds under the cursor. */
++ KeyTyped = old_KeyTyped;
++ #endif
++
+ if (tag != NULL)
+ do_tag(tag, DT_HELP, 1, FALSE, TRUE);
+
+*** ../vim-7.3.326/src/version.c 2011-09-30 16:56:00.000000000 +0200
+--- src/version.c 2011-09-30 17:24:17.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 327,
+ /**/
+
+--
+Q. What happens to programmers when they die?
+A: MS-Windows programmers are reinstalled. C++ programmers become undefined,
+ anyone who refers to them will die as well. Java programmers reincarnate
+ after being garbage collected.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.328 b/source/ap/vim/patches/7.3.328
new file mode 100644
index 000000000..24dad7022
--- /dev/null
+++ b/source/ap/vim/patches/7.3.328
@@ -0,0 +1,45 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.328
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.328
+Problem: When command line wraps the cursor may be displayed wrong when
+ there are multi-byte characters.
+Solution: Position the cursor before drawing the text. (Yasuhiro Matsumoto)
+Files: src/ex_getln.c
+
+
+*** ../vim-7.3.327/src/ex_getln.c 2011-09-30 16:23:21.000000000 +0200
+--- src/ex_getln.c 2011-09-30 17:39:27.000000000 +0200
+***************
+*** 2870,2875 ****
+--- 2870,2876 ----
+ {
+ msg_no_more = TRUE;
+ i = cmdline_row;
++ cursorcmd();
+ draw_cmdline(ccline.cmdpos, ccline.cmdlen - ccline.cmdpos);
+ /* Avoid clearing the rest of the line too often. */
+ if (cmdline_row != i || ccline.overstrike)
+*** ../vim-7.3.327/src/version.c 2011-09-30 17:30:27.000000000 +0200
+--- src/version.c 2011-09-30 17:45:28.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 328,
+ /**/
+
+--
+To define recursion, we must first define recursion.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.329 b/source/ap/vim/patches/7.3.329
new file mode 100644
index 000000000..fe48eb52d
--- /dev/null
+++ b/source/ap/vim/patches/7.3.329
@@ -0,0 +1,72 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.329
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.329
+Problem: When skipping over code from ":for" to ":endfor" get an error for
+ calling a dict function. (Yasuhiro Matsumoto)
+Solution: Ignore errors when skipping over :call command.
+Files: src/ex_docmd.c, src/eval.c
+
+
+*** ../vim-7.3.328/src/ex_docmd.c 2011-09-21 19:10:42.000000000 +0200
+--- src/ex_docmd.c 2011-09-30 17:59:51.000000000 +0200
+***************
+*** 371,381 ****
+ # define ex_endif ex_ni
+ # define ex_else ex_ni
+ # define ex_while ex_ni
+- # define ex_for ex_ni
+ # define ex_continue ex_ni
+ # define ex_break ex_ni
+ # define ex_endwhile ex_ni
+- # define ex_endfor ex_ni
+ # define ex_throw ex_ni
+ # define ex_try ex_ni
+ # define ex_catch ex_ni
+--- 371,379 ----
+*** ../vim-7.3.328/src/eval.c 2011-09-30 16:39:41.000000000 +0200
+--- src/eval.c 2011-09-30 18:29:58.000000000 +0200
+***************
+*** 3377,3383 ****
+ /* trans_function_name() doesn't work well when skipping, use eval0()
+ * instead to skip to any following command, e.g. for:
+ * :if 0 | call dict.foo().bar() | endif */
+! eval0(eap->arg, &rettv, &eap->nextcmd, FALSE);
+ return;
+ }
+
+--- 3377,3386 ----
+ /* trans_function_name() doesn't work well when skipping, use eval0()
+ * instead to skip to any following command, e.g. for:
+ * :if 0 | call dict.foo().bar() | endif */
+! ++emsg_skip;
+! if (eval0(eap->arg, &rettv, &eap->nextcmd, FALSE) != FAIL)
+! clear_tv(&rettv);
+! --emsg_skip;
+ return;
+ }
+
+*** ../vim-7.3.328/src/version.c 2011-09-30 17:46:14.000000000 +0200
+--- src/version.c 2011-09-30 18:32:27.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 329,
+ /**/
+
+--
+Have you heard about the new Beowulf cluster? It's so fast, it executes
+an infinite loop in 6 seconds.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.330 b/source/ap/vim/patches/7.3.330
new file mode 100644
index 000000000..ab828b94c
--- /dev/null
+++ b/source/ap/vim/patches/7.3.330
@@ -0,0 +1,45 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.330
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.330
+Problem: When longjmp() is invoked if the X server gives an error the state
+ is not properly restored.
+Solution: Reset vgetc_busy. (Yukihiro Nakadaira)
+Files: src/main.c
+
+
+*** ../vim-7.3.329/src/main.c 2011-05-10 16:41:13.000000000 +0200
+--- src/main.c 2011-10-04 16:41:03.000000000 +0200
+***************
+*** 1009,1014 ****
+--- 1009,1015 ----
+ skip_redraw = FALSE;
+ RedrawingDisabled = 0;
+ no_wait_return = 0;
++ vgetc_busy = 0;
+ # ifdef FEAT_EVAL
+ emsg_skip = 0;
+ # endif
+*** ../vim-7.3.329/src/version.c 2011-09-30 18:35:49.000000000 +0200
+--- src/version.c 2011-10-04 16:42:23.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 330,
+ /**/
+
+--
+Just remember...if the world didn't suck, we'd all fall off.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.331 b/source/ap/vim/patches/7.3.331
new file mode 100644
index 000000000..ba63c1729
--- /dev/null
+++ b/source/ap/vim/patches/7.3.331
@@ -0,0 +1,53 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.331
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.331
+Problem: "vit" selects wrong text when a tag name starts with the same text
+ as an outer tag name. (Ben Fritz)
+Solution: Add "\>" to the pattern to check for word boundary.
+Files: src/search.c
+
+
+*** ../vim-7.3.330/src/search.c 2011-07-15 13:21:24.000000000 +0200
+--- src/search.c 2011-10-04 16:54:08.000000000 +0200
+***************
+*** 3927,3933 ****
+ curwin->w_cursor = old_pos;
+ goto theend;
+ }
+! sprintf((char *)spat, "<%.*s\\%%(\\_[^>]\\{-}[^/]>\\|>\\)\\c", len, p);
+ sprintf((char *)epat, "</%.*s>\\c", len, p);
+
+ r = do_searchpair(spat, (char_u *)"", epat, FORWARD, (char_u *)"",
+--- 3927,3933 ----
+ curwin->w_cursor = old_pos;
+ goto theend;
+ }
+! sprintf((char *)spat, "<%.*s\\>\\%%(\\_[^>]\\{-}[^/]>\\|>\\)\\c", len, p);
+ sprintf((char *)epat, "</%.*s>\\c", len, p);
+
+ r = do_searchpair(spat, (char_u *)"", epat, FORWARD, (char_u *)"",
+*** ../vim-7.3.330/src/version.c 2011-10-04 16:43:49.000000000 +0200
+--- src/version.c 2011-10-04 16:59:47.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 331,
+ /**/
+
+--
+The 50-50-90 rule: Anytime you have a 50-50 chance of getting
+something right, there's a 90% probability you'll get it wrong.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.332 b/source/ap/vim/patches/7.3.332
new file mode 100644
index 000000000..ff0ab7c64
--- /dev/null
+++ b/source/ap/vim/patches/7.3.332
@@ -0,0 +1,206 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.332
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.332 (after 7.3.202)
+Problem: Indent after "public:" is not increased in C++ code. (Lech Lorens)
+Solution: Check for namespace after the regular checks. (partly by Martin
+ Gieseking)
+Files: src/misc1.c, src/testdir/test3.in, src/testdir/test3.ok
+
+
+*** ../vim-7.3.331/src/misc1.c 2011-09-07 19:58:04.000000000 +0200
+--- src/misc1.c 2011-10-04 17:59:52.000000000 +0200
+***************
+*** 6389,6394 ****
+--- 6389,6395 ----
+ int lookfor_cpp_namespace = FALSE;
+ int cont_amount = 0; /* amount for continuation line */
+ int original_line_islabel;
++ int added_to_amount = 0;
+
+ for (options = curbuf->b_p_cino; *options; )
+ {
+***************
+*** 7216,7267 ****
+ else
+ amount += ind_continuation;
+ }
+! else if (lookfor_cpp_namespace)
+ {
+! if (curwin->w_cursor.lnum == ourscope)
+! continue;
+
+! if (curwin->w_cursor.lnum == 0
+! || curwin->w_cursor.lnum
+ < ourscope - FIND_NAMESPACE_LIM)
+! break;
+
+! l = ml_get_curline();
+
+! /*
+! * If we're in a comment now, skip to the start of the
+! * comment.
+! */
+! trypos = find_start_comment(ind_maxcomment);
+! if (trypos != NULL)
+! {
+! curwin->w_cursor.lnum = trypos->lnum + 1;
+! curwin->w_cursor.col = 0;
+! continue;
+! }
+!
+! /*
+! * Skip preprocessor directives and blank lines.
+! */
+! if (cin_ispreproc_cont(&l, &curwin->w_cursor.lnum))
+! continue;
+
+! if (cin_is_cpp_namespace(l))
+! {
+! amount += ind_cpp_namespace;
+! break;
+! }
+
+! if (cin_nocode(l))
+! continue;
+
+! }
+! else if (lookfor != LOOKFOR_TERM
+! && lookfor != LOOKFOR_CPP_BASECLASS)
+! {
+! amount = scope_amount;
+! if (theline[0] == '{')
+! amount += ind_open_extra;
+ }
+ break;
+ }
+--- 7217,7275 ----
+ else
+ amount += ind_continuation;
+ }
+! else
+ {
+! if (lookfor != LOOKFOR_TERM
+! && lookfor != LOOKFOR_CPP_BASECLASS)
+! {
+! amount = scope_amount;
+! if (theline[0] == '{')
+! {
+! amount += ind_open_extra;
+! added_to_amount = ind_open_extra;
+! }
+! }
+
+! if (lookfor_cpp_namespace)
+! {
+! /*
+! * Looking for C++ namespace, need to look further
+! * back.
+! */
+! if (curwin->w_cursor.lnum == ourscope)
+! continue;
+!
+! if (curwin->w_cursor.lnum == 0
+! || curwin->w_cursor.lnum
+ < ourscope - FIND_NAMESPACE_LIM)
+! break;
+
+! l = ml_get_curline();
+
+! /* If we're in a comment now, skip to the start of
+! * the comment. */
+! trypos = find_start_comment(ind_maxcomment);
+! if (trypos != NULL)
+! {
+! curwin->w_cursor.lnum = trypos->lnum + 1;
+! curwin->w_cursor.col = 0;
+! continue;
+! }
+
+! /* Skip preprocessor directives and blank lines. */
+! if (cin_ispreproc_cont(&l, &curwin->w_cursor.lnum))
+! continue;
+
+! /* Finally the actual check for "namespace". */
+! if (cin_is_cpp_namespace(l))
+! {
+! amount += ind_cpp_namespace - added_to_amount;
+! break;
+! }
+
+! if (cin_nocode(l))
+! continue;
+! }
+ }
+ break;
+ }
+*** ../vim-7.3.331/src/testdir/test3.in 2011-07-20 15:09:38.000000000 +0200
+--- src/testdir/test3.in 2011-10-04 17:45:20.000000000 +0200
+***************
+*** 1309,1314 ****
+--- 1309,1328 ----
+ };
+
+ STARTTEST
++ :set cino=(0,gs,hs
++ 2kdd]]=][
++ ENDTEST
++
++ class Foo : public Bar
++ {
++ public:
++ virtual void method1(void) = 0;
++ virtual void method2(int arg1,
++ int arg2,
++ int arg3) = 0;
++ };
++
++ STARTTEST
+ :set cino=+20
+ 2kdd]]=][
+ ENDTEST
+*** ../vim-7.3.331/src/testdir/test3.ok 2011-07-20 15:09:38.000000000 +0200
+--- src/testdir/test3.ok 2011-10-04 17:47:25.000000000 +0200
+***************
+*** 1190,1195 ****
+--- 1190,1205 ----
+ };
+
+
++ class Foo : public Bar
++ {
++ public:
++ virtual void method1(void) = 0;
++ virtual void method2(int arg1,
++ int arg2,
++ int arg3) = 0;
++ };
++
++
+ void
+ foo()
+ {
+*** ../vim-7.3.331/src/version.c 2011-10-04 17:00:13.000000000 +0200
+--- src/version.c 2011-10-04 18:02:17.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 332,
+ /**/
+
+--
+Latest survey shows that 3 out of 4 people make up 75% of the
+world's population.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.333 b/source/ap/vim/patches/7.3.333
new file mode 100644
index 000000000..974b0cda1
--- /dev/null
+++ b/source/ap/vim/patches/7.3.333
@@ -0,0 +1,245 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.333
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.333
+Problem: Using "." to repeat a Visual delete counts the size in bytes, not
+ characters. (Connor Lane Smith)
+Solution: Store the virtual column numbers instead of byte positions.
+Files: src/normal.c
+
+
+*** ../vim-7.3.332/src/normal.c 2011-07-15 17:51:30.000000000 +0200
+--- src/normal.c 2011-10-04 19:47:14.000000000 +0200
+***************
+*** 20,26 ****
+ */
+ static int resel_VIsual_mode = NUL; /* 'v', 'V', or Ctrl-V */
+ static linenr_T resel_VIsual_line_count; /* number of lines */
+! static colnr_T resel_VIsual_col; /* nr of cols or end col */
+
+ static int restart_VIsual_select = 0;
+ #endif
+--- 20,26 ----
+ */
+ static int resel_VIsual_mode = NUL; /* 'v', 'V', or Ctrl-V */
+ static linenr_T resel_VIsual_line_count; /* number of lines */
+! static colnr_T resel_VIsual_vcol; /* nr of cols or end col */
+
+ static int restart_VIsual_select = 0;
+ #endif
+***************
+*** 1436,1442 ****
+ /* The visual area is remembered for redo */
+ static int redo_VIsual_mode = NUL; /* 'v', 'V', or Ctrl-V */
+ static linenr_T redo_VIsual_line_count; /* number of lines */
+! static colnr_T redo_VIsual_col; /* number of cols or end column */
+ static long redo_VIsual_count; /* count for Visual operator */
+ # ifdef FEAT_VIRTUALEDIT
+ int include_line_break = FALSE;
+--- 1436,1442 ----
+ /* The visual area is remembered for redo */
+ static int redo_VIsual_mode = NUL; /* 'v', 'V', or Ctrl-V */
+ static linenr_T redo_VIsual_line_count; /* number of lines */
+! static colnr_T redo_VIsual_vcol; /* number of cols or end column */
+ static long redo_VIsual_count; /* count for Visual operator */
+ # ifdef FEAT_VIRTUALEDIT
+ int include_line_break = FALSE;
+***************
+*** 1549,1570 ****
+ #ifdef FEAT_VISUAL
+ if (redo_VIsual_busy)
+ {
+ oap->start = curwin->w_cursor;
+ curwin->w_cursor.lnum += redo_VIsual_line_count - 1;
+ if (curwin->w_cursor.lnum > curbuf->b_ml.ml_line_count)
+ curwin->w_cursor.lnum = curbuf->b_ml.ml_line_count;
+ VIsual_mode = redo_VIsual_mode;
+! if (VIsual_mode == 'v')
+ {
+! if (redo_VIsual_line_count <= 1)
+! curwin->w_cursor.col += redo_VIsual_col - 1;
+ else
+! curwin->w_cursor.col = redo_VIsual_col;
+! }
+! if (redo_VIsual_col == MAXCOL)
+! {
+! curwin->w_curswant = MAXCOL;
+! coladvance((colnr_T)MAXCOL);
+ }
+ cap->count0 = redo_VIsual_count;
+ if (redo_VIsual_count != 0)
+--- 1549,1579 ----
+ #ifdef FEAT_VISUAL
+ if (redo_VIsual_busy)
+ {
++ /* Redo of an operation on a Visual area. Use the same size from
++ * redo_VIsual_line_count and redo_VIsual_vcol. */
+ oap->start = curwin->w_cursor;
+ curwin->w_cursor.lnum += redo_VIsual_line_count - 1;
+ if (curwin->w_cursor.lnum > curbuf->b_ml.ml_line_count)
+ curwin->w_cursor.lnum = curbuf->b_ml.ml_line_count;
+ VIsual_mode = redo_VIsual_mode;
+! if (redo_VIsual_vcol == MAXCOL || VIsual_mode == 'v')
+ {
+! if (VIsual_mode == 'v')
+! {
+! if (redo_VIsual_line_count <= 1)
+! {
+! validate_virtcol();
+! curwin->w_curswant =
+! curwin->w_virtcol + redo_VIsual_vcol - 1;
+! }
+! else
+! curwin->w_curswant = redo_VIsual_vcol;
+! }
+ else
+! {
+! curwin->w_curswant = MAXCOL;
+! }
+! coladvance(curwin->w_curswant);
+ }
+ cap->count0 = redo_VIsual_count;
+ if (redo_VIsual_count != 0)
+***************
+*** 1710,1716 ****
+ }
+ }
+ else if (redo_VIsual_busy)
+! oap->end_vcol = oap->start_vcol + redo_VIsual_col - 1;
+ /*
+ * Correct oap->end.col and oap->start.col to be the
+ * upper-left and lower-right corner of the block area.
+--- 1719,1725 ----
+ }
+ }
+ else if (redo_VIsual_busy)
+! oap->end_vcol = oap->start_vcol + redo_VIsual_vcol - 1;
+ /*
+ * Correct oap->end.col and oap->start.col to be the
+ * upper-left and lower-right corner of the block area.
+***************
+*** 1735,1747 ****
+ */
+ resel_VIsual_mode = VIsual_mode;
+ if (curwin->w_curswant == MAXCOL)
+! resel_VIsual_col = MAXCOL;
+! else if (VIsual_mode == Ctrl_V)
+! resel_VIsual_col = oap->end_vcol - oap->start_vcol + 1;
+! else if (oap->line_count > 1)
+! resel_VIsual_col = oap->end.col;
+ else
+! resel_VIsual_col = oap->end.col - oap->start.col + 1;
+ resel_VIsual_line_count = oap->line_count;
+ }
+
+--- 1744,1765 ----
+ */
+ resel_VIsual_mode = VIsual_mode;
+ if (curwin->w_curswant == MAXCOL)
+! resel_VIsual_vcol = MAXCOL;
+ else
+! {
+! if (VIsual_mode != Ctrl_V)
+! getvvcol(curwin, &(oap->end),
+! NULL, NULL, &oap->end_vcol);
+! if (VIsual_mode == Ctrl_V || oap->line_count <= 1)
+! {
+! if (VIsual_mode != Ctrl_V)
+! getvvcol(curwin, &(oap->start),
+! &oap->start_vcol, NULL, NULL);
+! resel_VIsual_vcol = oap->end_vcol - oap->start_vcol + 1;
+! }
+! else
+! resel_VIsual_vcol = oap->end_vcol;
+! }
+ resel_VIsual_line_count = oap->line_count;
+ }
+
+***************
+*** 1769,1775 ****
+ if (!redo_VIsual_busy)
+ {
+ redo_VIsual_mode = resel_VIsual_mode;
+! redo_VIsual_col = resel_VIsual_col;
+ redo_VIsual_line_count = resel_VIsual_line_count;
+ redo_VIsual_count = cap->count0;
+ }
+--- 1787,1793 ----
+ if (!redo_VIsual_busy)
+ {
+ redo_VIsual_mode = resel_VIsual_mode;
+! redo_VIsual_vcol = resel_VIsual_vcol;
+ redo_VIsual_line_count = resel_VIsual_line_count;
+ redo_VIsual_count = cap->count0;
+ }
+***************
+*** 7631,7642 ****
+ if (VIsual_mode == 'v')
+ {
+ if (resel_VIsual_line_count <= 1)
+! curwin->w_cursor.col += resel_VIsual_col * cap->count0 - 1;
+ else
+! curwin->w_cursor.col = resel_VIsual_col;
+! check_cursor_col();
+ }
+! if (resel_VIsual_col == MAXCOL)
+ {
+ curwin->w_curswant = MAXCOL;
+ coladvance((colnr_T)MAXCOL);
+--- 7649,7664 ----
+ if (VIsual_mode == 'v')
+ {
+ if (resel_VIsual_line_count <= 1)
+! {
+! validate_virtcol();
+! curwin->w_curswant = curwin->w_virtcol
+! + resel_VIsual_vcol * cap->count0 - 1;
+! }
+ else
+! curwin->w_curswant = resel_VIsual_vcol;
+! coladvance(curwin->w_curswant);
+ }
+! if (resel_VIsual_vcol == MAXCOL)
+ {
+ curwin->w_curswant = MAXCOL;
+ coladvance((colnr_T)MAXCOL);
+***************
+*** 7645,7651 ****
+ {
+ validate_virtcol();
+ curwin->w_curswant = curwin->w_virtcol
+! + resel_VIsual_col * cap->count0 - 1;
+ coladvance(curwin->w_curswant);
+ }
+ else
+--- 7667,7673 ----
+ {
+ validate_virtcol();
+ curwin->w_curswant = curwin->w_virtcol
+! + resel_VIsual_vcol * cap->count0 - 1;
+ coladvance(curwin->w_curswant);
+ }
+ else
+*** ../vim-7.3.332/src/version.c 2011-10-04 18:03:43.000000000 +0200
+--- src/version.c 2011-10-04 21:05:44.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 333,
+ /**/
+
+--
+It was recently discovered that research causes cancer in rats.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.334 b/source/ap/vim/patches/7.3.334
new file mode 100644
index 000000000..85d5b16d2
--- /dev/null
+++ b/source/ap/vim/patches/7.3.334
@@ -0,0 +1,58 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.334
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.334
+Problem: Latest MingW about XSUBPP referencing itself. (Gongqian Li)
+Solution: Rename the first use to XSUBPPTRY.
+Files: src/Make_ming.mak
+
+
+*** ../vim-7.3.333/src/Make_ming.mak 2011-09-30 16:56:00.000000000 +0200
+--- src/Make_ming.mak 2011-10-09 14:23:06.000000000 +0200
+***************
+*** 108,117 ****
+ # on NT, it's here:
+ PERLLIB=$(PERL)/lib
+ PERLLIBS=$(PERLLIB)/Core
+! XSUBPP=$(PERLLIB)/ExtUtils/xsubpp
+! XSUBPP_EXISTS=$(shell perl -e "print 1 unless -e '$(XSUBPP)'")
+ ifeq "$(XSUBPP_EXISTS)" ""
+! XSUBPP=perl $(XSUBPP)
+ else
+ XSUBPP=xsubpp
+ endif
+--- 108,117 ----
+ # on NT, it's here:
+ PERLLIB=$(PERL)/lib
+ PERLLIBS=$(PERLLIB)/Core
+! XSUBPPTRY=$(PERLLIB)/ExtUtils/xsubpp
+! XSUBPP_EXISTS=$(shell perl -e "print 1 unless -e '$(XSUBPPTRY)'")
+ ifeq "$(XSUBPP_EXISTS)" ""
+! XSUBPP=perl $(XSUBPPTRY)
+ else
+ XSUBPP=xsubpp
+ endif
+*** ../vim-7.3.333/src/version.c 2011-10-04 21:22:40.000000000 +0200
+--- src/version.c 2011-10-12 14:10:20.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 334,
+ /**/
+
+--
+Q: Should I clean my house or work on Vim?
+A: Whatever contains more bugs.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.335 b/source/ap/vim/patches/7.3.335
new file mode 100644
index 000000000..dc1cc5605
--- /dev/null
+++ b/source/ap/vim/patches/7.3.335
@@ -0,0 +1,48 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.335
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.335
+Problem: When 'imdisable' is reset from an autocommand in Insert mode it
+ doesn't take effect.
+Solution: Call im_set_active() in Insert mode. (Taro Muraoka)
+Files: src/option.c
+
+
+*** ../vim-7.3.334/src/option.c 2011-09-21 13:40:13.000000000 +0200
+--- src/option.c 2011-10-12 14:09:46.000000000 +0200
+***************
+*** 7806,7811 ****
+--- 7806,7815 ----
+ /* Only de-activate it here, it will be enabled when changing mode. */
+ if (p_imdisable)
+ im_set_active(FALSE);
++ else if (State & INSERT)
++ /* When the option is set from an autocommand, it may need to take
++ * effect right away. */
++ im_set_active(curbuf->b_p_iminsert == B_IMODE_IM);
+ }
+ #endif
+
+*** ../vim-7.3.334/src/version.c 2011-10-12 14:11:43.000000000 +0200
+--- src/version.c 2011-10-12 16:56:30.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 335,
+ /**/
+
+--
+Time is money. Especially if you make clocks.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.336 b/source/ap/vim/patches/7.3.336
new file mode 100644
index 000000000..902f578c3
--- /dev/null
+++ b/source/ap/vim/patches/7.3.336
@@ -0,0 +1,1100 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.336
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.336
+Problem: When a tags file specifies an encoding different from 'enc' it
+ may hang and using a pattern doesn't work.
+Solution: Convert the whole line. Continue reading the header after the
+ SORT tag. Add test83. (Yukihiro Nakadaira)
+Files: src/tag.c, src/testdir/Make_amiga.mak, src/testdir/Make_dos.mak,
+ src/testdir/Make_ming.mak, src/testdir/Make_os2.mak,
+ src/testdir/Make_vms.mms, src/testdir/Makefile,
+ src/testdir/test83-tags2, src/testdir/test83-tags3,
+ src/testdir/test83.in, src/testdir/test83.ok
+
+
+*** ../vim-7.3.335/src/tag.c 2011-04-11 21:35:03.000000000 +0200
+--- src/tag.c 2011-10-12 19:51:04.000000000 +0200
+***************
+*** 1277,1282 ****
+--- 1277,1283 ----
+ {
+ FILE *fp;
+ char_u *lbuf; /* line buffer */
++ int lbuf_size = LSIZE; /* length of lbuf */
+ char_u *tag_fname; /* name of tag file */
+ tagname_T tn; /* info for get_tagfname() */
+ int first_file; /* trying first tag file */
+***************
+*** 1291,1296 ****
+--- 1292,1298 ----
+ char_u *s;
+ int i;
+ #ifdef FEAT_TAG_BINS
++ int tag_file_sorted = NUL; /* !_TAG_FILE_SORTED value */
+ struct tag_search_info /* Binary search file offsets */
+ {
+ off_t low_offset; /* offset for first char of first line that
+***************
+*** 1360,1372 ****
+ char_u *saved_pat = NULL; /* copy of pat[] */
+ #endif
+
+- /* Use two sets of variables for the pattern: "orgpat" holds the values
+- * for the original pattern and "convpat" converted from 'encoding' to
+- * encoding of the tags file. "pats" point to either one of these. */
+- pat_T *pats;
+ pat_T orgpat; /* holds unconverted pattern info */
+ #ifdef FEAT_MBYTE
+- pat_T convpat; /* holds converted pattern info */
+ vimconv_T vimconv;
+ #endif
+
+--- 1362,1369 ----
+***************
+*** 1390,1396 ****
+
+ help_save = curbuf->b_help;
+ orgpat.pat = pat;
+- pats = &orgpat;
+ #ifdef FEAT_MBYTE
+ vimconv.vc_type = CONV_NONE;
+ #endif
+--- 1387,1392 ----
+***************
+*** 1398,1404 ****
+ /*
+ * Allocate memory for the buffers that are used
+ */
+! lbuf = alloc(LSIZE);
+ tag_fname = alloc(MAXPATHL + 1);
+ #ifdef FEAT_EMACS_TAGS
+ ebuf = alloc(LSIZE);
+--- 1394,1400 ----
+ /*
+ * Allocate memory for the buffers that are used
+ */
+! lbuf = alloc(lbuf_size);
+ tag_fname = alloc(MAXPATHL + 1);
+ #ifdef FEAT_EMACS_TAGS
+ ebuf = alloc(LSIZE);
+***************
+*** 1424,1453 ****
+ if (help_only) /* want tags from help file */
+ curbuf->b_help = TRUE; /* will be restored later */
+
+! pats->len = (int)STRLEN(pat);
+ #ifdef FEAT_MULTI_LANG
+ if (curbuf->b_help)
+ {
+ /* When "@ab" is specified use only the "ab" language, otherwise
+ * search all languages. */
+! if (pats->len > 3 && pat[pats->len - 3] == '@'
+! && ASCII_ISALPHA(pat[pats->len - 2])
+! && ASCII_ISALPHA(pat[pats->len - 1]))
+ {
+! saved_pat = vim_strnsave(pat, pats->len - 3);
+ if (saved_pat != NULL)
+ {
+! help_lang_find = &pat[pats->len - 2];
+! pats->pat = saved_pat;
+! pats->len -= 3;
+ }
+ }
+ }
+ #endif
+! if (p_tl != 0 && pats->len > p_tl) /* adjust for 'taglength' */
+! pats->len = p_tl;
+
+! prepare_pats(pats, has_re);
+
+ #ifdef FEAT_TAG_BINS
+ /* This is only to avoid a compiler warning for using search_info
+--- 1420,1449 ----
+ if (help_only) /* want tags from help file */
+ curbuf->b_help = TRUE; /* will be restored later */
+
+! orgpat.len = (int)STRLEN(pat);
+ #ifdef FEAT_MULTI_LANG
+ if (curbuf->b_help)
+ {
+ /* When "@ab" is specified use only the "ab" language, otherwise
+ * search all languages. */
+! if (orgpat.len > 3 && pat[orgpat.len - 3] == '@'
+! && ASCII_ISALPHA(pat[orgpat.len - 2])
+! && ASCII_ISALPHA(pat[orgpat.len - 1]))
+ {
+! saved_pat = vim_strnsave(pat, orgpat.len - 3);
+ if (saved_pat != NULL)
+ {
+! help_lang_find = &pat[orgpat.len - 2];
+! orgpat.pat = saved_pat;
+! orgpat.len -= 3;
+ }
+ }
+ }
+ #endif
+! if (p_tl != 0 && orgpat.len > p_tl) /* adjust for 'taglength' */
+! orgpat.len = p_tl;
+
+! prepare_pats(&orgpat, has_re);
+
+ #ifdef FEAT_TAG_BINS
+ /* This is only to avoid a compiler warning for using search_info
+***************
+*** 1466,1478 ****
+ * Only ignore case when TAG_NOIC not used or 'ignorecase' set.
+ */
+ #ifdef FEAT_TAG_BINS
+! pats->regmatch.rm_ic = ((p_ic || !noic)
+! && (findall || pats->headlen == 0 || !p_tbs));
+ for (round = 1; round <= 2; ++round)
+ {
+! linear = (pats->headlen == 0 || !p_tbs || round == 2);
+ #else
+! pats->regmatch.rm_ic = (p_ic || !noic);
+ #endif
+
+ /*
+--- 1462,1474 ----
+ * Only ignore case when TAG_NOIC not used or 'ignorecase' set.
+ */
+ #ifdef FEAT_TAG_BINS
+! orgpat.regmatch.rm_ic = ((p_ic || !noic)
+! && (findall || orgpat.headlen == 0 || !p_tbs));
+ for (round = 1; round <= 2; ++round)
+ {
+! linear = (orgpat.headlen == 0 || !p_tbs || round == 2);
+ #else
+! orgpat.regmatch.rm_ic = (p_ic || !noic);
+ #endif
+
+ /*
+***************
+*** 1701,1706 ****
+--- 1697,1732 ----
+ }
+ line_read_in:
+
++ #ifdef FEAT_MBYTE
++ if (vimconv.vc_type != CONV_NONE)
++ {
++ char_u *conv_line;
++ int len;
++
++ /* Convert every line. Converting the pattern from 'enc' to
++ * the tags file encoding doesn't work, because characters are
++ * not recognized. */
++ conv_line = string_convert(&vimconv, lbuf, NULL);
++ if (conv_line != NULL)
++ {
++ /* Copy or swap lbuf and conv_line. */
++ len = (int)STRLEN(conv_line) + 1;
++ if (len > lbuf_size)
++ {
++ vim_free(lbuf);
++ lbuf = conv_line;
++ lbuf_size = len;
++ }
++ else
++ {
++ STRCPY(lbuf, conv_line);
++ vim_free(conv_line);
++ }
++ }
++ }
++ #endif
++
++
+ #ifdef FEAT_EMACS_TAGS
+ /*
+ * Emacs tags line with CTRL-L: New file name on next line.
+***************
+*** 1770,1775 ****
+--- 1796,1828 ----
+ */
+ if (state == TS_START)
+ {
++ if (STRNCMP(lbuf, "!_TAG_", 6) <= 0)
++ {
++ /*
++ * Read header line.
++ */
++ #ifdef FEAT_TAG_BINS
++ if (STRNCMP(lbuf, "!_TAG_FILE_SORTED\t", 18) == 0)
++ tag_file_sorted = lbuf[18];
++ #endif
++ #ifdef FEAT_MBYTE
++ if (STRNCMP(lbuf, "!_TAG_FILE_ENCODING\t", 20) == 0)
++ {
++ /* Prepare to convert every line from the specified
++ * encoding to 'encoding'. */
++ for (p = lbuf + 20; *p > ' ' && *p < 127; ++p)
++ ;
++ *p = NUL;
++ convert_setup(&vimconv, lbuf + 20, p_enc);
++ }
++ #endif
++
++ /* Read the next line. Unrecognized flags are ignored. */
++ continue;
++ }
++
++ /* Headers ends. */
++
+ #ifdef FEAT_TAG_BINS
+ /*
+ * When there is no tag head, or ignoring case, need to do a
+***************
+*** 1786,1809 ****
+ if (linear)
+ # endif
+ state = TS_LINEAR;
+! else if (STRNCMP(lbuf, "!_TAG_", 6) > 0)
+ state = TS_BINARY;
+! else if (STRNCMP(lbuf, "!_TAG_FILE_SORTED\t", 18) == 0)
+! {
+! /* Check sorted flag */
+! if (lbuf[18] == '1')
+ state = TS_BINARY;
+! else if (lbuf[18] == '2')
+! {
+! state = TS_BINARY;
+! sortic = TRUE;
+! pats->regmatch.rm_ic = (p_ic || !noic);
+! }
+! else
+! state = TS_LINEAR;
+ }
+
+! if (state == TS_BINARY && pats->regmatch.rm_ic && !sortic)
+ {
+ /* binary search won't work for ignoring case, use linear
+ * search. */
+--- 1839,1858 ----
+ if (linear)
+ # endif
+ state = TS_LINEAR;
+! else if (tag_file_sorted == NUL)
+ state = TS_BINARY;
+! else if (tag_file_sorted == '1')
+ state = TS_BINARY;
+! else if (tag_file_sorted == '2')
+! {
+! state = TS_BINARY;
+! sortic = TRUE;
+! orgpat.regmatch.rm_ic = (p_ic || !noic);
+ }
++ else
++ state = TS_LINEAR;
+
+! if (state == TS_BINARY && orgpat.regmatch.rm_ic && !sortic)
+ {
+ /* binary search won't work for ignoring case, use linear
+ * search. */
+***************
+*** 1843,1882 ****
+ #endif
+ }
+
+- #ifdef FEAT_MBYTE
+- if (lbuf[0] == '!' && pats == &orgpat
+- && STRNCMP(lbuf, "!_TAG_FILE_ENCODING\t", 20) == 0)
+- {
+- /* Convert the search pattern from 'encoding' to the
+- * specified encoding. */
+- for (p = lbuf + 20; *p > ' ' && *p < 127; ++p)
+- ;
+- *p = NUL;
+- convert_setup(&vimconv, p_enc, lbuf + 20);
+- if (vimconv.vc_type != CONV_NONE)
+- {
+- convpat.pat = string_convert(&vimconv, pats->pat, NULL);
+- if (convpat.pat != NULL)
+- {
+- pats = &convpat;
+- pats->len = (int)STRLEN(pats->pat);
+- prepare_pats(pats, has_re);
+- pats->regmatch.rm_ic = orgpat.regmatch.rm_ic;
+- }
+- }
+-
+- /* Prepare for converting a match the other way around. */
+- convert_setup(&vimconv, lbuf + 20, p_enc);
+- continue;
+- }
+- #endif
+-
+ /*
+ * Figure out where the different strings are in this line.
+ * For "normal" tags: Do a quick check if the tag matches.
+ * This speeds up tag searching a lot!
+ */
+! if (pats->headlen
+ #ifdef FEAT_EMACS_TAGS
+ && !is_etag
+ #endif
+--- 1892,1903 ----
+ #endif
+ }
+
+ /*
+ * Figure out where the different strings are in this line.
+ * For "normal" tags: Do a quick check if the tag matches.
+ * This speeds up tag searching a lot!
+ */
+! if (orgpat.headlen
+ #ifdef FEAT_EMACS_TAGS
+ && !is_etag
+ #endif
+***************
+*** 1933,1941 ****
+ cmplen = (int)(tagp.tagname_end - tagp.tagname);
+ if (p_tl != 0 && cmplen > p_tl) /* adjust for 'taglength' */
+ cmplen = p_tl;
+! if (has_re && pats->headlen < cmplen)
+! cmplen = pats->headlen;
+! else if (state == TS_LINEAR && pats->headlen != cmplen)
+ continue;
+
+ #ifdef FEAT_TAG_BINS
+--- 1954,1962 ----
+ cmplen = (int)(tagp.tagname_end - tagp.tagname);
+ if (p_tl != 0 && cmplen > p_tl) /* adjust for 'taglength' */
+ cmplen = p_tl;
+! if (has_re && orgpat.headlen < cmplen)
+! cmplen = orgpat.headlen;
+! else if (state == TS_LINEAR && orgpat.headlen != cmplen)
+ continue;
+
+ #ifdef FEAT_TAG_BINS
+***************
+*** 1954,1963 ****
+ * Compare the current tag with the searched tag.
+ */
+ if (sortic)
+! tagcmp = tag_strnicmp(tagp.tagname, pats->head,
+ (size_t)cmplen);
+ else
+! tagcmp = STRNCMP(tagp.tagname, pats->head, cmplen);
+
+ /*
+ * A match with a shorter tag means to search forward.
+--- 1975,1984 ----
+ * Compare the current tag with the searched tag.
+ */
+ if (sortic)
+! tagcmp = tag_strnicmp(tagp.tagname, orgpat.head,
+ (size_t)cmplen);
+ else
+! tagcmp = STRNCMP(tagp.tagname, orgpat.head, cmplen);
+
+ /*
+ * A match with a shorter tag means to search forward.
+***************
+*** 1965,1973 ****
+ */
+ if (tagcmp == 0)
+ {
+! if (cmplen < pats->headlen)
+ tagcmp = -1;
+! else if (cmplen > pats->headlen)
+ tagcmp = 1;
+ }
+
+--- 1986,1994 ----
+ */
+ if (tagcmp == 0)
+ {
+! if (cmplen < orgpat.headlen)
+ tagcmp = -1;
+! else if (cmplen > orgpat.headlen)
+ tagcmp = 1;
+ }
+
+***************
+*** 2011,2017 ****
+ }
+ else if (state == TS_SKIP_BACK)
+ {
+! if (MB_STRNICMP(tagp.tagname, pats->head, cmplen) != 0)
+ state = TS_STEP_FORWARD;
+ else
+ /* Have to skip back more. Restore the curr_offset
+--- 2032,2038 ----
+ }
+ else if (state == TS_SKIP_BACK)
+ {
+! if (MB_STRNICMP(tagp.tagname, orgpat.head, cmplen) != 0)
+ state = TS_STEP_FORWARD;
+ else
+ /* Have to skip back more. Restore the curr_offset
+***************
+*** 2021,2027 ****
+ }
+ else if (state == TS_STEP_FORWARD)
+ {
+! if (MB_STRNICMP(tagp.tagname, pats->head, cmplen) != 0)
+ {
+ if ((off_t)ftell(fp) > search_info.match_offset)
+ break; /* past last match */
+--- 2042,2048 ----
+ }
+ else if (state == TS_STEP_FORWARD)
+ {
+! if (MB_STRNICMP(tagp.tagname, orgpat.head, cmplen) != 0)
+ {
+ if ((off_t)ftell(fp) > search_info.match_offset)
+ break; /* past last match */
+***************
+*** 2032,2038 ****
+ else
+ #endif
+ /* skip this match if it can't match */
+! if (MB_STRNICMP(tagp.tagname, pats->head, cmplen) != 0)
+ continue;
+
+ /*
+--- 2053,2059 ----
+ else
+ #endif
+ /* skip this match if it can't match */
+! if (MB_STRNICMP(tagp.tagname, orgpat.head, cmplen) != 0)
+ continue;
+
+ /*
+***************
+*** 2083,2123 ****
+ if (p_tl != 0 && cmplen > p_tl) /* adjust for 'taglength' */
+ cmplen = p_tl;
+ /* if tag length does not match, don't try comparing */
+! if (pats->len != cmplen)
+ match = FALSE;
+ else
+ {
+! if (pats->regmatch.rm_ic)
+ {
+! match = (MB_STRNICMP(tagp.tagname, pats->pat, cmplen) == 0);
+ if (match)
+! match_no_ic = (STRNCMP(tagp.tagname, pats->pat,
+ cmplen) == 0);
+ }
+ else
+! match = (STRNCMP(tagp.tagname, pats->pat, cmplen) == 0);
+ }
+
+ /*
+ * Has a regexp: Also find tags matching regexp.
+ */
+ match_re = FALSE;
+! if (!match && pats->regmatch.regprog != NULL)
+ {
+ int cc;
+
+ cc = *tagp.tagname_end;
+ *tagp.tagname_end = NUL;
+! match = vim_regexec(&pats->regmatch, tagp.tagname, (colnr_T)0);
+ if (match)
+ {
+! matchoff = (int)(pats->regmatch.startp[0] - tagp.tagname);
+! if (pats->regmatch.rm_ic)
+ {
+! pats->regmatch.rm_ic = FALSE;
+! match_no_ic = vim_regexec(&pats->regmatch, tagp.tagname,
+ (colnr_T)0);
+! pats->regmatch.rm_ic = TRUE;
+ }
+ }
+ *tagp.tagname_end = cc;
+--- 2104,2144 ----
+ if (p_tl != 0 && cmplen > p_tl) /* adjust for 'taglength' */
+ cmplen = p_tl;
+ /* if tag length does not match, don't try comparing */
+! if (orgpat.len != cmplen)
+ match = FALSE;
+ else
+ {
+! if (orgpat.regmatch.rm_ic)
+ {
+! match = (MB_STRNICMP(tagp.tagname, orgpat.pat, cmplen) == 0);
+ if (match)
+! match_no_ic = (STRNCMP(tagp.tagname, orgpat.pat,
+ cmplen) == 0);
+ }
+ else
+! match = (STRNCMP(tagp.tagname, orgpat.pat, cmplen) == 0);
+ }
+
+ /*
+ * Has a regexp: Also find tags matching regexp.
+ */
+ match_re = FALSE;
+! if (!match && orgpat.regmatch.regprog != NULL)
+ {
+ int cc;
+
+ cc = *tagp.tagname_end;
+ *tagp.tagname_end = NUL;
+! match = vim_regexec(&orgpat.regmatch, tagp.tagname, (colnr_T)0);
+ if (match)
+ {
+! matchoff = (int)(orgpat.regmatch.startp[0] - tagp.tagname);
+! if (orgpat.regmatch.rm_ic)
+ {
+! orgpat.regmatch.rm_ic = FALSE;
+! match_no_ic = vim_regexec(&orgpat.regmatch, tagp.tagname,
+ (colnr_T)0);
+! orgpat.regmatch.rm_ic = TRUE;
+ }
+ }
+ *tagp.tagname_end = cc;
+***************
+*** 2174,2180 ****
+ else
+ mtt = MT_GL_OTH;
+ }
+! if (pats->regmatch.rm_ic && !match_no_ic)
+ mtt += MT_IC_OFF;
+ if (match_re)
+ mtt += MT_RE_OFF;
+--- 2195,2201 ----
+ else
+ mtt = MT_GL_OTH;
+ }
+! if (orgpat.regmatch.rm_ic && !match_no_ic)
+ mtt += MT_IC_OFF;
+ if (match_re)
+ mtt += MT_RE_OFF;
+***************
+*** 2187,2221 ****
+ */
+ if (ga_grow(&ga_match[mtt], 1) == OK)
+ {
+- #ifdef FEAT_MBYTE
+- char_u *conv_line = NULL;
+- char_u *lbuf_line = lbuf;
+-
+- if (vimconv.vc_type != CONV_NONE)
+- {
+- /* Convert the tag line from the encoding of the tags
+- * file to 'encoding'. Then parse the line again. */
+- conv_line = string_convert(&vimconv, lbuf, NULL);
+- if (conv_line != NULL)
+- {
+- if (parse_tag_line(conv_line,
+- #ifdef FEAT_EMACS_TAGS
+- is_etag,
+- #endif
+- &tagp) == OK)
+- lbuf_line = conv_line;
+- else
+- /* doesn't work, go back to unconverted line. */
+- (void)parse_tag_line(lbuf,
+- #ifdef FEAT_EMACS_TAGS
+- is_etag,
+- #endif
+- &tagp);
+- }
+- }
+- #else
+- # define lbuf_line lbuf
+- #endif
+ if (help_only)
+ {
+ #ifdef FEAT_MULTI_LANG
+--- 2208,2213 ----
+***************
+*** 2307,2313 ****
+ * without Emacs tags: <mtt><tag_fname><NUL><lbuf>
+ */
+ len = (int)STRLEN(tag_fname)
+! + (int)STRLEN(lbuf_line) + 3;
+ #ifdef FEAT_EMACS_TAGS
+ if (is_etag)
+ len += (int)STRLEN(ebuf) + 1;
+--- 2299,2305 ----
+ * without Emacs tags: <mtt><tag_fname><NUL><lbuf>
+ */
+ len = (int)STRLEN(tag_fname)
+! + (int)STRLEN(lbuf) + 3;
+ #ifdef FEAT_EMACS_TAGS
+ if (is_etag)
+ len += (int)STRLEN(ebuf) + 1;
+***************
+*** 2337,2343 ****
+ else
+ *s++ = NUL;
+ #endif
+! STRCPY(s, lbuf_line);
+ }
+ }
+
+--- 2329,2335 ----
+ else
+ *s++ = NUL;
+ #endif
+! STRCPY(s, lbuf);
+ }
+ }
+
+***************
+*** 2373,2382 ****
+ else
+ vim_free(mfp);
+ }
+- #ifdef FEAT_MBYTE
+- /* Note: this makes the values in "tagp" invalid! */
+- vim_free(conv_line);
+- #endif
+ }
+ else /* Out of memory! Just forget about the rest. */
+ {
+--- 2365,2370 ----
+***************
+*** 2415,2433 ****
+ }
+ #endif
+ #ifdef FEAT_MBYTE
+- if (pats == &convpat)
+- {
+- /* Go back from converted pattern to original pattern. */
+- vim_free(pats->pat);
+- vim_free(pats->regmatch.regprog);
+- orgpat.regmatch.rm_ic = pats->regmatch.rm_ic;
+- pats = &orgpat;
+- }
+ if (vimconv.vc_type != CONV_NONE)
+ convert_setup(&vimconv, NULL, NULL);
+ #endif
+
+ #ifdef FEAT_TAG_BINS
+ if (sort_error)
+ {
+ EMSG2(_("E432: Tags file not sorted: %s"), tag_fname);
+--- 2403,2414 ----
+ }
+ #endif
+ #ifdef FEAT_MBYTE
+ if (vimconv.vc_type != CONV_NONE)
+ convert_setup(&vimconv, NULL, NULL);
+ #endif
+
+ #ifdef FEAT_TAG_BINS
++ tag_file_sorted = NUL;
+ if (sort_error)
+ {
+ EMSG2(_("E432: Tags file not sorted: %s"), tag_fname);
+***************
+*** 2461,2473 ****
+ #ifdef FEAT_TAG_BINS
+ /* stop searching when already did a linear search, or when TAG_NOIC
+ * used, and 'ignorecase' not set or already did case-ignore search */
+! if (stop_searching || linear || (!p_ic && noic) || pats->regmatch.rm_ic)
+ break;
+ # ifdef FEAT_CSCOPE
+ if (use_cscope)
+ break;
+ # endif
+! pats->regmatch.rm_ic = TRUE; /* try another time while ignoring case */
+ }
+ #endif
+
+--- 2442,2454 ----
+ #ifdef FEAT_TAG_BINS
+ /* stop searching when already did a linear search, or when TAG_NOIC
+ * used, and 'ignorecase' not set or already did case-ignore search */
+! if (stop_searching || linear || (!p_ic && noic) || orgpat.regmatch.rm_ic)
+ break;
+ # ifdef FEAT_CSCOPE
+ if (use_cscope)
+ break;
+ # endif
+! orgpat.regmatch.rm_ic = TRUE; /* try another time while ignoring case */
+ }
+ #endif
+
+***************
+*** 2480,2486 ****
+
+ findtag_end:
+ vim_free(lbuf);
+! vim_free(pats->regmatch.regprog);
+ vim_free(tag_fname);
+ #ifdef FEAT_EMACS_TAGS
+ vim_free(ebuf);
+--- 2461,2467 ----
+
+ findtag_end:
+ vim_free(lbuf);
+! vim_free(orgpat.regmatch.regprog);
+ vim_free(tag_fname);
+ #ifdef FEAT_EMACS_TAGS
+ vim_free(ebuf);
+*** ../vim-7.3.335/src/testdir/Make_amiga.mak 2011-07-15 21:16:54.000000000 +0200
+--- src/testdir/Make_amiga.mak 2011-10-12 19:21:00.000000000 +0200
+***************
+*** 29,35 ****
+ test66.out test67.out test68.out test69.out test70.out \
+ test71.out test72.out test73.out test74.out test75.out \
+ test76.out test77.out test78.out test79.out test80.out \
+! test81.out test82.out
+
+ .SUFFIXES: .in .out
+
+--- 29,35 ----
+ test66.out test67.out test68.out test69.out test70.out \
+ test71.out test72.out test73.out test74.out test75.out \
+ test76.out test77.out test78.out test79.out test80.out \
+! test81.out test82.out test83.out
+
+ .SUFFIXES: .in .out
+
+***************
+*** 131,133 ****
+--- 131,134 ----
+ test80.out: test80.in
+ test81.out: test81.in
+ test82.out: test82.in
++ test83.out: test83.in
+*** ../vim-7.3.335/src/testdir/Make_dos.mak 2011-07-15 21:16:54.000000000 +0200
+--- src/testdir/Make_dos.mak 2011-10-12 17:39:03.000000000 +0200
+***************
+*** 29,35 ****
+ test42.out test52.out test65.out test66.out test67.out \
+ test68.out test69.out test71.out test72.out test73.out \
+ test74.out test75.out test76.out test77.out test78.out \
+! test79.out test80.out test81.out test82.out
+
+ SCRIPTS32 = test50.out test70.out
+
+--- 29,35 ----
+ test42.out test52.out test65.out test66.out test67.out \
+ test68.out test69.out test71.out test72.out test73.out \
+ test74.out test75.out test76.out test77.out test78.out \
+! test79.out test80.out test81.out test82.out test83.out
+
+ SCRIPTS32 = test50.out test70.out
+
+*** ../vim-7.3.335/src/testdir/Make_ming.mak 2011-07-15 21:16:54.000000000 +0200
+--- src/testdir/Make_ming.mak 2011-10-12 17:39:03.000000000 +0200
+***************
+*** 49,55 ****
+ test42.out test52.out test65.out test66.out test67.out \
+ test68.out test69.out test71.out test72.out test73.out \
+ test74.out test75.out test76.out test77.out test78.out \
+! test79.out test80.out test81.out test82.out
+
+ SCRIPTS32 = test50.out test70.out
+
+--- 49,55 ----
+ test42.out test52.out test65.out test66.out test67.out \
+ test68.out test69.out test71.out test72.out test73.out \
+ test74.out test75.out test76.out test77.out test78.out \
+! test79.out test80.out test81.out test82.out test83.out
+
+ SCRIPTS32 = test50.out test70.out
+
+*** ../vim-7.3.335/src/testdir/Make_os2.mak 2011-07-15 21:16:54.000000000 +0200
+--- src/testdir/Make_os2.mak 2011-10-12 17:39:03.000000000 +0200
+***************
+*** 29,35 ****
+ test66.out test67.out test68.out test69.out test70.out \
+ test71.out test72.out test73.out test74.out test75.out \
+ test76.out test77.out test78.out test79.out test80.out \
+! test81.out test82.out
+
+ .SUFFIXES: .in .out
+
+--- 29,35 ----
+ test66.out test67.out test68.out test69.out test70.out \
+ test71.out test72.out test73.out test74.out test75.out \
+ test76.out test77.out test78.out test79.out test80.out \
+! test81.out test82.out test83.out
+
+ .SUFFIXES: .in .out
+
+*** ../vim-7.3.335/src/testdir/Make_vms.mms 2011-07-15 21:16:54.000000000 +0200
+--- src/testdir/Make_vms.mms 2011-10-12 17:39:03.000000000 +0200
+***************
+*** 76,82 ****
+ test66.out test67.out test68.out test69.out \
+ test71.out test72.out test74.out test75.out test76.out \
+ test77.out test78.out test79.out test80.out test81.out \
+! test82.out
+
+ # Known problems:
+ # Test 30: a problem around mac format - unknown reason
+--- 76,82 ----
+ test66.out test67.out test68.out test69.out \
+ test71.out test72.out test74.out test75.out test76.out \
+ test77.out test78.out test79.out test80.out test81.out \
+! test82.out test83.out
+
+ # Known problems:
+ # Test 30: a problem around mac format - unknown reason
+*** ../vim-7.3.335/src/testdir/Makefile 2011-07-15 21:16:54.000000000 +0200
+--- src/testdir/Makefile 2011-10-12 17:39:03.000000000 +0200
+***************
+*** 26,32 ****
+ test64.out test65.out test66.out test67.out test68.out \
+ test69.out test70.out test71.out test72.out test73.out \
+ test74.out test75.out test76.out test77.out test78.out \
+! test79.out test80.out test81.out test82.out
+
+ SCRIPTS_GUI = test16.out
+
+--- 26,32 ----
+ test64.out test65.out test66.out test67.out test68.out \
+ test69.out test70.out test71.out test72.out test73.out \
+ test74.out test75.out test76.out test77.out test78.out \
+! test79.out test80.out test81.out test82.out test83.out
+
+ SCRIPTS_GUI = test16.out
+
+***************
+*** 72,78 ****
+ fi \
+ else echo $* NO OUTPUT >>test.log; \
+ fi"
+! -rm -rf X* test.ok viminfo
+
+ test49.out: test49.vim
+
+--- 72,78 ----
+ fi \
+ else echo $* NO OUTPUT >>test.log; \
+ fi"
+! # -rm -rf X* test.ok viminfo
+
+ test49.out: test49.vim
+
+*** ../vim-7.3.335/src/testdir/test83-tags2 2011-10-12 19:49:38.000000000 +0200
+--- src/testdir/test83-tags2 2011-10-12 19:34:15.000000000 +0200
+***************
+*** 0 ****
+--- 1,2 ----
++ !_TAG_FILE_ENCODING cp932 //
++ ‚`‚a‚b Xtags2.txt /‚`‚a‚b
+*** ../vim-7.3.335/src/testdir/test83-tags3 2011-10-12 19:49:38.000000000 +0200
+--- src/testdir/test83-tags3 2011-10-12 19:35:42.000000000 +0200
+***************
+*** 0 ****
+--- 1,102 ----
++ !_TAG_FILE_SORTED 1 //
++ !_TAG_FILE_ENCODING cp932 //
++ abc1 Xtags3.txt /‚`‚a‚b
++ abc2 Xtags3.txt /‚`‚a‚b
++ abc3 Xtags3.txt /‚`‚a‚b
++ abc4 Xtags3.txt /‚`‚a‚b
++ abc5 Xtags3.txt /‚`‚a‚b
++ abc6 Xtags3.txt /‚`‚a‚b
++ abc7 Xtags3.txt /‚`‚a‚b
++ abc8 Xtags3.txt /‚`‚a‚b
++ abc9 Xtags3.txt /‚`‚a‚b
++ abc10 Xtags3.txt /‚`‚a‚b
++ abc11 Xtags3.txt /‚`‚a‚b
++ abc12 Xtags3.txt /‚`‚a‚b
++ abc13 Xtags3.txt /‚`‚a‚b
++ abc14 Xtags3.txt /‚`‚a‚b
++ abc15 Xtags3.txt /‚`‚a‚b
++ abc16 Xtags3.txt /‚`‚a‚b
++ abc17 Xtags3.txt /‚`‚a‚b
++ abc18 Xtags3.txt /‚`‚a‚b
++ abc19 Xtags3.txt /‚`‚a‚b
++ abc20 Xtags3.txt /‚`‚a‚b
++ abc21 Xtags3.txt /‚`‚a‚b
++ abc22 Xtags3.txt /‚`‚a‚b
++ abc23 Xtags3.txt /‚`‚a‚b
++ abc24 Xtags3.txt /‚`‚a‚b
++ abc25 Xtags3.txt /‚`‚a‚b
++ abc26 Xtags3.txt /‚`‚a‚b
++ abc27 Xtags3.txt /‚`‚a‚b
++ abc28 Xtags3.txt /‚`‚a‚b
++ abc29 Xtags3.txt /‚`‚a‚b
++ abc30 Xtags3.txt /‚`‚a‚b
++ abc31 Xtags3.txt /‚`‚a‚b
++ abc32 Xtags3.txt /‚`‚a‚b
++ abc33 Xtags3.txt /‚`‚a‚b
++ abc34 Xtags3.txt /‚`‚a‚b
++ abc35 Xtags3.txt /‚`‚a‚b
++ abc36 Xtags3.txt /‚`‚a‚b
++ abc37 Xtags3.txt /‚`‚a‚b
++ abc38 Xtags3.txt /‚`‚a‚b
++ abc39 Xtags3.txt /‚`‚a‚b
++ abc40 Xtags3.txt /‚`‚a‚b
++ abc41 Xtags3.txt /‚`‚a‚b
++ abc42 Xtags3.txt /‚`‚a‚b
++ abc43 Xtags3.txt /‚`‚a‚b
++ abc44 Xtags3.txt /‚`‚a‚b
++ abc45 Xtags3.txt /‚`‚a‚b
++ abc46 Xtags3.txt /‚`‚a‚b
++ abc47 Xtags3.txt /‚`‚a‚b
++ abc48 Xtags3.txt /‚`‚a‚b
++ abc49 Xtags3.txt /‚`‚a‚b
++ abc50 Xtags3.txt /‚`‚a‚b
++ abc51 Xtags3.txt /‚`‚a‚b
++ abc52 Xtags3.txt /‚`‚a‚b
++ abc53 Xtags3.txt /‚`‚a‚b
++ abc54 Xtags3.txt /‚`‚a‚b
++ abc55 Xtags3.txt /‚`‚a‚b
++ abc56 Xtags3.txt /‚`‚a‚b
++ abc57 Xtags3.txt /‚`‚a‚b
++ abc58 Xtags3.txt /‚`‚a‚b
++ abc59 Xtags3.txt /‚`‚a‚b
++ abc60 Xtags3.txt /‚`‚a‚b
++ abc61 Xtags3.txt /‚`‚a‚b
++ abc62 Xtags3.txt /‚`‚a‚b
++ abc63 Xtags3.txt /‚`‚a‚b
++ abc64 Xtags3.txt /‚`‚a‚b
++ abc65 Xtags3.txt /‚`‚a‚b
++ abc66 Xtags3.txt /‚`‚a‚b
++ abc67 Xtags3.txt /‚`‚a‚b
++ abc68 Xtags3.txt /‚`‚a‚b
++ abc69 Xtags3.txt /‚`‚a‚b
++ abc70 Xtags3.txt /‚`‚a‚b
++ abc71 Xtags3.txt /‚`‚a‚b
++ abc72 Xtags3.txt /‚`‚a‚b
++ abc73 Xtags3.txt /‚`‚a‚b
++ abc74 Xtags3.txt /‚`‚a‚b
++ abc75 Xtags3.txt /‚`‚a‚b
++ abc76 Xtags3.txt /‚`‚a‚b
++ abc77 Xtags3.txt /‚`‚a‚b
++ abc78 Xtags3.txt /‚`‚a‚b
++ abc79 Xtags3.txt /‚`‚a‚b
++ abc80 Xtags3.txt /‚`‚a‚b
++ abc81 Xtags3.txt /‚`‚a‚b
++ abc82 Xtags3.txt /‚`‚a‚b
++ abc83 Xtags3.txt /‚`‚a‚b
++ abc84 Xtags3.txt /‚`‚a‚b
++ abc85 Xtags3.txt /‚`‚a‚b
++ abc86 Xtags3.txt /‚`‚a‚b
++ abc87 Xtags3.txt /‚`‚a‚b
++ abc88 Xtags3.txt /‚`‚a‚b
++ abc89 Xtags3.txt /‚`‚a‚b
++ abc90 Xtags3.txt /‚`‚a‚b
++ abc91 Xtags3.txt /‚`‚a‚b
++ abc92 Xtags3.txt /‚`‚a‚b
++ abc93 Xtags3.txt /‚`‚a‚b
++ abc94 Xtags3.txt /‚`‚a‚b
++ abc95 Xtags3.txt /‚`‚a‚b
++ abc96 Xtags3.txt /‚`‚a‚b
++ abc97 Xtags3.txt /‚`‚a‚b
++ abc98 Xtags3.txt /‚`‚a‚b
++ abc99 Xtags3.txt /‚`‚a‚b
++ abc100 Xtags3.txt /‚`‚a‚b
+*** ../vim-7.3.335/src/testdir/test83.in 2011-10-12 19:49:38.000000000 +0200
+--- src/testdir/test83.in 2011-10-12 19:40:47.000000000 +0200
+***************
+*** 0 ****
+--- 1,76 ----
++ Tests for tag search with !_TAG_FILE_ENCODING.
++
++ STARTTEST
++ :so mbyte.vim
++ :if !has('iconv')
++ : e! test.ok
++ : w! test.out
++ : qa!
++ :endif
++ :set enc=utf8
++
++ :/^text for tags1$/,/^text for tags1$/+1w! Xtags1.txt
++ :/^text for tags2$/,/^text for tags2$/+1w! Xtags2.txt
++ :/^text for tags3$/,/^text for tags3$/+1w! Xtags3.txt
++ :/^tags1$/+1,/^tags1-end$/-1w! Xtags1
++
++ ggdG
++
++ :call setline('.', 'Results of test83')
++
++ :" case1:
++ :new
++ :set tags=Xtags1
++ :let v:errmsg = ''
++ :tag abcdefghijklmnopqrs
++ :if v:errmsg =~ 'E426:' || getline('.') != 'abcdefghijklmnopqrs'
++ : close
++ : put ='case1: failed'
++ :else
++ : close
++ : put ='case1: ok'
++ :endif
++
++ :" case2:
++ :new
++ :set tags=test83-tags2
++ :let v:errmsg = ''
++ :tag /.BC
++ :if v:errmsg =~ 'E426:' || getline('.') != 'ABC'
++ : close
++ : put ='case2: failed'
++ :else
++ : close
++ : put ='case2: ok'
++ :endif
++
++ :" case3:
++ :new
++ :set tags=test83-tags3
++ :let v:errmsg = ''
++ :tag abc50
++ :if v:errmsg =~ 'E426:' || getline('.') != 'ABC'
++ : close
++ : put ='case3: failed'
++ :else
++ : close
++ : put ='case3: ok'
++ :endif
++ :close
++
++ :wq! test.out
++ ENDTEST
++
++ text for tags1
++ abcdefghijklmnopqrs
++
++ text for tags2
++ ABC
++
++ text for tags3
++ ABC
++
++ tags1
++ !_TAG_FILE_ENCODING utf-8 //
++ abcdefghijklmnopqrs Xtags1.txt /abcdefghijklmnopqrs
++ tags1-end
+*** ../vim-7.3.335/src/testdir/test83.ok 2011-10-12 19:49:38.000000000 +0200
+--- src/testdir/test83.ok 2011-10-12 17:39:03.000000000 +0200
+***************
+*** 0 ****
+--- 1,4 ----
++ Results of test83
++ case1: ok
++ case2: ok
++ case3: ok
+*** ../vim-7.3.335/src/version.c 2011-10-12 16:57:07.000000000 +0200
+--- src/version.c 2011-10-12 19:45:46.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 336,
+ /**/
+
+
+--
+hundred-and-one symptoms of being an internet addict:
+62. If your doorbell rings, you think that new mail has arrived. And then
+ you're disappointed that it's only someone at the door.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.337 b/source/ap/vim/patches/7.3.337
new file mode 100644
index 000000000..a2aeb04fe
--- /dev/null
+++ b/source/ap/vim/patches/7.3.337
@@ -0,0 +1,58 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.337
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.337 (after 7.3.295)
+Problem: Screen doesn't update after resizing the xterm until a character
+ is typed.
+Solution: When the select call is interrupted check do_resize. (Taylor
+ Hedberg)
+Files: src/os_unix.c
+
+
+*** ../vim-7.3.336/src/os_unix.c 2011-09-08 23:24:09.000000000 +0200
+--- src/os_unix.c 2011-10-12 20:57:15.000000000 +0200
+***************
+*** 5146,5156 ****
+--- 5146,5163 ----
+ # endif
+ # ifdef EINTR
+ if (ret == -1 && errno == EINTR)
++ {
++ /* Check whether window has been resized, EINTR may be caused by
++ * SIGWINCH. */
++ if (do_resize)
++ handle_resize();
++
+ /* Interrupted by a signal, need to try again. We ignore msec
+ * here, because we do want to check even after a timeout if
+ * characters are available. Needed for reading output of an
+ * external command after the process has finished. */
+ goto select_eintr;
++ }
+ # endif
+ # ifdef __TANDEM
+ if (ret == -1 && errno == ENOTSUP)
+*** ../vim-7.3.336/src/version.c 2011-10-12 19:53:31.000000000 +0200
+--- src/version.c 2011-10-12 21:03:47.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 337,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+64. The remote to the T.V. is missing...and you don't even care.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.338 b/source/ap/vim/patches/7.3.338
new file mode 100644
index 000000000..f273212ac
--- /dev/null
+++ b/source/ap/vim/patches/7.3.338
@@ -0,0 +1,100 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.338
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.338
+Problem: Using getchar() in an expression mapping doesn't work well.
+Solution: Don't save and restore the typeahead. (James Vega)
+Files: src/getchar.c, src/testdir/test34.ok
+
+
+*** ../vim-7.3.337/src/getchar.c 2011-08-17 20:33:18.000000000 +0200
+--- src/getchar.c 2011-10-12 21:53:27.000000000 +0200
+***************
+*** 2460,2486 ****
+
+ /*
+ * Handle ":map <expr>": evaluate the {rhs} as an
+! * expression. Save and restore the typeahead so that
+! * getchar() can be used. Also save and restore the
+! * command line for "normal :".
+ */
+ if (mp->m_expr)
+ {
+- tasave_T tabuf;
+ int save_vgetc_busy = vgetc_busy;
+
+! save_typeahead(&tabuf);
+! if (tabuf.typebuf_valid)
+! {
+! vgetc_busy = 0;
+! save_m_keys = vim_strsave(mp->m_keys);
+! save_m_str = vim_strsave(mp->m_str);
+! s = eval_map_expr(save_m_str, NUL);
+! vgetc_busy = save_vgetc_busy;
+! }
+! else
+! s = NULL;
+! restore_typeahead(&tabuf);
+ }
+ else
+ #endif
+--- 2460,2477 ----
+
+ /*
+ * Handle ":map <expr>": evaluate the {rhs} as an
+! * expression. Also save and restore the command line
+! * for "normal :".
+ */
+ if (mp->m_expr)
+ {
+ int save_vgetc_busy = vgetc_busy;
+
+! vgetc_busy = 0;
+! save_m_keys = vim_strsave(mp->m_keys);
+! save_m_str = vim_strsave(mp->m_str);
+! s = eval_map_expr(save_m_str, NUL);
+! vgetc_busy = save_vgetc_busy;
+ }
+ else
+ #endif
+*** ../vim-7.3.337/src/testdir/test34.ok 2010-08-15 21:57:29.000000000 +0200
+--- src/testdir/test34.ok 2011-10-12 21:59:39.000000000 +0200
+***************
+*** 1,5 ****
+ xxx4asdf fail nop ok 9 333
+! XX111XX
+ ---222---
+ 1. one
+ 2. two
+--- 1,5 ----
+ xxx4asdf fail nop ok 9 333
+! XX111-XX
+ ---222---
+ 1. one
+ 2. two
+*** ../vim-7.3.337/src/version.c 2011-10-12 21:04:15.000000000 +0200
+--- src/version.c 2011-10-12 21:20:31.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 338,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+65. The last time you looked at the clock it was 11:30pm, and in what
+ seems like only a few seconds later, your sister runs past you to
+ catch her 7am school bus.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.339 b/source/ap/vim/patches/7.3.339
new file mode 100644
index 000000000..f108ad6e0
--- /dev/null
+++ b/source/ap/vim/patches/7.3.339
@@ -0,0 +1,57 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.339
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.339
+Problem: "make shadow" doesn't link all test files.
+Solution: Add a line in Makefile and Filelist.
+Files: src/Makefile, Filelist
+
+
+*** ../vim-7.3.338/Filelist 2011-09-30 16:56:00.000000000 +0200
+--- Filelist 2011-10-16 14:00:42.000000000 +0200
+***************
+*** 81,86 ****
+--- 81,87 ----
+ src/testdir/test[0-9]*.ok \
+ src/testdir/test49.vim \
+ src/testdir/test60.vim \
++ src/testdir/test83-tags? \
+ src/proto.h \
+ src/proto/blowfish.pro \
+ src/proto/buffer.pro \
+*** ../vim-7.3.338/src/Makefile 2011-05-19 13:40:47.000000000 +0200
+--- src/Makefile 2011-10-16 13:59:40.000000000 +0200
+***************
+*** 2328,2333 ****
+--- 2328,2334 ----
+ ../../testdir/vimrc.unix \
+ ../../testdir/*.in \
+ ../../testdir/*.vim \
++ ../../testdir/test83-tags? \
+ ../../testdir/*.ok .
+
+ # Link needed for doing "make install" in a shadow directory.
+*** ../vim-7.3.338/src/version.c 2011-10-12 22:02:07.000000000 +0200
+--- src/version.c 2011-10-20 16:34:28.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 339,
+ /**/
+
+--
+From "know your smileys":
+ :-O>-o Smiley American tourist (note big mouth and camera)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.340 b/source/ap/vim/patches/7.3.340
new file mode 100644
index 000000000..fb0b8423d
--- /dev/null
+++ b/source/ap/vim/patches/7.3.340
@@ -0,0 +1,62 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.340
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.340
+Problem: When 'verbosefile' is set ftplugof.vim can give an error.
+Solution: Only remove filetypeplugin autocommands when they exist. (Yasuhiro
+ Matsumoto)
+Files: runtime/ftplugof.vim
+
+
+*** ../vim-7.3.339/runtime/ftplugof.vim 2010-08-15 21:57:11.000000000 +0200
+--- runtime/ftplugof.vim 2011-10-20 16:51:00.000000000 +0200
+***************
+*** 1,11 ****
+ " Vim support file to switch off loading plugins for file types
+ "
+ " Maintainer: Bram Moolenaar <Bram@vim.org>
+! " Last Change: 2002 Apr 04
+
+ if exists("did_load_ftplugin")
+ unlet did_load_ftplugin
+ endif
+
+! " Remove all autocommands in the filetypeplugin group
+! silent! au! filetypeplugin *
+--- 1,13 ----
+ " Vim support file to switch off loading plugins for file types
+ "
+ " Maintainer: Bram Moolenaar <Bram@vim.org>
+! " Last Change: 2011 Oct 20
+
+ if exists("did_load_ftplugin")
+ unlet did_load_ftplugin
+ endif
+
+! " Remove all autocommands in the filetypeplugin group, if any exist.
+! if exists("#filetypeplugin")
+! silent! au! filetypeplugin *
+! endif
+*** ../vim-7.3.339/src/version.c 2011-10-20 16:35:25.000000000 +0200
+--- src/version.c 2011-10-20 18:01:18.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 340,
+ /**/
+
+--
+How many light bulbs does it take to change a person?
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.341 b/source/ap/vim/patches/7.3.341
new file mode 100644
index 000000000..6ea386031
--- /dev/null
+++ b/source/ap/vim/patches/7.3.341
@@ -0,0 +1,360 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.341
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.341
+Problem: Local help files are only listed in help.txt, not in translated
+ help files.
+Solution: Also find translated help files. (Yasuhiro Matsumoto)
+Files: src/ex_cmds.c
+
+
+*** ../vim-7.3.340/src/ex_cmds.c 2011-09-30 17:30:27.000000000 +0200
+--- src/ex_cmds.c 2011-10-20 17:39:45.000000000 +0200
+***************
+*** 5982,5987 ****
+--- 5982,5988 ----
+ char_u *line;
+ int in_example = FALSE;
+ int len;
++ char_u *fname;
+ char_u *p;
+ char_u *rt;
+ int mustfree;
+***************
+*** 6028,6151 ****
+ }
+
+ /*
+! * In the "help.txt" file, add the locally added help files.
+! * This uses the very first line in the help file.
+ */
+! if (fnamecmp(gettail(curbuf->b_fname), "help.txt") == 0)
+ {
+ for (lnum = 1; lnum < curbuf->b_ml.ml_line_count; ++lnum)
+ {
+ line = ml_get_buf(curbuf, lnum, FALSE);
+! if (strstr((char *)line, "*local-additions*") != NULL)
+ {
+! /* Go through all directories in 'runtimepath', skipping
+! * $VIMRUNTIME. */
+! p = p_rtp;
+! while (*p != NUL)
+ {
+! copy_option_part(&p, NameBuff, MAXPATHL, ",");
+! mustfree = FALSE;
+! rt = vim_getenv((char_u *)"VIMRUNTIME", &mustfree);
+! if (fullpathcmp(rt, NameBuff, FALSE) != FPC_SAME)
+! {
+! int fcount;
+! char_u **fnames;
+! FILE *fd;
+! char_u *s;
+! int fi;
+ #ifdef FEAT_MBYTE
+! vimconv_T vc;
+! char_u *cp;
+ #endif
+
+! /* Find all "doc/ *.txt" files in this directory. */
+! add_pathsep(NameBuff);
+! STRCAT(NameBuff, "doc/*.txt");
+! if (gen_expand_wildcards(1, &NameBuff, &fcount,
+! &fnames, EW_FILE|EW_SILENT) == OK
+! && fcount > 0)
+ {
+! for (fi = 0; fi < fcount; ++fi)
+ {
+! fd = mch_fopen((char *)fnames[fi], "r");
+! if (fd != NULL)
+ {
+! vim_fgets(IObuff, IOSIZE, fd);
+! if (IObuff[0] == '*'
+! && (s = vim_strchr(IObuff + 1, '*'))
+! != NULL)
+! {
+! #ifdef FEAT_MBYTE
+! int this_utf = MAYBE;
+ #endif
+! /* Change tag definition to a
+! * reference and remove <CR>/<NL>. */
+! IObuff[0] = '|';
+! *s = '|';
+! while (*s != NUL)
+! {
+! if (*s == '\r' || *s == '\n')
+! *s = NUL;
+ #ifdef FEAT_MBYTE
+! /* The text is utf-8 when a byte
+! * above 127 is found and no
+! * illegal byte sequence is found.
+! */
+! if (*s >= 0x80 && this_utf != FALSE)
+! {
+! int l;
+!
+! this_utf = TRUE;
+! l = utf_ptr2len(s);
+! if (l == 1)
+! this_utf = FALSE;
+! s += l - 1;
+! }
+ #endif
+! ++s;
+! }
+ #ifdef FEAT_MBYTE
+! /* The help file is latin1 or utf-8;
+! * conversion to the current
+! * 'encoding' may be required. */
+! vc.vc_type = CONV_NONE;
+! convert_setup(&vc, (char_u *)(
+! this_utf == TRUE ? "utf-8"
+! : "latin1"), p_enc);
+! if (vc.vc_type == CONV_NONE)
+! /* No conversion needed. */
+! cp = IObuff;
+! else
+ {
+! /* Do the conversion. If it fails
+! * use the unconverted text. */
+! cp = string_convert(&vc, IObuff,
+! NULL);
+! if (cp == NULL)
+! cp = IObuff;
+ }
+! convert_setup(&vc, NULL, NULL);
+
+! ml_append(lnum, cp, (colnr_T)0, FALSE);
+! if (cp != IObuff)
+! vim_free(cp);
+ #else
+! ml_append(lnum, IObuff, (colnr_T)0,
+! FALSE);
+ #endif
+! ++lnum;
+! }
+! fclose(fd);
+ }
+ }
+- FreeWild(fcount, fnames);
+ }
+ }
+- if (mustfree)
+- vim_free(rt);
+ }
+! break;
+ }
+ }
+ }
+ }
+--- 6029,6215 ----
+ }
+
+ /*
+! * In the "help.txt" and "help.abx" file, add the locally added help
+! * files. This uses the very first line in the help file.
+ */
+! fname = gettail(curbuf->b_fname);
+! if (fnamecmp(fname, "help.txt") == 0
+! #ifdef FEAT_MULTI_LANG
+! || (fnamencmp(fname, "help.", 5) == 0
+! && ASCII_ISALPHA(fname[5])
+! && ASCII_ISALPHA(fname[6])
+! && TOLOWER_ASC(fname[7]) == 'x'
+! && fname[8] == NUL)
+! #endif
+! )
+ {
+ for (lnum = 1; lnum < curbuf->b_ml.ml_line_count; ++lnum)
+ {
+ line = ml_get_buf(curbuf, lnum, FALSE);
+! if (strstr((char *)line, "*local-additions*") == NULL)
+! continue;
+!
+! /* Go through all directories in 'runtimepath', skipping
+! * $VIMRUNTIME. */
+! p = p_rtp;
+! while (*p != NUL)
+ {
+! copy_option_part(&p, NameBuff, MAXPATHL, ",");
+! mustfree = FALSE;
+! rt = vim_getenv((char_u *)"VIMRUNTIME", &mustfree);
+! if (fullpathcmp(rt, NameBuff, FALSE) != FPC_SAME)
+ {
+! int fcount;
+! char_u **fnames;
+! FILE *fd;
+! char_u *s;
+! int fi;
+ #ifdef FEAT_MBYTE
+! vimconv_T vc;
+! char_u *cp;
+ #endif
+
+! /* Find all "doc/ *.txt" files in this directory. */
+! add_pathsep(NameBuff);
+! #ifdef FEAT_MULTI_LANG
+! STRCAT(NameBuff, "doc/*.??[tx]");
+! #else
+! STRCAT(NameBuff, "doc/*.txt");
+! #endif
+! if (gen_expand_wildcards(1, &NameBuff, &fcount,
+! &fnames, EW_FILE|EW_SILENT) == OK
+! && fcount > 0)
+! {
+! #ifdef FEAT_MULTI_LANG
+! int i1;
+! int i2;
+! char_u *f1;
+! char_u *f2;
+! char_u *t1;
+! char_u *e1;
+! char_u *e2;
+!
+! /* If foo.abx is found use it instead of foo.txt in
+! * the same directory. */
+! for (i1 = 0; i1 < fcount; ++i1)
+ {
+! for (i2 = 0; i2 < fcount; ++i2)
+ {
+! if (i1 == i2)
+! continue;
+! if (fnames[i1] == NULL || fnames[i2] == NULL)
+! continue;
+! f1 = fnames[i1];
+! f2 = fnames[i2];
+! t1 = gettail(f1);
+! if (fnamencmp(f1, f2, t1 - f1) != 0)
+! continue;
+! e1 = vim_strrchr(t1, '.');
+! e2 = vim_strrchr(gettail(f2), '.');
+! if (e1 == NUL || e2 == NUL)
+! continue;
+! if (fnamecmp(e1, ".txt") != 0
+! && fnamecmp(e1, fname + 4) != 0)
+ {
+! /* Not .txt and not .abx, remove it. */
+! vim_free(fnames[i1]);
+! fnames[i1] = NULL;
+! continue;
+! }
+! if (fnamencmp(f1, f2, e1 - f1) != 0)
+! continue;
+! if (fnamecmp(e1, ".txt") == 0
+! && fnamecmp(e2, fname + 4) == 0)
+! {
+! /* use .abx instead of .txt */
+! vim_free(fnames[i1]);
+! fnames[i1] = NULL;
+! }
+! }
+! }
+ #endif
+! for (fi = 0; fi < fcount; ++fi)
+! {
+! if (fnames[fi] == NULL)
+! continue;
+! fd = mch_fopen((char *)fnames[fi], "r");
+! if (fd != NULL)
+! {
+! vim_fgets(IObuff, IOSIZE, fd);
+! if (IObuff[0] == '*'
+! && (s = vim_strchr(IObuff + 1, '*'))
+! != NULL)
+! {
+ #ifdef FEAT_MBYTE
+! int this_utf = MAYBE;
+ #endif
+! /* Change tag definition to a
+! * reference and remove <CR>/<NL>. */
+! IObuff[0] = '|';
+! *s = '|';
+! while (*s != NUL)
+! {
+! if (*s == '\r' || *s == '\n')
+! *s = NUL;
+ #ifdef FEAT_MBYTE
+! /* The text is utf-8 when a byte
+! * above 127 is found and no
+! * illegal byte sequence is found.
+! */
+! if (*s >= 0x80 && this_utf != FALSE)
+ {
+! int l;
+!
+! this_utf = TRUE;
+! l = utf_ptr2len(s);
+! if (l == 1)
+! this_utf = FALSE;
+! s += l - 1;
+ }
+! #endif
+! ++s;
+! }
+! #ifdef FEAT_MBYTE
+! /* The help file is latin1 or utf-8;
+! * conversion to the current
+! * 'encoding' may be required. */
+! vc.vc_type = CONV_NONE;
+! convert_setup(&vc, (char_u *)(
+! this_utf == TRUE ? "utf-8"
+! : "latin1"), p_enc);
+! if (vc.vc_type == CONV_NONE)
+! /* No conversion needed. */
+! cp = IObuff;
+! else
+! {
+! /* Do the conversion. If it fails
+! * use the unconverted text. */
+! cp = string_convert(&vc, IObuff,
+! NULL);
+! if (cp == NULL)
+! cp = IObuff;
+! }
+! convert_setup(&vc, NULL, NULL);
+
+! ml_append(lnum, cp, (colnr_T)0, FALSE);
+! if (cp != IObuff)
+! vim_free(cp);
+ #else
+! ml_append(lnum, IObuff, (colnr_T)0,
+! FALSE);
+ #endif
+! ++lnum;
+ }
++ fclose(fd);
+ }
+ }
++ FreeWild(fcount, fnames);
+ }
+ }
+! if (mustfree)
+! vim_free(rt);
+ }
++ break;
+ }
+ }
+ }
+*** ../vim-7.3.340/src/version.c 2011-10-20 18:12:27.000000000 +0200
+--- src/version.c 2011-10-20 18:13:46.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 341,
+ /**/
+
+--
+From "know your smileys":
+ :-)-O Smiling doctor with stethoscope
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.342 b/source/ap/vim/patches/7.3.342
new file mode 100644
index 000000000..2deb7e385
--- /dev/null
+++ b/source/ap/vim/patches/7.3.342
@@ -0,0 +1,93 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.342
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.342
+Problem: Code not in Vim style.
+Solution: Fix the style. (Elias Diem)
+Files: src/os_amiga.c, src/os_mac_conv.c, src/os_win16.c
+
+
+*** ../vim-7.3.341/src/os_amiga.c 2010-08-15 21:57:27.000000000 +0200
+--- src/os_amiga.c 2011-10-20 18:19:45.000000000 +0200
+***************
+*** 1022,1028 ****
+
+ /* insure longword alignment */
+ #ifdef __amigaos4__
+! if(!(id = AllocDosObject(DOS_INFODATA, 0)))
+ goto out;
+ #else
+ id = (struct InfoData *)(((long)id_a + 3L) & ~3L);
+--- 1022,1028 ----
+
+ /* insure longword alignment */
+ #ifdef __amigaos4__
+! if (!(id = AllocDosObject(DOS_INFODATA, 0)))
+ goto out;
+ #else
+ id = (struct InfoData *)(((long)id_a + 3L) & ~3L);
+*** ../vim-7.3.341/src/os_mac_conv.c 2011-06-13 02:03:55.000000000 +0200
+--- src/os_mac_conv.c 2011-10-20 18:19:45.000000000 +0200
+***************
+*** 77,83 ****
+ *unconvlenp = 0;
+ cfstr = CFStringCreateWithBytes(NULL, ptr, len, from, 0);
+
+! if(cfstr == NULL)
+ fprintf(stderr, "Encoding failed\n");
+ /* When conversion failed, try excluding bytes from the end, helps when
+ * there is an incomplete byte sequence. Only do up to 6 bytes to avoid
+--- 77,83 ----
+ *unconvlenp = 0;
+ cfstr = CFStringCreateWithBytes(NULL, ptr, len, from, 0);
+
+! if (cfstr == NULL)
+ fprintf(stderr, "Encoding failed\n");
+ /* When conversion failed, try excluding bytes from the end, helps when
+ * there is an incomplete byte sequence. Only do up to 6 bytes to avoid
+*** ../vim-7.3.341/src/os_win16.c 2010-12-17 20:23:56.000000000 +0100
+--- src/os_win16.c 2011-10-20 18:19:45.000000000 +0200
+***************
+*** 243,251 ****
+ /* Wait for the command to terminate before continuing */
+ while (GetModuleUsage((HINSTANCE)h_module) > 0 && again )
+ {
+! while( PeekMessage( &msg, NULL, 0, 0, PM_REMOVE ) && again )
+ {
+! if(msg.message == WM_QUIT)
+
+ {
+ PostQuitMessage(msg.wParam);
+--- 243,251 ----
+ /* Wait for the command to terminate before continuing */
+ while (GetModuleUsage((HINSTANCE)h_module) > 0 && again )
+ {
+! while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE) && again)
+ {
+! if (msg.message == WM_QUIT)
+
+ {
+ PostQuitMessage(msg.wParam);
+*** ../vim-7.3.341/src/version.c 2011-10-20 18:17:38.000000000 +0200
+--- src/version.c 2011-10-20 18:21:43.000000000 +0200
+***************
+*** 711,712 ****
+--- 711,714 ----
+ { /* Add new patch number below this line */
++ /**/
++ 342,
+ /**/
+
+--
+You are only young once, but you can stay immature indefinitely.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.343 b/source/ap/vim/patches/7.3.343
new file mode 100644
index 000000000..db62264d0
--- /dev/null
+++ b/source/ap/vim/patches/7.3.343
@@ -0,0 +1,252 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.343
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.343
+Problem: No mouse support for urxvt.
+Solution: Implement urxvt mouse support, also for > 252 columns. (Yiding
+ Jia)
+Files: src/feature.h, src/keymap.h, src/option.h, src/os_unix.c,
+ src/term.c, src/version.c
+
+
+*** ../vim-7.3.342/src/feature.h 2011-05-19 13:40:47.000000000 +0200
+--- src/feature.h 2011-10-20 21:02:15.000000000 +0200
+***************
+*** 1053,1058 ****
+--- 1053,1061 ----
+ # ifdef FEAT_BIG
+ # define FEAT_MOUSE_DEC
+ # endif
++ # ifdef FEAT_BIG
++ # define FEAT_MOUSE_URXVT
++ # endif
+ # if defined(FEAT_NORMAL) && (defined(MSDOS) || defined(WIN3264))
+ # define DOS_MOUSE
+ # endif
+***************
+*** 1068,1080 ****
+ #if defined(FEAT_NORMAL) && defined(HAVE_SYSMOUSE)
+ # define FEAT_SYSMOUSE
+ #endif
+ /* Define FEAT_MOUSE when any of the above is defined or FEAT_GUI. */
+ #if !defined(FEAT_MOUSE_TTY) \
+ && (defined(FEAT_MOUSE_XTERM) \
+! || defined(FEAT_MOUSE_NET) || defined(FEAT_MOUSE_DEC) \
+! || defined(DOS_MOUSE) || defined(FEAT_MOUSE_GPM) \
+! || defined(FEAT_MOUSE_JSB) || defined(FEAT_MOUSE_PTERM) \
+! || defined(FEAT_SYSMOUSE))
+ # define FEAT_MOUSE_TTY /* include non-GUI mouse support */
+ #endif
+ #if !defined(FEAT_MOUSE) && (defined(FEAT_MOUSE_TTY) || defined(FEAT_GUI))
+--- 1071,1093 ----
+ #if defined(FEAT_NORMAL) && defined(HAVE_SYSMOUSE)
+ # define FEAT_SYSMOUSE
+ #endif
++
++ /* urxvt is a small variation of mouse_xterm, and shares its code */
++ #if defined(FEAT_MOUSE_URXVT) && !defined(FEAT_MOUSE_XTERM)
++ # define FEAT_MOUSE_XTERM
++ #endif
++
+ /* Define FEAT_MOUSE when any of the above is defined or FEAT_GUI. */
+ #if !defined(FEAT_MOUSE_TTY) \
+ && (defined(FEAT_MOUSE_XTERM) \
+! || defined(FEAT_MOUSE_NET) \
+! || defined(FEAT_MOUSE_DEC) \
+! || defined(DOS_MOUSE) \
+! || defined(FEAT_MOUSE_GPM) \
+! || defined(FEAT_MOUSE_JSB) \
+! || defined(FEAT_MOUSE_PTERM) \
+! || defined(FEAT_SYSMOUSE) \
+! || defined(FEAT_MOUSE_URXVT))
+ # define FEAT_MOUSE_TTY /* include non-GUI mouse support */
+ #endif
+ #if !defined(FEAT_MOUSE) && (defined(FEAT_MOUSE_TTY) || defined(FEAT_GUI))
+*** ../vim-7.3.342/src/keymap.h 2010-08-15 21:57:32.000000000 +0200
+--- src/keymap.h 2011-10-20 21:00:37.000000000 +0200
+***************
+*** 92,104 ****
+ */
+ #define KS_TEAROFF 244
+
+! /* used for JSB term mouse */
+ #define KS_JSBTERM_MOUSE 243
+
+! /* used a termcap entry that produces a normal character */
+ #define KS_KEY 242
+
+! /* Used for the qnx pterm mouse */
+ #define KS_PTERM_MOUSE 241
+
+ /* Used for click in a tab pages label. */
+--- 92,104 ----
+ */
+ #define KS_TEAROFF 244
+
+! /* Used for JSB term mouse. */
+ #define KS_JSBTERM_MOUSE 243
+
+! /* Used a termcap entry that produces a normal character. */
+ #define KS_KEY 242
+
+! /* Used for the qnx pterm mouse. */
+ #define KS_PTERM_MOUSE 241
+
+ /* Used for click in a tab pages label. */
+***************
+*** 107,112 ****
+--- 107,115 ----
+ /* Used for menu in a tab pages line. */
+ #define KS_TABMENU 239
+
++ /* Used for the urxvt mouse. */
++ #define KS_URXVT_MOUSE 238
++
+ /*
+ * Filler used after KS_SPECIAL and others
+ */
+*** ../vim-7.3.342/src/option.h 2011-09-30 14:44:49.000000000 +0200
+--- src/option.h 2011-10-20 19:38:59.000000000 +0200
+***************
+*** 819,825 ****
+ EXTERN char_u *p_ttym; /* 'ttymouse' */
+ EXTERN unsigned ttym_flags;
+ # ifdef IN_OPTION_C
+! static char *(p_ttym_values[]) = {"xterm", "xterm2", "dec", "netterm", "jsbterm", "pterm", NULL};
+ # endif
+ # define TTYM_XTERM 0x01
+ # define TTYM_XTERM2 0x02
+--- 819,825 ----
+ EXTERN char_u *p_ttym; /* 'ttymouse' */
+ EXTERN unsigned ttym_flags;
+ # ifdef IN_OPTION_C
+! static char *(p_ttym_values[]) = {"xterm", "xterm2", "dec", "netterm", "jsbterm", "pterm", "urxvt", NULL};
+ # endif
+ # define TTYM_XTERM 0x01
+ # define TTYM_XTERM2 0x02
+***************
+*** 827,832 ****
+--- 827,833 ----
+ # define TTYM_NETTERM 0x08
+ # define TTYM_JSBTERM 0x10
+ # define TTYM_PTERM 0x20
++ # define TTYM_URXVT 0x40
+ #endif
+ EXTERN char_u *p_udir; /* 'undodir' */
+ EXTERN long p_ul; /* 'undolevels' */
+*** ../vim-7.3.342/src/os_unix.c 2011-10-12 21:04:15.000000000 +0200
+--- src/os_unix.c 2011-10-20 21:02:00.000000000 +0200
+***************
+*** 2158,2167 ****
+--- 2158,2170 ----
+ * Return non-zero when using an xterm mouse, according to 'ttymouse'.
+ * Return 1 for "xterm".
+ * Return 2 for "xterm2".
++ * Return 3 for "urxvt".
+ */
+ int
+ use_xterm_mouse()
+ {
++ if (ttym_flags == TTYM_URXVT)
++ return 3;
+ if (ttym_flags == TTYM_XTERM2)
+ return 2;
+ if (ttym_flags == TTYM_XTERM)
+***************
+*** 3318,3323 ****
+--- 3321,3337 ----
+ return;
+
+ xterm_mouse_vers = use_xterm_mouse();
++
++ # ifdef FEAT_MOUSE_URXVT
++ if (ttym_flags == TTYM_URXVT) {
++ out_str_nf((char_u *)
++ (on
++ ? IF_EB("\033[?1015h", ESC_STR "[?1015h")
++ : IF_EB("\033[?1015l", ESC_STR "[?1015l")));
++ ison = on;
++ }
++ # endif
++
+ if (xterm_mouse_vers > 0)
+ {
+ if (on) /* enable mouse events, use mouse tracking if available */
+***************
+*** 3434,3439 ****
+--- 3448,3456 ----
+ {
+ # ifdef FEAT_MOUSE_XTERM
+ if (use_xterm_mouse()
++ # ifdef FEAT_MOUSE_URXVT
++ && use_xterm_mouse() != 3
++ # endif
+ # ifdef FEAT_GUI
+ && !gui.in_use
+ # endif
+***************
+*** 3523,3528 ****
+--- 3540,3566 ----
+ else
+ del_mouse_termcode(KS_PTERM_MOUSE);
+ # endif
++ # ifdef FEAT_MOUSE_URXVT
++ /* same as the dec mouse */
++ if (use_xterm_mouse() == 3
++ # ifdef FEAT_GUI
++ && !gui.in_use
++ # endif
++ )
++ {
++ set_mouse_termcode(KS_URXVT_MOUSE, (char_u *)(term_is_8bit(T_NAME)
++ ? IF_EB("\233", CSI_STR)
++ : IF_EB("\033[", ESC_STR "[")));
++
++ if (*p_mouse != NUL)
++ {
++ mch_setmouse(FALSE);
++ setmouse();
++ }
++ }
++ else
++ del_mouse_termcode(KS_URXVT_MOUSE);
++ # endif
+ }
+ #endif
+
+*** ../vim-7.3.342/src/version.c 2011-10-20 18:24:16.000000000 +0200
+--- src/version.c 2011-10-20 19:40:48.000000000 +0200
+***************
+*** 380,383 ****
+--- 380,388 ----
+ "-mouse_xterm",
+ # endif
++ # ifdef FEAT_MOUSE_URXVT
++ "+mouse_urxvt",
++ # else
++ "-mouse_urxvt",
++ # endif
+ #endif
+ #ifdef __QNX__
+***************
+*** 711,712 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 343,
+ /**/
+
+--
+Warning label on a superhero Halloween costume:
+"Caution: Cape does not enable user to fly."
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.344 b/source/ap/vim/patches/7.3.344
new file mode 100644
index 000000000..d2bb1dbe2
--- /dev/null
+++ b/source/ap/vim/patches/7.3.344
@@ -0,0 +1,121 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.344
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.344
+Problem: Problem with GUI startup related to XInitThreads.
+Solution: Use read() and write() instead of fputs() and fread(). (James
+ Vega)
+Files: src/gui.c
+
+
+*** ../vim-7.3.343/src/gui.c 2011-09-14 19:04:35.000000000 +0200
+--- src/gui.c 2011-10-20 21:23:43.000000000 +0200
+***************
+*** 212,218 ****
+ int status;
+ int exit_status;
+ pid_t pid = -1;
+- FILE *parent_file;
+
+ /* Setup a pipe between the child and the parent, so that the parent
+ * knows when the child has done the setsid() call and is allowed to
+--- 212,217 ----
+***************
+*** 290,308 ****
+ gui_mch_forked();
+ # endif
+
+- if (!pipe_error)
+- parent_file = fdopen(pipefd[1], "w");
+- else
+- parent_file = NULL;
+-
+ /* Try to start the GUI */
+ gui_attempt_start();
+
+ /* Notify the parent */
+! if (parent_file != NULL)
+ {
+! fputs(gui.in_use ? "ok" : "fail", parent_file);
+! fclose(parent_file);
+ }
+
+ /* If we failed to start the GUI, exit now. */
+--- 289,305 ----
+ gui_mch_forked();
+ # endif
+
+ /* Try to start the GUI */
+ gui_attempt_start();
+
+ /* Notify the parent */
+! if (!pipe_error)
+ {
+! if (gui.in_use)
+! write_eintr(pipefd[1], "ok", 3);
+! else
+! write_eintr(pipefd[1], "fail", 5);
+! close(pipefd[1]);
+ }
+
+ /* If we failed to start the GUI, exit now. */
+***************
+*** 323,339 ****
+ static int
+ gui_read_child_pipe(int fd)
+ {
+! size_t bytes_read;
+! FILE *file;
+! char buffer[10];
+!
+! file = fdopen(fd, "r");
+! if (!file)
+ return GUI_CHILD_IO_ERROR;
+!
+! bytes_read = fread(buffer, sizeof(char), sizeof(buffer)-1, file);
+! buffer[bytes_read] = '\0';
+! fclose(file);
+ if (strcmp(buffer, "ok") == 0)
+ return GUI_CHILD_OK;
+ return GUI_CHILD_FAILED;
+--- 320,335 ----
+ static int
+ gui_read_child_pipe(int fd)
+ {
+! long bytes_read;
+! #define READ_BUFFER_SIZE 10
+! char buffer[READ_BUFFER_SIZE];
+!
+! bytes_read = read_eintr(fd, buffer, READ_BUFFER_SIZE - 1);
+! #undef READ_BUFFER_SIZE
+! close(fd);
+! if (bytes_read < 0)
+ return GUI_CHILD_IO_ERROR;
+! buffer[bytes_read] = NUL;
+ if (strcmp(buffer, "ok") == 0)
+ return GUI_CHILD_OK;
+ return GUI_CHILD_FAILED;
+*** ../vim-7.3.343/src/version.c 2011-10-20 21:09:25.000000000 +0200
+--- src/version.c 2011-10-20 21:27:31.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 344,
+ /**/
+
+--
+From "know your smileys":
+ *<|:-) Santa Claus (Ho Ho Ho)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.345 b/source/ap/vim/patches/7.3.345
new file mode 100644
index 000000000..99dd074a2
--- /dev/null
+++ b/source/ap/vim/patches/7.3.345
@@ -0,0 +1,48 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.345
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.345
+Problem: When switching language with ":lang" the window title doesn't
+ change until later.
+Solution: Update the window title right away. (Dominique Pelle)
+Files: src/ex_cmds2.c
+
+
+*** ../vim-7.3.344/src/ex_cmds2.c 2011-06-26 04:25:24.000000000 +0200
+--- src/ex_cmds2.c 2011-10-20 21:31:09.000000000 +0200
+***************
+*** 4154,4159 ****
+--- 4154,4162 ----
+ /* Set v:lang, v:lc_time and v:ctype to the final result. */
+ set_lang_var();
+ # endif
++ # ifdef FEAT_TITLE
++ maketitle();
++ # endif
+ }
+ }
+ }
+*** ../vim-7.3.344/src/version.c 2011-10-20 21:27:57.000000000 +0200
+--- src/version.c 2011-10-20 21:38:32.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 345,
+ /**/
+
+--
+You can't have everything. Where would you put it?
+ -- Steven Wright
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.346 b/source/ap/vim/patches/7.3.346
new file mode 100644
index 000000000..e6b1a2b64
--- /dev/null
+++ b/source/ap/vim/patches/7.3.346
@@ -0,0 +1,143 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.346
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.346
+Problem: It's hard to test netbeans commands.
+Solution: Process netbeans commands after :sleep. (Xavier de Gaye)
+Files: runtime/doc/netbeans.txt, src/ex_docmd.c, src/netbeans.c
+
+
+*** ../vim-7.3.345/runtime/doc/netbeans.txt 2010-09-29 17:26:57.000000000 +0200
+--- runtime/doc/netbeans.txt 2011-10-20 21:51:41.000000000 +0200
+***************
+*** 1,4 ****
+! *netbeans.txt* For Vim version 7.3. Last change: 2010 Aug 20
+
+
+ VIM REFERENCE MANUAL by Gordon Prieur et al.
+--- 1,4 ----
+! *netbeans.txt* For Vim version 7.3. Last change: 2011 Oct 20
+
+
+ VIM REFERENCE MANUAL by Gordon Prieur et al.
+***************
+*** 263,268 ****
+--- 263,274 ----
+ plain UTF-8 text this protocol could also be used with any other communication
+ mechanism.
+
++ Netbeans messages are processed when Vim is idle, waiting for user input.
++ When Vim is run in non-interactive mode, for example when running an automated
++ test case that sources a Vim script, the idle loop may not be called often
++ enough. In that case, insert |sleep| commands in the Vim script. The |sleep|
++ command does invoke Netbeans messages processing.
++
+ 6.1 Kinds of messages |nb-messages|
+ 6.2 Terms |nb-terms|
+ 6.3 Commands |nb-commands|
+***************
+*** 820,826 ****
+ ==============================================================================
+ 7. NetBeans commands *netbeans-commands*
+
+! *:nbstart* *E511*
+ :nbs[tart] {connection} Start a new Netbeans session with {connection} as the
+ socket connection parameters. The format of
+ {connection} is described in |netbeans-parameters|.
+--- 826,832 ----
+ ==============================================================================
+ 7. NetBeans commands *netbeans-commands*
+
+! *:nbstart* *E511* *E838*
+ :nbs[tart] {connection} Start a new Netbeans session with {connection} as the
+ socket connection parameters. The format of
+ {connection} is described in |netbeans-parameters|.
+***************
+*** 833,843 ****
+ signs.
+
+ *:nbkey*
+! :nb[key] {key} Pass the {key} to the Vim Controller for processing
+!
+! When a hot-key has been installed with the specialKeys command, this command
+! can be used to generate a hotkey messages to the Vim Controller. The events
+! newDotAndMark, keyCommand and keyAtPos are generated (in this order).
+
+
+ ==============================================================================
+--- 839,854 ----
+ signs.
+
+ *:nbkey*
+! :nb[key] {key} Pass the {key} to the Vim Controller for processing.
+! When a hot-key has been installed with the specialKeys
+! command, this command can be used to generate a hotkey
+! message to the Vim Controller.
+! This command can also be used to pass any text to the
+! Vim Controller. It is used by Pyclewn, for example,
+! to build the complete set of gdb commands as Vim user
+! commands.
+! The events newDotAndMark, keyCommand and keyAtPos are
+! generated (in this order).
+
+
+ ==============================================================================
+*** ../vim-7.3.345/src/ex_docmd.c 2011-09-30 18:35:49.000000000 +0200
+--- src/ex_docmd.c 2011-10-20 21:50:06.000000000 +0200
+***************
+*** 8205,8210 ****
+--- 8205,8216 ----
+ {
+ ui_delay(msec - done > 1000L ? 1000L : msec - done, TRUE);
+ ui_breakcheck();
++ #ifdef FEAT_NETBEANS_INTG
++ /* Process the netbeans messages that may have been received in the
++ * call to ui_breakcheck() when the GUI is in use. This may occur when
++ * running a test case. */
++ netbeans_parse_messages();
++ #endif
+ }
+ }
+
+*** ../vim-7.3.345/src/netbeans.c 2011-04-11 21:35:03.000000000 +0200
+--- src/netbeans.c 2011-10-20 21:47:17.000000000 +0200
+***************
+*** 14,19 ****
+--- 14,26 ----
+ * which are *between* characters, whereas vim uses line number
+ * and column number which are *on* characters.
+ * See ":help netbeans-protocol" for explanation.
++ *
++ * The Netbeans messages are received and queued in the gui event loop, or in
++ * the select loop when Vim runs in a terminal. These messages are processed
++ * by netbeans_parse_messages() which is invoked in the idle loop when Vim is
++ * waiting for user input. The function netbeans_parse_messages() is also
++ * called from the ":sleep" command, to allow the execution of test cases that
++ * may not invoke the idle loop.
+ */
+
+ #include "vim.h"
+*** ../vim-7.3.345/src/version.c 2011-10-20 21:57:43.000000000 +0200
+--- src/version.c 2011-10-20 21:50:23.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 346,
+ /**/
+
+--
+From "know your smileys":
+ ...---... SOS
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.347 b/source/ap/vim/patches/7.3.347
new file mode 100644
index 000000000..85b0feb75
--- /dev/null
+++ b/source/ap/vim/patches/7.3.347
@@ -0,0 +1,54 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.347
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.347
+Problem: When dropping text from a browser on Vim it receives HTML even
+ though "html" is excluded from 'clipboard'. (Andrei Avk)
+Solution: Fix the condition for TARGET_HTML.
+Files: src/gui_gtk_x11.c
+
+
+*** ../vim-7.3.346/src/gui_gtk_x11.c 2011-08-10 17:44:41.000000000 +0200
+--- src/gui_gtk_x11.c 2011-10-23 20:56:38.000000000 +0200
+***************
+*** 3081,3087 ****
+
+ for (i = 0; i < (int)N_DND_TARGETS; ++i)
+ {
+! if (!clip_html && selection_targets[i].info == TARGET_HTML)
+ n_targets--;
+ else
+ targets[j++] = dnd_targets[i];
+--- 3081,3087 ----
+
+ for (i = 0; i < (int)N_DND_TARGETS; ++i)
+ {
+! if (!clip_html && dnd_targets[i].info == TARGET_HTML)
+ n_targets--;
+ else
+ targets[j++] = dnd_targets[i];
+*** ../vim-7.3.346/src/version.c 2011-10-20 21:58:20.000000000 +0200
+--- src/version.c 2011-10-26 11:35:23.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 347,
+ /**/
+
+--
+I AM THANKFUL...
+...for a lawn that needs mowing, windows that need cleaning
+and gutters that need fixing because it means I have a home.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.348 b/source/ap/vim/patches/7.3.348
new file mode 100644
index 000000000..e92febb98
--- /dev/null
+++ b/source/ap/vim/patches/7.3.348
@@ -0,0 +1,57 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.348
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.348
+Problem: "call range(1, 947948399)" causes a crash. (ZyX)
+Solution: Avoid a loop in the out of memory message.
+Files: src/misc2.c
+
+
+*** ../vim-7.3.347/src/misc2.c 2011-08-19 22:28:58.000000000 +0200
+--- src/misc2.c 2011-10-26 11:17:26.000000000 +0200
+***************
+*** 1012,1019 ****
+ {
+ /* Don't hide this message */
+ emsg_silent = 0;
+! EMSGN(_("E342: Out of memory! (allocating %lu bytes)"), size);
+ did_outofmem_msg = TRUE;
+ }
+ }
+
+--- 1012,1023 ----
+ {
+ /* Don't hide this message */
+ emsg_silent = 0;
+!
+! /* Must come first to avoid coming back here when printing the error
+! * message fails, e.g. when setting v:errmsg. */
+ did_outofmem_msg = TRUE;
++
++ EMSGN(_("E342: Out of memory! (allocating %lu bytes)"), size);
+ }
+ }
+
+*** ../vim-7.3.347/src/version.c 2011-10-26 11:36:21.000000000 +0200
+--- src/version.c 2011-10-26 11:38:33.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 348,
+ /**/
+
+--
+A fool learns from his mistakes, a wise man from someone else's.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.349 b/source/ap/vim/patches/7.3.349
new file mode 100644
index 000000000..ac519afe8
--- /dev/null
+++ b/source/ap/vim/patches/7.3.349
@@ -0,0 +1,88 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.349
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.349
+Problem: When running out of memory during startup trying to open a
+ swapfile will loop forever.
+Solution: Let findswapname() set dirp to NULL if out of memory.
+Files: src/memline.c
+
+
+*** ../vim-7.3.348/src/memline.c 2011-06-13 01:07:22.000000000 +0200
+--- src/memline.c 2011-10-26 11:26:06.000000000 +0200
+***************
+*** 621,626 ****
+--- 621,628 ----
+ break;
+ fname = findswapname(buf, &dirp, mfp->mf_fname);
+ /* alloc's fname */
++ if (dirp == NULL) /* out of memory */
++ break;
+ if (fname == NULL) /* no file name found for this dir */
+ continue;
+
+***************
+*** 744,749 ****
+--- 746,753 ----
+ * and creating it, another Vim creates the file. In that case the
+ * creation will fail and we will use another directory. */
+ fname = findswapname(buf, &dirp, NULL); /* allocates fname */
++ if (dirp == NULL)
++ break; /* out of memory */
+ if (fname == NULL)
+ continue;
+ if (mf_open_file(mfp, fname) == OK) /* consumes fname! */
+***************
+*** 4114,4119 ****
+--- 4118,4124 ----
+ *
+ * Several names are tried to find one that does not exist
+ * Returns the name in allocated memory or NULL.
++ * When out of memory "dirp" is set to NULL.
+ *
+ * Note: If BASENAMELEN is not correct, you will get error messages for
+ * not being able to open the swap or undo file
+***************
+*** 4157,4163 ****
+ * First allocate some memory to put the directory name in.
+ */
+ dir_name = alloc((unsigned)STRLEN(*dirp) + 1);
+! if (dir_name != NULL)
+ (void)copy_option_part(dirp, dir_name, 31000, ",");
+
+ /*
+--- 4162,4170 ----
+ * First allocate some memory to put the directory name in.
+ */
+ dir_name = alloc((unsigned)STRLEN(*dirp) + 1);
+! if (dir_name == NULL)
+! *dirp = NULL;
+! else
+ (void)copy_option_part(dirp, dir_name, 31000, ",");
+
+ /*
+*** ../vim-7.3.348/src/version.c 2011-10-26 11:40:56.000000000 +0200
+--- src/version.c 2011-10-26 11:43:05.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 349,
+ /**/
+
+--
+I AM THANKFUL...
+...for all the complaining I hear about the government
+because it means we have freedom of speech.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.350 b/source/ap/vim/patches/7.3.350
new file mode 100644
index 000000000..5a1f3327c
--- /dev/null
+++ b/source/ap/vim/patches/7.3.350
@@ -0,0 +1,46 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.350
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.350
+Problem: Block of code after ":lua << EOF" may not work. (Paul Isambert)
+Solution: Recognize the ":lua" command, skip to EOF.
+Files: src/eval.c
+
+
+*** ../vim-7.3.349/src/eval.c 2011-09-30 18:35:49.000000000 +0200
+--- src/eval.c 2011-10-26 13:12:06.000000000 +0200
+***************
+*** 20899,20904 ****
+--- 20899,20906 ----
+ && (!ASCII_ISALPHA(p[2]) || p[2] == 'r'))
+ || (p[0] == 't' && p[1] == 'c'
+ && (!ASCII_ISALPHA(p[2]) || p[2] == 'l'))
++ || (p[0] == 'l' && p[1] == 'u' && p[2] == 'a'
++ && !ASCII_ISALPHA(p[3]))
+ || (p[0] == 'r' && p[1] == 'u' && p[2] == 'b'
+ && (!ASCII_ISALPHA(p[3]) || p[3] == 'y'))
+ || (p[0] == 'm' && p[1] == 'z'
+*** ../vim-7.3.349/src/version.c 2011-10-26 11:44:15.000000000 +0200
+--- src/version.c 2011-10-26 13:13:21.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 350,
+ /**/
+
+--
+From "know your smileys":
+ :-| :-| Deja' vu!
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.351 b/source/ap/vim/patches/7.3.351
new file mode 100644
index 000000000..15b2194c1
--- /dev/null
+++ b/source/ap/vim/patches/7.3.351
@@ -0,0 +1,46 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.351
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.351
+Problem: Text formatting uses start of insert position when it should not.
+ (Peter Wagenaar)
+Solution: Do not use Insstart when intentionally formatting.
+Files: src/edit.c
+
+
+*** ../vim-7.3.350/src/edit.c 2011-09-21 18:23:02.000000000 +0200
+--- src/edit.c 2011-10-26 16:58:21.000000000 +0200
+***************
+*** 6078,6083 ****
+--- 6078,6084 ----
+ * Stop at first entered white when 'formatoptions' has 'v'
+ */
+ while ((!fo_ins_blank && !has_format_option(FO_INS_VI))
++ || (flags & INSCHAR_FORMAT)
+ || curwin->w_cursor.lnum != Insstart.lnum
+ || curwin->w_cursor.col >= Insstart.col)
+ {
+*** ../vim-7.3.350/src/version.c 2011-10-26 13:19:23.000000000 +0200
+--- src/version.c 2011-10-26 17:03:37.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 351,
+ /**/
+
+--
+From "know your smileys":
+ :-* A big kiss!
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.352 b/source/ap/vim/patches/7.3.352
new file mode 100644
index 000000000..52842cfc5
--- /dev/null
+++ b/source/ap/vim/patches/7.3.352
@@ -0,0 +1,108 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.352
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.352
+Problem: When completing methods dict functions and script-local functions
+ get in the way.
+Solution: Sort function names starting with "<" to the end. (Yasuhiro
+ Matsumoto)
+Files: src/ex_getln.c
+
+
+*** ../vim-7.3.351/src/ex_getln.c 2011-09-30 17:46:14.000000000 +0200
+--- src/ex_getln.c 2011-10-26 21:37:53.000000000 +0200
+***************
+*** 121,126 ****
+--- 121,134 ----
+ static int ex_window __ARGS((void));
+ #endif
+
++ #if defined(FEAT_CMDL_COMPL) || defined(PROTO)
++ static int
++ #ifdef __BORLANDC__
++ _RTLENTRYF
++ #endif
++ sort_func_compare __ARGS((const void *s1, const void *s2));
++ #endif
++
+ /*
+ * getcmdline() - accept a command line starting with firstc.
+ *
+***************
+*** 3286,3291 ****
+--- 3294,3317 ----
+ return check_abbr(c, ccline.cmdbuff, ccline.cmdpos, 0);
+ }
+
++ #if defined(FEAT_CMDL_COMPL) || defined(PROTO)
++ static int
++ #ifdef __BORLANDC__
++ _RTLENTRYF
++ #endif
++ sort_func_compare(s1, s2)
++ const void *s1;
++ const void *s2;
++ {
++ char_u *p1 = *(char_u **)s1;
++ char_u *p2 = *(char_u **)s2;
++
++ if (*p1 != '<' && *p2 == '<') return -1;
++ if (*p1 == '<' && *p2 != '<') return 1;
++ return STRCMP(p1, p2);
++ }
++ #endif
++
+ /*
+ * Return FAIL if this is not an appropriate context in which to do
+ * completion of anything, return OK if it is (even if there are no matches).
+***************
+*** 4735,4741 ****
+
+ /* Sort the results. Keep menu's in the specified order. */
+ if (xp->xp_context != EXPAND_MENUNAMES && xp->xp_context != EXPAND_MENUS)
+! sort_strings(*file, *num_file);
+
+ #ifdef FEAT_CMDL_COMPL
+ /* Reset the variables used for special highlight names expansion, so that
+--- 4761,4776 ----
+
+ /* Sort the results. Keep menu's in the specified order. */
+ if (xp->xp_context != EXPAND_MENUNAMES && xp->xp_context != EXPAND_MENUS)
+! {
+! if (xp->xp_context == EXPAND_EXPRESSION
+! || xp->xp_context == EXPAND_FUNCTIONS
+! || xp->xp_context == EXPAND_USER_FUNC)
+! /* <SNR> functions should be sorted to the end. */
+! qsort((void *)*file, (size_t)*num_file, sizeof(char_u *),
+! sort_func_compare);
+! else
+! sort_strings(*file, *num_file);
+! }
+
+ #ifdef FEAT_CMDL_COMPL
+ /* Reset the variables used for special highlight names expansion, so that
+*** ../vim-7.3.351/src/version.c 2011-10-26 17:04:23.000000000 +0200
+--- src/version.c 2011-10-26 21:49:53.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 352,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+94. Now admit it... How many of you have made "modem noises" into
+ the phone just to see if it was possible? :-)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.353 b/source/ap/vim/patches/7.3.353
new file mode 100644
index 000000000..1846243e8
--- /dev/null
+++ b/source/ap/vim/patches/7.3.353
@@ -0,0 +1,155 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.353
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.353 (after 7.3.343)
+Problem: Missing part of the urxvt patch.
+Solution: Add the change in term.c
+Files: src/term.c
+
+
+*** ../vim-7.3.352/src/term.c 2011-09-14 14:43:21.000000000 +0200
+--- src/term.c 2011-10-26 23:48:01.000000000 +0200
+***************
+*** 4008,4014 ****
+ }
+
+ #ifdef FEAT_TERMRESPONSE
+! if (key_name[0] == NUL)
+ {
+ /* Check for xterm version string: "<Esc>[>{x};{vers};{y}c". Also
+ * eat other possible responses to t_RV, rxvt returns
+--- 4008,4016 ----
+ }
+
+ #ifdef FEAT_TERMRESPONSE
+! if (key_name[0] == NUL
+! /* URXVT mouse uses <ESC>[#;#;#M, but we are matching <ESC>[ */
+! || key_name[0] == KS_URXVT_MOUSE)
+ {
+ /* Check for xterm version string: "<Esc>[>{x};{vers};{y}c". Also
+ * eat other possible responses to t_RV, rxvt returns
+***************
+*** 4047,4053 ****
+ if (tp[1 + (tp[0] != CSI)] == '>' && j == 2)
+ {
+ /* if xterm version >= 95 use mouse dragging */
+! if (extra >= 95)
+ set_option_value((char_u *)"ttym", 0L,
+ (char_u *)"xterm2", 0);
+ /* if xterm version >= 141 try to get termcap codes */
+--- 4049,4055 ----
+ if (tp[1 + (tp[0] != CSI)] == '>' && j == 2)
+ {
+ /* if xterm version >= 95 use mouse dragging */
+! if (extra >= 95 && ttym_flags != TTYM_URXVT)
+ set_option_value((char_u *)"ttym", 0L,
+ (char_u *)"xterm2", 0);
+ /* if xterm version >= 141 try to get termcap codes */
+***************
+*** 4141,4146 ****
+--- 4143,4151 ----
+ # ifdef FEAT_MOUSE_PTERM
+ || key_name[0] == (int)KS_PTERM_MOUSE
+ # endif
++ # ifdef FEAT_MOUSE_URXVT
++ || key_name[0] == (int)KS_URXVT_MOUSE
++ # endif
+ )
+ {
+ is_click = is_drag = FALSE;
+***************
+*** 4219,4225 ****
+--- 4224,4292 ----
+ else
+ break;
+ }
++ }
++
++ # ifdef FEAT_MOUSE_URXVT
++ if (key_name[0] == (int)KS_URXVT_MOUSE)
++ {
++ for (;;)
++ {
++ /* URXVT 1015 mouse reporting mode:
++ * Almost identical to xterm mouse mode, except the values
++ * are decimal instead of bytes.
++ *
++ * \033[%d;%d;%dM
++ * ^-- row
++ * ^----- column
++ * ^-------- code
++ */
++ p = tp + slen;
++
++ mouse_code = getdigits(&p);
++ if (*p++ != ';')
++ return -1;
++
++ mouse_col = getdigits(&p) - 1;
++ if (*p++ != ';')
++ return -1;
++
++ mouse_row = getdigits(&p) - 1;
++ if (*p++ != 'M')
++ return -1;
++
++ slen += (int)(p - (tp + slen));
++
++ /* skip this one if next one has same code (like xterm
++ * case) */
++ j = termcodes[idx].len;
++ if (STRNCMP(tp, tp + slen, (size_t)j) == 0) {
++ /* check if the command is complete by looking for the
++ * M */
++ int slen2;
++ int cmd_complete = 0;
++ for (slen2 = slen; slen2 < len; slen2++) {
++ if (tp[slen2] == 'M') {
++ cmd_complete = 1;
++ break;
++ }
++ }
++ p += j;
++ if (cmd_complete && getdigits(&p) == mouse_code) {
++ slen += j; /* skip the \033[ */
++ continue;
++ }
++ }
++ break;
++ }
++ }
++ # endif
+
++ if (key_name[0] == (int)KS_MOUSE
++ #ifdef FEAT_MOUSE_URXVT
++ || key_name[0] == (int)KS_URXVT_MOUSE
++ #endif
++ )
++ {
+ # if !defined(MSWIN) && !defined(MSDOS)
+ /*
+ * Handle mouse events.
+*** ../vim-7.3.352/src/version.c 2011-10-26 22:02:10.000000000 +0200
+--- src/version.c 2011-10-26 23:43:26.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 353,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+99. The hum of a cooling fan and the click of keys is comforting to you.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.354 b/source/ap/vim/patches/7.3.354
new file mode 100644
index 000000000..8250f9af9
--- /dev/null
+++ b/source/ap/vim/patches/7.3.354
@@ -0,0 +1,71 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.354
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.354
+Problem: ":set backspace+=eol" doesn't work when 'backspace' has a
+ backwards compatible value of 2.
+Solution: Convert the number to a string. (Hirohito Higashi)
+Files: src/option.c
+
+
+*** ../vim-7.3.353/src/option.c 2011-10-12 16:57:07.000000000 +0200
+--- src/option.c 2011-11-30 11:11:15.000000000 +0100
+***************
+*** 4567,4572 ****
+--- 4567,4597 ----
+ arg = errbuf;
+ }
+ /*
++ * Convert 'backspace' number to string, for
++ * adding, prepending and removing string.
++ */
++ else if (varp == (char_u *)&p_bs
++ && VIM_ISDIGIT(**(char_u **)varp))
++ {
++ i = getdigits((char_u **)varp);
++ switch (i)
++ {
++ case 0:
++ *(char_u **)varp = empty_option;
++ break;
++ case 1:
++ *(char_u **)varp = vim_strsave(
++ (char_u *)"indent,eol");
++ break;
++ case 2:
++ *(char_u **)varp = vim_strsave(
++ (char_u *)"indent,eol,start");
++ break;
++ }
++ vim_free(oldval);
++ oldval = *(char_u **)varp;
++ }
++ /*
+ * Convert 'whichwrap' number to string, for
+ * backwards compatibility with Vim 3.0.
+ * Misuse errbuf[] for the resulting string.
+*** ../vim-7.3.353/src/version.c 2011-10-26 23:48:17.000000000 +0200
+--- src/version.c 2011-11-30 11:14:44.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 354,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+206. You religiously respond immediately to e-mail, while ignoring
+ your growing pile of snail mail.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.355 b/source/ap/vim/patches/7.3.355
new file mode 100644
index 000000000..51bc3b7f8
--- /dev/null
+++ b/source/ap/vim/patches/7.3.355
@@ -0,0 +1,56 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.355
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.355
+Problem: GTK warnings when using netrw.vim. (Ivan Krasilnikov)
+Solution: Do not remove the beval event handler twice.
+Files: src/option.c
+
+
+*** ../vim-7.3.354/src/option.c 2011-11-30 11:15:40.000000000 +0100
+--- src/option.c 2011-11-30 11:11:15.000000000 +0100
+***************
+*** 7796,7804 ****
+ #ifdef FEAT_BEVAL
+ else if ((int *)varp == &p_beval)
+ {
+! if (p_beval == TRUE)
+ gui_mch_enable_beval_area(balloonEval);
+! else
+ gui_mch_disable_beval_area(balloonEval);
+ }
+ #endif
+--- 7796,7804 ----
+ #ifdef FEAT_BEVAL
+ else if ((int *)varp == &p_beval)
+ {
+! if (p_beval && !old_value)
+ gui_mch_enable_beval_area(balloonEval);
+! else if (!p_beval && old_value)
+ gui_mch_disable_beval_area(balloonEval);
+ }
+ #endif
+*** ../vim-7.3.354/src/version.c 2011-11-30 11:15:40.000000000 +0100
+--- src/version.c 2011-11-30 11:30:55.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 355,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+209. Your house stinks because you haven't cleaned it in a week.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.356 b/source/ap/vim/patches/7.3.356
new file mode 100644
index 000000000..8b5572bdf
--- /dev/null
+++ b/source/ap/vim/patches/7.3.356
@@ -0,0 +1,79 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.356
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.356
+Problem: Using "o" with 'cindent' set may freeze Vim. (lolilolicon)
+Solution: Skip over {} correctly. (Hari G)
+Files: src/misc1.c
+
+
+*** ../vim-7.3.355/src/misc1.c 2011-10-04 18:03:43.000000000 +0200
+--- src/misc1.c 2011-11-30 12:56:55.000000000 +0100
+***************
+*** 6127,6133 ****
+
+ /*
+ * Set w_cursor.col to the column number of the last unmatched ')' or '{' in
+! * line "l".
+ */
+ static int
+ find_last_paren(l, start, end)
+--- 6127,6133 ----
+
+ /*
+ * Set w_cursor.col to the column number of the last unmatched ')' or '{' in
+! * line "l". "l" must point to the start of the line.
+ */
+ static int
+ find_last_paren(l, start, end)
+***************
+*** 6140,6146 ****
+
+ curwin->w_cursor.col = 0; /* default is start of line */
+
+! for (i = 0; l[i]; i++)
+ {
+ i = (int)(cin_skipcomment(l + i) - l); /* ignore parens in comments */
+ i = (int)(skip_string(l + i) - l); /* ignore parens in quotes */
+--- 6140,6146 ----
+
+ curwin->w_cursor.col = 0; /* default is start of line */
+
+! for (i = 0; l[i] != NUL; i++)
+ {
+ i = (int)(cin_skipcomment(l + i) - l); /* ignore parens in comments */
+ i = (int)(skip_string(l + i) - l); /* ignore parens in quotes */
+***************
+*** 7953,7958 ****
+--- 7953,7959 ----
+ * If we're at the end of a block, skip to the start of
+ * that block.
+ */
++ l = ml_get_curline();
+ if (find_last_paren(l, '{', '}')
+ && (trypos = find_start_brace(ind_maxcomment))
+ != NULL) /* XXX */
+*** ../vim-7.3.355/src/version.c 2011-11-30 11:31:25.000000000 +0100
+--- src/version.c 2011-11-30 13:02:52.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 356,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+213. Your kids start referring to you as "that guy in front of the monitor."
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.357 b/source/ap/vim/patches/7.3.357
new file mode 100644
index 000000000..893a6bb4f
--- /dev/null
+++ b/source/ap/vim/patches/7.3.357
@@ -0,0 +1,52 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.357
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.357
+Problem: Compiler warning in MS-Windows console build.
+Solution: Adjust return type of PrintHookProc(). (Mike Williams)
+Files: src/os_mswin.c
+
+
+*** ../vim-7.3.356/src/os_mswin.c 2011-09-21 20:09:38.000000000 +0200
+--- src/os_mswin.c 2011-11-30 13:41:13.000000000 +0100
+***************
+*** 1869,1875 ****
+
+ #ifndef FEAT_GUI
+
+! static UINT CALLBACK
+ PrintHookProc(
+ HWND hDlg, // handle to dialog box
+ UINT uiMsg, // message identifier
+--- 1869,1875 ----
+
+ #ifndef FEAT_GUI
+
+! static UINT_PTR CALLBACK
+ PrintHookProc(
+ HWND hDlg, // handle to dialog box
+ UINT uiMsg, // message identifier
+*** ../vim-7.3.356/src/version.c 2011-11-30 13:03:24.000000000 +0100
+--- src/version.c 2011-11-30 13:41:55.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 357,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+215. Your mouse-clicking forearm rivals Popeye's.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.358 b/source/ap/vim/patches/7.3.358
new file mode 100644
index 000000000..b9b385f87
--- /dev/null
+++ b/source/ap/vim/patches/7.3.358
@@ -0,0 +1,74 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.358
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.358 (after 7.3.353)
+Problem: Mouse support doesn't work properly.
+Solution: Add HMT_URXVT. (lilydjwg, James McCoy)
+Files: src/term.c
+
+
+*** ../vim-7.3.357/src/term.c 2011-10-26 23:48:17.000000000 +0200
+--- src/term.c 2011-11-30 14:42:22.000000000 +0100
+***************
+*** 1996,2001 ****
+--- 1996,2002 ----
+ # define HMT_DEC 4
+ # define HMT_JSBTERM 8
+ # define HMT_PTERM 16
++ # define HMT_URXVT 32
+ static int has_mouse_termcode = 0;
+ # endif
+
+***************
+*** 2031,2036 ****
+--- 2032,2042 ----
+ has_mouse_termcode |= HMT_PTERM;
+ else
+ # endif
++ # ifdef FEAT_MOUSE_URXVT
++ if (n == KS_URXVT_MOUSE)
++ has_mouse_termcode |= HMT_URXVT;
++ else
++ # endif
+ has_mouse_termcode |= HMT_NORMAL;
+ # endif
+ }
+***************
+*** 2068,2073 ****
+--- 2074,2084 ----
+ has_mouse_termcode &= ~HMT_PTERM;
+ else
+ # endif
++ # ifdef FEAT_MOUSE_URXVT
++ if (n == KS_URXVT_MOUSE)
++ has_mouse_termcode &= ~HMT_URXVT;
++ else
++ # endif
+ has_mouse_termcode &= ~HMT_NORMAL;
+ # endif
+ }
+*** ../vim-7.3.357/src/version.c 2011-11-30 13:42:40.000000000 +0100
+--- src/version.c 2011-11-30 14:45:06.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 358,
+ /**/
+
+--
+I noticed my daughter's Disney-net password on a sticky note:
+"MickeyMinnieGoofyPluto". I asked her why it was so long.
+"Because they say it has to have at least four characters."
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.359 b/source/ap/vim/patches/7.3.359
new file mode 100644
index 000000000..7fbd3f6fa
--- /dev/null
+++ b/source/ap/vim/patches/7.3.359
@@ -0,0 +1,64 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.359
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.359
+Problem: Command line completion shows dict functions.
+Solution: Skip dict functions for completion. (Yasuhiro Matsumoto)
+Files: src/eval.c
+
+
+*** ../vim-7.3.358/src/eval.c 2011-10-26 13:19:23.000000000 +0200
+--- src/eval.c 2011-11-30 14:53:38.000000000 +0100
+***************
+*** 875,881 ****
+
+ #ifdef EBCDIC
+ /*
+! * Sort the function table, to enable binary sort.
+ */
+ sortFunctions();
+ #endif
+--- 875,881 ----
+
+ #ifdef EBCDIC
+ /*
+! * Sort the function table, to enable binary search.
+ */
+ sortFunctions();
+ #endif
+***************
+*** 21737,21742 ****
+--- 21737,21745 ----
+ ++hi;
+ fp = HI2UF(hi);
+
++ if (fp->uf_flags & FC_DICT)
++ return NULL; /* don't show dict functions */
++
+ if (STRLEN(fp->uf_name) + 4 >= IOSIZE)
+ return fp->uf_name; /* prevents overflow */
+
+*** ../vim-7.3.358/src/version.c 2011-11-30 14:47:12.000000000 +0100
+--- src/version.c 2011-11-30 14:56:57.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 359,
+ /**/
+
+--
+'Psychologist' -- Someone who looks at everyone else when
+an attractive woman enters the room.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.360 b/source/ap/vim/patches/7.3.360
new file mode 100644
index 000000000..de153c835
--- /dev/null
+++ b/source/ap/vim/patches/7.3.360
@@ -0,0 +1,61 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.360
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.360
+Problem: Interrupting the load of an autoload function may cause a crash.
+Solution: Do not use the hashitem when not valid. (Yukihiro Nakadaira)
+Files: src/eval.c
+
+
+*** ../vim-7.3.359/src/eval.c 2011-11-30 14:57:26.000000000 +0100
+--- src/eval.c 2011-11-30 15:06:53.000000000 +0100
+***************
+*** 19589,19597 ****
+ * worked find the variable again. Don't auto-load a script if it was
+ * loaded already, otherwise it would be loaded every time when
+ * checking if a function name is a Funcref variable. */
+! if (ht == &globvarht && !writing
+! && script_autoload(varname, FALSE) && !aborting())
+ hi = hash_find(ht, varname);
+ if (HASHITEM_EMPTY(hi))
+ return NULL;
+ }
+--- 19589,19602 ----
+ * worked find the variable again. Don't auto-load a script if it was
+ * loaded already, otherwise it would be loaded every time when
+ * checking if a function name is a Funcref variable. */
+! if (ht == &globvarht && !writing)
+! {
+! /* Note: script_autoload() may make "hi" invalid. It must either
+! * be obtained again or not used. */
+! if (!script_autoload(varname, FALSE) || aborting())
+! return NULL;
+ hi = hash_find(ht, varname);
++ }
+ if (HASHITEM_EMPTY(hi))
+ return NULL;
+ }
+*** ../vim-7.3.359/src/version.c 2011-11-30 14:57:26.000000000 +0100
+--- src/version.c 2011-11-30 15:17:28.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 360,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+217. Your sex life has drastically improved...so what if it's only cyber-sex!
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.361 b/source/ap/vim/patches/7.3.361
new file mode 100644
index 000000000..c128057f9
--- /dev/null
+++ b/source/ap/vim/patches/7.3.361
@@ -0,0 +1,55 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.361
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.361
+Problem: Accessing memory after it is freed when EXITFREE is defined.
+Solution: Don't access curwin when firstwin is NULL. (Dominique Pelle)
+Files: src/buffer.c
+
+*** ../vim-7.3.360/src/buffer.c 2011-09-14 17:50:05.000000000 +0200
+--- src/buffer.c 2011-11-30 15:38:00.000000000 +0100
+***************
+*** 567,574 ****
+ diff_buf_delete(buf); /* Can't use 'diff' for unloaded buffer. */
+ #endif
+ #ifdef FEAT_SYN_HL
+! if (curwin->w_buffer == buf)
+! reset_synblock(curwin); /* remove any ownsyntax */
+ #endif
+
+ #ifdef FEAT_FOLDING
+--- 567,575 ----
+ diff_buf_delete(buf); /* Can't use 'diff' for unloaded buffer. */
+ #endif
+ #ifdef FEAT_SYN_HL
+! /* Remove any ownsyntax, unless exiting. */
+! if (firstwin != NULL && curwin->w_buffer == buf)
+! reset_synblock(curwin);
+ #endif
+
+ #ifdef FEAT_FOLDING
+*** ../vim-7.3.360/src/version.c 2011-11-30 15:19:25.000000000 +0100
+--- src/version.c 2011-11-30 15:40:22.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 361,
+ /**/
+
+
+--
+From the classified section of a city newspaper:
+Dog for sale: eats anything and is fond of children.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.362 b/source/ap/vim/patches/7.3.362
new file mode 100644
index 000000000..005688617
--- /dev/null
+++ b/source/ap/vim/patches/7.3.362
@@ -0,0 +1,59 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.362
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.362
+Problem: ml_get error when using ":g" with folded lines.
+Solution: Adjust the line number for changed_lines(). (Christian Brabandt)
+Files: src/ex_cmds.c
+
+
+*** ../vim-7.3.361/src/ex_cmds.c 2011-10-20 18:17:38.000000000 +0200
+--- src/ex_cmds.c 2011-11-30 16:58:34.000000000 +0100
+***************
+*** 820,826 ****
+ curwin->w_cursor.lnum = dest + (line2 - line1) + 1;
+
+ if (line1 < dest)
+! changed_lines(line1, 0, dest + num_lines + 1, 0L);
+ else
+ changed_lines(dest + 1, 0, line1 + num_lines, 0L);
+
+--- 820,832 ----
+ curwin->w_cursor.lnum = dest + (line2 - line1) + 1;
+
+ if (line1 < dest)
+! {
+! dest += num_lines + 1;
+! last_line = curbuf->b_ml.ml_line_count;
+! if (dest > last_line + 1)
+! dest = last_line + 1;
+! changed_lines(line1, 0, dest, 0L);
+! }
+ else
+ changed_lines(dest + 1, 0, line1 + num_lines, 0L);
+
+*** ../vim-7.3.361/src/version.c 2011-11-30 15:40:51.000000000 +0100
+--- src/version.c 2011-11-30 17:01:07.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 362,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+218. Your spouse hands you a gift wrapped magnet with your PC's name
+ on it and you accuse him or her of genocide.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.363 b/source/ap/vim/patches/7.3.363
new file mode 100644
index 000000000..10ab5482f
--- /dev/null
+++ b/source/ap/vim/patches/7.3.363
@@ -0,0 +1,110 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.363
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.363
+Problem: C indenting is wrong after #endif followed by a semicolon.
+Solution: Add special handling for a semicolon in a line by itself. (Lech
+ Lorens)
+Files: src/misc1.c, src/testdir/test3.in, src/testdir/test3.ok
+
+
+*** ../vim-7.3.362/src/misc1.c 2011-11-30 13:03:24.000000000 +0100
+--- src/misc1.c 2011-11-30 17:10:59.000000000 +0100
+***************
+*** 8143,8148 ****
+--- 8143,8171 ----
+ break;
+
+ /*
++ * Find a line only has a semicolon that belongs to a previous
++ * line ending in '}', e.g. before an #endif. Don't increase
++ * indent then.
++ */
++ if (*(look = skipwhite(l)) == ';' && cin_nocode(look + 1))
++ {
++ pos_T curpos_save = curwin->w_cursor;
++
++ while (curwin->w_cursor.lnum > 1)
++ {
++ look = ml_get(--curwin->w_cursor.lnum);
++ if (!(cin_nocode(look) || cin_ispreproc_cont(
++ &look, &curwin->w_cursor.lnum)))
++ break;
++ }
++ if (curwin->w_cursor.lnum > 0
++ && cin_ends_in(look, (char_u *)"}", NULL))
++ break;
++
++ curwin->w_cursor = curpos_save;
++ }
++
++ /*
+ * If the PREVIOUS line is a function declaration, the current
+ * line (and the ones that follow) needs to be indented as
+ * parameters.
+*** ../vim-7.3.362/src/testdir/test3.in 2011-10-04 18:03:43.000000000 +0200
+--- src/testdir/test3.in 2011-11-30 17:05:20.000000000 +0100
+***************
+*** 1454,1459 ****
+--- 1454,1469 ----
+ printf("This line used to be indented incorrectly.\n");
+ }
+
++ int foo[]
++ #ifdef BAR
++
++ = { 1, 2, 3,
++ 4, 5, 6 }
++
++ #endif
++ ;
++ int baz;
++
+ void func3(void)
+ {
+ int tab[] = {
+*** ../vim-7.3.362/src/testdir/test3.ok 2011-10-04 18:03:43.000000000 +0200
+--- src/testdir/test3.ok 2011-11-30 17:05:20.000000000 +0100
+***************
+*** 1307,1312 ****
+--- 1307,1322 ----
+ printf("This line used to be indented incorrectly.\n");
+ }
+
++ int foo[]
++ #ifdef BAR
++
++ = { 1, 2, 3,
++ 4, 5, 6 }
++
++ #endif
++ ;
++ int baz;
++
+ void func3(void)
+ {
+ int tab[] = {
+*** ../vim-7.3.362/src/version.c 2011-11-30 17:01:55.000000000 +0100
+--- src/version.c 2011-11-30 17:06:57.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 363,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+220. Your wife asks for sex and you tell her where to find you on IRC.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.364 b/source/ap/vim/patches/7.3.364
new file mode 100644
index 000000000..e62ef76d9
--- /dev/null
+++ b/source/ap/vim/patches/7.3.364
@@ -0,0 +1,57 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.364
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.364 (after 7.3.353)
+Problem: Can't compile on HP-UX. (John Marriott)
+Solution: Only use TTYM_URXVT when it is defined.
+Files: src/term.c
+
+
+*** ../vim-7.3.363/src/term.c 2011-11-30 14:47:12.000000000 +0100
+--- src/term.c 2011-12-01 20:53:57.000000000 +0100
+***************
+*** 4060,4066 ****
+ if (tp[1 + (tp[0] != CSI)] == '>' && j == 2)
+ {
+ /* if xterm version >= 95 use mouse dragging */
+! if (extra >= 95 && ttym_flags != TTYM_URXVT)
+ set_option_value((char_u *)"ttym", 0L,
+ (char_u *)"xterm2", 0);
+ /* if xterm version >= 141 try to get termcap codes */
+--- 4060,4070 ----
+ if (tp[1 + (tp[0] != CSI)] == '>' && j == 2)
+ {
+ /* if xterm version >= 95 use mouse dragging */
+! if (extra >= 95
+! # ifdef TTYM_URXVT
+! && ttym_flags != TTYM_URXVT
+! # endif
+! )
+ set_option_value((char_u *)"ttym", 0L,
+ (char_u *)"xterm2", 0);
+ /* if xterm version >= 141 try to get termcap codes */
+*** ../vim-7.3.363/src/version.c 2011-11-30 17:20:18.000000000 +0100
+--- src/version.c 2011-12-01 20:56:55.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 364,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+224. You set up your own Web page. You set up a Web page for each
+ of your kids... and your pets.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.365 b/source/ap/vim/patches/7.3.365
new file mode 100644
index 000000000..16d5ad1b0
--- /dev/null
+++ b/source/ap/vim/patches/7.3.365
@@ -0,0 +1,131 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.365
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.365
+Problem: Crash when using a large Unicode character in a file that has
+ syntax highlighting. (ngollan)
+Solution: Check for going past the end of the utf tables. (Dominique Pelle)
+Files: src/mbyte.c
+
+
+*** ../vim-7.3.364/src/mbyte.c 2011-08-10 13:21:30.000000000 +0200
+--- src/mbyte.c 2011-12-08 15:09:13.000000000 +0100
+***************
+*** 2764,2782 ****
+ int tableSize;
+ {
+ int start, mid, end; /* indices into table */
+
+ start = 0;
+! end = tableSize / sizeof(convertStruct);
+ while (start < end)
+ {
+ /* need to search further */
+! mid = (end + start) /2;
+ if (table[mid].rangeEnd < a)
+ start = mid + 1;
+ else
+ end = mid;
+ }
+! if (table[start].rangeStart <= a && a <= table[start].rangeEnd
+ && (a - table[start].rangeStart) % table[start].step == 0)
+ return (a + table[start].offset);
+ else
+--- 2764,2785 ----
+ int tableSize;
+ {
+ int start, mid, end; /* indices into table */
++ int entries = tableSize / sizeof(convertStruct);
+
+ start = 0;
+! end = entries;
+ while (start < end)
+ {
+ /* need to search further */
+! mid = (end + start) / 2;
+ if (table[mid].rangeEnd < a)
+ start = mid + 1;
+ else
+ end = mid;
+ }
+! if (start < entries
+! && table[start].rangeStart <= a
+! && a <= table[start].rangeEnd
+ && (a - table[start].rangeStart) % table[start].step == 0)
+ return (a + table[start].offset);
+ else
+***************
+*** 2791,2797 ****
+ utf_fold(a)
+ int a;
+ {
+! return utf_convert(a, foldCase, sizeof(foldCase));
+ }
+
+ static convertStruct toLower[] =
+--- 2794,2800 ----
+ utf_fold(a)
+ int a;
+ {
+! return utf_convert(a, foldCase, (int)sizeof(foldCase));
+ }
+
+ static convertStruct toLower[] =
+***************
+*** 3119,3125 ****
+ return TOUPPER_LOC(a);
+
+ /* For any other characters use the above mapping table. */
+! return utf_convert(a, toUpper, sizeof(toUpper));
+ }
+
+ int
+--- 3122,3128 ----
+ return TOUPPER_LOC(a);
+
+ /* For any other characters use the above mapping table. */
+! return utf_convert(a, toUpper, (int)sizeof(toUpper));
+ }
+
+ int
+***************
+*** 3152,3158 ****
+ return TOLOWER_LOC(a);
+
+ /* For any other characters use the above mapping table. */
+! return utf_convert(a, toLower, sizeof(toLower));
+ }
+
+ int
+--- 3155,3161 ----
+ return TOLOWER_LOC(a);
+
+ /* For any other characters use the above mapping table. */
+! return utf_convert(a, toLower, (int)sizeof(toLower));
+ }
+
+ int
+*** ../vim-7.3.364/src/version.c 2011-12-01 20:59:16.000000000 +0100
+--- src/version.c 2011-12-08 15:07:53.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 365,
+ /**/
+
+--
+Hear about the guy who played a blank tape at full blast?
+The mime next door went nuts.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.366 b/source/ap/vim/patches/7.3.366
new file mode 100644
index 000000000..ddf39903f
--- /dev/null
+++ b/source/ap/vim/patches/7.3.366
@@ -0,0 +1,76 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.366
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.366
+Problem: A tags file with an extremely long name causes errors.
+Solution: Ignore tags that are too long. (Arno Renevier)
+Files: src/tag.c
+
+
+*** ../vim-7.3.365/src/tag.c 2011-10-12 19:53:31.000000000 +0200
+--- src/tag.c 2011-12-08 13:32:51.000000000 +0100
+***************
+*** 1906,1917 ****
+ tagp.tagname = lbuf;
+ #ifdef FEAT_TAG_ANYWHITE
+ tagp.tagname_end = skiptowhite(lbuf);
+! if (*tagp.tagname_end == NUL) /* corrupted tag line */
+ #else
+ tagp.tagname_end = vim_strchr(lbuf, TAB);
+! if (tagp.tagname_end == NULL) /* corrupted tag line */
+ #endif
+ {
+ line_error = TRUE;
+ break;
+ }
+--- 1906,1931 ----
+ tagp.tagname = lbuf;
+ #ifdef FEAT_TAG_ANYWHITE
+ tagp.tagname_end = skiptowhite(lbuf);
+! if (*tagp.tagname_end == NUL)
+ #else
+ tagp.tagname_end = vim_strchr(lbuf, TAB);
+! if (tagp.tagname_end == NULL)
+ #endif
+ {
++ if (vim_strchr(lbuf, NL) == NULL)
++ {
++ /* Truncated line, ignore it. Has been reported for
++ * Mozilla JS with extremely long names. */
++ if (p_verbose >= 5)
++ {
++ verbose_enter();
++ MSG(_("Ignoring long line in tags file"));
++ verbose_leave();
++ }
++ continue;
++ }
++
++ /* Corrupted tag line. */
+ line_error = TRUE;
+ break;
+ }
+*** ../vim-7.3.365/src/version.c 2011-12-08 15:09:46.000000000 +0100
+--- src/version.c 2011-12-08 15:11:10.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 366,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+246. You use up your free 100 hours in less than a week.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.367 b/source/ap/vim/patches/7.3.367
new file mode 100644
index 000000000..2452d531c
--- /dev/null
+++ b/source/ap/vim/patches/7.3.367
@@ -0,0 +1,53 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.367
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.367
+Problem: :wundo and :rundo use a wrong checksum.
+Solution: Include the last line when computing the hash. (Christian Brabandt)
+Files: src/undo.c
+
+
+*** ../vim-7.3.366/src/undo.c 2011-01-22 21:25:07.000000000 +0100
+--- src/undo.c 2011-12-08 14:19:03.000000000 +0100
+***************
+*** 719,725 ****
+ char_u *p;
+
+ sha256_start(&ctx);
+! for (lnum = 1; lnum < curbuf->b_ml.ml_line_count; ++lnum)
+ {
+ p = ml_get(lnum);
+ sha256_update(&ctx, p, (UINT32_T)(STRLEN(p) + 1));
+--- 719,725 ----
+ char_u *p;
+
+ sha256_start(&ctx);
+! for (lnum = 1; lnum <= curbuf->b_ml.ml_line_count; ++lnum)
+ {
+ p = ml_get(lnum);
+ sha256_update(&ctx, p, (UINT32_T)(STRLEN(p) + 1));
+*** ../vim-7.3.366/src/version.c 2011-12-08 15:12:08.000000000 +0100
+--- src/version.c 2011-12-08 15:13:32.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 367,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+247. You use www.switchboard.com instead of dialing 411 and 555-12-12
+ for directory assistance.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.368 b/source/ap/vim/patches/7.3.368
new file mode 100644
index 000000000..958c69e71
--- /dev/null
+++ b/source/ap/vim/patches/7.3.368
@@ -0,0 +1,103 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.368
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.368
+Problem: Gcc complains about redefining _FORTIFY_SOURCE.
+Solution: Undefine it before redefining it.
+Files: src/Makefile, src/configure.in, src/auto/configure
+
+
+*** ../vim-7.3.367/src/Makefile 2011-10-20 16:35:25.000000000 +0200
+--- src/Makefile 2011-12-08 15:16:13.000000000 +0100
+***************
+*** 561,568 ****
+ #CFLAGS = -g -O2 '-DSTARTUPTIME="vimstartup"' -fno-strength-reduce -Wall -Wmissing-prototypes
+
+ # Use this with GCC to check for mistakes, unused arguments, etc.
+! #CFLAGS = -g -Wall -Wextra -Wmissing-prototypes -Wunreachable-code -D_FORTIFY_SOURCE=1
+! #CFLAGS = -g -O2 -Wall -Wextra -Wmissing-prototypes -D_FORTIFY_SOURCE=1 -DU_DEBUG
+ #PYTHON_CFLAGS_EXTRA = -Wno-missing-field-initializers
+ #MZSCHEME_CFLAGS_EXTRA = -Wno-unreachable-code -Wno-unused-parameter
+
+--- 561,568 ----
+ #CFLAGS = -g -O2 '-DSTARTUPTIME="vimstartup"' -fno-strength-reduce -Wall -Wmissing-prototypes
+
+ # Use this with GCC to check for mistakes, unused arguments, etc.
+! #CFLAGS = -g -Wall -Wextra -Wmissing-prototypes -Wunreachable-code -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1
+! #CFLAGS = -g -O2 -Wall -Wextra -Wmissing-prototypes -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1 -DU_DEBUG
+ #PYTHON_CFLAGS_EXTRA = -Wno-missing-field-initializers
+ #MZSCHEME_CFLAGS_EXTRA = -Wno-unreachable-code -Wno-unused-parameter
+
+*** ../vim-7.3.367/src/configure.in 2011-09-02 12:27:20.000000000 +0200
+--- src/configure.in 2011-12-01 20:23:22.000000000 +0100
+***************
+*** 3584,3592 ****
+ dnl -D_FORTIFY_SOURCE=2 crashes Vim on strcpy(buf, "000") when buf is
+ dnl declared as char x[1] but actually longer. Introduced in gcc 4.0.
+ dnl Also remove duplicate _FORTIFY_SOURCE arguments.
+ AC_MSG_CHECKING(whether we need -D_FORTIFY_SOURCE=1)
+ if test "$gccmajor" -gt "3"; then
+! CFLAGS=`echo "$CFLAGS" | sed -e 's/-Wp,-D_FORTIFY_SOURCE=.//g' -e 's/-D_FORTIFY_SOURCE=.//g' -e 's/$/ -D_FORTIFY_SOURCE=1/'`
+ AC_MSG_RESULT(yes)
+ else
+ AC_MSG_RESULT(no)
+--- 3584,3593 ----
+ dnl -D_FORTIFY_SOURCE=2 crashes Vim on strcpy(buf, "000") when buf is
+ dnl declared as char x[1] but actually longer. Introduced in gcc 4.0.
+ dnl Also remove duplicate _FORTIFY_SOURCE arguments.
++ dnl And undefine it first to avoid a warning.
+ AC_MSG_CHECKING(whether we need -D_FORTIFY_SOURCE=1)
+ if test "$gccmajor" -gt "3"; then
+! CFLAGS=`echo "$CFLAGS" | sed -e 's/-Wp,-D_FORTIFY_SOURCE=.//g' -e 's/-D_FORTIFY_SOURCE=.//g' -e 's/$/ -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1/'`
+ AC_MSG_RESULT(yes)
+ else
+ AC_MSG_RESULT(no)
+*** ../vim-7.3.367/src/auto/configure 2011-09-02 12:27:20.000000000 +0200
+--- src/auto/configure 2011-12-01 20:24:02.000000000 +0100
+***************
+*** 12483,12492 ****
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+ $as_echo "no" >&6; }
+ fi
+! { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we need -D_FORTIFY_SOURCE=1" >&5
+ $as_echo_n "checking whether we need -D_FORTIFY_SOURCE=1... " >&6; }
+ if test "$gccmajor" -gt "3"; then
+! CFLAGS=`echo "$CFLAGS" | sed -e 's/-Wp,-D_FORTIFY_SOURCE=.//g' -e 's/-D_FORTIFY_SOURCE=.//g' -e 's/$/ -D_FORTIFY_SOURCE=1/'`
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+ $as_echo "yes" >&6; }
+ else
+--- 12483,12492 ----
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+ $as_echo "no" >&6; }
+ fi
+! { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we need -D_FORTIFY_SOURCE=1" >&5
+ $as_echo_n "checking whether we need -D_FORTIFY_SOURCE=1... " >&6; }
+ if test "$gccmajor" -gt "3"; then
+! CFLAGS=`echo "$CFLAGS" | sed -e 's/-Wp,-D_FORTIFY_SOURCE=.//g' -e 's/-D_FORTIFY_SOURCE=.//g' -e 's/$/ -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1/'`
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+ $as_echo "yes" >&6; }
+ else
+*** ../vim-7.3.367/src/version.c 2011-12-08 15:14:04.000000000 +0100
+--- src/version.c 2011-12-08 15:15:13.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 368,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+248. You sign your letters with your e-mail address instead of your name.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.369 b/source/ap/vim/patches/7.3.369
new file mode 100644
index 000000000..af6e7e6e7
--- /dev/null
+++ b/source/ap/vim/patches/7.3.369
@@ -0,0 +1,48 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.369
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.369
+Problem: When compiled with Gnome get an error message when using --help.
+Solution: Don't fork. (Ivan Krasilnikov)
+Files: src/main.c
+
+
+*** ../vim-7.3.368/src/main.c 2011-10-04 16:43:49.000000000 +0200
+--- src/main.c 2011-12-01 20:27:11.000000000 +0100
+***************
+*** 3294,3300 ****
+--- 3294,3303 ----
+ #ifdef FEAT_GUI_GNOME
+ /* Gnome gives extra messages for --help if we continue, but not for -h. */
+ if (gui.starting)
++ {
+ mch_msg("\n");
++ gui.dofork = FALSE;
++ }
+ else
+ #endif
+ mch_exit(0);
+*** ../vim-7.3.368/src/version.c 2011-12-08 15:17:28.000000000 +0100
+--- src/version.c 2011-12-08 15:57:03.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 369,
+ /**/
+
+--
+Vi is clearly superior to emacs, since "vi" has only two characters
+(and two keystrokes), while "emacs" has five. (Randy C. Ford)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.370 b/source/ap/vim/patches/7.3.370
new file mode 100644
index 000000000..26bce4d10
--- /dev/null
+++ b/source/ap/vim/patches/7.3.370
@@ -0,0 +1,63 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.370
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.370
+Problem: Compiler warns for unused variable in Lua interface.
+Solution: Remove the variable.
+Files: src/if_lua.c
+
+
+*** ../vim-7.3.369/src/if_lua.c 2011-09-21 17:15:34.000000000 +0200
+--- src/if_lua.c 2011-12-01 20:19:17.000000000 +0100
+***************
+*** 1044,1056 ****
+ static int
+ luaV_open(lua_State *L)
+ {
+- luaV_Buffer *b;
+ char_u *s = NULL;
+ #ifdef HAVE_SANDBOX
+ luaV_checksandbox(L);
+ #endif
+ if (lua_isstring(L, 1)) s = (char_u *) lua_tostring(L, 1);
+! b = luaV_pushbuffer(L, buflist_new(s, NULL, 1L, BLN_LISTED));
+ return 1;
+ }
+
+--- 1044,1055 ----
+ static int
+ luaV_open(lua_State *L)
+ {
+ char_u *s = NULL;
+ #ifdef HAVE_SANDBOX
+ luaV_checksandbox(L);
+ #endif
+ if (lua_isstring(L, 1)) s = (char_u *) lua_tostring(L, 1);
+! luaV_pushbuffer(L, buflist_new(s, NULL, 1L, BLN_LISTED));
+ return 1;
+ }
+
+*** ../vim-7.3.369/src/version.c 2011-12-08 15:57:54.000000000 +0100
+--- src/version.c 2011-12-08 15:59:35.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 370,
+ /**/
+
+--
+Emacs is a nice OS - but it lacks a good text editor.
+That's why I am using Vim. --Anonymous
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.371 b/source/ap/vim/patches/7.3.371
new file mode 100644
index 000000000..1701c1189
--- /dev/null
+++ b/source/ap/vim/patches/7.3.371
@@ -0,0 +1,75 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.371
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.371
+Problem: Crash in autocomplete. (Greg Weber)
+Solution: Check not going over allocated buffer size.
+Files: src/misc2.c
+
+
+*** ../vim-7.3.370/src/misc2.c 2011-10-26 11:40:56.000000000 +0200
+--- src/misc2.c 2011-12-08 17:49:23.000000000 +0100
+***************
+*** 4293,4298 ****
+--- 4293,4300 ----
+ static int ff_path_in_stoplist __ARGS((char_u *, int, char_u **));
+ #endif
+
++ static char_u e_pathtoolong[] = N_("E854: path too long for completion");
++
+ #if 0
+ /*
+ * if someone likes findfirst/findnext, here are the functions
+***************
+*** 4589,4594 ****
+--- 4591,4601 ----
+ len = 0;
+ while (*wc_part != NUL)
+ {
++ if (len + 5 >= MAXPATHL)
++ {
++ EMSG(_(e_pathtoolong));
++ break;
++ }
+ if (STRNCMP(wc_part, "**", 2) == 0)
+ {
+ ff_expand_buffer[len++] = *wc_part++;
+***************
+*** 4634,4639 ****
+--- 4641,4652 ----
+ }
+
+ /* create an absolute path */
++ if (STRLEN(search_ctx->ffsc_start_dir)
++ + STRLEN(search_ctx->ffsc_fix_path) + 3 >= MAXPATHL)
++ {
++ EMSG(_(e_pathtoolong));
++ goto error_return;
++ }
+ STRCPY(ff_expand_buffer, search_ctx->ffsc_start_dir);
+ add_pathsep(ff_expand_buffer);
+ STRCAT(ff_expand_buffer, search_ctx->ffsc_fix_path);
+*** ../vim-7.3.370/src/version.c 2011-12-08 16:00:12.000000000 +0100
+--- src/version.c 2011-12-08 17:46:41.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 371,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+253. You wait for a slow loading web page before going to the toilet.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.372 b/source/ap/vim/patches/7.3.372
new file mode 100644
index 000000000..c9978c31e
--- /dev/null
+++ b/source/ap/vim/patches/7.3.372
@@ -0,0 +1,52 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.372
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.372
+Problem: When using a command line mapping to <Up> with file name
+ completion to go one directory up, 'wildchar' is inserted.
+ (Yasuhiro Matsumoto)
+Solution: Set the KeyTyped flag.
+Files: src/ex_getln.c
+
+
+*** ../vim-7.3.371/src/ex_getln.c 2011-10-26 22:02:10.000000000 +0200
+--- src/ex_getln.c 2011-12-08 18:40:49.000000000 +0100
+***************
+*** 645,651 ****
+--- 645,655 ----
+ }
+ else if (ccline.cmdpos > i)
+ cmdline_del(i);
++
++ /* Now complete in the new directory. Set KeyTyped in case the
++ * Up key came from a mapping. */
+ c = p_wc;
++ KeyTyped = TRUE;
+ }
+ }
+
+*** ../vim-7.3.371/src/version.c 2011-12-08 17:49:31.000000000 +0100
+--- src/version.c 2011-12-08 18:42:54.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 372,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+255. You work for a newspaper and your editor asks you to write an
+ article about Internet addiction...in the "first person."
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.373 b/source/ap/vim/patches/7.3.373
new file mode 100644
index 000000000..3e8937a03
--- /dev/null
+++ b/source/ap/vim/patches/7.3.373
@@ -0,0 +1,78 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.373
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.373 (after 7.3.366)
+Problem: A tags file with an extremely long name may cause an infinite loop.
+Solution: When encountering a long name switch to linear search.
+Files: src/tag.c
+
+
+*** ../vim-7.3.372/src/tag.c 2011-12-08 15:12:08.000000000 +0100
+--- src/tag.c 2011-12-14 14:13:28.000000000 +0100
+***************
+*** 1854,1860 ****
+
+ if (state == TS_BINARY && orgpat.regmatch.rm_ic && !sortic)
+ {
+! /* binary search won't work for ignoring case, use linear
+ * search. */
+ linear = TRUE;
+ state = TS_LINEAR;
+--- 1854,1860 ----
+
+ if (state == TS_BINARY && orgpat.regmatch.rm_ic && !sortic)
+ {
+! /* Binary search won't work for ignoring case, use linear
+ * search. */
+ linear = TRUE;
+ state = TS_LINEAR;
+***************
+*** 1922,1927 ****
+--- 1922,1940 ----
+ MSG(_("Ignoring long line in tags file"));
+ verbose_leave();
+ }
++ #ifdef FEAT_TAG_BINS
++ if (state != TS_LINEAR)
++ {
++ /* Avoid getting stuck. */
++ linear = TRUE;
++ state = TS_LINEAR;
++ # ifdef HAVE_FSEEKO
++ fseeko(fp, search_info.low_offset, SEEK_SET);
++ # else
++ fseek(fp, (long)search_info.low_offset, SEEK_SET);
++ # endif
++ }
++ #endif
+ continue;
+ }
+
+*** ../vim-7.3.372/src/version.c 2011-12-08 18:44:47.000000000 +0100
+--- src/version.c 2011-12-14 14:12:06.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 373,
+ /**/
+
+--
+ZOOT: I'm afraid our life must seem very dull and quiet compared to yours.
+ We are but eightscore young blondes, all between sixteen and
+ nineteen-and-a-half, cut off in this castle, with no one to protect us.
+ Oooh. It is a lonely life ... bathing ... dressing ... undressing ...
+ making exciting underwear....
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.374 b/source/ap/vim/patches/7.3.374
new file mode 100644
index 000000000..b312828ae
--- /dev/null
+++ b/source/ap/vim/patches/7.3.374
@@ -0,0 +1,59 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.374
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.374
+Problem: ++encoding does not work properly.
+Solution: Recognize ++encoding before ++enc. (Charles Cooper)
+Files: src/ex_docmd.c
+
+
+*** ../vim-7.3.373/src/ex_docmd.c 2011-10-20 21:58:20.000000000 +0200
+--- src/ex_docmd.c 2011-12-14 14:46:05.000000000 +0100
+***************
+*** 4840,4851 ****
+ #ifdef FEAT_MBYTE
+ else if (STRNCMP(arg, "enc", 3) == 0)
+ {
+! arg += 3;
+! pp = &eap->force_enc;
+! }
+! else if (STRNCMP(arg, "encoding", 8) == 0)
+! {
+! arg += 8;
+ pp = &eap->force_enc;
+ }
+ else if (STRNCMP(arg, "bad", 3) == 0)
+--- 4840,4849 ----
+ #ifdef FEAT_MBYTE
+ else if (STRNCMP(arg, "enc", 3) == 0)
+ {
+! if (STRNCMP(arg, "encoding", 8) == 0)
+! arg += 8;
+! else
+! arg += 3;
+ pp = &eap->force_enc;
+ }
+ else if (STRNCMP(arg, "bad", 3) == 0)
+*** ../vim-7.3.373/src/version.c 2011-12-14 14:15:12.000000000 +0100
+--- src/version.c 2011-12-14 14:44:01.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 374,
+ /**/
+
+--
+Linux is just like a wigwam: no Windows, no Gates and an Apache inside.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.375 b/source/ap/vim/patches/7.3.375
new file mode 100644
index 000000000..6f15fea1b
--- /dev/null
+++ b/source/ap/vim/patches/7.3.375
@@ -0,0 +1,64 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.375
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.375
+Problem: Duplicate return statement.
+Solution: Remove the superfluous one. (Dominique Pelle)
+Files: src/gui_mac.c
+
+
+*** ../vim-7.3.374/src/gui_mac.c 2011-06-19 01:14:22.000000000 +0200
+--- src/gui_mac.c 2011-12-10 17:20:59.000000000 +0100
+***************
+*** 3216,3222 ****
+ {
+ /* TODO:
+ * This proc is called when Normal is set to a value
+! * so what msut be done? I don't know
+ */
+ }
+
+--- 3216,3222 ----
+ {
+ /* TODO:
+ * This proc is called when Normal is set to a value
+! * so what must be done? I don't know
+ */
+ }
+
+***************
+*** 3303,3309 ****
+ *x = bounds.left;
+ *y = bounds.top;
+ return OK;
+- return FAIL;
+ }
+
+ /*
+--- 3303,3308 ----
+*** ../vim-7.3.374/src/version.c 2011-12-14 14:49:41.000000000 +0100
+--- src/version.c 2011-12-14 15:06:01.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 375,
+ /**/
+
+--
+GALAHAD: No look, really, this isn't nescess ...
+PIGLET: We must examine you.
+GALAHAD: There's nothing wrong with ... that.
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.376 b/source/ap/vim/patches/7.3.376
new file mode 100644
index 000000000..1e20743e0
--- /dev/null
+++ b/source/ap/vim/patches/7.3.376
@@ -0,0 +1,57 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.376
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.376
+Problem: Win32: Toolbar repainting does not work when the mouse pointer
+ hovers over a button.
+Solution: Call DefWindowProc() when not handling an event. (Sergiu Dotenco)
+Files: src/gui_w32.c
+
+
+*** ../vim-7.3.375/src/gui_w32.c 2011-08-10 17:07:56.000000000 +0200
+--- src/gui_w32.c 2011-12-14 15:14:48.000000000 +0100
+***************
+*** 1101,1107 ****
+ return MyWindowProc(hwnd, uMsg, wParam, lParam);
+ }
+
+! return 1;
+ }
+
+ /*
+--- 1101,1107 ----
+ return MyWindowProc(hwnd, uMsg, wParam, lParam);
+ }
+
+! return DefWindowProc(hwnd, uMsg, wParam, lParam);
+ }
+
+ /*
+*** ../vim-7.3.375/src/version.c 2011-12-14 15:07:11.000000000 +0100
+--- src/version.c 2011-12-14 15:23:10.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 376,
+ /**/
+
+--
+ GALAHAD hurries to the door and pushes through it. As he leaves the room
+ we CUT TO the reverse to show that he is now in a room full of bathing
+ and romping GIRLIES, all innocent, wide-eyed and beautiful. They smile
+ enchantingly at him as he tries to keep walking without being diverted by
+ the lovely sights assaulting his eyeballs.
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.377 b/source/ap/vim/patches/7.3.377
new file mode 100644
index 000000000..1a2df1d5c
--- /dev/null
+++ b/source/ap/vim/patches/7.3.377
@@ -0,0 +1,406 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.377
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.377
+Problem: No support for bitwise AND, OR, XOR and invert.
+Solution: Add and(), or(), invert() and xor() functions.
+Files: src/eval.c, src/testdir/test49.in, src/testdir/test65.in,
+ src/testdir/test65.ok, runtime/doc/eval.txt
+
+
+*** ../vim-7.3.376/src/eval.c 2011-11-30 15:19:25.000000000 +0100
+--- src/eval.c 2011-12-11 13:49:31.000000000 +0100
+***************
+*** 474,479 ****
+--- 474,480 ----
+ static void f_acos __ARGS((typval_T *argvars, typval_T *rettv));
+ #endif
+ static void f_add __ARGS((typval_T *argvars, typval_T *rettv));
++ static void f_and __ARGS((typval_T *argvars, typval_T *rettv));
+ static void f_append __ARGS((typval_T *argvars, typval_T *rettv));
+ static void f_argc __ARGS((typval_T *argvars, typval_T *rettv));
+ static void f_argidx __ARGS((typval_T *argvars, typval_T *rettv));
+***************
+*** 602,607 ****
+--- 603,609 ----
+ static void f_inputsave __ARGS((typval_T *argvars, typval_T *rettv));
+ static void f_inputsecret __ARGS((typval_T *argvars, typval_T *rettv));
+ static void f_insert __ARGS((typval_T *argvars, typval_T *rettv));
++ static void f_invert __ARGS((typval_T *argvars, typval_T *rettv));
+ static void f_isdirectory __ARGS((typval_T *argvars, typval_T *rettv));
+ static void f_islocked __ARGS((typval_T *argvars, typval_T *rettv));
+ static void f_items __ARGS((typval_T *argvars, typval_T *rettv));
+***************
+*** 640,645 ****
+--- 642,648 ----
+ #endif
+ static void f_nextnonblank __ARGS((typval_T *argvars, typval_T *rettv));
+ static void f_nr2char __ARGS((typval_T *argvars, typval_T *rettv));
++ static void f_or __ARGS((typval_T *argvars, typval_T *rettv));
+ static void f_pathshorten __ARGS((typval_T *argvars, typval_T *rettv));
+ #ifdef FEAT_FLOAT
+ static void f_pow __ARGS((typval_T *argvars, typval_T *rettv));
+***************
+*** 751,756 ****
+--- 754,760 ----
+ static void f_winsaveview __ARGS((typval_T *argvars, typval_T *rettv));
+ static void f_winwidth __ARGS((typval_T *argvars, typval_T *rettv));
+ static void f_writefile __ARGS((typval_T *argvars, typval_T *rettv));
++ static void f_xor __ARGS((typval_T *argvars, typval_T *rettv));
+
+ static int list2fpos __ARGS((typval_T *arg, pos_T *posp, int *fnump));
+ static pos_T *var2fpos __ARGS((typval_T *varp, int dollar_lnum, int *fnum));
+***************
+*** 7715,7720 ****
+--- 7719,7725 ----
+ {"acos", 1, 1, f_acos}, /* WJMc */
+ #endif
+ {"add", 2, 2, f_add},
++ {"and", 2, 2, f_and},
+ {"append", 2, 2, f_append},
+ {"argc", 0, 0, f_argc},
+ {"argidx", 0, 0, f_argidx},
+***************
+*** 7850,7855 ****
+--- 7855,7861 ----
+ {"inputsave", 0, 0, f_inputsave},
+ {"inputsecret", 1, 2, f_inputsecret},
+ {"insert", 2, 3, f_insert},
++ {"invert", 1, 1, f_invert},
+ {"isdirectory", 1, 1, f_isdirectory},
+ {"islocked", 1, 1, f_islocked},
+ {"items", 1, 1, f_items},
+***************
+*** 7888,7893 ****
+--- 7894,7900 ----
+ #endif
+ {"nextnonblank", 1, 1, f_nextnonblank},
+ {"nr2char", 1, 1, f_nr2char},
++ {"or", 2, 2, f_or},
+ {"pathshorten", 1, 1, f_pathshorten},
+ #ifdef FEAT_FLOAT
+ {"pow", 2, 2, f_pow},
+***************
+*** 7999,8004 ****
+--- 8006,8012 ----
+ {"winsaveview", 0, 0, f_winsaveview},
+ {"winwidth", 1, 1, f_winwidth},
+ {"writefile", 2, 3, f_writefile},
++ {"xor", 2, 2, f_xor},
+ };
+
+ #if defined(FEAT_CMDL_COMPL) || defined(PROTO)
+***************
+*** 8572,8577 ****
+--- 8580,8597 ----
+ }
+
+ /*
++ * "and(expr, expr)" function
++ */
++ static void
++ f_and(argvars, rettv)
++ typval_T *argvars;
++ typval_T *rettv;
++ {
++ rettv->vval.v_number = get_tv_number_chk(&argvars[0], NULL)
++ & get_tv_number_chk(&argvars[1], NULL);
++ }
++
++ /*
+ * "append(lnum, string/list)" function
+ */
+ static void
+***************
+*** 12958,12963 ****
+--- 12978,12994 ----
+ }
+
+ /*
++ * "invert(expr)" function
++ */
++ static void
++ f_invert(argvars, rettv)
++ typval_T *argvars;
++ typval_T *rettv;
++ {
++ rettv->vval.v_number = ~get_tv_number_chk(&argvars[0], NULL);
++ }
++
++ /*
+ * "isdirectory()" function
+ */
+ static void
+***************
+*** 14108,14113 ****
+--- 14139,14156 ----
+ }
+
+ /*
++ * "or(expr, expr)" function
++ */
++ static void
++ f_or(argvars, rettv)
++ typval_T *argvars;
++ typval_T *rettv;
++ {
++ rettv->vval.v_number = get_tv_number_chk(&argvars[0], NULL)
++ | get_tv_number_chk(&argvars[1], NULL);
++ }
++
++ /*
+ * "pathshorten()" function
+ */
+ static void
+***************
+*** 18394,18399 ****
+--- 18437,18455 ----
+ }
+
+ /*
++ * "xor(expr, expr)" function
++ */
++ static void
++ f_xor(argvars, rettv)
++ typval_T *argvars;
++ typval_T *rettv;
++ {
++ rettv->vval.v_number = get_tv_number_chk(&argvars[0], NULL)
++ ^ get_tv_number_chk(&argvars[1], NULL);
++ }
++
++
++ /*
+ * Translate a String variable into a position.
+ * Returns NULL when there is an error.
+ */
+*** ../vim-7.3.376/src/testdir/test65.in 2010-08-15 21:57:29.000000000 +0200
+--- src/testdir/test65.in 2011-12-11 13:55:06.000000000 +0100
+***************
+*** 1,4 ****
+! Test for floating point.
+
+ STARTTEST
+ :so small.vim
+--- 1,4 ----
+! Test for floating point and logical operators.
+
+ STARTTEST
+ :so small.vim
+***************
+*** 72,77 ****
+--- 72,94 ----
+ :$put ='float2nr'
+ :$put =float2nr(123.456)
+ :$put =float2nr(-123.456)
++ :$put ='AND'
++ :$put =and(127, 127)
++ :$put =and(127, 16)
++ :$put =and(127, 128)
++ :$put ='OR'
++ :$put =or(16, 7)
++ :$put =or(8, 7)
++ :$put =or(0, 123)
++ :$put ='XOR'
++ :$put =xor(127, 127)
++ :$put =xor(127, 16)
++ :$put =xor(127, 128)
++ :$put ='invert'
++ :$put =and(invert(127), 65535)
++ :$put =and(invert(16), 65535)
++ :$put =and(invert(128), 65535)
++ :$put =invert(1.0)
+ :/^Results/,$wq! test.out
+ ENDTEST
+
+*** ../vim-7.3.376/src/testdir/test65.ok 2010-08-15 21:57:29.000000000 +0200
+--- src/testdir/test65.ok 2011-12-11 13:55:30.000000000 +0100
+***************
+*** 54,56 ****
+--- 54,73 ----
+ float2nr
+ 123
+ -123
++ AND
++ 127
++ 16
++ 0
++ OR
++ 23
++ 15
++ 123
++ XOR
++ 0
++ 111
++ 255
++ invert
++ 65408
++ 65519
++ 65407
++ 0
+*** ../vim-7.3.376/runtime/doc/eval.txt 2011-06-19 02:55:32.000000000 +0200
+--- runtime/doc/eval.txt 2011-12-14 15:28:23.000000000 +0100
+***************
+*** 798,808 ****
+ For |Lists| only "+" is possible and then both expr6 must be a list. The
+ result is a new list with the two lists Concatenated.
+
+! expr7 * expr7 .. number multiplication *expr-star*
+! expr7 / expr7 .. number division *expr-/*
+! expr7 % expr7 .. number modulo *expr-%*
+
+ For all, except ".", Strings are converted to Numbers.
+
+ Note the difference between "+" and ".":
+ "123" + "456" = 579
+--- 800,811 ----
+ For |Lists| only "+" is possible and then both expr6 must be a list. The
+ result is a new list with the two lists Concatenated.
+
+! expr7 * expr7 .. Number multiplication *expr-star*
+! expr7 / expr7 .. Number division *expr-/*
+! expr7 % expr7 .. Number modulo *expr-%*
+
+ For all, except ".", Strings are converted to Numbers.
++ For bitwise operators see |and()|, |or()| and |xor()|.
+
+ Note the difference between "+" and ".":
+ "123" + "456" = 579
+***************
+*** 1679,1684 ****
+--- 1688,1694 ----
+ abs( {expr}) Float or Number absolute value of {expr}
+ acos( {expr}) Float arc cosine of {expr}
+ add( {list}, {item}) List append {item} to |List| {list}
++ and( {expr}, {expr}) Number bitwise AND
+ append( {lnum}, {string}) Number append {string} below line {lnum}
+ append( {lnum}, {list}) Number append lines {list} below line {lnum}
+ argc() Number number of files in the argument list
+***************
+*** 1817,1822 ****
+--- 1827,1833 ----
+ inputsave() Number save and clear typeahead
+ inputsecret( {prompt} [, {text}]) String like input() but hiding the text
+ insert( {list}, {item} [, {idx}]) List insert {item} in {list} [before {idx}]
++ invert( {expr}) Number bitwise invert
+ isdirectory( {directory}) Number TRUE if {directory} is a directory
+ islocked( {expr}) Number TRUE if {expr} is locked
+ items( {dict}) List key-value pairs in {dict}
+***************
+*** 1856,1861 ****
+--- 1868,1874 ----
+ mzeval( {expr}) any evaluate |MzScheme| expression
+ nextnonblank( {lnum}) Number line nr of non-blank line >= {lnum}
+ nr2char( {expr}) String single char with ASCII value {expr}
++ or( {expr}, {expr}) Number bitwise OR
+ pathshorten( {expr}) String shorten directory names in a path
+ pow( {x}, {y}) Float {x} to the power of {y}
+ prevnonblank( {lnum}) Number line nr of non-blank line <= {lnum}
+***************
+*** 1978,1983 ****
+--- 1992,1998 ----
+ winwidth( {nr}) Number width of window {nr}
+ writefile( {list}, {fname} [, {binary}])
+ Number write list of lines to file {fname}
++ xor( {expr}, {expr}) Number bitwise XOR
+
+ abs({expr}) *abs()*
+ Return the absolute value of {expr}. When {expr} evaluates to
+***************
+*** 2017,2022 ****
+--- 2032,2044 ----
+ Use |insert()| to add an item at another position.
+
+
++ and({expr}, {expr}) *and()*
++ Bitwise AND on the two arguments. The arguments are converted
++ to a number. A List, Dict or Float argument causes an error.
++ Example: >
++ :let flag = and(bits, 0x80)
++
++
+ append({lnum}, {expr}) *append()*
+ When {expr} is a |List|: Append each item of the |List| as a
+ text line below line {lnum} in the current buffer.
+***************
+*** 3770,3775 ****
+--- 3798,3808 ----
+ Note that when {item} is a |List| it is inserted as a single
+ item. Use |extend()| to concatenate |Lists|.
+
++ invert({expr}) *invert()*
++ Bitwise invert. The argument is converted to a number. A
++ List, Dict or Float argument causes an error. Example: >
++ :let bits = invert(bits)
++
+ isdirectory({directory}) *isdirectory()*
+ The result is a Number, which is non-zero when a directory
+ with the name {directory} exists. If {directory} doesn't
+***************
+*** 4334,4339 ****
+--- 4368,4380 ----
+ call setpos('.', save_cursor)
+ < Also see |setpos()|.
+
++ or({expr}, {expr}) *or()*
++ Bitwise OR on the two arguments. The arguments are converted
++ to a number. A List, Dict or Float argument causes an error.
++ Example: >
++ :let bits = or(bits, 0x80)
++
++
+ pathshorten({expr}) *pathshorten()*
+ Shorten directory names in the path {expr} and return the
+ result. The tail, the file name, is kept as-is. The other
+***************
+*** 6097,6103 ****
+ To copy a file byte for byte: >
+ :let fl = readfile("foo", "b")
+ :call writefile(fl, "foocopy", "b")
+! <
+
+ *feature-list*
+ There are three types of features:
+--- 6149,6163 ----
+ To copy a file byte for byte: >
+ :let fl = readfile("foo", "b")
+ :call writefile(fl, "foocopy", "b")
+!
+!
+! xor({expr}, {expr}) *xor()*
+! Bitwise XOR on the two arguments. The arguments are converted
+! to a number. A List, Dict or Float argument causes an error.
+! Example: >
+! :let bits = xor(bits, 0x80)
+!
+!
+
+ *feature-list*
+ There are three types of features:
+*** ../vim-7.3.376/src/version.c 2011-12-14 15:23:53.000000000 +0100
+--- src/version.c 2011-12-14 15:28:39.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 377,
+ /**/
+
+--
+DINGO: Wicked wicked Zoot ... she is a bad person and she must pay the
+ penalty. And here in Castle Anthrax, we have but one punishment
+ ... you must tie her down on a bed ... and spank her. Come!
+GIRLS: A spanking! A spanking!
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.378 b/source/ap/vim/patches/7.3.378
new file mode 100644
index 000000000..8ad3d7037
--- /dev/null
+++ b/source/ap/vim/patches/7.3.378
@@ -0,0 +1,71 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.378
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.378
+Problem: When cross-compiling the check for uint32_t fails.
+Solution: Only give a warning message. (Maksim Melnikau)
+Files: src/configure.in, src/auto/configure
+
+
+*** ../vim-7.3.377/src/configure.in 2011-12-08 15:17:28.000000000 +0100
+--- src/configure.in 2011-12-14 19:18:36.000000000 +0100
+***************
+*** 3283,3289 ****
+ }],
+ AC_MSG_RESULT(ok),
+ AC_MSG_ERROR([WRONG! uint32_t not defined correctly.]),
+! AC_MSG_ERROR([could not compile program using uint32_t.]))
+
+ dnl Check for memmove() before bcopy(), makes memmove() be used when both are
+ dnl present, fixes problem with incompatibility between Solaris 2.4 and 2.5.
+--- 3283,3289 ----
+ }],
+ AC_MSG_RESULT(ok),
+ AC_MSG_ERROR([WRONG! uint32_t not defined correctly.]),
+! AC_MSG_WARN([cannot check uint32_t when cross-compiling.]))
+
+ dnl Check for memmove() before bcopy(), makes memmove() be used when both are
+ dnl present, fixes problem with incompatibility between Solaris 2.4 and 2.5.
+*** ../vim-7.3.377/src/auto/configure 2011-12-08 15:17:28.000000000 +0100
+--- src/auto/configure 2011-12-14 19:20:55.000000000 +0100
+***************
+*** 11777,11783 ****
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking uint32_t is 32 bits" >&5
+ $as_echo_n "checking uint32_t is 32 bits... " >&6; }
+ if test "$cross_compiling" = yes; then :
+! as_fn_error "could not compile program using uint32_t." "$LINENO" 5
+ else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h. */
+--- 11777,11784 ----
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking uint32_t is 32 bits" >&5
+ $as_echo_n "checking uint32_t is 32 bits... " >&6; }
+ if test "$cross_compiling" = yes; then :
+! { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot check uint32_t when cross-compiling." >&5
+! $as_echo "$as_me: WARNING: cannot check uint32_t when cross-compiling." >&2;}
+ else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h. */
+*** ../vim-7.3.377/src/version.c 2011-12-14 15:32:44.000000000 +0100
+--- src/version.c 2011-12-14 19:21:08.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 378,
+ /**/
+
+--
+ ### Hiroshima 45, Chernobyl 86, Windows 95 ###
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.379 b/source/ap/vim/patches/7.3.379
new file mode 100644
index 000000000..fd87f9a1e
--- /dev/null
+++ b/source/ap/vim/patches/7.3.379
@@ -0,0 +1,112 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.379
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.379
+Problem: C-indenting wrong for static enum.
+Solution: Skip over "static". (Lech Lorens)
+Files: src/misc1.c, src/testdir/test3.in, src/testdir/test3.ok
+
+
+*** ../vim-7.3.378/src/misc1.c 2011-11-30 17:20:18.000000000 +0100
+--- src/misc1.c 2011-12-14 19:37:48.000000000 +0100
+***************
+*** 5138,5143 ****
+--- 5138,5146 ----
+ if (STRNCMP(s, "typedef", 7) == 0 && !vim_isIDc(s[7]))
+ s = cin_skipcomment(s + 7);
+
++ if (STRNCMP(s, "static", 6) == 0 && !vim_isIDc(s[6]))
++ s = cin_skipcomment(s + 6);
++
+ if (STRNCMP(s, "enum", 4) == 0 && !vim_isIDc(s[4]))
+ return TRUE;
+
+*** ../vim-7.3.378/src/testdir/test3.in 2011-11-30 17:20:18.000000000 +0100
+--- src/testdir/test3.in 2011-12-14 20:03:11.000000000 +0100
+***************
+*** 299,316 ****
+
+ enum soppie
+ {
+! yes = 0,
+! no,
+! maybe
+ };
+
+ typedef enum soppie
+ {
+! yes = 0,
+! no,
+! maybe
+ };
+
+ {
+ int a,
+ b;
+--- 299,323 ----
+
+ enum soppie
+ {
+! yes = 0,
+! no,
+! maybe
+ };
+
+ typedef enum soppie
+ {
+! yes = 0,
+! no,
+! maybe
+ };
+
++ static enum
++ {
++ yes = 0,
++ no,
++ maybe
++ } soppie;
++
+ {
+ int a,
+ b;
+*** ../vim-7.3.378/src/testdir/test3.ok 2011-11-30 17:20:18.000000000 +0100
+--- src/testdir/test3.ok 2011-12-14 19:37:48.000000000 +0100
+***************
+*** 299,304 ****
+--- 299,311 ----
+ maybe
+ };
+
++ static enum
++ {
++ yes = 0,
++ no,
++ maybe
++ } soppie;
++
+ {
+ int a,
+ b;
+*** ../vim-7.3.378/src/version.c 2011-12-14 19:22:29.000000000 +0100
+--- src/version.c 2011-12-14 20:02:19.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 379,
+ /**/
+
+--
+You cannot propel yourself forward by patting yourself on the back.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.380 b/source/ap/vim/patches/7.3.380
new file mode 100644
index 000000000..a8f4bcf65
--- /dev/null
+++ b/source/ap/vim/patches/7.3.380
@@ -0,0 +1,318 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.380
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.380
+Problem: C-indenting wrong for a function header.
+Solution: Skip to the start paren. (Lech Lorens)
+Files: src/misc1.c, src/testdir/test3.in, src/testdir/test3.ok
+
+
+*** ../vim-7.3.379/src/misc1.c 2011-12-14 20:05:17.000000000 +0100
+--- src/misc1.c 2011-12-14 20:16:43.000000000 +0100
+***************
+*** 4943,4949 ****
+ static int cin_islinecomment __ARGS((char_u *));
+ static int cin_isterminated __ARGS((char_u *, int, int));
+ static int cin_isinit __ARGS((void));
+! static int cin_isfuncdecl __ARGS((char_u **, linenr_T));
+ static int cin_isif __ARGS((char_u *));
+ static int cin_iselse __ARGS((char_u *));
+ static int cin_isdo __ARGS((char_u *));
+--- 4943,4949 ----
+ static int cin_islinecomment __ARGS((char_u *));
+ static int cin_isterminated __ARGS((char_u *, int, int));
+ static int cin_isinit __ARGS((void));
+! static int cin_isfuncdecl __ARGS((char_u **, linenr_T, linenr_T, int, int));
+ static int cin_isif __ARGS((char_u *));
+ static int cin_iselse __ARGS((char_u *));
+ static int cin_isdo __ARGS((char_u *));
+***************
+*** 5585,5605 ****
+ * "sp" points to a string with the line. When looking at other lines it must
+ * be restored to the line. When it's NULL fetch lines here.
+ * "lnum" is where we start looking.
+ */
+ static int
+! cin_isfuncdecl(sp, first_lnum)
+ char_u **sp;
+ linenr_T first_lnum;
+ {
+ char_u *s;
+ linenr_T lnum = first_lnum;
+ int retval = FALSE;
+
+ if (sp == NULL)
+ s = ml_get(lnum);
+ else
+ s = *sp;
+
+ /* Ignore line starting with #. */
+ if (cin_ispreproc(s))
+ return FALSE;
+--- 5585,5621 ----
+ * "sp" points to a string with the line. When looking at other lines it must
+ * be restored to the line. When it's NULL fetch lines here.
+ * "lnum" is where we start looking.
++ * "min_lnum" is the line before which we will not be looking.
+ */
+ static int
+! cin_isfuncdecl(sp, first_lnum, min_lnum, ind_maxparen, ind_maxcomment)
+ char_u **sp;
+ linenr_T first_lnum;
++ linenr_T min_lnum;
++ int ind_maxparen;
++ int ind_maxcomment;
+ {
+ char_u *s;
+ linenr_T lnum = first_lnum;
+ int retval = FALSE;
++ pos_T *trypos;
++ int just_started = TRUE;
+
+ if (sp == NULL)
+ s = ml_get(lnum);
+ else
+ s = *sp;
+
++ if (find_last_paren(s, '(', ')')
++ && (trypos = find_match_paren(ind_maxparen, ind_maxcomment)) != NULL)
++ {
++ lnum = trypos->lnum;
++ if (lnum < min_lnum)
++ return FALSE;
++
++ s = ml_get(lnum);
++ }
++
+ /* Ignore line starting with #. */
+ if (cin_ispreproc(s))
+ return FALSE;
+***************
+*** 5650,5662 ****
+ /* Require a comma at end of the line or a comma or ')' at the
+ * start of next line. */
+ s = skipwhite(s);
+! if (!comma && *s != ',' && *s != ')')
+ break;
+ }
+ else if (cin_iscomment(s)) /* ignore comments */
+ s = cin_skipcomment(s);
+ else
+ ++s;
+ }
+
+ done:
+--- 5666,5682 ----
+ /* Require a comma at end of the line or a comma or ')' at the
+ * start of next line. */
+ s = skipwhite(s);
+! if (!just_started && (!comma && *s != ',' && *s != ')'))
+ break;
++ just_started = FALSE;
+ }
+ else if (cin_iscomment(s)) /* ignore comments */
+ s = cin_skipcomment(s);
+ else
++ {
+ ++s;
++ just_started = FALSE;
++ }
+ }
+
+ done:
+***************
+*** 7158,7164 ****
+ * (it's a variable declaration).
+ */
+ if (start_brace != BRACE_IN_COL0
+! || !cin_isfuncdecl(&l, curwin->w_cursor.lnum))
+ {
+ /* if the line is terminated with another ','
+ * it is a continued variable initialization.
+--- 7178,7185 ----
+ * (it's a variable declaration).
+ */
+ if (start_brace != BRACE_IN_COL0
+! || !cin_isfuncdecl(&l, curwin->w_cursor.lnum,
+! 0, ind_maxparen, ind_maxcomment))
+ {
+ /* if the line is terminated with another ','
+ * it is a continued variable initialization.
+***************
+*** 8019,8025 ****
+ && vim_strchr(theline, '}') == NULL
+ && !cin_ends_in(theline, (char_u *)":", NULL)
+ && !cin_ends_in(theline, (char_u *)",", NULL)
+! && cin_isfuncdecl(NULL, cur_curpos.lnum + 1)
+ && !cin_isterminated(theline, FALSE, TRUE))
+ {
+ amount = ind_func_type;
+--- 8040,8048 ----
+ && vim_strchr(theline, '}') == NULL
+ && !cin_ends_in(theline, (char_u *)":", NULL)
+ && !cin_ends_in(theline, (char_u *)",", NULL)
+! && cin_isfuncdecl(NULL, cur_curpos.lnum + 1,
+! cur_curpos.lnum + 1,
+! ind_maxparen, ind_maxcomment)
+ && !cin_isterminated(theline, FALSE, TRUE))
+ {
+ amount = ind_func_type;
+***************
+*** 8125,8131 ****
+ * If the line looks like a function declaration, and we're
+ * not in a comment, put it the left margin.
+ */
+! if (cin_isfuncdecl(NULL, cur_curpos.lnum)) /* XXX */
+ break;
+ l = ml_get_curline();
+
+--- 8148,8155 ----
+ * If the line looks like a function declaration, and we're
+ * not in a comment, put it the left margin.
+ */
+! if (cin_isfuncdecl(NULL, cur_curpos.lnum, 0,
+! ind_maxparen, ind_maxcomment)) /* XXX */
+ break;
+ l = ml_get_curline();
+
+***************
+*** 8173,8179 ****
+ * line (and the ones that follow) needs to be indented as
+ * parameters.
+ */
+! if (cin_isfuncdecl(&l, curwin->w_cursor.lnum))
+ {
+ amount = ind_param;
+ break;
+--- 8197,8204 ----
+ * line (and the ones that follow) needs to be indented as
+ * parameters.
+ */
+! if (cin_isfuncdecl(&l, curwin->w_cursor.lnum, 0,
+! ind_maxparen, ind_maxcomment))
+ {
+ amount = ind_param;
+ break;
+*** ../vim-7.3.379/src/testdir/test3.in 2011-12-14 20:05:17.000000000 +0100
+--- src/testdir/test3.in 2011-12-14 20:11:24.000000000 +0100
+***************
+*** 1429,1435 ****
+
+ STARTTEST
+ :set cino&
+! 2kdd=4][
+ ENDTEST
+
+ void func(void)
+--- 1429,1435 ----
+
+ STARTTEST
+ :set cino&
+! 2kdd=7][
+ ENDTEST
+
+ void func(void)
+***************
+*** 1478,1484 ****
+ 3, 4,
+ 5, 6};
+
+! printf("Don't you dare indent this line incorrectly!\n);
+ }
+
+ STARTTEST
+--- 1478,1506 ----
+ 3, 4,
+ 5, 6};
+
+! printf("Don't you dare indent this line incorrectly!\n");
+! }
+!
+! void
+! func4(a, b,
+! c)
+! int a;
+! int b;
+! int c;
+! {
+! }
+!
+! void
+! func5(
+! int a,
+! int b)
+! {
+! }
+!
+! void
+! func6(
+! int a)
+! {
+ }
+
+ STARTTEST
+*** ../vim-7.3.379/src/testdir/test3.ok 2011-12-14 20:05:17.000000000 +0100
+--- src/testdir/test3.ok 2011-12-14 20:11:24.000000000 +0100
+***************
+*** 1331,1337 ****
+ 3, 4,
+ 5, 6};
+
+! printf("Don't you dare indent this line incorrectly!\n);
+ }
+
+
+--- 1331,1359 ----
+ 3, 4,
+ 5, 6};
+
+! printf("Don't you dare indent this line incorrectly!\n");
+! }
+!
+! void
+! func4(a, b,
+! c)
+! int a;
+! int b;
+! int c;
+! {
+! }
+!
+! void
+! func5(
+! int a,
+! int b)
+! {
+! }
+!
+! void
+! func6(
+! int a)
+! {
+ }
+
+
+*** ../vim-7.3.379/src/version.c 2011-12-14 20:05:17.000000000 +0100
+--- src/version.c 2011-12-14 20:20:50.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 380,
+ /**/
+
+--
+"Intelligence has much less practical application than you'd think."
+ -- Scott Adams, Dilbert.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.381 b/source/ap/vim/patches/7.3.381
new file mode 100644
index 000000000..b79573792
--- /dev/null
+++ b/source/ap/vim/patches/7.3.381
@@ -0,0 +1,260 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.381
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.381
+Problem: Configure silently skips interfaces that won't work.
+Solution: Add the --enable-fail_if_missing argument. (Shlomi Fish)
+Files: src/Makefile, src/configure.in, src/auto/configure
+
+
+*** ../vim-7.3.380/src/Makefile 2011-12-08 15:17:28.000000000 +0100
+--- src/Makefile 2011-12-14 20:49:26.000000000 +0100
+***************
+*** 389,394 ****
+--- 389,399 ----
+ #CONF_OPT_PLTHOME = --with-plthome=/usr/local/drscheme
+ #CONF_OPT_PLTHOME = --with-plthome=/home/me/mz
+
++ # Uncomment the next line to fail if one of the requested language interfaces
++ # cannot be configured. Without this Vim will be build anyway, without
++ # the failing interfaces.
++ #CONF_OPT_FAIL = --enable-fail-if-missing
++
+ # PERL
+ # Uncomment one of these when you want to include the Perl interface.
+ # First one is for static linking, second one for dynamic loading.
+***************
+*** 1648,1654 ****
+ CC="$(CC)" CPPFLAGS="$(CPPFLAGS)" CFLAGS="$(CFLAGS)" \
+ LDFLAGS="$(LDFLAGS)" $(CONF_SHELL) srcdir="$(srcdir)" \
+ ./configure $(CONF_OPT_GUI) $(CONF_OPT_X) $(CONF_OPT_XSMP) \
+! $(CONF_OPT_DARWIN) $(CONF_OPT_PERL) $(CONF_OPT_PYTHON) $(CONF_OPT_PYTHON3) \
+ $(CONF_OPT_TCL) $(CONF_OPT_RUBY) $(CONF_OPT_NLS) \
+ $(CONF_OPT_CSCOPE) $(CONF_OPT_MULTIBYTE) $(CONF_OPT_INPUT) \
+ $(CONF_OPT_OUTPUT) $(CONF_OPT_GPM) $(CONF_OPT_WORKSHOP) \
+--- 1653,1660 ----
+ CC="$(CC)" CPPFLAGS="$(CPPFLAGS)" CFLAGS="$(CFLAGS)" \
+ LDFLAGS="$(LDFLAGS)" $(CONF_SHELL) srcdir="$(srcdir)" \
+ ./configure $(CONF_OPT_GUI) $(CONF_OPT_X) $(CONF_OPT_XSMP) \
+! $(CONF_OPT_DARWIN) $(CONF_OPT_FAIL) \
+! $(CONF_OPT_PERL) $(CONF_OPT_PYTHON) $(CONF_OPT_PYTHON3) \
+ $(CONF_OPT_TCL) $(CONF_OPT_RUBY) $(CONF_OPT_NLS) \
+ $(CONF_OPT_CSCOPE) $(CONF_OPT_MULTIBYTE) $(CONF_OPT_INPUT) \
+ $(CONF_OPT_OUTPUT) $(CONF_OPT_GPM) $(CONF_OPT_WORKSHOP) \
+*** ../vim-7.3.380/src/configure.in 2011-12-14 19:22:29.000000000 +0100
+--- src/configure.in 2011-12-14 20:46:36.000000000 +0100
+***************
+*** 28,33 ****
+--- 28,43 ----
+ AC_HEADER_STDC
+ AC_HEADER_SYS_WAIT
+
++ dnl Check for the flag that fails if stuff are missing.
++
++ AC_MSG_CHECKING(--enable-fail-if-missing argument)
++ AC_ARG_ENABLE(fail_if_missing,
++ [ --enable-fail-if-missing Fail if dependencies on additional features
++ specified on the command line are missing.],
++ [fail_if_missing="yes"],
++ [fail_if_missing="no"])
++ AC_MSG_RESULT($fail_if_missing)
++
+ dnl Set default value for CFLAGS if none is defined or it's empty
+ if test -z "$CFLAGS"; then
+ CFLAGS="-O"
+***************
+*** 491,496 ****
+--- 501,509 ----
+ LUA_CFLAGS="-DDYNAMIC_LUA_DLL=\\\"liblua${vi_cv_version_lua}.so$LUA_SONAME\\\" $LUA_CFLAGS"
+ fi
+ fi
++ if test "$fail_if_missing" = "yes" -a -z "$LUA_SRC"; then
++ AC_MSG_ERROR([could not configure lua])
++ fi
+ AC_SUBST(LUA_SRC)
+ AC_SUBST(LUA_OBJ)
+ AC_SUBST(LUA_PRO)
+***************
+*** 781,786 ****
+--- 794,803 ----
+ PERL_CFLAGS="-DDYNAMIC_PERL_DLL=\\\"$libperl\\\" $PERL_CFLAGS"
+ fi
+ fi
++
++ if test "$fail_if_missing" = "yes" -a "$perl_ok" != "yes"; then
++ AC_MSG_ERROR([could not configure perl])
++ fi
+ fi
+ AC_SUBST(shrpenv)
+ AC_SUBST(PERL_SRC)
+***************
+*** 966,971 ****
+--- 983,992 ----
+ AC_MSG_RESULT(too old)
+ fi
+ fi
++
++ if test "$fail_if_missing" = "yes" -a "$python_ok" != "yes"; then
++ AC_MSG_ERROR([could not configure python])
++ fi
+ fi
+
+ AC_SUBST(PYTHON_CONFDIR)
+***************
+*** 1389,1394 ****
+--- 1410,1418 ----
+ AC_MSG_RESULT(too old; need Tcl version 8.0 or later)
+ fi
+ fi
++ if test "$fail_if_missing" = "yes" -a -z "$TCL_SRC"; then
++ AC_MSG_ERROR([could not configure Tcl])
++ fi
+ fi
+ AC_SUBST(TCL_SRC)
+ AC_SUBST(TCL_OBJ)
+***************
+*** 1469,1474 ****
+--- 1493,1502 ----
+ AC_MSG_RESULT(too old; need Ruby version 1.6.0 or later)
+ fi
+ fi
++
++ if test "$fail_if_missing" = "yes" -a -z "$RUBY_OBJ"; then
++ AC_MSG_ERROR([could not configure Ruby])
++ fi
+ fi
+ AC_SUBST(RUBY_SRC)
+ AC_SUBST(RUBY_OBJ)
+*** ../vim-7.3.380/src/auto/configure 2011-12-14 19:22:29.000000000 +0100
+--- src/auto/configure 2011-12-14 20:49:51.000000000 +0100
+***************
+*** 741,746 ****
+--- 741,747 ----
+ ac_subst_files=''
+ ac_user_opts='
+ enable_option_checking
++ enable_fail_if_missing
+ enable_darwin
+ with_mac_arch
+ with_developer_dir
+***************
+*** 1418,1423 ****
+--- 1419,1426 ----
+ --disable-option-checking ignore unrecognized --enable/--with options
+ --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
+ --enable-FEATURE[=ARG] include FEATURE [ARG=yes]
++ --enable-fail-if-missing Fail if dependencies on additional features
++ specified on the command line are missing.
+ --disable-darwin Disable Darwin (Mac OS X) support.
+ --disable-selinux Don't check for SELinux support.
+ --disable-xsmp Disable XSMP session management
+***************
+*** 3949,3954 ****
+--- 3952,3970 ----
+ fi
+
+
++
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking --enable-fail-if-missing argument" >&5
++ $as_echo_n "checking --enable-fail-if-missing argument... " >&6; }
++ # Check whether --enable-fail_if_missing was given.
++ if test "${enable_fail_if_missing+set}" = set; then :
++ enableval=$enable_fail_if_missing; fail_if_missing="yes"
++ else
++ fail_if_missing="no"
++ fi
++
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $fail_if_missing" >&5
++ $as_echo "$fail_if_missing" >&6; }
++
+ if test -z "$CFLAGS"; then
+ CFLAGS="-O"
+ test "$GCC" = yes && CFLAGS="-O2 -fno-strength-reduce -Wall"
+***************
+*** 4727,4732 ****
+--- 4743,4751 ----
+ LUA_CFLAGS="-DDYNAMIC_LUA_DLL=\\\"liblua${vi_cv_version_lua}.so$LUA_SONAME\\\" $LUA_CFLAGS"
+ fi
+ fi
++ if test "$fail_if_missing" = "yes" -a -z "$LUA_SRC"; then
++ as_fn_error "could not configure lua" "$LINENO" 5
++ fi
+
+
+
+***************
+*** 5140,5145 ****
+--- 5159,5168 ----
+ PERL_CFLAGS="-DDYNAMIC_PERL_DLL=\\\"$libperl\\\" $PERL_CFLAGS"
+ fi
+ fi
++
++ if test "$fail_if_missing" = "yes" -a "$perl_ok" != "yes"; then
++ as_fn_error "could not configure perl" "$LINENO" 5
++ fi
+ fi
+
+
+***************
+*** 5429,5434 ****
+--- 5452,5461 ----
+ $as_echo "too old" >&6; }
+ fi
+ fi
++
++ if test "$fail_if_missing" = "yes" -a "$python_ok" != "yes"; then
++ as_fn_error "could not configure python" "$LINENO" 5
++ fi
+ fi
+
+
+***************
+*** 6216,6221 ****
+--- 6243,6251 ----
+ $as_echo "too old; need Tcl version 8.0 or later" >&6; }
+ fi
+ fi
++ if test "$fail_if_missing" = "yes" -a -z "$TCL_SRC"; then
++ as_fn_error "could not configure Tcl" "$LINENO" 5
++ fi
+ fi
+
+
+***************
+*** 6353,6358 ****
+--- 6383,6392 ----
+ $as_echo "too old; need Ruby version 1.6.0 or later" >&6; }
+ fi
+ fi
++
++ if test "$fail_if_missing" = "yes" -a -z "$RUBY_OBJ"; then
++ as_fn_error "could not configure Ruby" "$LINENO" 5
++ fi
+ fi
+
+
+*** ../vim-7.3.380/src/version.c 2011-12-14 20:21:29.000000000 +0100
+--- src/version.c 2011-12-14 20:50:42.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 381,
+ /**/
+
+--
+The psychic said, "God bless you." I said, "I didn't sneeze." She
+looked deep into my eyes and said, "You will, eventually." And, damn
+if she wasn't right. Two days later, I sneezed. --Ellen Degeneres
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.382 b/source/ap/vim/patches/7.3.382
new file mode 100644
index 000000000..7f344e7e1
--- /dev/null
+++ b/source/ap/vim/patches/7.3.382
@@ -0,0 +1,173 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.382
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.382 (after 7.3.376)
+Problem: IME characters are inserted twice.
+Solution: Do not call DefWindowProc() if the event was handled. (Yasuhiro
+ Matsumoto)
+Files: src/gui_w32.c
+
+
+*** ../vim-7.3.381/src/gui_w32.c 2011-12-14 15:23:53.000000000 +0100
+--- src/gui_w32.c 2011-12-15 21:50:51.000000000 +0100
+***************
+*** 798,804 ****
+ if (pt.y < rect.top)
+ {
+ show_tabline_popup_menu();
+! return 0;
+ }
+ }
+ return MyWindowProc(hwnd, uMsg, wParam, lParam);
+--- 798,804 ----
+ if (pt.y < rect.top)
+ {
+ show_tabline_popup_menu();
+! return 0L;
+ }
+ }
+ return MyWindowProc(hwnd, uMsg, wParam, lParam);
+***************
+*** 828,834 ****
+--- 828,837 ----
+
+ case WM_ENDSESSION:
+ if (wParam) /* system only really goes down when wParam is TRUE */
++ {
+ _OnEndSession();
++ return 0L;
++ }
+ break;
+
+ case WM_CHAR:
+***************
+*** 866,872 ****
+ * are received, mouse pointer remains hidden. */
+ return MyWindowProc(hwnd, uMsg, wParam, lParam);
+ #else
+! return 0;
+ #endif
+
+ case WM_SIZING: /* HANDLE_MSG doesn't seem to handle this one */
+--- 869,875 ----
+ * are received, mouse pointer remains hidden. */
+ return MyWindowProc(hwnd, uMsg, wParam, lParam);
+ #else
+! return 0L;
+ #endif
+
+ case WM_SIZING: /* HANDLE_MSG doesn't seem to handle this one */
+***************
+*** 874,880 ****
+
+ case WM_MOUSEWHEEL:
+ _OnMouseWheel(hwnd, HIWORD(wParam));
+! break;
+
+ /* Notification for change in SystemParametersInfo() */
+ case WM_SETTINGCHANGE:
+--- 877,883 ----
+
+ case WM_MOUSEWHEEL:
+ _OnMouseWheel(hwnd, HIWORD(wParam));
+! return 0L;
+
+ /* Notification for change in SystemParametersInfo() */
+ case WM_SETTINGCHANGE:
+***************
+*** 987,999 ****
+--- 990,1008 ----
+ case TCN_SELCHANGE:
+ if (gui_mch_showing_tabline()
+ && ((LPNMHDR)lParam)->hwndFrom == s_tabhwnd)
++ {
+ send_tabline_event(TabCtrl_GetCurSel(s_tabhwnd) + 1);
++ return 0L;
++ }
+ break;
+
+ case NM_RCLICK:
+ if (gui_mch_showing_tabline()
+ && ((LPNMHDR)lParam)->hwndFrom == s_tabhwnd)
++ {
+ show_tabline_popup_menu();
++ return 0L;
++ }
+ break;
+ # endif
+ default:
+***************
+*** 1037,1042 ****
+--- 1046,1052 ----
+ out_flush();
+ did_menu_tip = TRUE;
+ }
++ return 0L;
+ }
+ break;
+ #endif
+***************
+*** 1079,1096 ****
+ case WM_IME_NOTIFY:
+ if (!_OnImeNotify(hwnd, (DWORD)wParam, (DWORD)lParam))
+ return MyWindowProc(hwnd, uMsg, wParam, lParam);
+! break;
+ case WM_IME_COMPOSITION:
+ if (!_OnImeComposition(hwnd, wParam, lParam))
+ return MyWindowProc(hwnd, uMsg, wParam, lParam);
+! break;
+ #endif
+
+ default:
+ if (uMsg == msh_msgmousewheel && msh_msgmousewheel != 0)
+ { /* handle MSH_MOUSEWHEEL messages for Intellimouse */
+ _OnMouseWheel(hwnd, HIWORD(wParam));
+! break;
+ }
+ #ifdef MSWIN_FIND_REPLACE
+ else if (uMsg == s_findrep_msg && s_findrep_msg != 0)
+--- 1089,1107 ----
+ case WM_IME_NOTIFY:
+ if (!_OnImeNotify(hwnd, (DWORD)wParam, (DWORD)lParam))
+ return MyWindowProc(hwnd, uMsg, wParam, lParam);
+! return 1L;
+!
+ case WM_IME_COMPOSITION:
+ if (!_OnImeComposition(hwnd, wParam, lParam))
+ return MyWindowProc(hwnd, uMsg, wParam, lParam);
+! return 1L;
+ #endif
+
+ default:
+ if (uMsg == msh_msgmousewheel && msh_msgmousewheel != 0)
+ { /* handle MSH_MOUSEWHEEL messages for Intellimouse */
+ _OnMouseWheel(hwnd, HIWORD(wParam));
+! return 0L;
+ }
+ #ifdef MSWIN_FIND_REPLACE
+ else if (uMsg == s_findrep_msg && s_findrep_msg != 0)
+*** ../vim-7.3.381/src/version.c 2011-12-14 20:51:19.000000000 +0100
+--- src/version.c 2011-12-15 21:48:49.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 382,
+ /**/
+
+--
+Even got a Datapoint 3600(?) with a DD50 connector instead of the
+usual DB25... what a nightmare trying to figure out the pinout
+for *that* with no spex...
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.383 b/source/ap/vim/patches/7.3.383
new file mode 100644
index 000000000..c0ce6d905
--- /dev/null
+++ b/source/ap/vim/patches/7.3.383
@@ -0,0 +1,51 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.383
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.383
+Problem: For EBCDIC pound sign is defined as 't'.
+Solution: Correctly define POUND.
+Files: src/ascii.h
+
+
+*** ../vim-7.3.382/src/ascii.h 2011-09-02 14:18:14.000000000 +0200
+--- src/ascii.h 2011-12-17 21:38:36.000000000 +0100
+***************
+*** 123,129 ****
+ #define DCS 0x90 /* Device Control String */
+ #define STERM 0x9c /* String Terminator */
+
+! #define POUND '\xA3'
+
+ #define CTRL_F_STR "\056"
+ #define CTRL_H_STR "\026"
+--- 123,129 ----
+ #define DCS 0x90 /* Device Control String */
+ #define STERM 0x9c /* String Terminator */
+
+! #define POUND 0xB1
+
+ #define CTRL_F_STR "\056"
+ #define CTRL_H_STR "\026"
+*** ../vim-7.3.382/src/version.c 2011-12-15 21:51:32.000000000 +0100
+--- src/version.c 2011-12-23 12:46:08.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 383,
+ /**/
+
+--
+Vim is like Emacs without all the typing. (John "Johann" Spetz)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.384 b/source/ap/vim/patches/7.3.384
new file mode 100644
index 000000000..f75ff4082
--- /dev/null
+++ b/source/ap/vim/patches/7.3.384
@@ -0,0 +1,53 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.384
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.384
+Problem: Mapping CTRL-K in Insert mode breaks CTRL-X CTRL-K for dictionary
+ completion.
+Solution: Add CTRL-K to the list of recognized keys. (James McCoy)
+Files: src/edit.c
+
+
+*** ../vim-7.3.383/src/edit.c 2011-10-26 17:04:23.000000000 +0200
+--- src/edit.c 2011-12-23 12:36:22.000000000 +0100
+***************
+*** 2183,2189 ****
+ || c == Ctrl_I || c == Ctrl_D || c == Ctrl_P
+ || c == Ctrl_N || c == Ctrl_T || c == Ctrl_V
+ || c == Ctrl_Q || c == Ctrl_U || c == Ctrl_O
+! || c == Ctrl_S || c == 's');
+ case CTRL_X_SCROLL:
+ return (c == Ctrl_Y || c == Ctrl_E);
+ case CTRL_X_WHOLE_LINE:
+--- 2183,2189 ----
+ || c == Ctrl_I || c == Ctrl_D || c == Ctrl_P
+ || c == Ctrl_N || c == Ctrl_T || c == Ctrl_V
+ || c == Ctrl_Q || c == Ctrl_U || c == Ctrl_O
+! || c == Ctrl_S || c == Ctrl_K || c == 's');
+ case CTRL_X_SCROLL:
+ return (c == Ctrl_Y || c == Ctrl_E);
+ case CTRL_X_WHOLE_LINE:
+*** ../vim-7.3.383/src/version.c 2011-12-23 12:46:56.000000000 +0100
+--- src/version.c 2011-12-23 12:53:38.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 384,
+ /**/
+
+--
+Q: Is selling software the same as selling hardware?
+A: No, good hardware is sold new, good software has already been used by many.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.385 b/source/ap/vim/patches/7.3.385
new file mode 100644
index 000000000..405a77f00
--- /dev/null
+++ b/source/ap/vim/patches/7.3.385
@@ -0,0 +1,69 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.385
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.385
+Problem: When using an expression mapping on the command line the cursor
+ ends up in the wrong place. (Yasuhiro Matsumoto)
+Solution: Save and restore msg_col and msg_row when evaluating the
+ expression.
+Files: src/getchar.
+
+
+*** ../vim-7.3.384/src/getchar.c 2011-10-12 22:02:07.000000000 +0200
+--- src/getchar.c 2011-12-14 18:37:52.000000000 +0100
+***************
+*** 4510,4515 ****
+--- 4510,4517 ----
+ char_u *expr;
+ char_u *save_cmd;
+ pos_T save_cursor;
++ int save_msg_col;
++ int save_msg_row;
+
+ /* Remove escaping of CSI, because "str" is in a format to be used as
+ * typeahead. */
+***************
+*** 4533,4544 ****
+--- 4535,4550 ----
+ #endif
+ set_vim_var_char(c); /* set v:char to the typed character */
+ save_cursor = curwin->w_cursor;
++ save_msg_col = msg_col;
++ save_msg_row = msg_row;
+ p = eval_to_string(expr, NULL, FALSE);
+ --textlock;
+ #ifdef FEAT_EX_EXTRA
+ --ex_normal_lock;
+ #endif
+ curwin->w_cursor = save_cursor;
++ msg_col = save_msg_col;
++ msg_row = save_msg_row;
+
+ restore_cmdline_alloc(save_cmd);
+ vim_free(expr);
+*** ../vim-7.3.384/src/version.c 2011-12-23 13:14:58.000000000 +0100
+--- src/version.c 2011-12-23 14:53:23.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 385,
+ /**/
+
+--
+`When any government, or any church for that matter, undertakes to say to
+ its subjects, "This you may not read, this you must not see, this you are
+ forbidden to know," the end result is tyranny and oppression no matter how
+ holy the motives' -- Robert A Heinlein, "If this goes on --"
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.386 b/source/ap/vim/patches/7.3.386
new file mode 100644
index 000000000..c9035050c
--- /dev/null
+++ b/source/ap/vim/patches/7.3.386
@@ -0,0 +1,55 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.386
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.386
+Problem: Test 83 fails when iconv does not support cp932. (raf)
+Solution: Test if conversion works. (Yukihiro Nakadaira)
+Files: src/testdir/test83.in
+
+
+*** ../vim-7.3.385/src/testdir/test83.in 2011-10-12 19:53:31.000000000 +0200
+--- src/testdir/test83.in 2011-12-21 21:01:44.000000000 +0100
+***************
+*** 2,8 ****
+
+ STARTTEST
+ :so mbyte.vim
+! :if !has('iconv')
+ : e! test.ok
+ : w! test.out
+ : qa!
+--- 2,8 ----
+
+ STARTTEST
+ :so mbyte.vim
+! :if !has('iconv') || iconv("\x82\x60", "cp932", "utf-8") != "\uff21"
+ : e! test.ok
+ : w! test.out
+ : qa!
+*** ../vim-7.3.385/src/version.c 2011-12-23 14:54:01.000000000 +0100
+--- src/version.c 2011-12-23 14:55:38.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 386,
+ /**/
+
+--
+WOMAN: King of the who?
+ARTHUR: The Britons.
+WOMAN: Who are the Britons?
+ARTHUR: Well, we all are. we're all Britons and I am your king.
+ The Quest for the Holy Grail (Monty Python)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.387 b/source/ap/vim/patches/7.3.387
new file mode 100644
index 000000000..6b20a58a4
--- /dev/null
+++ b/source/ap/vim/patches/7.3.387
@@ -0,0 +1,61 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.387
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.387 (after 7.3.386)
+Problem: Test 83 may fail for some encodings.
+Solution: Set 'encoding' to utf-8 earlier.
+Files: src/testdir/test83.in
+
+
+*** ../vim-7.3.386/src/testdir/test83.in 2011-12-23 14:56:24.000000000 +0100
+--- src/testdir/test83.in 2011-12-30 13:05:05.000000000 +0100
+***************
+*** 2,13 ****
+
+ STARTTEST
+ :so mbyte.vim
+ :if !has('iconv') || iconv("\x82\x60", "cp932", "utf-8") != "\uff21"
+ : e! test.ok
+ : w! test.out
+ : qa!
+ :endif
+- :set enc=utf8
+
+ :/^text for tags1$/,/^text for tags1$/+1w! Xtags1.txt
+ :/^text for tags2$/,/^text for tags2$/+1w! Xtags2.txt
+--- 2,13 ----
+
+ STARTTEST
+ :so mbyte.vim
++ :set enc=utf8
+ :if !has('iconv') || iconv("\x82\x60", "cp932", "utf-8") != "\uff21"
+ : e! test.ok
+ : w! test.out
+ : qa!
+ :endif
+
+ :/^text for tags1$/,/^text for tags1$/+1w! Xtags1.txt
+ :/^text for tags2$/,/^text for tags2$/+1w! Xtags2.txt
+*** ../vim-7.3.386/src/version.c 2011-12-23 14:56:24.000000000 +0100
+--- src/version.c 2011-12-30 13:06:17.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 387,
+ /**/
+
+--
+Mental Floss prevents moral decay!
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.388 b/source/ap/vim/patches/7.3.388
new file mode 100644
index 000000000..7a6df8952
--- /dev/null
+++ b/source/ap/vim/patches/7.3.388
@@ -0,0 +1,45 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.388
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.388
+Problem: Crash on exit when EXITFREE is defined and using tiny features.
+Solution: Check for NULL window pointer. (Dominique Pelle)
+Files: src/buffer.c
+
+
+*** ../vim-7.3.387/src/buffer.c 2011-11-30 15:40:51.000000000 +0100
+--- src/buffer.c 2011-12-30 13:35:26.000000000 +0100
+***************
+*** 419,424 ****
+--- 419,426 ----
+ if (
+ #ifdef FEAT_WINDOWS
+ win_valid(win) &&
++ #else
++ win != NULL &&
+ #endif
+ win->w_buffer == buf)
+ win->w_buffer = NULL; /* make sure we don't use the buffer now */
+*** ../vim-7.3.387/src/version.c 2011-12-30 13:09:15.000000000 +0100
+--- src/version.c 2011-12-30 13:37:23.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 388,
+ /**/
+
+--
+Be nice to your kids... they'll be the ones choosing your nursing home.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.389 b/source/ap/vim/patches/7.3.389
new file mode 100644
index 000000000..c8a968c36
--- /dev/null
+++ b/source/ap/vim/patches/7.3.389
@@ -0,0 +1,61 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.389
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.389
+Problem: After typing at a prompt the "MORE" message appears too soon.
+Solution: reset lines_left in msg_end_prompt(). (Eswald)
+Files: src/message.c
+
+
+*** ../vim-7.3.388/src/message.c 2011-09-14 15:39:26.000000000 +0200
+--- src/message.c 2011-12-30 14:08:05.000000000 +0100
+***************
+*** 85,91 ****
+ * need_wait_return to be set. This is a hack to make ":ts"
+ * work without an extra prompt.
+ * lines_left Number of lines available for messages before the
+! * more-prompt is to be given.
+ * need_wait_return TRUE when the hit-return prompt is needed.
+ * Reset: After giving the hit-return prompt, when the user
+ * has answered some other prompt.
+--- 85,91 ----
+ * need_wait_return to be set. This is a hack to make ":ts"
+ * work without an extra prompt.
+ * lines_left Number of lines available for messages before the
+! * more-prompt is to be given. -1 when not set.
+ * need_wait_return TRUE when the hit-return prompt is needed.
+ * Reset: After giving the hit-return prompt, when the user
+ * has answered some other prompt.
+***************
+*** 855,860 ****
+--- 855,861 ----
+ cmdline_row = msg_row;
+ msg_col = 0;
+ msg_clr_eos();
++ lines_left = -1;
+ }
+ #endif
+
+*** ../vim-7.3.388/src/version.c 2011-12-30 13:39:04.000000000 +0100
+--- src/version.c 2011-12-30 14:11:00.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 389,
+ /**/
+
+--
+Proofread carefully to see if you any words out.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.390 b/source/ap/vim/patches/7.3.390
new file mode 100644
index 000000000..7199f8e18
--- /dev/null
+++ b/source/ap/vim/patches/7.3.390
@@ -0,0 +1,155 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.390
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.390
+Problem: Using NULL buffer pointer in a window.
+Solution: Check for w_buffer being NULL in more places. (Bjorn Winckler)
+Files: src/ex_cmds.c, src/quickfix.c, src/window.c
+
+
+*** ../vim-7.3.389/src/ex_cmds.c 2011-11-30 17:01:55.000000000 +0100
+--- src/ex_cmds.c 2011-12-30 14:59:57.000000000 +0100
+***************
+*** 3390,3395 ****
+--- 3390,3402 ----
+ (flags & ECMD_HIDE) ? 0 : DOBUF_UNLOAD);
+
+ #ifdef FEAT_AUTOCMD
++ /* Autocommands may open a new window and leave oldwin open
++ * which leads to crashes since the above call sets
++ * oldwin->w_buffer to NULL. */
++ if (curwin != oldwin && oldwin != aucmd_win
++ && win_valid(oldwin) && oldwin->w_buffer == NULL)
++ win_close(oldwin, FALSE);
++
+ # ifdef FEAT_EVAL
+ if (aborting()) /* autocmds may abort script processing */
+ {
+*** ../vim-7.3.389/src/quickfix.c 2011-08-10 18:36:49.000000000 +0200
+--- src/quickfix.c 2011-12-30 14:45:19.000000000 +0100
+***************
+*** 2675,2681 ****
+ bt_quickfix(buf)
+ buf_T *buf;
+ {
+! return (buf->b_p_bt[0] == 'q');
+ }
+
+ /*
+--- 2675,2681 ----
+ bt_quickfix(buf)
+ buf_T *buf;
+ {
+! return buf != NULL && buf->b_p_bt[0] == 'q';
+ }
+
+ /*
+***************
+*** 2686,2693 ****
+ bt_nofile(buf)
+ buf_T *buf;
+ {
+! return (buf->b_p_bt[0] == 'n' && buf->b_p_bt[2] == 'f')
+! || buf->b_p_bt[0] == 'a';
+ }
+
+ /*
+--- 2686,2693 ----
+ bt_nofile(buf)
+ buf_T *buf;
+ {
+! return buf != NULL && ((buf->b_p_bt[0] == 'n' && buf->b_p_bt[2] == 'f')
+! || buf->b_p_bt[0] == 'a');
+ }
+
+ /*
+***************
+*** 2697,2703 ****
+ bt_dontwrite(buf)
+ buf_T *buf;
+ {
+! return (buf->b_p_bt[0] == 'n');
+ }
+
+ int
+--- 2697,2703 ----
+ bt_dontwrite(buf)
+ buf_T *buf;
+ {
+! return buf != NULL && buf->b_p_bt[0] == 'n';
+ }
+
+ int
+*** ../vim-7.3.389/src/window.c 2011-09-14 14:43:21.000000000 +0200
+--- src/window.c 2011-12-30 14:44:18.000000000 +0100
+***************
+*** 2170,2176 ****
+
+ /* When closing the help window, try restoring a snapshot after closing
+ * the window. Otherwise clear the snapshot, it's now invalid. */
+! if (win->w_buffer->b_help)
+ help_window = TRUE;
+ else
+ clear_snapshot(curtab, SNAP_HELP_IDX);
+--- 2170,2176 ----
+
+ /* When closing the help window, try restoring a snapshot after closing
+ * the window. Otherwise clear the snapshot, it's now invalid. */
+! if (win->w_buffer != NULL && win->w_buffer->b_help)
+ help_window = TRUE;
+ else
+ clear_snapshot(curtab, SNAP_HELP_IDX);
+***************
+*** 2214,2226 ****
+
+ #ifdef FEAT_SYN_HL
+ /* Free independent synblock before the buffer is freed. */
+! reset_synblock(win);
+ #endif
+
+ /*
+ * Close the link to the buffer.
+ */
+! close_buffer(win, win->w_buffer, free_buf ? DOBUF_UNLOAD : 0);
+
+ /* Autocommands may have closed the window already, or closed the only
+ * other window or moved to another tab page. */
+--- 2214,2228 ----
+
+ #ifdef FEAT_SYN_HL
+ /* Free independent synblock before the buffer is freed. */
+! if (win->w_buffer != NULL)
+! reset_synblock(win);
+ #endif
+
+ /*
+ * Close the link to the buffer.
+ */
+! if (win->w_buffer != NULL)
+! close_buffer(win, win->w_buffer, free_buf ? DOBUF_UNLOAD : 0);
+
+ /* Autocommands may have closed the window already, or closed the only
+ * other window or moved to another tab page. */
+*** ../vim-7.3.389/src/version.c 2011-12-30 14:14:16.000000000 +0100
+--- src/version.c 2011-12-30 14:38:39.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 390,
+ /**/
+
+--
+There can't be a crisis today, my schedule is already full.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.391 b/source/ap/vim/patches/7.3.391
new file mode 100644
index 000000000..0a1bcceb5
--- /dev/null
+++ b/source/ap/vim/patches/7.3.391
@@ -0,0 +1,51 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.391
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.391
+Problem: Can't check if the XPM_W32 feature is enabled.
+Solution: Add xpm_w32 to the list of features. (kat)
+Files: src/eval.c
+
+
+*** ../vim-7.3.390/src/eval.c 2011-12-14 15:32:44.000000000 +0100
+--- src/eval.c 2012-01-04 14:33:22.000000000 +0100
+***************
+*** 12260,12265 ****
+--- 12260,12268 ----
+ #ifdef FEAT_XFONTSET
+ "xfontset",
+ #endif
++ #ifdef FEAT_XPM_W32
++ "xpm_w32",
++ #endif
+ #ifdef USE_XSMP
+ "xsmp",
+ #endif
+*** ../vim-7.3.390/src/version.c 2011-12-30 15:01:55.000000000 +0100
+--- src/version.c 2012-01-04 14:34:31.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 391,
+ /**/
+
+--
+ROBIN: The what?
+ARTHUR: The Holy Hand Grenade of Antioch. 'Tis one of the sacred relics
+ Brother Maynard always carries with him.
+ALL: Yes. Of course.
+ARTHUR: (shouting) Bring up the Holy Hand Grenade!
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.392 b/source/ap/vim/patches/7.3.392
new file mode 100644
index 000000000..a603d90e2
--- /dev/null
+++ b/source/ap/vim/patches/7.3.392
@@ -0,0 +1,115 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.392
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.392
+Problem: When setting 'undofile' while the file is already loaded but
+ unchanged, try reading the undo file. (Andy Wokula)
+Solution: Compute a checksum of the text when 'undofile' is set. (Christian
+ Brabandt)
+Files: src/option.c, src/testdir/test72.in, src/testdir/test72.ok
+
+
+*** ../vim-7.3.391/src/option.c 2011-11-30 11:31:25.000000000 +0100
+--- src/option.c 2012-01-04 19:34:11.000000000 +0100
+***************
+*** 7516,7521 ****
+--- 7516,7545 ----
+ compatible_set();
+ }
+
++ #ifdef FEAT_PERSISTENT_UNDO
++ /* 'undofile' */
++ else if ((int *)varp == &curbuf->b_p_udf || (int *)varp == &p_udf)
++ {
++ char_u hash[UNDO_HASH_SIZE];
++ buf_T *save_curbuf = curbuf;
++
++ for (curbuf = firstbuf; curbuf != NULL; curbuf = curbuf->b_next)
++ {
++ /* When 'undofile' is set globally: for every buffer, otherwise
++ * only for the current buffer: Try to read in the undofile, if
++ * one exists and the buffer wasn't changed. */
++ if ((curbuf == save_curbuf
++ || (opt_flags & OPT_GLOBAL) || opt_flags == 0)
++ && !curbufIsChanged())
++ {
++ u_compute_hash(hash);
++ u_read_undo(NULL, hash, curbuf->b_fname);
++ }
++ }
++ curbuf = save_curbuf;
++ }
++ #endif
++
+ /* 'list', 'number' */
+ else if ((int *)varp == &curwin->w_p_list
+ || (int *)varp == &curwin->w_p_nu
+*** ../vim-7.3.391/src/testdir/test72.in 2010-08-15 21:57:29.000000000 +0200
+--- src/testdir/test72.in 2012-01-04 19:04:17.000000000 +0100
+***************
+*** 51,56 ****
+--- 51,62 ----
+ :e Xtestfile
+ uuu:w >>test.out
+ :"
++ :" Test that reading the undofiles when setting undofile works
++ :set noundofile ul=0
++ i
++ u:e! Xtestfile
++ :set undofile ul=100
++ uuuuuu:w >>test.out
+ :" And now with encryption, cryptmethod=zip
+ :e! Xtestfile
+ :set undofile cm=zip
+*** ../vim-7.3.391/src/testdir/test72.ok 2010-08-15 21:57:29.000000000 +0200
+--- src/testdir/test72.ok 2012-01-04 19:04:17.000000000 +0100
+***************
+*** 7,12 ****
+--- 7,22 ----
+ eight
+ nine
+ ten
++ one
++ two
++ three
++ four
++ five
++ six
++ seven
++ eight
++ nine
++ ten
+ monday
+ wednesday
+ thursday
+*** ../vim-7.3.391/src/version.c 2012-01-04 14:35:31.000000000 +0100
+--- src/version.c 2012-01-04 19:33:41.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 392,
+ /**/
+
+--
+BROTHER MAYNARD: Armaments Chapter Two Verses Nine to Twenty One.
+ANOTHER MONK: And St. Attila raised his hand grenade up on high saying "O
+ Lord bless this thy hand grenade that with it thou mayest
+ blow thine enemies to tiny bits, in thy mercy. "and the Lord
+ did grin and people did feast upon the lambs and sloths and
+ carp and anchovies and orang-utans and breakfast cereals and
+ fruit bats and...
+BROTHER MAYNARD: Skip a bit brother ...
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.393 b/source/ap/vim/patches/7.3.393
new file mode 100644
index 000000000..ca6cbc96d
--- /dev/null
+++ b/source/ap/vim/patches/7.3.393
@@ -0,0 +1,130 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.393
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.393
+Problem: Win32: When resizing Vim it is always moved to the primary monitor
+ if the secondary monitor is on the left.
+Solution: Use the nearest monitor. (Yukihiro Nakadaira)
+Files: src/gui_w32.c
+
+
+*** ../vim-7.3.392/src/gui_w32.c 2011-12-15 21:51:32.000000000 +0100
+--- src/gui_w32.c 2012-01-04 20:25:58.000000000 +0100
+***************
+*** 1661,1669 ****
+ {
+ RECT workarea_rect;
+ int win_width, win_height;
+- int win_xpos, win_ypos;
+ WINDOWPLACEMENT wndpl;
+- int workarea_left;
+
+ /* Try to keep window completely on screen. */
+ /* Get position of the screen work area. This is the part that is not
+--- 1661,1667 ----
+***************
+*** 1685,1693 ****
+ GetWindowPlacement(s_hwnd, &wndpl);
+ }
+
+- win_xpos = wndpl.rcNormalPosition.left;
+- win_ypos = wndpl.rcNormalPosition.top;
+-
+ /* compute the size of the outside of the window */
+ win_width = width + GetSystemMetrics(SM_CXFRAME) * 2;
+ win_height = height + GetSystemMetrics(SM_CYFRAME) * 2
+--- 1683,1688 ----
+***************
+*** 1697,1732 ****
+ #endif
+ ;
+
+! /* There is an inconsistency when using two monitors and Vim is on the
+! * second (right) one: win_xpos will be the offset from the workarea of
+! * the left monitor. While with one monitor it's the offset from the
+! * workarea (including a possible taskbar on the left). Detect the second
+! * monitor by checking for the left offset to be quite big. */
+! if (workarea_rect.left > 300)
+! workarea_left = 0;
+! else
+! workarea_left = workarea_rect.left;
+
+! /* If the window is going off the screen, move it on to the screen.
+! * win_xpos and win_ypos are relative to the workarea. */
+ if ((direction & RESIZE_HOR)
+! && workarea_left + win_xpos + win_width > workarea_rect.right)
+! win_xpos = workarea_rect.right - win_width - workarea_left;
+
+! if ((direction & RESIZE_HOR) && win_xpos < 0)
+! win_xpos = 0;
+
+ if ((direction & RESIZE_VERT)
+! && workarea_rect.top + win_ypos + win_height > workarea_rect.bottom)
+! win_ypos = workarea_rect.bottom - win_height - workarea_rect.top;
+
+! if ((direction & RESIZE_VERT) && win_ypos < 0)
+! win_ypos = 0;
+!
+! wndpl.rcNormalPosition.left = win_xpos;
+! wndpl.rcNormalPosition.right = win_xpos + win_width;
+! wndpl.rcNormalPosition.top = win_ypos;
+! wndpl.rcNormalPosition.bottom = win_ypos + win_height;
+
+ /* set window position - we should use SetWindowPlacement rather than
+ * SetWindowPos as the MSDN docs say the coord systems returned by
+--- 1692,1723 ----
+ #endif
+ ;
+
+! /* The following should take care of keeping Vim on the same monitor, no
+! * matter if the secondary monitor is left or right of the primary
+! * monitor. */
+! wndpl.rcNormalPosition.right = wndpl.rcNormalPosition.left + win_width;
+! wndpl.rcNormalPosition.bottom = wndpl.rcNormalPosition.top + win_height;
+
+! /* If the window is going off the screen, move it on to the screen. */
+ if ((direction & RESIZE_HOR)
+! && wndpl.rcNormalPosition.right > workarea_rect.right)
+! OffsetRect(&wndpl.rcNormalPosition,
+! workarea_rect.right - wndpl.rcNormalPosition.right, 0);
+
+! if ((direction & RESIZE_HOR)
+! && wndpl.rcNormalPosition.left < workarea_rect.left)
+! OffsetRect(&wndpl.rcNormalPosition,
+! workarea_rect.left - wndpl.rcNormalPosition.left, 0);
+
+ if ((direction & RESIZE_VERT)
+! && wndpl.rcNormalPosition.bottom > workarea_rect.bottom)
+! OffsetRect(&wndpl.rcNormalPosition,
+! 0, workarea_rect.bottom - wndpl.rcNormalPosition.bottom);
+
+! if ((direction & RESIZE_VERT)
+! && wndpl.rcNormalPosition.top < workarea_rect.top)
+! OffsetRect(&wndpl.rcNormalPosition,
+! 0, workarea_rect.top - wndpl.rcNormalPosition.top);
+
+ /* set window position - we should use SetWindowPlacement rather than
+ * SetWindowPos as the MSDN docs say the coord systems returned by
+*** ../vim-7.3.392/src/version.c 2012-01-04 19:34:32.000000000 +0100
+--- src/version.c 2012-01-04 20:28:57.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 393,
+ /**/
+
+--
+I wonder, do vegetarians eat fruit bats?
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.394 b/source/ap/vim/patches/7.3.394
new file mode 100644
index 000000000..20c7cffec
--- /dev/null
+++ b/source/ap/vim/patches/7.3.394
@@ -0,0 +1,62 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.394
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.394
+Problem: When placing a mark while starting up a screen redraw messes up
+ the screen. (lith)
+Solution: Don't redraw while still starting up. (Christian Brabandt)
+Files: src/screen.c
+
+
+*** ../vim-7.3.393/src/screen.c 2011-09-02 14:07:31.000000000 +0200
+--- src/screen.c 2012-01-10 12:36:52.000000000 +0100
+***************
+*** 764,772 ****
+ doit = TRUE;
+ }
+
+! /* Return when there is nothing to do or screen updating already
+! * happening. */
+! if (!doit || updating_screen)
+ return;
+
+ /* update all windows that need updating */
+--- 764,776 ----
+ doit = TRUE;
+ }
+
+! /* Return when there is nothing to do, screen updating is already
+! * happening (recursive call) or still starting up. */
+! if (!doit || updating_screen
+! #ifdef FEAT_GUI
+! || gui.starting
+! #endif
+! || starting)
+ return;
+
+ /* update all windows that need updating */
+*** ../vim-7.3.393/src/version.c 2012-01-04 20:29:18.000000000 +0100
+--- src/version.c 2012-01-10 12:41:32.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 394,
+ /**/
+
+--
+It is illegal for anyone to try and stop a child from playfully jumping over
+puddles of water.
+ [real standing law in California, United States of America]
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.395 b/source/ap/vim/patches/7.3.395
new file mode 100644
index 000000000..cb2689395
--- /dev/null
+++ b/source/ap/vim/patches/7.3.395
@@ -0,0 +1,115 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.395
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.395 (after 7.3.251)
+Problem: "dv?bar" in the last line deletes too much and breaks undo.
+Solution: Only adjust the cursor position when it's after the last line of
+ the buffer. Add a test. (Christian Brabandt)
+Files: src/ops.c, src/testdir/test43.in, src/testdir/test43.ok
+
+
+*** ../vim-7.3.394/src/ops.c 2011-09-21 17:33:49.000000000 +0200
+--- src/ops.c 2012-01-10 13:28:05.000000000 +0100
+***************
+*** 1961,1968 ****
+ /* Special case: gH<Del> deletes the last line. */
+ del_lines(1L, FALSE);
+ curwin->w_cursor = curpos; /* restore curwin->w_cursor */
+! if (curwin->w_cursor.lnum > 1)
+! --curwin->w_cursor.lnum;
+ }
+ else
+ {
+--- 1962,1969 ----
+ /* Special case: gH<Del> deletes the last line. */
+ del_lines(1L, FALSE);
+ curwin->w_cursor = curpos; /* restore curwin->w_cursor */
+! if (curwin->w_cursor.lnum > curbuf->b_ml.ml_line_count)
+! curwin->w_cursor.lnum = curbuf->b_ml.ml_line_count;
+ }
+ else
+ {
+***************
+*** 4434,4440 ****
+ #endif
+
+ /*
+! * implementation of the format operator 'gq'
+ */
+ void
+ op_format(oap, keep_cursor)
+--- 4435,4441 ----
+ #endif
+
+ /*
+! * Implementation of the format operator 'gq'.
+ */
+ void
+ op_format(oap, keep_cursor)
+*** ../vim-7.3.394/src/testdir/test43.in 2010-08-15 21:57:29.000000000 +0200
+--- src/testdir/test43.in 2012-01-10 13:41:13.000000000 +0100
+***************
+*** 13,19 ****
+ x:set magic
+ /\v(a)(b)\2\1\1/e
+ x/\V[ab]\(\[xy]\)\1
+! x:?^1?,$w! test.out
+ :qa!
+ ENDTEST
+
+--- 13,23 ----
+ x:set magic
+ /\v(a)(b)\2\1\1/e
+ x/\V[ab]\(\[xy]\)\1
+! x:$
+! :set undolevels=100
+! dv?bar?
+! Yup:"
+! :?^1?,$w! test.out
+ :qa!
+ ENDTEST
+
+***************
+*** 25,27 ****
+--- 29,33 ----
+ 6 x ^aa$ x
+ 7 (a)(b) abbaa
+ 8 axx [ab]xx
++ 9 foobar
++
+*** ../vim-7.3.394/src/testdir/test43.ok 2010-08-15 21:57:29.000000000 +0200
+--- src/testdir/test43.ok 2012-01-10 13:42:39.000000000 +0100
+***************
+*** 6,8 ****
+--- 6,11 ----
+ 6 x aa$ x
+ 7 (a)(b) abba
+ 8 axx ab]xx
++ 9 foobar
++ 9 foo
++
+*** ../vim-7.3.394/src/version.c 2012-01-10 12:42:05.000000000 +0100
+--- src/version.c 2012-01-10 13:30:40.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 395,
+ /**/
+
+--
+The Law, in its majestic equality, forbids the rich, as well as the
+poor, to sleep under the bridges, to beg in the streets, and to steal
+bread. -- Anatole France
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.396 b/source/ap/vim/patches/7.3.396
new file mode 100644
index 000000000..72b55a29c
--- /dev/null
+++ b/source/ap/vim/patches/7.3.396
@@ -0,0 +1,49 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.396
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.396
+Problem: After forcing an operator to be characterwise it can still become
+ linewise when spanning whole lines.
+Solution: Don't make the operator linewise when motion_force was set.
+ (Christian Brabandt)
+Files: src/ops.c
+
+
+*** ../vim-7.3.395/src/ops.c 2012-01-10 13:44:23.000000000 +0100
+--- src/ops.c 2012-01-10 13:28:05.000000000 +0100
+***************
+*** 1648,1653 ****
+--- 1648,1654 ----
+ && !oap->block_mode
+ #endif
+ && oap->line_count > 1
++ && oap->motion_force == NUL
+ && oap->op_type == OP_DELETE)
+ {
+ ptr = ml_get(oap->end.lnum) + oap->end.col;
+*** ../vim-7.3.395/src/version.c 2012-01-10 13:44:23.000000000 +0100
+--- src/version.c 2012-01-10 13:45:31.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 396,
+ /**/
+
+--
+Any sufficiently advanced technology is indistinguishable from magic.
+ Arthur C. Clarke
+Any sufficiently advanced bug is indistinguishable from a feature.
+ Rich Kulawiec
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.397 b/source/ap/vim/patches/7.3.397
new file mode 100644
index 000000000..866b3aaca
--- /dev/null
+++ b/source/ap/vim/patches/7.3.397
@@ -0,0 +1,224 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.397
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.397
+Problem: ":helpgrep" does not work properly when 'encoding' is not utf-8 or
+ latin1.
+Solution: Convert non-ascii lines to 'encoding'. (Yasuhiro Matsumoto)
+Files: src/quickfix.c, src/spell.c, src/misc2.c, src/proto/misc2.pro
+
+
+*** ../vim-7.3.396/src/quickfix.c 2011-12-30 15:01:55.000000000 +0100
+--- src/quickfix.c 2012-01-10 16:18:51.000000000 +0100
+***************
+*** 3914,3919 ****
+--- 3914,3929 ----
+ regmatch.rm_ic = FALSE;
+ if (regmatch.regprog != NULL)
+ {
++ #ifdef FEAT_MBYTE
++ vimconv_T vc;
++
++ /* Help files are in utf-8 or latin1, convert lines when 'encoding'
++ * differs. */
++ vc.vc_type = CONV_NONE;
++ if (!enc_utf8)
++ convert_setup(&vc, (char_u *)"utf-8", p_enc);
++ #endif
++
+ /* create a new quickfix list */
+ qf_new_list(qi, *eap->cmdlinep);
+
+***************
+*** 3948,3968 ****
+ lnum = 1;
+ while (!vim_fgets(IObuff, IOSIZE, fd) && !got_int)
+ {
+! if (vim_regexec(&regmatch, IObuff, (colnr_T)0))
+ {
+! int l = (int)STRLEN(IObuff);
+
+ /* remove trailing CR, LF, spaces, etc. */
+! while (l > 0 && IObuff[l - 1] <= ' ')
+! IObuff[--l] = NUL;
+
+ if (qf_add_entry(qi, &prevp,
+ NULL, /* dir */
+ fnames[fi],
+ 0,
+! IObuff,
+ lnum,
+! (int)(regmatch.startp[0] - IObuff)
+ + 1, /* col */
+ FALSE, /* vis_col */
+ NULL, /* search pattern */
+--- 3958,3990 ----
+ lnum = 1;
+ while (!vim_fgets(IObuff, IOSIZE, fd) && !got_int)
+ {
+! char_u *line = IObuff;
+! #ifdef FEAT_MBYTE
+! /* Convert a line if 'encoding' is not utf-8 and
+! * the line contains a non-ASCII character. */
+! if (vc.vc_type != CONV_NONE
+! && has_non_ascii(IObuff)) {
+! line = string_convert(&vc, IObuff, NULL);
+! if (line == NULL)
+! line = IObuff;
+! }
+! #endif
+!
+! if (vim_regexec(&regmatch, line, (colnr_T)0))
+ {
+! int l = (int)STRLEN(line);
+
+ /* remove trailing CR, LF, spaces, etc. */
+! while (l > 0 && line[l - 1] <= ' ')
+! line[--l] = NUL;
+
+ if (qf_add_entry(qi, &prevp,
+ NULL, /* dir */
+ fnames[fi],
+ 0,
+! line,
+ lnum,
+! (int)(regmatch.startp[0] - line)
+ + 1, /* col */
+ FALSE, /* vis_col */
+ NULL, /* search pattern */
+***************
+*** 3972,3980 ****
+--- 3994,4010 ----
+ ) == FAIL)
+ {
+ got_int = TRUE;
++ #ifdef FEAT_MBYTE
++ if (line != IObuff)
++ vim_free(line);
++ #endif
+ break;
+ }
+ }
++ #ifdef FEAT_MBYTE
++ if (line != IObuff)
++ vim_free(line);
++ #endif
+ ++lnum;
+ line_breakcheck();
+ }
+***************
+*** 3984,3990 ****
+--- 4014,4025 ----
+ FreeWild(fcount, fnames);
+ }
+ }
++
+ vim_free(regmatch.regprog);
++ #ifdef FEAT_MBYTE
++ if (vc.vc_type != CONV_NONE)
++ convert_setup(&vc, NULL, NULL);
++ #endif
+
+ qi->qf_lists[qi->qf_curlist].qf_nonevalid = FALSE;
+ qi->qf_lists[qi->qf_curlist].qf_ptr =
+*** ../vim-7.3.396/src/spell.c 2011-09-02 14:18:14.000000000 +0200
+--- src/spell.c 2012-01-10 16:19:33.000000000 +0100
+***************
+*** 5020,5026 ****
+ static int str_equal __ARGS((char_u *s1, char_u *s2));
+ static void add_fromto __ARGS((spellinfo_T *spin, garray_T *gap, char_u *from, char_u *to));
+ static int sal_to_bool __ARGS((char_u *s));
+- static int has_non_ascii __ARGS((char_u *s));
+ static void spell_free_aff __ARGS((afffile_T *aff));
+ static int spell_read_dic __ARGS((spellinfo_T *spin, char_u *fname, afffile_T *affile));
+ static int get_affix_flags __ARGS((afffile_T *affile, char_u *afflist));
+--- 5020,5025 ----
+***************
+*** 6485,6507 ****
+ }
+
+ /*
+- * Return TRUE if string "s" contains a non-ASCII character (128 or higher).
+- * When "s" is NULL FALSE is returned.
+- */
+- static int
+- has_non_ascii(s)
+- char_u *s;
+- {
+- char_u *p;
+-
+- if (s != NULL)
+- for (p = s; *p != NUL; ++p)
+- if (*p >= 128)
+- return TRUE;
+- return FALSE;
+- }
+-
+- /*
+ * Free the structure filled by spell_read_aff().
+ */
+ static void
+--- 6484,6489 ----
+*** ../vim-7.3.396/src/misc2.c 2011-12-08 17:49:31.000000000 +0100
+--- src/misc2.c 2012-01-10 16:25:53.000000000 +0100
+***************
+*** 6541,6543 ****
+--- 6541,6563 ----
+ #endif
+
+ #endif
++
++ #if (defined(FEAT_MBYTE) && defined(FEAT_QUICKFIX)) \
++ || defined(FEAT_SPELL) || defined(PROTO)
++ /*
++ * Return TRUE if string "s" contains a non-ASCII character (128 or higher).
++ * When "s" is NULL FALSE is returned.
++ */
++ int
++ has_non_ascii(s)
++ char_u *s;
++ {
++ char_u *p;
++
++ if (s != NULL)
++ for (p = s; *p != NUL; ++p)
++ if (*p >= 128)
++ return TRUE;
++ return FALSE;
++ }
++ #endif
+*** ../vim-7.3.396/src/proto/misc2.pro 2011-07-07 16:20:45.000000000 +0200
+--- src/proto/misc2.pro 2012-01-10 16:20:03.000000000 +0100
+***************
+*** 116,119 ****
+--- 116,120 ----
+ char_u *read_string __ARGS((FILE *fd, int cnt));
+ int put_bytes __ARGS((FILE *fd, long_u nr, int len));
+ void put_time __ARGS((FILE *fd, time_t the_time));
++ int has_non_ascii __ARGS((char_u *s));
+ /* vim: set ft=c : */
+*** ../vim-7.3.396/src/version.c 2012-01-10 13:46:18.000000000 +0100
+--- src/version.c 2012-01-10 16:26:32.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 397,
+ /**/
+
+--
+Biting someone with your natural teeth is "simple assault," while biting
+someone with your false teeth is "aggravated assault."
+ [real standing law in Louisana, United States of America]
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.398 b/source/ap/vim/patches/7.3.398
new file mode 100644
index 000000000..8d4b21381
--- /dev/null
+++ b/source/ap/vim/patches/7.3.398
@@ -0,0 +1,65 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.398
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.398
+Problem: When creating more than 10 location lists and adding items one by
+ one a previous location may be used. (Audrius Kažukauskas)
+Solution: Clear the location list completely when adding the tenth one.
+Files: src/quickfix.c
+
+
+*** ../vim-7.3.397/src/quickfix.c 2012-01-10 16:28:41.000000000 +0100
+--- src/quickfix.c 2012-01-10 16:58:52.000000000 +0100
+***************
+*** 899,906 ****
+ }
+ else
+ qi->qf_curlist = qi->qf_listcount++;
+! qi->qf_lists[qi->qf_curlist].qf_index = 0;
+! qi->qf_lists[qi->qf_curlist].qf_count = 0;
+ if (qf_title != NULL)
+ {
+ char_u *p = alloc((int)STRLEN(qf_title) + 2);
+--- 899,905 ----
+ }
+ else
+ qi->qf_curlist = qi->qf_listcount++;
+! vim_memset(&qi->qf_lists[qi->qf_curlist], 0, (size_t)(sizeof(qf_list_T)));
+ if (qf_title != NULL)
+ {
+ char_u *p = alloc((int)STRLEN(qf_title) + 2);
+***************
+*** 909,916 ****
+ if (p != NULL)
+ sprintf((char *)p, ":%s", (char *)qf_title);
+ }
+- else
+- qi->qf_lists[qi->qf_curlist].qf_title = NULL;
+ }
+
+ /*
+--- 908,913 ----
+*** ../vim-7.3.397/src/version.c 2012-01-10 16:28:41.000000000 +0100
+--- src/version.c 2012-01-10 17:13:09.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 398,
+ /**/
+
+--
+Why don't cannibals eat clowns?
+Because they taste funny.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.399 b/source/ap/vim/patches/7.3.399
new file mode 100644
index 000000000..33d063020
--- /dev/null
+++ b/source/ap/vim/patches/7.3.399
@@ -0,0 +1,137 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.399
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.399
+Problem: ":cd" doesn't work when the path contains wildcards. (Yukihiro
+ Nakadaira)
+Solution: Ignore wildcard errors when the EW_NOTWILD flag is used.
+Files: src/misc1.c
+
+
+*** ../vim-7.3.398/src/misc1.c 2011-12-14 20:21:29.000000000 +0100
+--- src/misc1.c 2012-01-10 17:57:42.000000000 +0100
+***************
+*** 9103,9117 ****
+ }
+
+ /* compile the regexp into a program */
+! if (flags & EW_NOERROR)
+ ++emsg_silent;
+ regmatch.rm_ic = TRUE; /* Always ignore case */
+ regmatch.regprog = vim_regcomp(pat, RE_MAGIC);
+! if (flags & EW_NOERROR)
+ --emsg_silent;
+ vim_free(pat);
+
+! if (regmatch.regprog == NULL)
+ {
+ vim_free(buf);
+ return 0;
+--- 9103,9117 ----
+ }
+
+ /* compile the regexp into a program */
+! if (flags & (EW_NOERROR | EW_NOTWILD))
+ ++emsg_silent;
+ regmatch.rm_ic = TRUE; /* Always ignore case */
+ regmatch.regprog = vim_regcomp(pat, RE_MAGIC);
+! if (flags & (EW_NOERROR | EW_NOTWILD))
+ --emsg_silent;
+ vim_free(pat);
+
+! if (regmatch.regprog == NULL && (flags & EW_NOTWILD) == 0)
+ {
+ vim_free(buf);
+ return 0;
+***************
+*** 9179,9185 ****
+ * all entries found with "matchname". */
+ if ((p[0] != '.' || starts_with_dot)
+ && (matchname == NULL
+! || vim_regexec(&regmatch, p, (colnr_T)0)
+ || ((flags & EW_NOTWILD)
+ && fnamencmp(path + (s - buf), p, e - s) == 0)))
+ {
+--- 9179,9186 ----
+ * all entries found with "matchname". */
+ if ((p[0] != '.' || starts_with_dot)
+ && (matchname == NULL
+! || (regmatch.regprog != NULL
+! && vim_regexec(&regmatch, p, (colnr_T)0))
+ || ((flags & EW_NOTWILD)
+ && fnamencmp(path + (s - buf), p, e - s) == 0)))
+ {
+***************
+*** 9419,9428 ****
+ else
+ regmatch.rm_ic = FALSE; /* Don't ignore case */
+ #endif
+ regmatch.regprog = vim_regcomp(pat, RE_MAGIC);
+ vim_free(pat);
+
+! if (regmatch.regprog == NULL)
+ {
+ vim_free(buf);
+ return 0;
+--- 9420,9433 ----
+ else
+ regmatch.rm_ic = FALSE; /* Don't ignore case */
+ #endif
++ if (flags & (EW_NOERROR | EW_NOTWILD))
++ ++emsg_silent;
+ regmatch.regprog = vim_regcomp(pat, RE_MAGIC);
++ if (flags & (EW_NOERROR | EW_NOTWILD))
++ --emsg_silent;
+ vim_free(pat);
+
+! if (regmatch.regprog == NULL && (flags & EW_NOTWILD) == 0)
+ {
+ vim_free(buf);
+ return 0;
+***************
+*** 9452,9458 ****
+ if (dp == NULL)
+ break;
+ if ((dp->d_name[0] != '.' || starts_with_dot)
+! && (vim_regexec(&regmatch, (char_u *)dp->d_name, (colnr_T)0)
+ || ((flags & EW_NOTWILD)
+ && fnamencmp(path + (s - buf), dp->d_name, e - s) == 0)))
+ {
+--- 9457,9464 ----
+ if (dp == NULL)
+ break;
+ if ((dp->d_name[0] != '.' || starts_with_dot)
+! && ((regmatch.regprog != NULL && vim_regexec(&regmatch,
+! (char_u *)dp->d_name, (colnr_T)0))
+ || ((flags & EW_NOTWILD)
+ && fnamencmp(path + (s - buf), dp->d_name, e - s) == 0)))
+ {
+*** ../vim-7.3.398/src/version.c 2012-01-10 17:13:48.000000000 +0100
+--- src/version.c 2012-01-10 18:21:05.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 399,
+ /**/
+
+--
+Close your shells, or I'll kill -9 you
+Tomorrow I'll quota you
+Remember the disks'll always be full
+And then while I'm away
+I'll write ~ everyday
+And I'll send-pr all my buggings to you.
+ [ CVS log "Beatles style" for FreeBSD ports/INDEX, Satoshi Asami ]
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.400 b/source/ap/vim/patches/7.3.400
new file mode 100644
index 000000000..c621a8811
--- /dev/null
+++ b/source/ap/vim/patches/7.3.400
@@ -0,0 +1,1762 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.400
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.400
+Problem: Compiler warnings for shadowed variables.
+Solution: Remove or rename the variables.
+Files: src/charset.c, src/digraph.c, src/edit.c, src/eval.c, src/fold.c,
+ src/getchar.c, src/message.c, src/misc2.c, src/move.c,
+ src/netbeans.c, src/option.c, src/os_unix.c, src/screen.c,
+ src/search.c, src/spell.c, src/syntax.c, src/tag.c, src/window.c
+
+
+*** ../vim-7.3.399/src/charset.c 2010-08-15 21:57:25.000000000 +0200
+--- src/charset.c 2012-01-10 21:55:50.000000000 +0100
+***************
+*** 463,503 ****
+ if (enc_utf8)
+ {
+ int c = utf_ptr2char(STR_PTR(i));
+! int ol = utf_ptr2len(STR_PTR(i));
+ int lc = utf_tolower(c);
+
+ /* Only replace the character when it is not an invalid
+ * sequence (ASCII character or more than one byte) and
+ * utf_tolower() doesn't return the original character. */
+! if ((c < 0x80 || ol > 1) && c != lc)
+ {
+! int nl = utf_char2len(lc);
+
+ /* If the byte length changes need to shift the following
+ * characters forward or backward. */
+! if (ol != nl)
+ {
+! if (nl > ol)
+ {
+! if (buf == NULL ? ga_grow(&ga, nl - ol + 1) == FAIL
+! : len + nl - ol >= buflen)
+ {
+ /* out of memory, keep old char */
+ lc = c;
+! nl = ol;
+ }
+ }
+! if (ol != nl)
+ {
+ if (buf == NULL)
+ {
+! STRMOVE(GA_PTR(i) + nl, GA_PTR(i) + ol);
+! ga.ga_len += nl - ol;
+ }
+ else
+ {
+! STRMOVE(buf + i + nl, buf + i + ol);
+! len += nl - ol;
+ }
+ }
+ }
+--- 463,504 ----
+ if (enc_utf8)
+ {
+ int c = utf_ptr2char(STR_PTR(i));
+! int olen = utf_ptr2len(STR_PTR(i));
+ int lc = utf_tolower(c);
+
+ /* Only replace the character when it is not an invalid
+ * sequence (ASCII character or more than one byte) and
+ * utf_tolower() doesn't return the original character. */
+! if ((c < 0x80 || olen > 1) && c != lc)
+ {
+! int nlen = utf_char2len(lc);
+
+ /* If the byte length changes need to shift the following
+ * characters forward or backward. */
+! if (olen != nlen)
+ {
+! if (nlen > olen)
+ {
+! if (buf == NULL
+! ? ga_grow(&ga, nlen - olen + 1) == FAIL
+! : len + nlen - olen >= buflen)
+ {
+ /* out of memory, keep old char */
+ lc = c;
+! nlen = olen;
+ }
+ }
+! if (olen != nlen)
+ {
+ if (buf == NULL)
+ {
+! STRMOVE(GA_PTR(i) + nlen, GA_PTR(i) + olen);
+! ga.ga_len += nlen - olen;
+ }
+ else
+ {
+! STRMOVE(buf + i + nlen, buf + i + olen);
+! len += nlen - olen;
+ }
+ }
+ }
+*** ../vim-7.3.399/src/digraph.c 2010-08-15 21:57:28.000000000 +0200
+--- src/digraph.c 2012-01-10 21:57:16.000000000 +0100
+***************
+*** 2080,2092 ****
+ /*
+ * Lookup the pair "char1", "char2" in the digraph tables.
+ * If no match, return "char2".
+! * If "meta" is TRUE and "char1" is a space, return "char2" | 0x80.
+ */
+ static int
+! getexactdigraph(char1, char2, meta)
+ int char1;
+ int char2;
+! int meta;
+ {
+ int i;
+ int retval = 0;
+--- 2080,2092 ----
+ /*
+ * Lookup the pair "char1", "char2" in the digraph tables.
+ * If no match, return "char2".
+! * If "meta_char" is TRUE and "char1" is a space, return "char2" | 0x80.
+ */
+ static int
+! getexactdigraph(char1, char2, meta_char)
+ int char1;
+ int char2;
+! int meta_char;
+ {
+ int i;
+ int retval = 0;
+***************
+*** 2159,2165 ****
+
+ if (retval == 0) /* digraph deleted or not found */
+ {
+! if (char1 == ' ' && meta) /* <space> <char> --> meta-char */
+ return (char2 | 0x80);
+ return char2;
+ }
+--- 2159,2165 ----
+
+ if (retval == 0) /* digraph deleted or not found */
+ {
+! if (char1 == ' ' && meta_char) /* <space> <char> --> meta-char */
+ return (char2 | 0x80);
+ return char2;
+ }
+***************
+*** 2171,2186 ****
+ * Allow for both char1-char2 and char2-char1
+ */
+ int
+! getdigraph(char1, char2, meta)
+ int char1;
+ int char2;
+! int meta;
+ {
+ int retval;
+
+! if (((retval = getexactdigraph(char1, char2, meta)) == char2)
+ && (char1 != char2)
+! && ((retval = getexactdigraph(char2, char1, meta)) == char1))
+ return char2;
+ return retval;
+ }
+--- 2171,2186 ----
+ * Allow for both char1-char2 and char2-char1
+ */
+ int
+! getdigraph(char1, char2, meta_char)
+ int char1;
+ int char2;
+! int meta_char;
+ {
+ int retval;
+
+! if (((retval = getexactdigraph(char1, char2, meta_char)) == char2)
+ && (char1 != char2)
+! && ((retval = getexactdigraph(char2, char1, meta_char)) == char1))
+ return char2;
+ return retval;
+ }
+*** ../vim-7.3.399/src/edit.c 2011-12-23 13:14:58.000000000 +0100
+--- src/edit.c 2012-01-10 21:58:28.000000000 +0100
+***************
+*** 4003,4026 ****
+ ins_compl_add_dict(dict)
+ dict_T *dict;
+ {
+! dictitem_T *refresh;
+! dictitem_T *words;
+
+ /* Check for optional "refresh" item. */
+ compl_opt_refresh_always = FALSE;
+! refresh = dict_find(dict, (char_u *)"refresh", 7);
+! if (refresh != NULL && refresh->di_tv.v_type == VAR_STRING)
+ {
+! char_u *v = refresh->di_tv.vval.v_string;
+
+ if (v != NULL && STRCMP(v, (char_u *)"always") == 0)
+ compl_opt_refresh_always = TRUE;
+ }
+
+ /* Add completions from a "words" list. */
+! words = dict_find(dict, (char_u *)"words", 5);
+! if (words != NULL && words->di_tv.v_type == VAR_LIST)
+! ins_compl_add_list(words->di_tv.vval.v_list);
+ }
+
+ /*
+--- 4003,4026 ----
+ ins_compl_add_dict(dict)
+ dict_T *dict;
+ {
+! dictitem_T *di_refresh;
+! dictitem_T *di_words;
+
+ /* Check for optional "refresh" item. */
+ compl_opt_refresh_always = FALSE;
+! di_refresh = dict_find(dict, (char_u *)"refresh", 7);
+! if (di_refresh != NULL && di_refresh->di_tv.v_type == VAR_STRING)
+ {
+! char_u *v = di_refresh->di_tv.vval.v_string;
+
+ if (v != NULL && STRCMP(v, (char_u *)"always") == 0)
+ compl_opt_refresh_always = TRUE;
+ }
+
+ /* Add completions from a "words" list. */
+! di_words = dict_find(dict, (char_u *)"words", 5);
+! if (di_words != NULL && di_words->di_tv.v_type == VAR_LIST)
+! ins_compl_add_list(di_words->di_tv.vval.v_list);
+ }
+
+ /*
+*** ../vim-7.3.399/src/eval.c 2012-01-04 14:35:31.000000000 +0100
+--- src/eval.c 2012-01-10 22:00:50.000000000 +0100
+***************
+*** 6573,6587 ****
+
+ /*
+ * Join list "l" into a string in "*gap", using separator "sep".
+! * When "echo" is TRUE use String as echoed, otherwise as inside a List.
+ * Return FAIL or OK.
+ */
+ static int
+! list_join(gap, l, sep, echo, copyID)
+ garray_T *gap;
+ list_T *l;
+ char_u *sep;
+! int echo;
+ int copyID;
+ {
+ int first = TRUE;
+--- 6573,6587 ----
+
+ /*
+ * Join list "l" into a string in "*gap", using separator "sep".
+! * When "echo_style" is TRUE use String as echoed, otherwise as inside a List.
+ * Return FAIL or OK.
+ */
+ static int
+! list_join(gap, l, sep, echo_style, copyID)
+ garray_T *gap;
+ list_T *l;
+ char_u *sep;
+! int echo_style;
+ int copyID;
+ {
+ int first = TRUE;
+***************
+*** 6597,6603 ****
+ else
+ ga_concat(gap, sep);
+
+! if (echo)
+ s = echo_string(&item->li_tv, &tofree, numbuf, copyID);
+ else
+ s = tv2string(&item->li_tv, &tofree, numbuf, copyID);
+--- 6597,6603 ----
+ else
+ ga_concat(gap, sep);
+
+! if (echo_style)
+ s = echo_string(&item->li_tv, &tofree, numbuf, copyID);
+ else
+ s = tv2string(&item->li_tv, &tofree, numbuf, copyID);
+***************
+*** 17893,17899 ****
+ typval_T *argvars;
+ typval_T *rettv;
+ {
+! char_u *instr;
+ char_u *fromstr;
+ char_u *tostr;
+ char_u *p;
+--- 17893,17899 ----
+ typval_T *argvars;
+ typval_T *rettv;
+ {
+! char_u *in_str;
+ char_u *fromstr;
+ char_u *tostr;
+ char_u *p;
+***************
+*** 17910,17916 ****
+ char_u buf2[NUMBUFLEN];
+ garray_T ga;
+
+! instr = get_tv_string(&argvars[0]);
+ fromstr = get_tv_string_buf_chk(&argvars[1], buf);
+ tostr = get_tv_string_buf_chk(&argvars[2], buf2);
+
+--- 17910,17916 ----
+ char_u buf2[NUMBUFLEN];
+ garray_T ga;
+
+! in_str = get_tv_string(&argvars[0]);
+ fromstr = get_tv_string_buf_chk(&argvars[1], buf);
+ tostr = get_tv_string_buf_chk(&argvars[2], buf2);
+
+***************
+*** 17936,17954 ****
+ }
+
+ /* fromstr and tostr have to contain the same number of chars */
+! while (*instr != NUL)
+ {
+ #ifdef FEAT_MBYTE
+ if (has_mbyte)
+ {
+! inlen = (*mb_ptr2len)(instr);
+! cpstr = instr;
+ cplen = inlen;
+ idx = 0;
+ for (p = fromstr; *p != NUL; p += fromlen)
+ {
+ fromlen = (*mb_ptr2len)(p);
+! if (fromlen == inlen && STRNCMP(instr, p, inlen) == 0)
+ {
+ for (p = tostr; *p != NUL; p += tolen)
+ {
+--- 17936,17954 ----
+ }
+
+ /* fromstr and tostr have to contain the same number of chars */
+! while (*in_str != NUL)
+ {
+ #ifdef FEAT_MBYTE
+ if (has_mbyte)
+ {
+! inlen = (*mb_ptr2len)(in_str);
+! cpstr = in_str;
+ cplen = inlen;
+ idx = 0;
+ for (p = fromstr; *p != NUL; p += fromlen)
+ {
+ fromlen = (*mb_ptr2len)(p);
+! if (fromlen == inlen && STRNCMP(in_str, p, inlen) == 0)
+ {
+ for (p = tostr; *p != NUL; p += tolen)
+ {
+***************
+*** 17967,17977 ****
+ ++idx;
+ }
+
+! if (first && cpstr == instr)
+ {
+ /* Check that fromstr and tostr have the same number of
+ * (multi-byte) characters. Done only once when a character
+! * of instr doesn't appear in fromstr. */
+ first = FALSE;
+ for (p = tostr; *p != NUL; p += tolen)
+ {
+--- 17967,17977 ----
+ ++idx;
+ }
+
+! if (first && cpstr == in_str)
+ {
+ /* Check that fromstr and tostr have the same number of
+ * (multi-byte) characters. Done only once when a character
+! * of in_str doesn't appear in fromstr. */
+ first = FALSE;
+ for (p = tostr; *p != NUL; p += tolen)
+ {
+***************
+*** 17986,18003 ****
+ mch_memmove((char *)ga.ga_data + ga.ga_len, cpstr, (size_t)cplen);
+ ga.ga_len += cplen;
+
+! instr += inlen;
+ }
+ else
+ #endif
+ {
+ /* When not using multi-byte chars we can do it faster. */
+! p = vim_strchr(fromstr, *instr);
+ if (p != NULL)
+ ga_append(&ga, tostr[p - fromstr]);
+ else
+! ga_append(&ga, *instr);
+! ++instr;
+ }
+ }
+
+--- 17986,18003 ----
+ mch_memmove((char *)ga.ga_data + ga.ga_len, cpstr, (size_t)cplen);
+ ga.ga_len += cplen;
+
+! in_str += inlen;
+ }
+ else
+ #endif
+ {
+ /* When not using multi-byte chars we can do it faster. */
+! p = vim_strchr(fromstr, *in_str);
+ if (p != NULL)
+ ga_append(&ga, tostr[p - fromstr]);
+ else
+! ga_append(&ga, *in_str);
+! ++in_str;
+ }
+ }
+
+*** ../vim-7.3.399/src/fold.c 2011-08-26 16:12:55.000000000 +0200
+--- src/fold.c 2012-01-10 22:01:26.000000000 +0100
+***************
+*** 1033,1042 ****
+ * Init the fold info in a new window.
+ */
+ void
+! foldInitWin(newwin)
+! win_T *newwin;
+ {
+! ga_init2(&newwin->w_folds, (int)sizeof(fold_T), 10);
+ }
+
+ /* find_wl_entry() {{{2 */
+--- 1033,1042 ----
+ * Init the fold info in a new window.
+ */
+ void
+! foldInitWin(new_win)
+! win_T *new_win;
+ {
+! ga_init2(&new_win->w_folds, (int)sizeof(fold_T), 10);
+ }
+
+ /* find_wl_entry() {{{2 */
+*** ../vim-7.3.399/src/getchar.c 2011-12-23 14:54:01.000000000 +0100
+--- src/getchar.c 2012-01-10 22:02:30.000000000 +0100
+***************
+*** 418,429 ****
+
+ /*
+ * Remove the contents of the stuff buffer and the mapped characters in the
+! * typeahead buffer (used in case of an error). If 'typeahead' is true,
+ * flush all typeahead characters (used when interrupted by a CTRL-C).
+ */
+ void
+! flush_buffers(typeahead)
+! int typeahead;
+ {
+ init_typebuf();
+
+--- 418,429 ----
+
+ /*
+ * Remove the contents of the stuff buffer and the mapped characters in the
+! * typeahead buffer (used in case of an error). If "flush_typeahead" is true,
+ * flush all typeahead characters (used when interrupted by a CTRL-C).
+ */
+ void
+! flush_buffers(flush_typeahead)
+! int flush_typeahead;
+ {
+ init_typebuf();
+
+***************
+*** 431,437 ****
+ while (read_stuff(TRUE) != NUL)
+ ;
+
+! if (typeahead) /* remove all typeahead */
+ {
+ /*
+ * We have to get all characters, because we may delete the first part
+--- 431,437 ----
+ while (read_stuff(TRUE) != NUL)
+ ;
+
+! if (flush_typeahead) /* remove all typeahead */
+ {
+ /*
+ * We have to get all characters, because we may delete the first part
+*** ../vim-7.3.399/src/message.c 2011-12-30 14:14:16.000000000 +0100
+--- src/message.c 2012-01-10 22:03:56.000000000 +0100
+***************
+*** 2487,2493 ****
+ #ifdef FEAT_CON_DIALOG
+ int retval = FALSE;
+ #endif
+! int scroll;
+ msgchunk_T *mp_last = NULL;
+ msgchunk_T *mp;
+ int i;
+--- 2487,2493 ----
+ #ifdef FEAT_CON_DIALOG
+ int retval = FALSE;
+ #endif
+! int toscroll;
+ msgchunk_T *mp_last = NULL;
+ msgchunk_T *mp;
+ int i;
+***************
+*** 2538,2586 ****
+ }
+ #endif
+
+! scroll = 0;
+ switch (c)
+ {
+ case BS: /* scroll one line back */
+ case K_BS:
+ case 'k':
+ case K_UP:
+! scroll = -1;
+ break;
+
+ case CAR: /* one extra line */
+ case NL:
+ case 'j':
+ case K_DOWN:
+! scroll = 1;
+ break;
+
+ case 'u': /* Up half a page */
+! scroll = -(Rows / 2);
+ break;
+
+ case 'd': /* Down half a page */
+! scroll = Rows / 2;
+ break;
+
+ case 'b': /* one page back */
+ case K_PAGEUP:
+! scroll = -(Rows - 1);
+ break;
+
+ case ' ': /* one extra page */
+ case 'f':
+ case K_PAGEDOWN:
+ case K_LEFTMOUSE:
+! scroll = Rows - 1;
+ break;
+
+ case 'g': /* all the way back to the start */
+! scroll = -999999;
+ break;
+
+ case 'G': /* all the way to the end */
+! scroll = 999999;
+ lines_left = 999999;
+ break;
+
+--- 2538,2586 ----
+ }
+ #endif
+
+! toscroll = 0;
+ switch (c)
+ {
+ case BS: /* scroll one line back */
+ case K_BS:
+ case 'k':
+ case K_UP:
+! toscroll = -1;
+ break;
+
+ case CAR: /* one extra line */
+ case NL:
+ case 'j':
+ case K_DOWN:
+! toscroll = 1;
+ break;
+
+ case 'u': /* Up half a page */
+! toscroll = -(Rows / 2);
+ break;
+
+ case 'd': /* Down half a page */
+! toscroll = Rows / 2;
+ break;
+
+ case 'b': /* one page back */
+ case K_PAGEUP:
+! toscroll = -(Rows - 1);
+ break;
+
+ case ' ': /* one extra page */
+ case 'f':
+ case K_PAGEDOWN:
+ case K_LEFTMOUSE:
+! toscroll = Rows - 1;
+ break;
+
+ case 'g': /* all the way back to the start */
+! toscroll = -999999;
+ break;
+
+ case 'G': /* all the way to the end */
+! toscroll = 999999;
+ lines_left = 999999;
+ break;
+
+***************
+*** 2633,2641 ****
+ continue;
+ }
+
+! if (scroll != 0)
+ {
+! if (scroll < 0)
+ {
+ /* go to start of last line */
+ if (mp_last == NULL)
+--- 2633,2641 ----
+ continue;
+ }
+
+! if (toscroll != 0)
+ {
+! if (toscroll < 0)
+ {
+ /* go to start of last line */
+ if (mp_last == NULL)
+***************
+*** 2653,2659 ****
+ if (mp != NULL && mp->sb_prev != NULL)
+ {
+ /* Find line to be displayed at top. */
+! for (i = 0; i > scroll; --i)
+ {
+ if (mp == NULL || mp->sb_prev == NULL)
+ break;
+--- 2653,2659 ----
+ if (mp != NULL && mp->sb_prev != NULL)
+ {
+ /* Find line to be displayed at top. */
+! for (i = 0; i > toscroll; --i)
+ {
+ if (mp == NULL || mp->sb_prev == NULL)
+ break;
+***************
+*** 2664,2670 ****
+ mp_last = msg_sb_start(mp_last->sb_prev);
+ }
+
+! if (scroll == -1 && screen_ins_lines(0, 0, 1,
+ (int)Rows, NULL) == OK)
+ {
+ /* display line at top */
+--- 2664,2670 ----
+ mp_last = msg_sb_start(mp_last->sb_prev);
+ }
+
+! if (toscroll == -1 && screen_ins_lines(0, 0, 1,
+ (int)Rows, NULL) == OK)
+ {
+ /* display line at top */
+***************
+*** 2680,2692 ****
+ ++msg_scrolled;
+ }
+ }
+! scroll = 0;
+ }
+ }
+ else
+ {
+ /* First display any text that we scrolled back. */
+! while (scroll > 0 && mp_last != NULL)
+ {
+ /* scroll up, display line at bottom */
+ msg_scroll_up();
+--- 2680,2692 ----
+ ++msg_scrolled;
+ }
+ }
+! toscroll = 0;
+ }
+ }
+ else
+ {
+ /* First display any text that we scrolled back. */
+! while (toscroll > 0 && mp_last != NULL)
+ {
+ /* scroll up, display line at bottom */
+ msg_scroll_up();
+***************
+*** 2694,2704 ****
+ screen_fill((int)Rows - 2, (int)Rows - 1, 0,
+ (int)Columns, ' ', ' ', 0);
+ mp_last = disp_sb_line((int)Rows - 2, mp_last);
+! --scroll;
+ }
+ }
+
+! if (scroll <= 0)
+ {
+ /* displayed the requested text, more prompt again */
+ screen_fill((int)Rows - 1, (int)Rows, 0,
+--- 2694,2704 ----
+ screen_fill((int)Rows - 2, (int)Rows - 1, 0,
+ (int)Columns, ' ', ' ', 0);
+ mp_last = disp_sb_line((int)Rows - 2, mp_last);
+! --toscroll;
+ }
+ }
+
+! if (toscroll <= 0)
+ {
+ /* displayed the requested text, more prompt again */
+ screen_fill((int)Rows - 1, (int)Rows, 0,
+***************
+*** 2708,2714 ****
+ }
+
+ /* display more text, return to caller */
+! lines_left = scroll;
+ }
+
+ break;
+--- 2708,2714 ----
+ }
+
+ /* display more text, return to caller */
+! lines_left = toscroll;
+ }
+
+ break;
+*** ../vim-7.3.399/src/misc2.c 2012-01-10 16:28:41.000000000 +0100
+--- src/misc2.c 2012-01-10 22:04:25.000000000 +0100
+***************
+*** 1559,1565 ****
+ if (enc_utf8)
+ {
+ int c, uc;
+! int nl;
+ char_u *s;
+
+ c = utf_ptr2char(p);
+--- 1559,1565 ----
+ if (enc_utf8)
+ {
+ int c, uc;
+! int newl;
+ char_u *s;
+
+ c = utf_ptr2char(p);
+***************
+*** 1568,1588 ****
+ /* Reallocate string when byte count changes. This is rare,
+ * thus it's OK to do another malloc()/free(). */
+ l = utf_ptr2len(p);
+! nl = utf_char2len(uc);
+! if (nl != l)
+ {
+! s = alloc((unsigned)STRLEN(res) + 1 + nl - l);
+ if (s == NULL)
+ break;
+ mch_memmove(s, res, p - res);
+! STRCPY(s + (p - res) + nl, p + l);
+ p = s + (p - res);
+ vim_free(res);
+ res = s;
+ }
+
+ utf_char2bytes(uc, p);
+! p += nl;
+ }
+ else if (has_mbyte && (l = (*mb_ptr2len)(p)) > 1)
+ p += l; /* skip multi-byte character */
+--- 1568,1588 ----
+ /* Reallocate string when byte count changes. This is rare,
+ * thus it's OK to do another malloc()/free(). */
+ l = utf_ptr2len(p);
+! newl = utf_char2len(uc);
+! if (newl != l)
+ {
+! s = alloc((unsigned)STRLEN(res) + 1 + newl - l);
+ if (s == NULL)
+ break;
+ mch_memmove(s, res, p - res);
+! STRCPY(s + (p - res) + newl, p + l);
+ p = s + (p - res);
+ vim_free(res);
+ res = s;
+ }
+
+ utf_char2bytes(uc, p);
+! p += newl;
+ }
+ else if (has_mbyte && (l = (*mb_ptr2len)(p)) > 1)
+ p += l; /* skip multi-byte character */
+*** ../vim-7.3.399/src/move.c 2011-02-01 18:01:06.000000000 +0100
+--- src/move.c 2012-01-10 22:05:22.000000000 +0100
+***************
+*** 926,933 ****
+ * Also updates curwin->w_leftcol.
+ */
+ void
+! curs_columns(scroll)
+! int scroll; /* when TRUE, may scroll horizontally */
+ {
+ int diff;
+ int extra; /* offset for first screen line */
+--- 926,933 ----
+ * Also updates curwin->w_leftcol.
+ */
+ void
+! curs_columns(may_scroll)
+! int may_scroll; /* when TRUE, may scroll horizontally */
+ {
+ int diff;
+ int extra; /* offset for first screen line */
+***************
+*** 1014,1020 ****
+ /* No line wrapping: compute curwin->w_leftcol if scrolling is on and line
+ * is not folded.
+ * If scrolling is off, curwin->w_leftcol is assumed to be 0 */
+! else if (scroll
+ #ifdef FEAT_FOLDING
+ && !curwin->w_cline_folded
+ #endif
+--- 1014,1020 ----
+ /* No line wrapping: compute curwin->w_leftcol if scrolling is on and line
+ * is not folded.
+ * If scrolling is off, curwin->w_leftcol is assumed to be 0 */
+! else if (may_scroll
+ #ifdef FEAT_FOLDING
+ && !curwin->w_cline_folded
+ #endif
+*** ../vim-7.3.399/src/netbeans.c 2011-10-20 21:58:20.000000000 +0200
+--- src/netbeans.c 2012-01-10 22:16:26.000000000 +0100
+***************
+*** 1395,1401 ****
+ int cmdno,
+ char_u *args) /* points to space before arguments or NUL */
+ {
+! int doupdate = 0;
+ long off = 0;
+ nbbuf_T *buf = nb_get_buf(bufno);
+ static int skip = 0;
+--- 1395,1401 ----
+ int cmdno,
+ char_u *args) /* points to space before arguments or NUL */
+ {
+! int do_update = 0;
+ long off = 0;
+ nbbuf_T *buf = nb_get_buf(bufno);
+ static int skip = 0;
+***************
+*** 1600,1606 ****
+ last.lnum, last.col));
+ del_from_lnum = first.lnum;
+ del_to_lnum = last.lnum;
+! doupdate = 1;
+
+ /* Get the position of the first byte after the deleted
+ * section. "next" is NULL when deleting to the end of the
+--- 1600,1606 ----
+ last.lnum, last.col));
+ del_from_lnum = first.lnum;
+ del_to_lnum = last.lnum;
+! do_update = 1;
+
+ /* Get the position of the first byte after the deleted
+ * section. "next" is NULL when deleting to the end of the
+***************
+*** 1777,1783 ****
+ lnum = lnum_start;
+
+ /* Loop over the "\n" separated lines of the argument. */
+! doupdate = 1;
+ while (*args != NUL)
+ {
+ nl = vim_strchr(args, '\n');
+--- 1777,1783 ----
+ lnum = lnum_start;
+
+ /* Loop over the "\n" separated lines of the argument. */
+! do_update = 1;
+ while (*args != NUL)
+ {
+ nl = vim_strchr(args, '\n');
+***************
+*** 1992,1998 ****
+ EMSG("E640: invalid buffer identifier in initDone");
+ return FAIL;
+ }
+! doupdate = 1;
+ buf->initDone = TRUE;
+ nb_set_curbuf(buf->bufp);
+ #if defined(FEAT_AUTOCMD)
+--- 1992,1998 ----
+ EMSG("E640: invalid buffer identifier in initDone");
+ return FAIL;
+ }
+! do_update = 1;
+ buf->initDone = TRUE;
+ nb_set_curbuf(buf->bufp);
+ #if defined(FEAT_AUTOCMD)
+***************
+*** 2081,2087 ****
+ ECMD_HIDE + ECMD_OLDBUF, curwin);
+ buf->bufp = curbuf;
+ buf->initDone = TRUE;
+! doupdate = 1;
+ #if defined(FEAT_TITLE)
+ maketitle();
+ #endif
+--- 2081,2087 ----
+ ECMD_HIDE + ECMD_OLDBUF, curwin);
+ buf->bufp = curbuf;
+ buf->initDone = TRUE;
+! do_update = 1;
+ #if defined(FEAT_TITLE)
+ maketitle();
+ #endif
+***************
+*** 2109,2115 ****
+ exarg.forceit = FALSE;
+ dosetvisible = TRUE;
+ goto_buffer(&exarg, DOBUF_FIRST, FORWARD, buf->bufp->b_fnum);
+! doupdate = 1;
+ dosetvisible = FALSE;
+
+ #ifdef FEAT_GUI
+--- 2109,2115 ----
+ exarg.forceit = FALSE;
+ dosetvisible = TRUE;
+ goto_buffer(&exarg, DOBUF_FIRST, FORWARD, buf->bufp->b_fnum);
+! do_update = 1;
+ dosetvisible = FALSE;
+
+ #ifdef FEAT_GUI
+***************
+*** 2309,2315 ****
+ buf->bufp->b_fnum, TRUE);
+ buf->bufp = NULL;
+ buf->initDone = FALSE;
+! doupdate = 1;
+ /* =====================================================================*/
+ }
+ else if (streq((char *)cmd, "setStyle")) /* obsolete... */
+--- 2309,2315 ----
+ buf->bufp->b_fnum, TRUE);
+ buf->bufp = NULL;
+ buf->initDone = FALSE;
+! do_update = 1;
+ /* =====================================================================*/
+ }
+ else if (streq((char *)cmd, "setStyle")) /* obsolete... */
+***************
+*** 2400,2406 ****
+ return FAIL;
+ }
+
+! doupdate = 1;
+
+ cp = (char *)args;
+ serNum = strtol(cp, &cp, 10);
+--- 2400,2406 ----
+ return FAIL;
+ }
+
+! do_update = 1;
+
+ cp = (char *)args;
+ serNum = strtol(cp, &cp, 10);
+***************
+*** 2448,2454 ****
+ nbdebug((" invalid buffer identifier in removeAnno\n"));
+ return FAIL;
+ }
+! doupdate = 1;
+ cp = (char *)args;
+ serNum = strtol(cp, &cp, 10);
+ args = (char_u *)cp;
+--- 2448,2454 ----
+ nbdebug((" invalid buffer identifier in removeAnno\n"));
+ return FAIL;
+ }
+! do_update = 1;
+ cp = (char *)args;
+ serNum = strtol(cp, &cp, 10);
+ args = (char_u *)cp;
+***************
+*** 2493,2499 ****
+ len = strtol(cp, NULL, 10);
+ args = (char_u *)cp;
+ pos = off2pos(buf->bufp, off);
+! doupdate = 1;
+ if (!pos)
+ nbdebug((" no such start pos in %s, %ld\n", cmd, off));
+ else
+--- 2493,2499 ----
+ len = strtol(cp, NULL, 10);
+ args = (char_u *)cp;
+ pos = off2pos(buf->bufp, off);
+! do_update = 1;
+ if (!pos)
+ nbdebug((" no such start pos in %s, %ld\n", cmd, off));
+ else
+***************
+*** 2555,2561 ****
+ inAtomic = 0;
+ if (needupdate)
+ {
+! doupdate = 1;
+ needupdate = 0;
+ }
+ /* =====================================================================*/
+--- 2555,2561 ----
+ inAtomic = 0;
+ if (needupdate)
+ {
+! do_update = 1;
+ needupdate = 0;
+ }
+ /* =====================================================================*/
+***************
+*** 2636,2653 ****
+ * Unrecognized command is ignored.
+ */
+ }
+! if (inAtomic && doupdate)
+ {
+ needupdate = 1;
+! doupdate = 0;
+ }
+
+ /*
+ * Is this needed? I moved the netbeans_Xt_connect() later during startup
+ * and it may no longer be necessary. If its not needed then needupdate
+! * and doupdate can also be removed.
+ */
+! if (buf != NULL && buf->initDone && doupdate)
+ {
+ update_screen(NOT_VALID);
+ setcursor();
+--- 2636,2653 ----
+ * Unrecognized command is ignored.
+ */
+ }
+! if (inAtomic && do_update)
+ {
+ needupdate = 1;
+! do_update = 0;
+ }
+
+ /*
+ * Is this needed? I moved the netbeans_Xt_connect() later during startup
+ * and it may no longer be necessary. If its not needed then needupdate
+! * and do_update can also be removed.
+ */
+! if (buf != NULL && buf->initDone && do_update)
+ {
+ update_screen(NOT_VALID);
+ setcursor();
+*** ../vim-7.3.399/src/option.c 2012-01-04 19:34:32.000000000 +0100
+--- src/option.c 2012-01-10 22:06:03.000000000 +0100
+***************
+*** 8584,8591 ****
+ long_u flags;
+ {
+ /* Careful: P_RCLR and P_RALL are a combination of other P_ flags */
+! int clear = (flags & P_RCLR) == P_RCLR;
+! int all = ((flags & P_RALL) == P_RALL || clear);
+
+ #ifdef FEAT_WINDOWS
+ if ((flags & P_RSTAT) || all) /* mark all status lines dirty */
+--- 8584,8591 ----
+ long_u flags;
+ {
+ /* Careful: P_RCLR and P_RALL are a combination of other P_ flags */
+! int doclear = (flags & P_RCLR) == P_RCLR;
+! int all = ((flags & P_RALL) == P_RALL || doclear);
+
+ #ifdef FEAT_WINDOWS
+ if ((flags & P_RSTAT) || all) /* mark all status lines dirty */
+***************
+*** 8596,8602 ****
+ changed_window_setting();
+ if (flags & P_RBUF)
+ redraw_curbuf_later(NOT_VALID);
+! if (clear)
+ redraw_all_later(CLEAR);
+ else if (all)
+ redraw_all_later(NOT_VALID);
+--- 8596,8602 ----
+ changed_window_setting();
+ if (flags & P_RBUF)
+ redraw_curbuf_later(NOT_VALID);
+! if (doclear)
+ redraw_all_later(CLEAR);
+ else if (all)
+ redraw_all_later(NOT_VALID);
+*** ../vim-7.3.399/src/os_unix.c 2011-10-20 21:09:25.000000000 +0200
+--- src/os_unix.c 2012-01-10 21:48:49.000000000 +0100
+***************
+*** 3884,3890 ****
+ char_u *p_shcf_copy = NULL;
+ int i;
+ char_u *p;
+- char_u *s;
+ int inquote;
+ int pty_master_fd = -1; /* for pty's */
+ # ifdef FEAT_GUI
+--- 3884,3889 ----
+***************
+*** 3963,3968 ****
+--- 3962,3969 ----
+ }
+ if (cmd != NULL)
+ {
++ char_u *s;
++
+ if (extra_shell_arg != NULL)
+ argv[argc++] = (char *)extra_shell_arg;
+
+***************
+*** 4325,4331 ****
+ linenr_T lnum = curbuf->b_op_start.lnum;
+ int written = 0;
+ char_u *lp = ml_get(lnum);
+- char_u *s;
+ size_t l;
+
+ close(fromshell_fd);
+--- 4326,4331 ----
+***************
+*** 4339,4345 ****
+ len = write(toshell_fd, "", (size_t)1);
+ else
+ {
+! s = vim_strchr(lp + written, NL);
+ len = write(toshell_fd, (char *)lp + written,
+ s == NULL ? l
+ : (size_t)(s - (lp + written)));
+--- 4339,4346 ----
+ len = write(toshell_fd, "", (size_t)1);
+ else
+ {
+! char_u *s = vim_strchr(lp + written, NL);
+!
+ len = write(toshell_fd, (char *)lp + written,
+ s == NULL ? l
+ : (size_t)(s - (lp + written)));
+*** ../vim-7.3.399/src/screen.c 2012-01-10 12:42:05.000000000 +0100
+--- src/screen.c 2012-01-10 22:06:51.000000000 +0100
+***************
+*** 7849,7863 ****
+
+ /*
+ * screen_valid - allocate screen buffers if size changed
+! * If "clear" is TRUE: clear screen if it has been resized.
+ * Returns TRUE if there is a valid screen to write to.
+ * Returns FALSE when starting up and screen not initialized yet.
+ */
+ int
+! screen_valid(clear)
+! int clear;
+ {
+! screenalloc(clear); /* allocate screen buffers if size changed */
+ return (ScreenLines != NULL);
+ }
+
+--- 7849,7863 ----
+
+ /*
+ * screen_valid - allocate screen buffers if size changed
+! * If "doclear" is TRUE: clear screen if it has been resized.
+ * Returns TRUE if there is a valid screen to write to.
+ * Returns FALSE when starting up and screen not initialized yet.
+ */
+ int
+! screen_valid(doclear)
+! int doclear;
+ {
+! screenalloc(doclear); /* allocate screen buffers if size changed */
+ return (ScreenLines != NULL);
+ }
+
+***************
+*** 7872,7879 ****
+ * final size of the shell is needed.
+ */
+ void
+! screenalloc(clear)
+! int clear;
+ {
+ int new_row, old_row;
+ #ifdef FEAT_GUI
+--- 7872,7879 ----
+ * final size of the shell is needed.
+ */
+ void
+! screenalloc(doclear)
+! int doclear;
+ {
+ int new_row, old_row;
+ #ifdef FEAT_GUI
+***************
+*** 8069,8075 ****
+ * (used when resizing the window at the "--more--" prompt or when
+ * executing an external command, for the GUI).
+ */
+! if (!clear)
+ {
+ (void)vim_memset(new_ScreenLines + new_row * Columns,
+ ' ', (size_t)Columns * sizeof(schar_T));
+--- 8069,8075 ----
+ * (used when resizing the window at the "--more--" prompt or when
+ * executing an external command, for the GUI).
+ */
+! if (!doclear)
+ {
+ (void)vim_memset(new_ScreenLines + new_row * Columns,
+ ' ', (size_t)Columns * sizeof(schar_T));
+***************
+*** 8159,8165 ****
+ screen_Columns = Columns;
+
+ must_redraw = CLEAR; /* need to clear the screen later */
+! if (clear)
+ screenclear2();
+
+ #ifdef FEAT_GUI
+--- 8159,8165 ----
+ screen_Columns = Columns;
+
+ must_redraw = CLEAR; /* need to clear the screen later */
+! if (doclear)
+ screenclear2();
+
+ #ifdef FEAT_GUI
+*** ../vim-7.3.399/src/search.c 2011-10-04 17:00:13.000000000 +0200
+--- src/search.c 2012-01-10 22:07:16.000000000 +0100
+***************
+*** 2402,2425 ****
+ {
+ if (vim_strchr(p, ';') != NULL) /* there may be comments */
+ {
+! int instr = FALSE; /* inside of string */
+
+ p = line; /* scan from start */
+ while ((p = vim_strpbrk(p, (char_u *)"\";")) != NULL)
+ {
+ if (*p == '"')
+ {
+! if (instr)
+ {
+ if (*(p - 1) != '\\') /* skip escaped quote */
+! instr = FALSE;
+ }
+ else if (p == line || ((p - line) >= 2
+ /* skip #\" form */
+ && *(p - 1) != '\\' && *(p - 2) != '#'))
+! instr = TRUE;
+ }
+! else if (!instr && ((p - line) < 2
+ || (*(p - 1) != '\\' && *(p - 2) != '#')))
+ break; /* found! */
+ ++p;
+--- 2402,2425 ----
+ {
+ if (vim_strchr(p, ';') != NULL) /* there may be comments */
+ {
+! int in_str = FALSE; /* inside of string */
+
+ p = line; /* scan from start */
+ while ((p = vim_strpbrk(p, (char_u *)"\";")) != NULL)
+ {
+ if (*p == '"')
+ {
+! if (in_str)
+ {
+ if (*(p - 1) != '\\') /* skip escaped quote */
+! in_str = FALSE;
+ }
+ else if (p == line || ((p - line) >= 2
+ /* skip #\" form */
+ && *(p - 1) != '\\' && *(p - 2) != '#'))
+! in_str = TRUE;
+ }
+! else if (!in_str && ((p - line) < 2
+ || (*(p - 1) != '\\' && *(p - 2) != '#')))
+ break; /* found! */
+ ++p;
+*** ../vim-7.3.399/src/spell.c 2012-01-10 16:28:41.000000000 +0100
+--- src/spell.c 2012-01-10 22:09:23.000000000 +0100
+***************
+*** 5049,5055 ****
+ static int offset2bytes __ARGS((int nr, char_u *buf));
+ static int bytes2offset __ARGS((char_u **pp));
+ static void sug_write __ARGS((spellinfo_T *spin, char_u *fname));
+! static void mkspell __ARGS((int fcount, char_u **fnames, int ascii, int overwrite, int added_word));
+ static void spell_message __ARGS((spellinfo_T *spin, char_u *str));
+ static void init_spellfile __ARGS((void));
+
+--- 5049,5055 ----
+ static int offset2bytes __ARGS((int nr, char_u *buf));
+ static int bytes2offset __ARGS((char_u **pp));
+ static void sug_write __ARGS((spellinfo_T *spin, char_u *fname));
+! static void mkspell __ARGS((int fcount, char_u **fnames, int ascii, int over_write, int added_word));
+ static void spell_message __ARGS((spellinfo_T *spin, char_u *str));
+ static void init_spellfile __ARGS((void));
+
+***************
+*** 9085,9095 ****
+ * and ".spl" is appended to make the output file name.
+ */
+ static void
+! mkspell(fcount, fnames, ascii, overwrite, added_word)
+ int fcount;
+ char_u **fnames;
+ int ascii; /* -ascii argument given */
+! int overwrite; /* overwrite existing output file */
+ int added_word; /* invoked through "zg" */
+ {
+ char_u *fname = NULL;
+--- 9085,9095 ----
+ * and ".spl" is appended to make the output file name.
+ */
+ static void
+! mkspell(fcount, fnames, ascii, over_write, added_word)
+ int fcount;
+ char_u **fnames;
+ int ascii; /* -ascii argument given */
+! int over_write; /* overwrite existing output file */
+ int added_word; /* invoked through "zg" */
+ {
+ char_u *fname = NULL;
+***************
+*** 9173,9179 ****
+ {
+ /* Check for overwriting before doing things that may take a lot of
+ * time. */
+! if (!overwrite && mch_stat((char *)wfname, &st) >= 0)
+ {
+ EMSG(_(e_exists));
+ goto theend;
+--- 9173,9179 ----
+ {
+ /* Check for overwriting before doing things that may take a lot of
+ * time. */
+! if (!over_write && mch_stat((char *)wfname, &st) >= 0)
+ {
+ EMSG(_(e_exists));
+ goto theend;
+*** ../vim-7.3.399/src/syntax.c 2011-06-19 04:54:17.000000000 +0200
+--- src/syntax.c 2012-01-10 22:10:23.000000000 +0100
+***************
+*** 4006,4022 ****
+ }
+
+ static void
+! syn_list_flags(nl, flags, attr)
+! struct name_list *nl;
+ int flags;
+ int attr;
+ {
+ int i;
+
+! for (i = 0; nl[i].flag != 0; ++i)
+! if (flags & nl[i].flag)
+ {
+! msg_puts_attr((char_u *)nl[i].name, attr);
+ msg_putchar(' ');
+ }
+ }
+--- 4006,4022 ----
+ }
+
+ static void
+! syn_list_flags(nlist, flags, attr)
+! struct name_list *nlist;
+ int flags;
+ int attr;
+ {
+ int i;
+
+! for (i = 0; nlist[i].flag != 0; ++i)
+! if (flags & nlist[i].flag)
+ {
+! msg_puts_attr((char_u *)nlist[i].name, attr);
+ msg_putchar(' ');
+ }
+ }
+*** ../vim-7.3.399/src/tag.c 2011-12-14 14:15:12.000000000 +0100
+--- src/tag.c 2012-01-10 21:51:05.000000000 +0100
+***************
+*** 1353,1359 ****
+ int match_count = 0; /* number of matches found */
+ char_u **matches;
+ int mtt;
+- int len;
+ int help_save;
+ #ifdef FEAT_MULTI_LANG
+ int help_pri = 0;
+--- 1353,1358 ----
+***************
+*** 2235,2240 ****
+--- 2234,2241 ----
+ */
+ if (ga_grow(&ga_match[mtt], 1) == OK)
+ {
++ int len;
++
+ if (help_only)
+ {
+ #ifdef FEAT_MULTI_LANG
+*** ../vim-7.3.399/src/window.c 2011-12-30 15:01:55.000000000 +0100
+--- src/window.c 2012-01-10 22:11:41.000000000 +0100
+***************
+*** 683,701 ****
+ }
+
+ /*
+! * When "newwin" is NULL: split the current window in two.
+! * When "newwin" is not NULL: insert this window at the far
+ * top/left/right/bottom.
+ * return FAIL for failure, OK otherwise
+ */
+ int
+! win_split_ins(size, flags, newwin, dir)
+ int size;
+ int flags;
+! win_T *newwin;
+ int dir;
+ {
+! win_T *wp = newwin;
+ win_T *oldwin;
+ int new_size = size;
+ int i;
+--- 683,701 ----
+ }
+
+ /*
+! * When "new_wp" is NULL: split the current window in two.
+! * When "new_wp" is not NULL: insert this window at the far
+ * top/left/right/bottom.
+ * return FAIL for failure, OK otherwise
+ */
+ int
+! win_split_ins(size, flags, new_wp, dir)
+ int size;
+ int flags;
+! win_T *new_wp;
+ int dir;
+ {
+! win_T *wp = new_wp;
+ win_T *oldwin;
+ int new_size = size;
+ int i;
+***************
+*** 718,724 ****
+ /* add a status line when p_ls == 1 and splitting the first window */
+ if (lastwin == firstwin && p_ls == 1 && oldwin->w_status_height == 0)
+ {
+! if (oldwin->w_height <= p_wmh && newwin == NULL)
+ {
+ EMSG(_(e_noroom));
+ return FAIL;
+--- 718,724 ----
+ /* add a status line when p_ls == 1 and splitting the first window */
+ if (lastwin == firstwin && p_ls == 1 && oldwin->w_status_height == 0)
+ {
+! if (oldwin->w_height <= p_wmh && new_wp == NULL)
+ {
+ EMSG(_(e_noroom));
+ return FAIL;
+***************
+*** 751,757 ****
+ }
+ else
+ available = oldwin->w_width;
+! if (available < needed && newwin == NULL)
+ {
+ EMSG(_(e_noroom));
+ return FAIL;
+--- 751,757 ----
+ }
+ else
+ available = oldwin->w_width;
+! if (available < needed && new_wp == NULL)
+ {
+ EMSG(_(e_noroom));
+ return FAIL;
+***************
+*** 815,821 ****
+ available = oldwin->w_height;
+ needed += p_wmh;
+ }
+! if (available < needed && newwin == NULL)
+ {
+ EMSG(_(e_noroom));
+ return FAIL;
+--- 815,821 ----
+ available = oldwin->w_height;
+ needed += p_wmh;
+ }
+! if (available < needed && new_wp == NULL)
+ {
+ EMSG(_(e_noroom));
+ return FAIL;
+***************
+*** 888,907 ****
+ p_sb))))
+ {
+ /* new window below/right of current one */
+! if (newwin == NULL)
+ wp = win_alloc(oldwin, FALSE);
+ else
+ win_append(oldwin, wp);
+ }
+ else
+ {
+! if (newwin == NULL)
+ wp = win_alloc(oldwin->w_prev, FALSE);
+ else
+ win_append(oldwin->w_prev, wp);
+ }
+
+! if (newwin == NULL)
+ {
+ if (wp == NULL)
+ return FAIL;
+--- 888,907 ----
+ p_sb))))
+ {
+ /* new window below/right of current one */
+! if (new_wp == NULL)
+ wp = win_alloc(oldwin, FALSE);
+ else
+ win_append(oldwin, wp);
+ }
+ else
+ {
+! if (new_wp == NULL)
+ wp = win_alloc(oldwin->w_prev, FALSE);
+ else
+ win_append(oldwin->w_prev, wp);
+ }
+
+! if (new_wp == NULL)
+ {
+ if (wp == NULL)
+ return FAIL;
+***************
+*** 972,981 ****
+ frp->fr_parent = curfrp;
+ }
+
+! if (newwin == NULL)
+ frp = wp->w_frame;
+ else
+! frp = newwin->w_frame;
+ frp->fr_parent = curfrp->fr_parent;
+
+ /* Insert the new frame at the right place in the frame list. */
+--- 972,981 ----
+ frp->fr_parent = curfrp;
+ }
+
+! if (new_wp == NULL)
+ frp = wp->w_frame;
+ else
+! frp = new_wp->w_frame;
+ frp->fr_parent = curfrp->fr_parent;
+
+ /* Insert the new frame at the right place in the frame list. */
+***************
+*** 4284,4302 ****
+ win_T *after UNUSED;
+ int hidden UNUSED;
+ {
+! win_T *newwin;
+
+ /*
+ * allocate window structure and linesizes arrays
+ */
+! newwin = (win_T *)alloc_clear((unsigned)sizeof(win_T));
+! if (newwin != NULL && win_alloc_lines(newwin) == FAIL)
+ {
+! vim_free(newwin);
+! newwin = NULL;
+ }
+
+! if (newwin != NULL)
+ {
+ #ifdef FEAT_AUTOCMD
+ /* Don't execute autocommands while the window is not properly
+--- 4284,4302 ----
+ win_T *after UNUSED;
+ int hidden UNUSED;
+ {
+! win_T *new_wp;
+
+ /*
+ * allocate window structure and linesizes arrays
+ */
+! new_wp = (win_T *)alloc_clear((unsigned)sizeof(win_T));
+! if (new_wp != NULL && win_alloc_lines(new_wp) == FAIL)
+ {
+! vim_free(new_wp);
+! new_wp = NULL;
+ }
+
+! if (new_wp != NULL)
+ {
+ #ifdef FEAT_AUTOCMD
+ /* Don't execute autocommands while the window is not properly
+***************
+*** 4309,4361 ****
+ */
+ #ifdef FEAT_WINDOWS
+ if (!hidden)
+! win_append(after, newwin);
+ #endif
+ #ifdef FEAT_VERTSPLIT
+! newwin->w_wincol = 0;
+! newwin->w_width = Columns;
+ #endif
+
+ /* position the display and the cursor at the top of the file. */
+! newwin->w_topline = 1;
+ #ifdef FEAT_DIFF
+! newwin->w_topfill = 0;
+ #endif
+! newwin->w_botline = 2;
+! newwin->w_cursor.lnum = 1;
+ #ifdef FEAT_SCROLLBIND
+! newwin->w_scbind_pos = 1;
+ #endif
+
+ /* We won't calculate w_fraction until resizing the window */
+! newwin->w_fraction = 0;
+! newwin->w_prev_fraction_row = -1;
+
+ #ifdef FEAT_GUI
+ if (gui.in_use)
+ {
+! gui_create_scrollbar(&newwin->w_scrollbars[SBAR_LEFT],
+! SBAR_LEFT, newwin);
+! gui_create_scrollbar(&newwin->w_scrollbars[SBAR_RIGHT],
+! SBAR_RIGHT, newwin);
+ }
+ #endif
+ #ifdef FEAT_EVAL
+ /* init w: variables */
+! init_var_dict(&newwin->w_vars, &newwin->w_winvar);
+ #endif
+ #ifdef FEAT_FOLDING
+! foldInitWin(newwin);
+ #endif
+ #ifdef FEAT_AUTOCMD
+ unblock_autocmds();
+ #endif
+ #ifdef FEAT_SEARCH_EXTRA
+! newwin->w_match_head = NULL;
+! newwin->w_next_match_id = 4;
+ #endif
+ }
+! return newwin;
+ }
+
+ #if defined(FEAT_WINDOWS) || defined(PROTO)
+--- 4309,4361 ----
+ */
+ #ifdef FEAT_WINDOWS
+ if (!hidden)
+! win_append(after, new_wp);
+ #endif
+ #ifdef FEAT_VERTSPLIT
+! new_wp->w_wincol = 0;
+! new_wp->w_width = Columns;
+ #endif
+
+ /* position the display and the cursor at the top of the file. */
+! new_wp->w_topline = 1;
+ #ifdef FEAT_DIFF
+! new_wp->w_topfill = 0;
+ #endif
+! new_wp->w_botline = 2;
+! new_wp->w_cursor.lnum = 1;
+ #ifdef FEAT_SCROLLBIND
+! new_wp->w_scbind_pos = 1;
+ #endif
+
+ /* We won't calculate w_fraction until resizing the window */
+! new_wp->w_fraction = 0;
+! new_wp->w_prev_fraction_row = -1;
+
+ #ifdef FEAT_GUI
+ if (gui.in_use)
+ {
+! gui_create_scrollbar(&new_wp->w_scrollbars[SBAR_LEFT],
+! SBAR_LEFT, new_wp);
+! gui_create_scrollbar(&new_wp->w_scrollbars[SBAR_RIGHT],
+! SBAR_RIGHT, new_wp);
+ }
+ #endif
+ #ifdef FEAT_EVAL
+ /* init w: variables */
+! init_var_dict(&new_wp->w_vars, &new_wp->w_winvar);
+ #endif
+ #ifdef FEAT_FOLDING
+! foldInitWin(new_wp);
+ #endif
+ #ifdef FEAT_AUTOCMD
+ unblock_autocmds();
+ #endif
+ #ifdef FEAT_SEARCH_EXTRA
+! new_wp->w_match_head = NULL;
+! new_wp->w_next_match_id = 4;
+ #endif
+ }
+! return new_wp;
+ }
+
+ #if defined(FEAT_WINDOWS) || defined(PROTO)
+*** ../vim-7.3.399/src/version.c 2012-01-10 18:37:53.000000000 +0100
+--- src/version.c 2012-01-10 22:23:10.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 400,
+ /**/
+
+--
+A parent can be arrested if his child cannot hold back a burp during a church
+service.
+ [real standing law in Nebraska, United States of America]
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.401 b/source/ap/vim/patches/7.3.401
new file mode 100644
index 000000000..6a473c575
--- /dev/null
+++ b/source/ap/vim/patches/7.3.401
@@ -0,0 +1,191 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.401
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.401
+Problem: A couple more shadowed variables.
+Solution: Rename the variables.
+Files: src/netbeans.c
+
+
+*** ../vim-7.3.400/src/netbeans.c 2012-01-10 22:26:12.000000000 +0100
+--- src/netbeans.c 2012-01-10 22:30:17.000000000 +0100
+***************
+*** 443,449 ****
+ FILE *fp;
+ char_u buf[BUFSIZ];
+ char_u *lp;
+! char_u *nl;
+ #ifdef UNIX
+ struct stat st;
+
+--- 443,449 ----
+ FILE *fp;
+ char_u buf[BUFSIZ];
+ char_u *lp;
+! char_u *nlp;
+ #ifdef UNIX
+ struct stat st;
+
+***************
+*** 472,479 ****
+ /* Read the file. There should be one of each parameter */
+ while ((lp = (char_u *)fgets((char *)buf, BUFSIZ, fp)) != NULL)
+ {
+! if ((nl = vim_strchr(lp, '\n')) != NULL)
+! *nl = 0; /* strip off the trailing newline */
+
+ if (STRNCMP(lp, "host=", 5) == 0)
+ {
+--- 472,479 ----
+ /* Read the file. There should be one of each parameter */
+ while ((lp = (char_u *)fgets((char *)buf, BUFSIZ, fp)) != NULL)
+ {
+! if ((nlp = vim_strchr(lp, '\n')) != NULL)
+! *nlp = 0; /* strip off the trailing newline */
+
+ if (STRNCMP(lp, "host=", 5) == 0)
+ {
+***************
+*** 1740,1746 ****
+ int added = 0;
+ int oldFire = netbeansFireChanges;
+ int old_b_changed;
+! char_u *nl;
+ linenr_T lnum;
+ linenr_T lnum_start;
+ pos_T *pos;
+--- 1740,1746 ----
+ int added = 0;
+ int oldFire = netbeansFireChanges;
+ int old_b_changed;
+! char_u *nlp;
+ linenr_T lnum;
+ linenr_T lnum_start;
+ pos_T *pos;
+***************
+*** 1780,1787 ****
+ do_update = 1;
+ while (*args != NUL)
+ {
+! nl = vim_strchr(args, '\n');
+! if (nl == NULL)
+ {
+ /* Incomplete line, probably truncated. Next "insert"
+ * command should append to this one. */
+--- 1780,1787 ----
+ do_update = 1;
+ while (*args != NUL)
+ {
+! nlp = vim_strchr(args, '\n');
+! if (nlp == NULL)
+ {
+ /* Incomplete line, probably truncated. Next "insert"
+ * command should append to this one. */
+***************
+*** 1789,1801 ****
+ }
+ else
+ {
+! len = nl - args;
+
+ /*
+ * We need to detect EOL style, because the commands
+ * use a character offset.
+ */
+! if (nl > args && nl[-1] == '\r')
+ {
+ ff_detected = EOL_DOS;
+ --len;
+--- 1789,1801 ----
+ }
+ else
+ {
+! len = nlp - args;
+
+ /*
+ * We need to detect EOL style, because the commands
+ * use a character offset.
+ */
+! if (nlp > args && nlp[-1] == '\r')
+ {
+ ff_detected = EOL_DOS;
+ --len;
+***************
+*** 1814,1820 ****
+
+ /* Insert halfway a line. For simplicity we assume we
+ * need to append to the line. */
+! newline = alloc_check((unsigned)(STRLEN(oldline) + len + 1));
+ if (newline != NULL)
+ {
+ STRCPY(newline, oldline);
+--- 1814,1821 ----
+
+ /* Insert halfway a line. For simplicity we assume we
+ * need to append to the line. */
+! newline = alloc_check(
+! (unsigned)(STRLEN(oldline) + len + 1));
+ if (newline != NULL)
+ {
+ STRCPY(newline, oldline);
+***************
+*** 1826,1839 ****
+ {
+ /* Append a new line. Not that we always do this,
+ * also when the text doesn't end in a "\n". */
+! ml_append((linenr_T)(lnum - 1), args, (colnr_T)(len + 1), FALSE);
+ ++added;
+ }
+
+! if (nl == NULL)
+ break;
+ ++lnum;
+! args = nl + 1;
+ }
+
+ /* Adjust the marks below the inserted lines. */
+--- 1827,1841 ----
+ {
+ /* Append a new line. Not that we always do this,
+ * also when the text doesn't end in a "\n". */
+! ml_append((linenr_T)(lnum - 1), args,
+! (colnr_T)(len + 1), FALSE);
+ ++added;
+ }
+
+! if (nlp == NULL)
+ break;
+ ++lnum;
+! args = nlp + 1;
+ }
+
+ /* Adjust the marks below the inserted lines. */
+*** ../vim-7.3.400/src/version.c 2012-01-10 22:26:12.000000000 +0100
+--- src/version.c 2012-01-10 22:30:47.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 401,
+ /**/
+
+--
+So when I saw the post to comp.editors, I rushed over to the FTP site to
+grab it. So I yank apart the tarball, light x candles, where x= the
+vim version multiplied by the md5sum of the source divided by the MAC of
+my NIC (8A3FA78155A8A1D346C3C4A), put on black robes, dim the lights,
+wave a dead chicken over the hard drive, and summon the power of GNU GCC
+with the magic words "make config ; make!".
+ [Jason Spence, compiling Vim 5.0]
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.402 b/source/ap/vim/patches/7.3.402
new file mode 100644
index 000000000..a5501f8c5
--- /dev/null
+++ b/source/ap/vim/patches/7.3.402
@@ -0,0 +1,59 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.402
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.402
+Problem: When jumping to the first error a line of the buffer is sometimes
+ redrawn on top of the list of errors.
+Solution: Do not call update_topline_redraw() if the display was scrolled
+ up.
+Files: src/quickfix.c
+
+
+*** ../vim-7.3.401/src/quickfix.c 2012-01-10 17:13:48.000000000 +0100
+--- src/quickfix.c 2012-01-20 13:13:25.000000000 +0100
+***************
+*** 1842,1849 ****
+ #endif
+ if (print_message)
+ {
+! /* Update the screen before showing the message */
+! update_topline_redraw();
+ sprintf((char *)IObuff, _("(%d of %d)%s%s: "), qf_index,
+ qi->qf_lists[qi->qf_curlist].qf_count,
+ qf_ptr->qf_cleared ? _(" (line deleted)") : "",
+--- 1842,1851 ----
+ #endif
+ if (print_message)
+ {
+! /* Update the screen before showing the message, unless the screen
+! * scrolled up. */
+! if (!msg_scrolled)
+! update_topline_redraw();
+ sprintf((char *)IObuff, _("(%d of %d)%s%s: "), qf_index,
+ qi->qf_lists[qi->qf_curlist].qf_count,
+ qf_ptr->qf_cleared ? _(" (line deleted)") : "",
+*** ../vim-7.3.401/src/version.c 2012-01-10 22:31:26.000000000 +0100
+--- src/version.c 2012-01-20 13:17:50.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 402,
+ /**/
+
+--
+If all you have is a hammer, everything looks like a nail.
+When your hammer is C++, everything begins to look like a thumb.
+ -- Steve Hoflich, comp.lang.c++
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.403 b/source/ap/vim/patches/7.3.403
new file mode 100644
index 000000000..bc3bf5498
--- /dev/null
+++ b/source/ap/vim/patches/7.3.403
@@ -0,0 +1,108 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.403
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.403
+Problem: ":helpgrep" does not trigger QuickFixCmd* autocommands.
+Solution: Trigger the autocommands. (Christian Brabandt)
+Files: src/quickfix.c
+
+
+*** ../vim-7.3.402/src/quickfix.c 2012-01-20 13:28:28.000000000 +0100
+--- src/quickfix.c 2012-01-20 13:37:10.000000000 +0100
+***************
+*** 3878,3893 ****
+ qf_info_T *qi = &ql_info;
+ int new_qi = FALSE;
+ win_T *wp;
+!
+! /* Make 'cpoptions' empty, the 'l' flag should not be used here. */
+! save_cpo = p_cpo;
+! p_cpo = empty_option;
+
+ #ifdef FEAT_MULTI_LANG
+ /* Check for a specified language */
+ lang = check_help_lang(eap->arg);
+ #endif
+
+ if (eap->cmdidx == CMD_lhelpgrep)
+ {
+ /* Find an existing help window */
+--- 3878,3912 ----
+ qf_info_T *qi = &ql_info;
+ int new_qi = FALSE;
+ win_T *wp;
+! #ifdef FEAT_AUTOCMD
+! char_u *au_name = NULL;
+! #endif
+
+ #ifdef FEAT_MULTI_LANG
+ /* Check for a specified language */
+ lang = check_help_lang(eap->arg);
+ #endif
+
++ #ifdef FEAT_AUTOCMD
++ switch (eap->cmdidx)
++ {
++ case CMD_helpgrep: au_name = (char_u *)"helpgrep"; break;
++ case CMD_lhelpgrep: au_name = (char_u *)"lhelpgrep"; break;
++ default: break;
++ }
++ if (au_name != NULL)
++ {
++ apply_autocmds(EVENT_QUICKFIXCMDPRE, au_name,
++ curbuf->b_fname, TRUE, curbuf);
++ if (did_throw || force_abort)
++ return;
++ }
++ #endif
++
++ /* Make 'cpoptions' empty, the 'l' flag should not be used here. */
++ save_cpo = p_cpo;
++ p_cpo = empty_option;
++
+ if (eap->cmdidx == CMD_lhelpgrep)
+ {
+ /* Find an existing help window */
+***************
+*** 4036,4041 ****
+--- 4055,4071 ----
+ qf_update_buffer(qi);
+ #endif
+
++ #ifdef FEAT_AUTOCMD
++ if (au_name != NULL)
++ {
++ apply_autocmds(EVENT_QUICKFIXCMDPOST, au_name,
++ curbuf->b_fname, TRUE, curbuf);
++ if (!new_qi && qi != &ql_info && qf_find_buf(qi) == NULL)
++ /* autocommands made "qi" invalid */
++ return;
++ }
++ #endif
++
+ /* Jump to first match. */
+ if (qi->qf_lists[qi->qf_curlist].qf_count > 0)
+ qf_jump(qi, 0, 0, FALSE);
+*** ../vim-7.3.402/src/version.c 2012-01-20 13:28:28.000000000 +0100
+--- src/version.c 2012-01-20 13:30:37.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 403,
+ /**/
+
+--
+Looking at Perl through Lisp glasses, Perl looks atrocious.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.404 b/source/ap/vim/patches/7.3.404
new file mode 100644
index 000000000..445d7051d
--- /dev/null
+++ b/source/ap/vim/patches/7.3.404
@@ -0,0 +1,85 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.404
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.404
+Problem: When a complete function uses refresh "always" redo will not work
+ properly.
+Solution: Do not reset compl_leader when compl_opt_refresh_always is set.
+ (Yasuhiro Matsumoto)
+Files: src/edit.c
+
+
+*** ../vim-7.3.403/src/edit.c 2012-01-10 22:26:12.000000000 +0100
+--- src/edit.c 2012-01-20 14:26:06.000000000 +0100
+***************
+*** 3465,3475 ****
+ if (ins_compl_need_restart())
+ ins_compl_restart();
+
+! vim_free(compl_leader);
+! compl_leader = vim_strnsave(ml_get_curline() + compl_col,
+ (int)(curwin->w_cursor.col - compl_col));
+! if (compl_leader != NULL)
+! ins_compl_new_leader();
+ }
+
+ /*
+--- 3465,3481 ----
+ if (ins_compl_need_restart())
+ ins_compl_restart();
+
+! /* When 'always' is set, don't reset compl_leader. While completing,
+! * cursor don't point original position, changing compl_leader would
+! * break redo. */
+! if (!compl_opt_refresh_always)
+! {
+! vim_free(compl_leader);
+! compl_leader = vim_strnsave(ml_get_curline() + compl_col,
+ (int)(curwin->w_cursor.col - compl_col));
+! if (compl_leader != NULL)
+! ins_compl_new_leader();
+! }
+ }
+
+ /*
+***************
+*** 4554,4559 ****
+--- 4560,4570 ----
+ int found_end = FALSE;
+ int advance;
+
++ /* When user complete function return -1 for findstart which is next
++ * time of 'always', compl_shown_match become NULL. */
++ if (compl_shown_match == NULL)
++ return -1;
++
+ if (compl_leader != NULL
+ && (compl_shown_match->cp_flags & ORIGINAL_TEXT) == 0)
+ {
+*** ../vim-7.3.403/src/version.c 2012-01-20 13:39:03.000000000 +0100
+--- src/version.c 2012-01-20 14:31:26.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 404,
+ /**/
+
+--
+ARTHUR: I've said I'm sorry about the old woman, but from the behind you
+ looked ...
+DENNIS: What I object to is that you automatically treat me like an inferior...
+ARTHUR: Well ... I AM king.
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.405 b/source/ap/vim/patches/7.3.405
new file mode 100644
index 000000000..087aecc41
--- /dev/null
+++ b/source/ap/vim/patches/7.3.405
@@ -0,0 +1,101 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.405
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.405
+Problem: When xterm gets back the function keys it may delete the urxvt
+ mouse termcap code.
+Solution: Check for the whole code, not just the start. (Egmont Koblinger)
+Files: src/keymap.h, src/misc2.c, src/term.c
+
+
+*** ../vim-7.3.404/src/keymap.h 2011-10-20 21:09:25.000000000 +0200
+--- src/keymap.h 2012-01-20 16:35:43.000000000 +0100
+***************
+*** 411,416 ****
+--- 411,417 ----
+ #define K_DEC_MOUSE TERMCAP2KEY(KS_DEC_MOUSE, KE_FILLER)
+ #define K_JSBTERM_MOUSE TERMCAP2KEY(KS_JSBTERM_MOUSE, KE_FILLER)
+ #define K_PTERM_MOUSE TERMCAP2KEY(KS_PTERM_MOUSE, KE_FILLER)
++ #define K_URXVT_MOUSE TERMCAP2KEY(KS_URXVT_MOUSE, KE_FILLER)
+
+ #define K_SELECT TERMCAP2KEY(KS_SELECT, KE_FILLER)
+ #define K_TEAROFF TERMCAP2KEY(KS_TEAROFF, KE_FILLER)
+*** ../vim-7.3.404/src/misc2.c 2012-01-10 22:26:12.000000000 +0100
+--- src/misc2.c 2012-01-20 16:38:27.000000000 +0100
+***************
+*** 2416,2425 ****
+--- 2416,2436 ----
+ {'<', (char_u *)"lt"},
+
+ {K_MOUSE, (char_u *)"Mouse"},
++ #ifdef FEAT_MOUSE_NET
+ {K_NETTERM_MOUSE, (char_u *)"NetMouse"},
++ #endif
++ #ifdef FEAT_MOUSE_DEC
+ {K_DEC_MOUSE, (char_u *)"DecMouse"},
++ #endif
++ #ifdef FEAT_MOUSE_JSB
+ {K_JSBTERM_MOUSE, (char_u *)"JsbMouse"},
++ #endif
++ #ifdef FEAT_MOUSE_PTERM
+ {K_PTERM_MOUSE, (char_u *)"PtermMouse"},
++ #endif
++ #ifdef FEAT_MOUSE_URXVT
++ {K_URXVT_MOUSE, (char_u *)"UrxvtMouse"},
++ #endif
+ {K_LEFTMOUSE, (char_u *)"LeftMouse"},
+ {K_LEFTMOUSE_NM, (char_u *)"LeftMouseNM"},
+ {K_LEFTDRAG, (char_u *)"LeftDrag"},
+*** ../vim-7.3.404/src/term.c 2011-12-01 20:59:16.000000000 +0100
+--- src/term.c 2012-01-20 16:50:41.000000000 +0100
+***************
+*** 5252,5263 ****
+ char_u *src;
+ {
+ int i;
+! int slen;
+
+ for (i = 0; i < tc_len; ++i)
+ {
+! slen = termcodes[i].len;
+! if (slen > 1 && STRNCMP(termcodes[i].code, src, (size_t)slen) == 0)
+ return i;
+ }
+ return -1;
+--- 5252,5263 ----
+ char_u *src;
+ {
+ int i;
+! int slen = STRLEN(src);
+
+ for (i = 0; i < tc_len; ++i)
+ {
+! if (slen == termcodes[i].len
+! && STRNCMP(termcodes[i].code, src, (size_t)slen) == 0)
+ return i;
+ }
+ return -1;
+*** ../vim-7.3.404/src/version.c 2012-01-20 14:32:22.000000000 +0100
+--- src/version.c 2012-01-20 16:59:47.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 405,
+ /**/
+
+--
+"The future's already arrived - it's just not evenly distributed yet."
+ -- William Gibson
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.406 b/source/ap/vim/patches/7.3.406
new file mode 100644
index 000000000..dceca0edb
--- /dev/null
+++ b/source/ap/vim/patches/7.3.406
@@ -0,0 +1,103 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.406
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.406
+Problem: Multi-byte characters in b:browsefilter are not handled correctly.
+Solution: First use convert_filter() normally and then convert to wide
+ characters. (Taro Muraoka)
+Files: src/gui_w48.c
+
+
+*** ../vim-7.3.405/src/gui_w48.c 2011-09-07 18:58:24.000000000 +0200
+--- src/gui_w48.c 2012-01-20 17:54:19.000000000 +0100
+***************
+*** 328,333 ****
+--- 328,337 ----
+ static LRESULT _OnImeNotify(HWND hWnd, DWORD dwCommand, DWORD dwData);
+ #endif
+
++ #if defined(FEAT_MBYTE) && defined(WIN3264)
++ static char_u *convert_filter(char_u *s);
++ #endif
++
+ #ifdef DEBUG_PRINT_ERROR
+ /*
+ * Print out the last Windows error message
+***************
+*** 3275,3302 ****
+
+ # if defined(FEAT_MBYTE) && defined(WIN3264)
+ /*
+! * Wide version of convert_filter(). Keep in sync!
+ */
+ static WCHAR *
+ convert_filterW(char_u *s)
+ {
+! WCHAR *res;
+! unsigned s_len = (unsigned)STRLEN(s);
+! unsigned i;
+
+! res = (WCHAR *)alloc((s_len + 3) * sizeof(WCHAR));
+! if (res != NULL)
+! {
+! for (i = 0; i < s_len; ++i)
+! if (s[i] == '\t' || s[i] == '\n')
+! res[i] = '\0';
+! else
+! res[i] = s[i];
+! res[s_len] = NUL;
+! /* Add two extra NULs to make sure it's properly terminated. */
+! res[s_len + 1] = NUL;
+! res[s_len + 2] = NUL;
+! }
+ return res;
+ }
+
+--- 3279,3298 ----
+
+ # if defined(FEAT_MBYTE) && defined(WIN3264)
+ /*
+! * Wide version of convert_filter().
+ */
+ static WCHAR *
+ convert_filterW(char_u *s)
+ {
+! char_u *tmp;
+! int len;
+
+! tmp = convert_filter(s);
+! if (tmp == NULL)
+! return NULL;
+! len = (int)STRLEN(s) + 3;
+! res = enc_to_utf16(tmp, &len);
+! vim_free(tmp);
+ return res;
+ }
+
+*** ../vim-7.3.405/src/version.c 2012-01-20 17:15:47.000000000 +0100
+--- src/version.c 2012-01-20 17:57:09.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 406,
+ /**/
+
+--
+DENNIS: Look, strange women lying on their backs in ponds handing out
+ swords ... that's no basis for a system of government. Supreme
+ executive power derives from a mandate from the masses, not from some
+ farcical aquatic ceremony.
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.407 b/source/ap/vim/patches/7.3.407
new file mode 100644
index 000000000..d5ac1330c
--- /dev/null
+++ b/source/ap/vim/patches/7.3.407
@@ -0,0 +1,270 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.407
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.407
+Problem: ":12verbose call F()" may duplicate text while trying to truncate.
+ (Thinca)
+Solution: Only truncate when there is not enough room. Also check the byte
+ length of the buffer.
+Files: src/buffer.c, src/eval.c, src/ex_getln.c, src/message.c,
+ src/proto/message.pro
+
+
+*** ../vim-7.3.406/src/buffer.c 2011-12-30 13:39:04.000000000 +0100
+--- src/buffer.c 2012-01-20 18:37:43.000000000 +0100
+***************
+*** 3258,3266 ****
+ if (maxlen > 0)
+ {
+ /* make it shorter by removing a bit in the middle */
+! len = vim_strsize(buf);
+! if (len > maxlen)
+! trunc_string(buf, buf, maxlen);
+ }
+ }
+ }
+--- 3258,3265 ----
+ if (maxlen > 0)
+ {
+ /* make it shorter by removing a bit in the middle */
+! if (vim_strsize(buf) > maxlen)
+! trunc_string(buf, buf, maxlen, IOSIZE);
+ }
+ }
+ }
+*** ../vim-7.3.406/src/eval.c 2012-01-10 22:26:12.000000000 +0100
+--- src/eval.c 2012-01-20 20:43:32.000000000 +0100
+***************
+*** 22163,22170 ****
+ s = tv2string(&argvars[i], &tofree, numbuf2, 0);
+ if (s != NULL)
+ {
+! trunc_string(s, buf, MSG_BUF_CLEN);
+! msg_puts(buf);
+ vim_free(tofree);
+ }
+ }
+--- 22163,22174 ----
+ s = tv2string(&argvars[i], &tofree, numbuf2, 0);
+ if (s != NULL)
+ {
+! if (vim_strsize(s) > MSG_BUF_CLEN)
+! {
+! trunc_string(s, buf, MSG_BUF_CLEN, MSG_BUF_LEN);
+! s = buf;
+! }
+! msg_puts(s);
+ vim_free(tofree);
+ }
+ }
+***************
+*** 22252,22259 ****
+ s = tv2string(fc->rettv, &tofree, numbuf2, 0);
+ if (s != NULL)
+ {
+! trunc_string(s, buf, MSG_BUF_CLEN);
+! smsg((char_u *)_("%s returning %s"), sourcing_name, buf);
+ vim_free(tofree);
+ }
+ }
+--- 22256,22267 ----
+ s = tv2string(fc->rettv, &tofree, numbuf2, 0);
+ if (s != NULL)
+ {
+! if (vim_strsize(s) > MSG_BUF_CLEN)
+! {
+! trunc_string(s, buf, MSG_BUF_CLEN, MSG_BUF_LEN);
+! s = buf;
+! }
+! smsg((char_u *)_("%s returning %s"), sourcing_name, s);
+ vim_free(tofree);
+ }
+ }
+*** ../vim-7.3.406/src/ex_getln.c 2011-12-08 18:44:47.000000000 +0100
+--- src/ex_getln.c 2012-01-20 18:40:46.000000000 +0100
+***************
+*** 5923,5929 ****
+ hist[i].hisnum);
+ if (vim_strsize(hist[i].hisstr) > (int)Columns - 10)
+ trunc_string(hist[i].hisstr, IObuff + STRLEN(IObuff),
+! (int)Columns - 10);
+ else
+ STRCAT(IObuff, hist[i].hisstr);
+ msg_outtrans(IObuff);
+--- 5923,5929 ----
+ hist[i].hisnum);
+ if (vim_strsize(hist[i].hisstr) > (int)Columns - 10)
+ trunc_string(hist[i].hisstr, IObuff + STRLEN(IObuff),
+! (int)Columns - 10, IOSIZE - STRLEN(IObuff));
+ else
+ STRCAT(IObuff, hist[i].hisstr);
+ msg_outtrans(IObuff);
+*** ../vim-7.3.406/src/message.c 2012-01-10 22:26:12.000000000 +0100
+--- src/message.c 2012-01-20 20:38:29.000000000 +0100
+***************
+*** 222,236 ****
+ if (enc_utf8)
+ /* may have up to 18 bytes per cell (6 per char, up to two
+ * composing chars) */
+! buf = alloc((room + 2) * 18);
+ else if (enc_dbcs == DBCS_JPNU)
+ /* may have up to 2 bytes per cell for euc-jp */
+! buf = alloc((room + 2) * 2);
+ else
+ #endif
+! buf = alloc(room + 2);
+ if (buf != NULL)
+! trunc_string(s, buf, room);
+ }
+ }
+ return buf;
+--- 222,237 ----
+ if (enc_utf8)
+ /* may have up to 18 bytes per cell (6 per char, up to two
+ * composing chars) */
+! len = (room + 2) * 18;
+ else if (enc_dbcs == DBCS_JPNU)
+ /* may have up to 2 bytes per cell for euc-jp */
+! len = (room + 2) * 2;
+ else
+ #endif
+! len = room + 2;
+! buf = alloc(len);
+ if (buf != NULL)
+! trunc_string(s, buf, room, len);
+ }
+ }
+ return buf;
+***************
+*** 241,250 ****
+ * "s" and "buf" may be equal.
+ */
+ void
+! trunc_string(s, buf, room)
+ char_u *s;
+ char_u *buf;
+ int room;
+ {
+ int half;
+ int len;
+--- 242,252 ----
+ * "s" and "buf" may be equal.
+ */
+ void
+! trunc_string(s, buf, room, buflen)
+ char_u *s;
+ char_u *buf;
+ int room;
++ int buflen;
+ {
+ int half;
+ int len;
+***************
+*** 257,263 ****
+ len = 0;
+
+ /* First part: Start of the string. */
+! for (e = 0; len < half; ++e)
+ {
+ if (s[e] == NUL)
+ {
+--- 259,265 ----
+ len = 0;
+
+ /* First part: Start of the string. */
+! for (e = 0; len < half && e < buflen; ++e)
+ {
+ if (s[e] == NUL)
+ {
+***************
+*** 274,280 ****
+ if (has_mbyte)
+ for (n = (*mb_ptr2len)(s + e); --n > 0; )
+ {
+! ++e;
+ buf[e] = s[e];
+ }
+ #endif
+--- 276,283 ----
+ if (has_mbyte)
+ for (n = (*mb_ptr2len)(s + e); --n > 0; )
+ {
+! if (++e == buflen)
+! break;
+ buf[e] = s[e];
+ }
+ #endif
+***************
+*** 319,326 ****
+ }
+
+ /* Set the middle and copy the last part. */
+! mch_memmove(buf + e, "...", (size_t)3);
+! STRMOVE(buf + e + 3, s + i);
+ }
+
+ /*
+--- 322,340 ----
+ }
+
+ /* Set the middle and copy the last part. */
+! if (e + 3 < buflen)
+! {
+! mch_memmove(buf + e, "...", (size_t)3);
+! len = STRLEN(s + i) + 1;
+! if (len >= buflen - e - 3)
+! len = buflen - e - 3 - 1;
+! mch_memmove(buf + e + 3, s + i, len);
+! buf[e + 3 + len - 1] = NUL;
+! }
+! else
+! {
+! buf[e - 1] = NUL; // make sure it is truncated
+! }
+ }
+
+ /*
+*** ../vim-7.3.406/src/proto/message.pro 2011-01-17 20:08:03.000000000 +0100
+--- src/proto/message.pro 2012-01-20 18:51:19.000000000 +0100
+***************
+*** 4,10 ****
+ int msg_attr __ARGS((char_u *s, int attr));
+ int msg_attr_keep __ARGS((char_u *s, int attr, int keep));
+ char_u *msg_strtrunc __ARGS((char_u *s, int force));
+! void trunc_string __ARGS((char_u *s, char_u *buf, int room));
+ void reset_last_sourcing __ARGS((void));
+ void msg_source __ARGS((int attr));
+ int emsg_not_now __ARGS((void));
+--- 4,10 ----
+ int msg_attr __ARGS((char_u *s, int attr));
+ int msg_attr_keep __ARGS((char_u *s, int attr, int keep));
+ char_u *msg_strtrunc __ARGS((char_u *s, int force));
+! void trunc_string __ARGS((char_u *s, char_u *buf, int room, int buflen));
+ void reset_last_sourcing __ARGS((void));
+ void msg_source __ARGS((int attr));
+ int emsg_not_now __ARGS((void));
+*** ../vim-7.3.406/src/version.c 2012-01-20 17:57:47.000000000 +0100
+--- src/version.c 2012-01-20 20:42:23.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 407,
+ /**/
+
+--
+Hanson's Treatment of Time:
+ There are never enough hours in a day, but always too
+ many days before Saturday.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.408 b/source/ap/vim/patches/7.3.408
new file mode 100644
index 000000000..02276085c
--- /dev/null
+++ b/source/ap/vim/patches/7.3.408
@@ -0,0 +1,48 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.408
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.408 (after 7.3.406)
+Problem: Missing declaration.
+Solution: Add the declaration. (John Marriott)
+Files: src/gui_w48.c
+
+
+*** ../vim-7.3.407/src/gui_w48.c 2012-01-20 17:57:47.000000000 +0100
+--- src/gui_w48.c 2012-01-20 20:51:57.000000000 +0100
+***************
+*** 3286,3291 ****
+--- 3286,3292 ----
+ {
+ char_u *tmp;
+ int len;
++ WCHAR *res;
+
+ tmp = convert_filter(s);
+ if (tmp == NULL)
+*** ../vim-7.3.407/src/version.c 2012-01-20 20:44:38.000000000 +0100
+--- src/version.c 2012-01-20 20:52:56.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 408,
+ /**/
+
+--
+BLACK KNIGHT: None shall pass.
+ARTHUR: I have no quarrel with you, brave Sir knight, but I must cross
+ this bridge.
+BLACK KNIGHT: Then you shall die.
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.409 b/source/ap/vim/patches/7.3.409
new file mode 100644
index 000000000..a00fdcb8d
--- /dev/null
+++ b/source/ap/vim/patches/7.3.409
@@ -0,0 +1,48 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.409
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.409
+Problem: The license in pty.c is unclear.
+Solution: Add a comment about the license.
+Files: src/pty.c
+
+
+*** ../vim-7.3.408/src/pty.c 2011-05-19 13:40:47.000000000 +0200
+--- src/pty.c 2012-01-20 21:07:56.000000000 +0100
+***************
+*** 14,19 ****
+--- 14,23 ----
+ * It has been modified to work better with Vim.
+ * The parts that are not used in Vim have been deleted.
+ * See the "screen" sources for the complete stuff.
++ *
++ * This specific version is distibuted under the Vim license (attribution by
++ * Juergen Weigert), the GPL applies to the original version, see the
++ * copyright notice below.
+ */
+
+ /* Copyright (c) 1993
+*** ../vim-7.3.408/src/version.c 2012-01-20 20:54:15.000000000 +0100
+--- src/version.c 2012-01-20 21:13:11.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 409,
+ /**/
+
+--
+ARTHUR: What are you going to do. bleed on me?
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.410 b/source/ap/vim/patches/7.3.410
new file mode 100644
index 000000000..f40e06faf
--- /dev/null
+++ b/source/ap/vim/patches/7.3.410
@@ -0,0 +1,54 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.410
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.410
+Problem: Compiler error for // comment. (Joachim Schmitz)
+Solution: Turn into /* comment */.
+Files: src/message.c
+
+
+*** ../vim-7.3.409/src/message.c 2012-01-20 20:44:38.000000000 +0100
+--- src/message.c 2012-01-23 20:46:36.000000000 +0100
+***************
+*** 333,339 ****
+ }
+ else
+ {
+! buf[e - 1] = NUL; // make sure it is truncated
+ }
+ }
+
+--- 333,339 ----
+ }
+ else
+ {
+! buf[e - 1] = NUL; /* make sure it is truncated */
+ }
+ }
+
+*** ../vim-7.3.409/src/version.c 2012-01-20 21:13:55.000000000 +0100
+--- src/version.c 2012-01-23 20:47:30.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 410,
+ /**/
+
+
+--
+Are leaders born or made? And if they're made, can we return them under
+warranty?
+ (Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.411 b/source/ap/vim/patches/7.3.411
new file mode 100644
index 000000000..fe7599522
--- /dev/null
+++ b/source/ap/vim/patches/7.3.411
@@ -0,0 +1,55 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.411
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.411
+Problem: Pasting in Visual mode using the "" register does not work. (John
+ Beckett)
+Solution: Detect that the write is overwriting the pasted register.
+ (Christian Brabandt)
+Files: src/normal.c
+
+
+*** ../vim-7.3.410/src/normal.c 2011-10-04 21:22:40.000000000 +0200
+--- src/normal.c 2012-01-23 22:13:44.000000000 +0100
+***************
+*** 9329,9335 ****
+ # ifdef FEAT_CLIPBOARD
+ adjust_clip_reg(&regname);
+ # endif
+! if (regname == 0 || VIM_ISDIGIT(regname)
+ # ifdef FEAT_CLIPBOARD
+ || (clip_unnamed && (regname == '*' || regname == '+'))
+ # endif
+--- 9329,9335 ----
+ # ifdef FEAT_CLIPBOARD
+ adjust_clip_reg(&regname);
+ # endif
+! if (regname == 0 || regname == '"' || VIM_ISDIGIT(regname)
+ # ifdef FEAT_CLIPBOARD
+ || (clip_unnamed && (regname == '*' || regname == '+'))
+ # endif
+*** ../vim-7.3.410/src/version.c 2012-01-23 20:48:34.000000000 +0100
+--- src/version.c 2012-01-26 11:42:33.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 411,
+ /**/
+
+--
+Engineers understand that their appearance only bothers other people and
+therefore it is not worth optimizing.
+ (Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.412 b/source/ap/vim/patches/7.3.412
new file mode 100644
index 000000000..3b181883a
--- /dev/null
+++ b/source/ap/vim/patches/7.3.412
@@ -0,0 +1,51 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.412
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.412
+Problem: Storing a float in a session file has an additional '&'.
+Solution: Remove the '&'. (Yasuhiro Matsumoto)
+Files: src/eval.c
+
+
+*** ../vim-7.3.411/src/eval.c 2012-01-20 20:44:38.000000000 +0100
+--- src/eval.c 2012-01-26 11:39:39.000000000 +0100
+***************
+*** 22929,22935 ****
+ f = -f;
+ sign = '-';
+ }
+! if ((fprintf(fd, "let %s = %c&%f",
+ this_var->di_key, sign, f) < 0)
+ || put_eol(fd) == FAIL)
+ return FAIL;
+--- 22929,22935 ----
+ f = -f;
+ sign = '-';
+ }
+! if ((fprintf(fd, "let %s = %c%f",
+ this_var->di_key, sign, f) < 0)
+ || put_eol(fd) == FAIL)
+ return FAIL;
+*** ../vim-7.3.411/src/version.c 2012-01-26 11:43:04.000000000 +0100
+--- src/version.c 2012-01-26 11:44:56.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 412,
+ /**/
+
+--
+Imagine a world without hypothetical situations.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.413 b/source/ap/vim/patches/7.3.413
new file mode 100644
index 000000000..c32c9b1dd
--- /dev/null
+++ b/source/ap/vim/patches/7.3.413
@@ -0,0 +1,90 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.413
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.413
+Problem: Build warnings on MS-Windows.
+Solution: Add type casts. (Mike Williams)
+Files: src/ex_getln.c, src/message.c, src/term.c
+
+
+*** ../vim-7.3.412/src/ex_getln.c 2012-01-20 20:44:38.000000000 +0100
+--- src/ex_getln.c 2012-01-26 12:58:54.000000000 +0100
+***************
+*** 5923,5929 ****
+ hist[i].hisnum);
+ if (vim_strsize(hist[i].hisstr) > (int)Columns - 10)
+ trunc_string(hist[i].hisstr, IObuff + STRLEN(IObuff),
+! (int)Columns - 10, IOSIZE - STRLEN(IObuff));
+ else
+ STRCAT(IObuff, hist[i].hisstr);
+ msg_outtrans(IObuff);
+--- 5923,5929 ----
+ hist[i].hisnum);
+ if (vim_strsize(hist[i].hisstr) > (int)Columns - 10)
+ trunc_string(hist[i].hisstr, IObuff + STRLEN(IObuff),
+! (int)Columns - 10, IOSIZE - (int)STRLEN(IObuff));
+ else
+ STRCAT(IObuff, hist[i].hisstr);
+ msg_outtrans(IObuff);
+*** ../vim-7.3.412/src/message.c 2012-01-23 20:48:34.000000000 +0100
+--- src/message.c 2012-01-26 12:58:54.000000000 +0100
+***************
+*** 325,331 ****
+ if (e + 3 < buflen)
+ {
+ mch_memmove(buf + e, "...", (size_t)3);
+! len = STRLEN(s + i) + 1;
+ if (len >= buflen - e - 3)
+ len = buflen - e - 3 - 1;
+ mch_memmove(buf + e + 3, s + i, len);
+--- 325,331 ----
+ if (e + 3 < buflen)
+ {
+ mch_memmove(buf + e, "...", (size_t)3);
+! len = (int)STRLEN(s + i) + 1;
+ if (len >= buflen - e - 3)
+ len = buflen - e - 3 - 1;
+ mch_memmove(buf + e + 3, s + i, len);
+*** ../vim-7.3.412/src/term.c 2012-01-20 17:15:47.000000000 +0100
+--- src/term.c 2012-01-26 12:58:54.000000000 +0100
+***************
+*** 5252,5258 ****
+ char_u *src;
+ {
+ int i;
+! int slen = STRLEN(src);
+
+ for (i = 0; i < tc_len; ++i)
+ {
+--- 5252,5258 ----
+ char_u *src;
+ {
+ int i;
+! int slen = (int)STRLEN(src);
+
+ for (i = 0; i < tc_len; ++i)
+ {
+*** ../vim-7.3.412/src/version.c 2012-01-26 11:45:25.000000000 +0100
+--- src/version.c 2012-01-26 12:59:14.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 413,
+ /**/
+
+--
+It doesn't really matter what you are able to do if you don't do it.
+ (Bram Moolenaar)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.414 b/source/ap/vim/patches/7.3.414
new file mode 100644
index 000000000..6f6c30753
--- /dev/null
+++ b/source/ap/vim/patches/7.3.414
@@ -0,0 +1,90 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.414
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.414
+Problem: Using CTRL-A on "000" drops the leading zero, while on "001" it
+ doesn't.
+Solution: Detect "000" as an octal number. (James McCoy)
+Files: src/charset.c
+
+
+*** ../vim-7.3.413/src/charset.c 2012-01-10 22:26:12.000000000 +0100
+--- src/charset.c 2012-01-26 13:33:45.000000000 +0100
+***************
+*** 764,770 ****
+ }
+
+ /*
+! * Return the number of characters string "s" will take on the screen,
+ * counting TABs as two characters: "^I".
+ */
+ int
+--- 764,770 ----
+ }
+
+ /*
+! * Return the number of character cells string "s" will take on the screen,
+ * counting TABs as two characters: "^I".
+ */
+ int
+***************
+*** 775,782 ****
+ }
+
+ /*
+! * Return the number of characters string "s[len]" will take on the screen,
+! * counting TABs as two characters: "^I".
+ */
+ int
+ vim_strnsize(s, len)
+--- 775,782 ----
+ }
+
+ /*
+! * Return the number of character cells string "s[len]" will take on the
+! * screen, counting TABs as two characters: "^I".
+ */
+ int
+ vim_strnsize(s, len)
+***************
+*** 1830,1836 ****
+ hex = 0; /* can't be octal */
+ break;
+ }
+! if (ptr[n] > '0')
+ hex = '0'; /* assume octal */
+ }
+ }
+--- 1830,1836 ----
+ hex = 0; /* can't be octal */
+ break;
+ }
+! if (ptr[n] >= '0')
+ hex = '0'; /* assume octal */
+ }
+ }
+*** ../vim-7.3.413/src/version.c 2012-01-26 13:01:54.000000000 +0100
+--- src/version.c 2012-01-26 13:38:04.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 414,
+ /**/
+
+--
+No engineer can take a shower without wondering if some sort of Teflon coating
+would make showering unnecessary.
+ (Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.415 b/source/ap/vim/patches/7.3.415
new file mode 100644
index 000000000..74e757b2d
--- /dev/null
+++ b/source/ap/vim/patches/7.3.415
@@ -0,0 +1,54 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.415
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.415 (after 7.3.359)
+Problem: Completion of functions stops once a dictionary is encountered.
+ (James McCoy)
+Solution: Return an empty string instead of NULL.
+Files: src/eval.c
+
+
+*** ../vim-7.3.414/src/eval.c 2012-01-26 11:45:25.000000000 +0100
+--- src/eval.c 2012-01-26 13:45:52.000000000 +0100
+***************
+*** 21802,21808 ****
+ fp = HI2UF(hi);
+
+ if (fp->uf_flags & FC_DICT)
+! return NULL; /* don't show dict functions */
+
+ if (STRLEN(fp->uf_name) + 4 >= IOSIZE)
+ return fp->uf_name; /* prevents overflow */
+--- 21802,21808 ----
+ fp = HI2UF(hi);
+
+ if (fp->uf_flags & FC_DICT)
+! return ""; /* don't show dict functions */
+
+ if (STRLEN(fp->uf_name) + 4 >= IOSIZE)
+ return fp->uf_name; /* prevents overflow */
+*** ../vim-7.3.414/src/version.c 2012-01-26 13:40:04.000000000 +0100
+--- src/version.c 2012-01-26 14:32:16.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 415,
+ /**/
+
+--
+Normal people believe that if it ain't broke, don't fix it. Engineers believe
+that if it ain't broke, it doesn't have enough features yet.
+ (Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.416 b/source/ap/vim/patches/7.3.416
new file mode 100644
index 000000000..f65bb0d2f
--- /dev/null
+++ b/source/ap/vim/patches/7.3.416
@@ -0,0 +1,54 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.416
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.416 (after 7.3.415)
+Problem: Compiler warning for wrong pointer.
+Solution: Add type cast.
+Files: src/eval.c
+
+
+*** ../vim-7.3.415/src/eval.c 2012-01-26 14:32:26.000000000 +0100
+--- src/eval.c 2012-01-26 15:42:56.000000000 +0100
+***************
+*** 21802,21808 ****
+ fp = HI2UF(hi);
+
+ if (fp->uf_flags & FC_DICT)
+! return ""; /* don't show dict functions */
+
+ if (STRLEN(fp->uf_name) + 4 >= IOSIZE)
+ return fp->uf_name; /* prevents overflow */
+--- 21802,21808 ----
+ fp = HI2UF(hi);
+
+ if (fp->uf_flags & FC_DICT)
+! return (char_u *)""; /* don't show dict functions */
+
+ if (STRLEN(fp->uf_name) + 4 >= IOSIZE)
+ return fp->uf_name; /* prevents overflow */
+*** ../vim-7.3.415/src/version.c 2012-01-26 14:32:26.000000000 +0100
+--- src/version.c 2012-01-26 15:43:31.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 416,
+ /**/
+
+--
+It's totally unfair to suggest - as many have - that engineers are socially
+inept. Engineers simply have different objectives when it comes to social
+interaction.
+ (Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.417 b/source/ap/vim/patches/7.3.417
new file mode 100644
index 000000000..489d27eb4
--- /dev/null
+++ b/source/ap/vim/patches/7.3.417
@@ -0,0 +1,47 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.417
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.417 (after 7.3.395)
+Problem: Test 43 fails with a tiny build.
+Solution: Only run test 43 with at least a small build.
+Files: src/testdir/test43.in
+
+
+*** ../vim-7.3.415/src/testdir/test43.in 2012-01-10 13:44:23.000000000 +0100
+--- src/testdir/test43.in 2012-01-26 18:00:06.000000000 +0100
+***************
+*** 1,6 ****
+--- 1,7 ----
+ Tests for regexp with various magic settings.
+
+ STARTTEST
++ :so small.vim
+ :set nocompatible viminfo+=nviminfo
+ /^1
+ /a*b\{2}c\+/e
+*** ../vim-7.3.415/src/version.c 2012-01-26 14:32:26.000000000 +0100
+--- src/version.c 2012-01-26 18:02:30.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 417,
+ /**/
+
+--
+I learned the customs and mannerisms of engineers by observing them, much the
+way Jane Goodall learned about the great apes, but without the hassle of
+grooming.
+ (Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.418 b/source/ap/vim/patches/7.3.418
new file mode 100644
index 000000000..6ff486b63
--- /dev/null
+++ b/source/ap/vim/patches/7.3.418
@@ -0,0 +1,53 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.418
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.418
+Problem: When a user complete function returns -1 an error message is
+ given.
+Solution: When -2 is returned stop completion silently. (Yasuhiro Matsumoto)
+Files: src/edit.c
+
+
+*** ../vim-7.3.417/src/edit.c 2012-01-20 14:32:22.000000000 +0100
+--- src/edit.c 2012-01-26 18:32:23.000000000 +0100
+***************
+*** 5189,5194 ****
+--- 5189,5199 ----
+ return FAIL;
+ }
+
++ /* Return value -2 means the user complete function wants to
++ * cancel the complete without an error. */
++ if (col == -2)
++ return FAIL;
++
+ /*
+ * Reset extended parameters of completion, when start new
+ * completion.
+*** ../vim-7.3.417/src/version.c 2012-01-26 18:58:13.000000000 +0100
+--- src/version.c 2012-01-26 18:42:14.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 418,
+ /**/
+
+--
+If someone questions your market projections, simply point out that your
+target market is "People who are nuts" and "People who will buy any damn
+thing". Nobody is going to tell you there aren't enough of those people
+to go around.
+ (Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.419 b/source/ap/vim/patches/7.3.419
new file mode 100644
index 000000000..865a47c75
--- /dev/null
+++ b/source/ap/vim/patches/7.3.419
@@ -0,0 +1,85 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.419
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.419
+Problem: DBCS encoding in a user command does not always work.
+Solution: Skip over DBCS characters. (Yasuhiro Matsumoto)
+Files: src/ex_docmd.c
+
+
+*** ../vim-7.3.418/src/ex_docmd.c 2011-12-14 14:49:41.000000000 +0100
+--- src/ex_docmd.c 2012-01-26 20:04:01.000000000 +0100
+***************
+*** 5967,5973 ****
+ result = STRLEN(eap->arg) + 2;
+ for (p = eap->arg; *p; ++p)
+ {
+! if (*p == '\\' || *p == '"')
+ ++result;
+ }
+
+--- 5967,5980 ----
+ result = STRLEN(eap->arg) + 2;
+ for (p = eap->arg; *p; ++p)
+ {
+! #ifdef FEAT_MBYTE
+! if (enc_dbcs != 0 && (*mb_ptr2len)(p) == 2)
+! /* DBCS can contain \ in a trail byte, skip the
+! * double-byte character. */
+! ++p;
+! else
+! #endif
+! if (*p == '\\' || *p == '"')
+ ++result;
+ }
+
+***************
+*** 5976,5982 ****
+ *buf++ = '"';
+ for (p = eap->arg; *p; ++p)
+ {
+! if (*p == '\\' || *p == '"')
+ *buf++ = '\\';
+ *buf++ = *p;
+ }
+--- 5983,5996 ----
+ *buf++ = '"';
+ for (p = eap->arg; *p; ++p)
+ {
+! #ifdef FEAT_MBYTE
+! if (enc_dbcs != 0 && (*mb_ptr2len)(p) == 2)
+! /* DBCS can contain \ in a trail byte, copy the
+! * double-byte character to avoid escaping. */
+! *buf++ = *p++;
+! else
+! #endif
+! if (*p == '\\' || *p == '"')
+ *buf++ = '\\';
+ *buf++ = *p;
+ }
+*** ../vim-7.3.418/src/version.c 2012-01-26 18:58:25.000000000 +0100
+--- src/version.c 2012-01-26 20:40:34.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 419,
+ /**/
+
+--
+You have heard the saying that if you put a thousand monkeys in a room with a
+thousand typewriters and waited long enough, eventually you would have a room
+full of dead monkeys.
+ (Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.420 b/source/ap/vim/patches/7.3.420
new file mode 100644
index 000000000..d698d0b48
--- /dev/null
+++ b/source/ap/vim/patches/7.3.420
@@ -0,0 +1,70 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.420
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.420
+Problem: "it" and "at" don't work properly with a dash in the tag name.
+Solution: Require a space to match the tag name. (Christian Brabandt)
+Files: src/search.c
+
+
+*** ../vim-7.3.419/src/search.c 2012-01-10 22:26:12.000000000 +0100
+--- src/search.c 2012-01-26 20:51:43.000000000 +0100
+***************
+*** 3918,3924 ****
+ curwin->w_cursor = old_pos;
+ goto theend;
+ }
+! spat = alloc(len + 29);
+ epat = alloc(len + 9);
+ if (spat == NULL || epat == NULL)
+ {
+--- 3918,3924 ----
+ curwin->w_cursor = old_pos;
+ goto theend;
+ }
+! spat = alloc(len + 31);
+ epat = alloc(len + 9);
+ if (spat == NULL || epat == NULL)
+ {
+***************
+*** 3927,3933 ****
+ curwin->w_cursor = old_pos;
+ goto theend;
+ }
+! sprintf((char *)spat, "<%.*s\\>\\%%(\\_[^>]\\{-}[^/]>\\|>\\)\\c", len, p);
+ sprintf((char *)epat, "</%.*s>\\c", len, p);
+
+ r = do_searchpair(spat, (char_u *)"", epat, FORWARD, (char_u *)"",
+--- 3927,3933 ----
+ curwin->w_cursor = old_pos;
+ goto theend;
+ }
+! sprintf((char *)spat, "<%.*s\\>\\%%(\\s\\_[^>]\\{-}[^/]>\\|>\\)\\c", len, p);
+ sprintf((char *)epat, "</%.*s>\\c", len, p);
+
+ r = do_searchpair(spat, (char_u *)"", epat, FORWARD, (char_u *)"",
+*** ../vim-7.3.419/src/version.c 2012-01-26 20:41:22.000000000 +0100
+--- src/version.c 2012-01-26 20:51:16.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 420,
+ /**/
+
+--
+All good vision statements are created by groups of people with bloated
+bladders who would rather be doing anything else.
+ (Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.421 b/source/ap/vim/patches/7.3.421
new file mode 100644
index 000000000..eadc29df2
--- /dev/null
+++ b/source/ap/vim/patches/7.3.421
@@ -0,0 +1,60 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.421
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.421
+Problem: Get E832 when setting 'undofile' in vimrc and there is a file to
+ be edited on the command line. (Toothpik)
+Solution: Do not try reading the undo file for a file that wasn't loaded.
+Files: src/option.c
+
+
+*** ../vim-7.3.420/src/option.c 2012-01-10 22:26:12.000000000 +0100
+--- src/option.c 2012-01-28 17:55:24.000000000 +0100
+***************
+*** 7527,7536 ****
+ {
+ /* When 'undofile' is set globally: for every buffer, otherwise
+ * only for the current buffer: Try to read in the undofile, if
+! * one exists and the buffer wasn't changed. */
+ if ((curbuf == save_curbuf
+ || (opt_flags & OPT_GLOBAL) || opt_flags == 0)
+! && !curbufIsChanged())
+ {
+ u_compute_hash(hash);
+ u_read_undo(NULL, hash, curbuf->b_fname);
+--- 7527,7537 ----
+ {
+ /* When 'undofile' is set globally: for every buffer, otherwise
+ * only for the current buffer: Try to read in the undofile, if
+! * one exists and the buffer wasn't changed and the buffer was
+! * loaded. */
+ if ((curbuf == save_curbuf
+ || (opt_flags & OPT_GLOBAL) || opt_flags == 0)
+! && !curbufIsChanged() && curbuf->b_ml.ml_mfp != NULL)
+ {
+ u_compute_hash(hash);
+ u_read_undo(NULL, hash, curbuf->b_fname);
+*** ../vim-7.3.420/src/version.c 2012-01-26 20:58:21.000000000 +0100
+--- src/version.c 2012-01-28 18:03:09.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 421,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+4. Your eyeglasses have a web site burned in on them.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.422 b/source/ap/vim/patches/7.3.422
new file mode 100644
index 000000000..7be4aebde
--- /dev/null
+++ b/source/ap/vim/patches/7.3.422
@@ -0,0 +1,94 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.422
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.422
+Problem: Python 3 does not have __members__.
+Solution: Add "name" and "number" in another way. (lilydjwg)
+Files: src/if_py_both.h, src/if_python3.c
+
+
+*** ../vim-7.3.421/src/if_py_both.h 2011-09-07 19:30:17.000000000 +0200
+--- src/if_py_both.h 2012-02-04 19:59:43.000000000 +0100
+***************
+*** 1479,1484 ****
+--- 1479,1487 ----
+ {"append", BufferAppend, 1, "Append data to Vim buffer" },
+ {"mark", BufferMark, 1, "Return (row,col) representing position of named mark" },
+ {"range", BufferRange, 1, "Return a range object which represents the part of the given buffer between line numbers s and e" },
++ #if PY_VERSION_HEX >= 0x03000000
++ {"__dir__", BufferDir, 4, "List its attributes" },
++ #endif
+ { NULL, NULL, 0, NULL }
+ };
+
+*** ../vim-7.3.421/src/if_python3.c 2011-09-14 18:59:35.000000000 +0200
+--- src/if_python3.c 2012-02-04 20:13:00.000000000 +0100
+***************
+*** 468,473 ****
+--- 468,474 ----
+ static PyObject *BufferNew (buf_T *);
+ static PyObject *WindowNew(win_T *);
+ static PyObject *LineToString(const char *);
++ static PyObject *BufferDir(PyObject *, PyObject *);
+
+ static PyTypeObject RangeType;
+
+***************
+*** 961,973 ****
+ return Py_BuildValue("s", this->buf->b_ffname);
+ else if (strcmp(name, "number") == 0)
+ return Py_BuildValue("n", this->buf->b_fnum);
+- else if (strcmp(name,"__members__") == 0)
+- return Py_BuildValue("[ss]", "name", "number");
+ else
+ return PyObject_GenericGetAttr(self, nameobj);
+ }
+
+ static PyObject *
+ BufferRepr(PyObject *self)
+ {
+ static char repr[100];
+--- 962,979 ----
+ return Py_BuildValue("s", this->buf->b_ffname);
+ else if (strcmp(name, "number") == 0)
+ return Py_BuildValue("n", this->buf->b_fnum);
+ else
+ return PyObject_GenericGetAttr(self, nameobj);
+ }
+
+ static PyObject *
++ BufferDir(PyObject *self UNUSED, PyObject *args UNUSED)
++ {
++ return Py_BuildValue("[sssss]", "name", "number",
++ "append", "mark", "range");
++ }
++
++ static PyObject *
+ BufferRepr(PyObject *self)
+ {
+ static char repr[100];
+*** ../vim-7.3.421/src/version.c 2012-01-28 18:03:30.000000000 +0100
+--- src/version.c 2012-02-04 20:14:58.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 422,
+ /**/
+
+--
+How To Keep A Healthy Level Of Insanity:
+15. Five days in advance, tell your friends you can't attend their
+ party because you're not in the mood.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.423 b/source/ap/vim/patches/7.3.423
new file mode 100644
index 000000000..74bf62d2a
--- /dev/null
+++ b/source/ap/vim/patches/7.3.423
@@ -0,0 +1,130 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.423
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.423
+Problem: Small mistakes in comments, proto and indent.
+Solution: Fix the mistakes.
+Files: src/ex_cmds2.c, src/structs.h, src/ui.c, src/proto/ex_docmd.pro
+
+
+*** ../vim-7.3.422/src/ex_cmds2.c 2011-10-20 21:38:37.000000000 +0200
+--- src/ex_cmds2.c 2011-11-30 11:02:20.000000000 +0100
+***************
+*** 1939,1945 ****
+ }
+
+ /*
+! * Return TRUE if window "win" is editing then file at the current argument
+ * index.
+ */
+ static int
+--- 1939,1945 ----
+ }
+
+ /*
+! * Return TRUE if window "win" is editing the file at the current argument
+ * index.
+ */
+ static int
+*** ../vim-7.3.422/src/structs.h 2011-05-19 13:40:47.000000000 +0200
+--- src/structs.h 2011-09-10 13:48:53.000000000 +0200
+***************
+*** 1846,1852 ****
+ often, keep it the first item!) */
+
+ #if defined(FEAT_SYN_HL) || defined(FEAT_SPELL)
+! synblock_T *w_s;
+ #endif
+
+ #ifdef FEAT_WINDOWS
+--- 1846,1852 ----
+ often, keep it the first item!) */
+
+ #if defined(FEAT_SYN_HL) || defined(FEAT_SPELL)
+! synblock_T *w_s; /* for :ownsyntax */
+ #endif
+
+ #ifdef FEAT_WINDOWS
+*** ../vim-7.3.422/src/ui.c 2011-07-07 16:20:45.000000000 +0200
+--- src/ui.c 2012-01-21 14:03:42.000000000 +0100
+***************
+*** 2363,2376 ****
+ XtLastTimestampProcessed(XtDisplay(myShell)),
+ clip_x11_convert_selection_cb, clip_x11_lose_ownership_cb,
+ NULL) == False)
+! return FAIL;
+ }
+ else
+ #endif
+ {
+ if (!XChangeProperty(XtDisplay(myShell), XtWindow(myShell),
+ cbd->sel_atom, timestamp_atom, 32, PropModeAppend, NULL, 0))
+! return FAIL;
+ }
+ /* Flush is required in a terminal as nothing else is doing it. */
+ XFlush(XtDisplay(myShell));
+--- 2363,2376 ----
+ XtLastTimestampProcessed(XtDisplay(myShell)),
+ clip_x11_convert_selection_cb, clip_x11_lose_ownership_cb,
+ NULL) == False)
+! return FAIL;
+ }
+ else
+ #endif
+ {
+ if (!XChangeProperty(XtDisplay(myShell), XtWindow(myShell),
+ cbd->sel_atom, timestamp_atom, 32, PropModeAppend, NULL, 0))
+! return FAIL;
+ }
+ /* Flush is required in a terminal as nothing else is doing it. */
+ XFlush(XtDisplay(myShell));
+*** ../vim-7.3.422/src/proto/ex_docmd.pro 2010-08-15 21:57:28.000000000 +0200
+--- src/proto/ex_docmd.pro 2011-01-16 00:22:21.000000000 +0100
+***************
+*** 1,7 ****
+ /* ex_docmd.c */
+ void do_exmode __ARGS((int improved));
+ int do_cmdline_cmd __ARGS((char_u *cmd));
+! int do_cmdline __ARGS((char_u *cmdline, char_u *(*getline)(int, void *, int), void *cookie, int flags));
+ int getline_equal __ARGS((char_u *(*fgetline)(int, void *, int), void *cookie, char_u *(*func)(int, void *, int)));
+ void *getline_cookie __ARGS((char_u *(*fgetline)(int, void *, int), void *cookie));
+ int checkforcmd __ARGS((char_u **pp, char *cmd, int len));
+--- 1,7 ----
+ /* ex_docmd.c */
+ void do_exmode __ARGS((int improved));
+ int do_cmdline_cmd __ARGS((char_u *cmd));
+! int do_cmdline __ARGS((char_u *cmdline, char_u *(*fgetline)(int, void *, int), void *cookie, int flags));
+ int getline_equal __ARGS((char_u *(*fgetline)(int, void *, int), void *cookie, char_u *(*func)(int, void *, int)));
+ void *getline_cookie __ARGS((char_u *(*fgetline)(int, void *, int), void *cookie));
+ int checkforcmd __ARGS((char_u **pp, char *cmd, int len));
+*** ../vim-7.3.422/src/version.c 2012-02-04 20:17:21.000000000 +0100
+--- src/version.c 2012-02-04 21:56:43.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 423,
+ /**/
+
+--
+In many of the more relaxed civilizations on the Outer Eastern Rim of the
+Galaxy, "The Hitchhiker's Guide to the Galaxy" has already supplanted the
+great "Encyclopedia Galactica" as the standard repository of all knowledge
+and wisdom, for though it has many omissions and contains much that is
+apocryphal, or at least wildly inaccurate, it scores over the older, more
+pedestrian work in two important respects.
+First, it is slightly cheaper; and second, it has the words "DON'T PANIC"
+inscribed in large friendly letters on its cover.
+ -- Douglas Adams, "The Hitchhiker's Guide to the Galaxy"
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.424 b/source/ap/vim/patches/7.3.424
new file mode 100644
index 000000000..61786ed8d
--- /dev/null
+++ b/source/ap/vim/patches/7.3.424
@@ -0,0 +1,62 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.424
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.424
+Problem: Win16 version missing some functions.
+Solution: Add #defines for the functions.
+Files: src/gui_w16.c
+
+
+*** ../vim-7.3.423/src/gui_w16.c 2011-01-17 20:08:03.000000000 +0100
+--- src/gui_w16.c 2011-08-10 16:50:21.000000000 +0200
+***************
+*** 21,26 ****
+--- 21,32 ----
+ *
+ */
+
++ /* Win16 doesn't use the "W" methods. */
++ #define pDispatchMessage DispatchMessage
++ #define pGetMessage GetMessage
++ #define pIsDialogMessage IsDialogMessage
++ #define pPeekMessage PeekMessage
++
+ /*
+ * Include the common stuff for MS-Windows GUI.
+ */
+*** ../vim-7.3.423/src/version.c 2012-02-04 21:57:44.000000000 +0100
+--- src/version.c 2012-02-04 22:01:13.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 424,
+ /**/
+
+--
+Now it is such a bizarrely improbable coincidence that anything as
+mind-bogglingly useful as the Babel fish could have evolved purely by chance
+that some thinkers have chosen to see it as a final and clinching proof of the
+NON-existence of God.
+The argument goes something like this: 'I refuse to prove that I exist,' says
+God, 'for proof denies faith, and without faith I am nothing.'
+'But,' says Man, 'the Babel fish is a dead giveaway, isn't it? It could not
+have evolved by chance. It proves you exist, and so therefore, by your own
+arguments, you don't. QED.'
+'Oh dear,' says God, 'I hadn't thought of that,' and promptly vanishes in a
+puff of logic.
+'Oh, that was easy,' says Man, and for an encore goes on to prove that black
+is white and gets himself killed on the next pedestrian crossing.
+ -- Douglas Adams, "The Hitchhiker's Guide to the Galaxy"
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.425 b/source/ap/vim/patches/7.3.425
new file mode 100644
index 000000000..aeadf3a3a
--- /dev/null
+++ b/source/ap/vim/patches/7.3.425
@@ -0,0 +1,78 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.425
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.425 (after 7.3.265)
+Problem: Search history lines are duplicated. (Edwin Steiner)
+Solution: Convert separator character from space to NUL.
+Files: src/ex_getln.c
+
+
+*** ../vim-7.3.424/src/ex_getln.c 2012-01-26 13:01:54.000000000 +0100
+--- src/ex_getln.c 2012-02-04 22:27:43.000000000 +0100
+***************
+*** 6027,6034 ****
+ val = viminfo_readstring(virp, 1, TRUE);
+ if (val != NULL && *val != NUL)
+ {
+ if (!in_history(type, val + (type == HIST_SEARCH),
+! viminfo_add_at_front, *val))
+ {
+ /* Need to re-allocate to append the separator byte. */
+ len = STRLEN(val);
+--- 6027,6036 ----
+ val = viminfo_readstring(virp, 1, TRUE);
+ if (val != NULL && *val != NUL)
+ {
++ int sep = (*val == ' ' ? NUL : *val);
++
+ if (!in_history(type, val + (type == HIST_SEARCH),
+! viminfo_add_at_front, sep))
+ {
+ /* Need to re-allocate to append the separator byte. */
+ len = STRLEN(val);
+***************
+*** 6040,6046 ****
+ /* Search entry: Move the separator from the first
+ * column to after the NUL. */
+ mch_memmove(p, val + 1, (size_t)len);
+! p[len] = (*val == ' ' ? NUL : *val);
+ }
+ else
+ {
+--- 6042,6048 ----
+ /* Search entry: Move the separator from the first
+ * column to after the NUL. */
+ mch_memmove(p, val + 1, (size_t)len);
+! p[len] = sep;
+ }
+ else
+ {
+*** ../vim-7.3.424/src/version.c 2012-02-04 22:01:44.000000000 +0100
+--- src/version.c 2012-02-04 22:30:36.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 425,
+ /**/
+
+--
+"So this is it," said Arthur, "we are going to die."
+"Yes," said Ford, "except...no! Wait a minute!" He suddenly lunged across
+the chamber at something behind Arthur's line of vision. "What's this
+switch?" he cried.
+"What? Where?" cried Arthur, twisting around.
+"No, I was only fooling," said Ford, "we are going to die after all."
+ -- Douglas Adams, "The Hitchhiker's Guide to the Galaxy"
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.426 b/source/ap/vim/patches/7.3.426
new file mode 100644
index 000000000..76380af1a
--- /dev/null
+++ b/source/ap/vim/patches/7.3.426
@@ -0,0 +1,279 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.426
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.426
+Problem: With '$' in 'cpoptions' the $ is not displayed in the first
+ column.
+Solution: Use -1 instead of 0 as a special value. (Hideki Eiraku and
+ Hirohito Higashi)
+Files: src/edit.c, src/globals.h, src/move.c, src/screen.c, src/search.c
+
+
+*** ../vim-7.3.425/src/edit.c 2012-01-26 18:58:25.000000000 +0100
+--- src/edit.c 2012-02-04 23:23:45.000000000 +0100
+***************
+*** 1763,1771 ****
+ static void
+ undisplay_dollar()
+ {
+! if (dollar_vcol)
+ {
+! dollar_vcol = 0;
+ redrawWinline(curwin->w_cursor.lnum, FALSE);
+ }
+ }
+--- 1763,1771 ----
+ static void
+ undisplay_dollar()
+ {
+! if (dollar_vcol >= 0)
+ {
+! dollar_vcol = -1;
+ redrawWinline(curwin->w_cursor.lnum, FALSE);
+ }
+ }
+***************
+*** 5441,5447 ****
+ compl_curr_match->cp_number);
+ edit_submode_extra = match_ref;
+ edit_submode_highl = HLF_R;
+! if (dollar_vcol)
+ curs_columns(FALSE);
+ }
+ }
+--- 5441,5447 ----
+ compl_curr_match->cp_number);
+ edit_submode_extra = match_ref;
+ edit_submode_highl = HLF_R;
+! if (dollar_vcol >= 0)
+ curs_columns(FALSE);
+ }
+ }
+***************
+*** 8961,8967 ****
+ * We can emulate the vi behaviour by pretending there is a dollar
+ * displayed even when there isn't.
+ * --pkv Sun Jan 19 01:56:40 EST 2003 */
+! if (vim_strchr(p_cpo, CPO_BACKSPACE) != NULL && dollar_vcol == 0)
+ dollar_vcol = curwin->w_virtcol;
+
+ #ifdef FEAT_FOLDING
+--- 8961,8967 ----
+ * We can emulate the vi behaviour by pretending there is a dollar
+ * displayed even when there isn't.
+ * --pkv Sun Jan 19 01:56:40 EST 2003 */
+! if (vim_strchr(p_cpo, CPO_BACKSPACE) != NULL && dollar_vcol == -1)
+ dollar_vcol = curwin->w_virtcol;
+
+ #ifdef FEAT_FOLDING
+*** ../vim-7.3.425/src/globals.h 2011-05-10 16:41:13.000000000 +0200
+--- src/globals.h 2012-02-04 23:24:07.000000000 +0100
+***************
+*** 113,121 ****
+ * When '$' is included in 'cpoptions' option set:
+ * When a change command is given that deletes only part of a line, a dollar
+ * is put at the end of the changed text. dollar_vcol is set to the virtual
+! * column of this '$'.
+ */
+! EXTERN colnr_T dollar_vcol INIT(= 0);
+
+ #ifdef FEAT_INS_EXPAND
+ /*
+--- 113,121 ----
+ * When '$' is included in 'cpoptions' option set:
+ * When a change command is given that deletes only part of a line, a dollar
+ * is put at the end of the changed text. dollar_vcol is set to the virtual
+! * column of this '$'. -1 is used to indicate no $ is being displayed.
+ */
+! EXTERN colnr_T dollar_vcol INIT(= -1);
+
+ #ifdef FEAT_INS_EXPAND
+ /*
+*** ../vim-7.3.425/src/move.c 2012-01-10 22:26:12.000000000 +0100
+--- src/move.c 2012-02-04 23:21:08.000000000 +0100
+***************
+*** 362,368 ****
+ #endif
+ )
+ {
+! dollar_vcol = 0;
+ if (curwin->w_skipcol != 0)
+ {
+ curwin->w_skipcol = 0;
+--- 362,368 ----
+ #endif
+ )
+ {
+! dollar_vcol = -1;
+ if (curwin->w_skipcol != 0)
+ {
+ curwin->w_skipcol = 0;
+***************
+*** 966,972 ****
+
+ /* remove '$' from change command when cursor moves onto it */
+ if (startcol > dollar_vcol)
+! dollar_vcol = 0;
+
+ extra = curwin_col_off();
+ curwin->w_wcol = curwin->w_virtcol + extra;
+--- 966,972 ----
+
+ /* remove '$' from change command when cursor moves onto it */
+ if (startcol > dollar_vcol)
+! dollar_vcol = -1;
+
+ extra = curwin_col_off();
+ curwin->w_wcol = curwin->w_virtcol + extra;
+*** ../vim-7.3.425/src/screen.c 2012-01-10 22:26:12.000000000 +0100
+--- src/screen.c 2012-02-04 23:22:44.000000000 +0100
+***************
+*** 1637,1647 ****
+ * When at start of changed lines: May scroll following lines
+ * up or down to minimize redrawing.
+ * Don't do this when the change continues until the end.
+! * Don't scroll when dollar_vcol is non-zero, keep the "$".
+ */
+ if (lnum == mod_top
+ && mod_bot != MAXLNUM
+! && !(dollar_vcol != 0 && mod_bot == mod_top + 1))
+ {
+ int old_rows = 0;
+ int new_rows = 0;
+--- 1637,1647 ----
+ * When at start of changed lines: May scroll following lines
+ * up or down to minimize redrawing.
+ * Don't do this when the change continues until the end.
+! * Don't scroll when dollar_vcol >= 0, keep the "$".
+ */
+ if (lnum == mod_top
+ && mod_bot != MAXLNUM
+! && !(dollar_vcol >= 0 && mod_bot == mod_top + 1))
+ {
+ int old_rows = 0;
+ int new_rows = 0;
+***************
+*** 1868,1879 ****
+ if (row > wp->w_height) /* past end of screen */
+ {
+ /* we may need the size of that too long line later on */
+! if (dollar_vcol == 0)
+ wp->w_lines[idx].wl_size = plines_win(wp, lnum, TRUE);
+ ++idx;
+ break;
+ }
+! if (dollar_vcol == 0)
+ wp->w_lines[idx].wl_size = row - srow;
+ ++idx;
+ #ifdef FEAT_FOLDING
+--- 1868,1879 ----
+ if (row > wp->w_height) /* past end of screen */
+ {
+ /* we may need the size of that too long line later on */
+! if (dollar_vcol == -1)
+ wp->w_lines[idx].wl_size = plines_win(wp, lnum, TRUE);
+ ++idx;
+ break;
+ }
+! if (dollar_vcol == -1)
+ wp->w_lines[idx].wl_size = row - srow;
+ ++idx;
+ #ifdef FEAT_FOLDING
+***************
+*** 1990,1996 ****
+ }
+ #endif
+ }
+! else if (dollar_vcol == 0)
+ wp->w_botline = lnum;
+
+ /* make sure the rest of the screen is blank */
+--- 1990,1996 ----
+ }
+ #endif
+ }
+! else if (dollar_vcol == -1)
+ wp->w_botline = lnum;
+
+ /* make sure the rest of the screen is blank */
+***************
+*** 2005,2011 ****
+ wp->w_old_botfill = wp->w_botfill;
+ #endif
+
+! if (dollar_vcol == 0)
+ {
+ /*
+ * There is a trick with w_botline. If we invalidate it on each
+--- 2005,2011 ----
+ wp->w_old_botfill = wp->w_botfill;
+ #endif
+
+! if (dollar_vcol == -1)
+ {
+ /*
+ * There is a trick with w_botline. If we invalidate it on each
+***************
+*** 3564,3570 ****
+ }
+
+ /* When still displaying '$' of change command, stop at cursor */
+! if (dollar_vcol != 0 && wp == curwin
+ && lnum == wp->w_cursor.lnum && vcol >= (long)wp->w_virtcol
+ #ifdef FEAT_DIFF
+ && filler_todo <= 0
+--- 3564,3570 ----
+ }
+
+ /* When still displaying '$' of change command, stop at cursor */
+! if (dollar_vcol >= 0 && wp == curwin
+ && lnum == wp->w_cursor.lnum && vcol >= (long)wp->w_virtcol
+ #ifdef FEAT_DIFF
+ && filler_todo <= 0
+*** ../vim-7.3.425/src/search.c 2012-01-26 20:58:21.000000000 +0100
+--- src/search.c 2012-02-04 23:23:10.000000000 +0100
+***************
+*** 2501,2508 ****
+ save_siso = p_siso;
+ /* Handle "$" in 'cpo': If the ')' is typed on top of the "$",
+ * stop displaying the "$". */
+! if (dollar_vcol > 0 && dollar_vcol == curwin->w_virtcol)
+! dollar_vcol = 0;
+ ++curwin->w_virtcol; /* do display ')' just before "$" */
+ update_screen(VALID); /* show the new char first */
+
+--- 2501,2508 ----
+ save_siso = p_siso;
+ /* Handle "$" in 'cpo': If the ')' is typed on top of the "$",
+ * stop displaying the "$". */
+! if (dollar_vcol >= 0 && dollar_vcol == curwin->w_virtcol)
+! dollar_vcol = -1;
+ ++curwin->w_virtcol; /* do display ')' just before "$" */
+ update_screen(VALID); /* show the new char first */
+
+*** ../vim-7.3.425/src/version.c 2012-02-04 22:44:27.000000000 +0100
+--- src/version.c 2012-02-04 23:32:55.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 426,
+ /**/
+
+
+--
+I am also told that there is a logical proof out there somewhere
+that demonstrates that there is no task which duct tape cannot handle.
+ -- Paul Brannan
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.427 b/source/ap/vim/patches/7.3.427
new file mode 100644
index 000000000..61df88122
--- /dev/null
+++ b/source/ap/vim/patches/7.3.427
@@ -0,0 +1,378 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.427
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.427
+Problem: readfile() can be slow with long lines.
+Solution: Use realloc() instead of alloc(). (John Little)
+Files: src/eval.c
+
+
+*** ../vim-7.3.426/src/eval.c 2012-01-26 14:32:26.000000000 +0100
+--- src/eval.c 2012-02-05 00:25:39.000000000 +0100
+***************
+*** 14325,14346 ****
+ typval_T *rettv;
+ {
+ int binary = FALSE;
+ char_u *fname;
+ FILE *fd;
+! listitem_T *li;
+! #define FREAD_SIZE 200 /* optimized for text lines */
+! char_u buf[FREAD_SIZE];
+! int readlen; /* size of last fread() */
+! int buflen; /* nr of valid chars in buf[] */
+! int filtd; /* how much in buf[] was NUL -> '\n' filtered */
+! int tolist; /* first byte in buf[] still to be put in list */
+! int chop; /* how many CR to chop off */
+! char_u *prev = NULL; /* previously read bytes, if any */
+! int prevlen = 0; /* length of "prev" if not NULL */
+! char_u *s;
+! int len;
+! long maxline = MAXLNUM;
+! long cnt = 0;
+
+ if (argvars[1].v_type != VAR_UNKNOWN)
+ {
+--- 14325,14343 ----
+ typval_T *rettv;
+ {
+ int binary = FALSE;
++ int failed = FALSE;
+ char_u *fname;
+ FILE *fd;
+! char_u buf[(IOSIZE/256)*256]; /* rounded to avoid odd + 1 */
+! int io_size = sizeof(buf);
+! int readlen; /* size of last fread() */
+! char_u *prev = NULL; /* previously read bytes, if any */
+! long prevlen = 0; /* length of data in prev */
+! long prevsize = 0; /* size of prev buffer */
+! long maxline = MAXLNUM;
+! long cnt = 0;
+! char_u *p; /* position in buf */
+! char_u *start; /* start of current line */
+
+ if (argvars[1].v_type != VAR_UNKNOWN)
+ {
+***************
+*** 14362,14410 ****
+ return;
+ }
+
+- filtd = 0;
+ while (cnt < maxline || maxline < 0)
+ {
+! readlen = (int)fread(buf + filtd, 1, FREAD_SIZE - filtd, fd);
+! buflen = filtd + readlen;
+! tolist = 0;
+! for ( ; filtd < buflen || readlen <= 0; ++filtd)
+! {
+! if (readlen <= 0 || buf[filtd] == '\n')
+! {
+! /* In binary mode add an empty list item when the last
+! * non-empty line ends in a '\n'. */
+! if (!binary && readlen == 0 && filtd == 0 && prev == NULL)
+! break;
+
+! /* Found end-of-line or end-of-file: add a text line to the
+! * list. */
+! chop = 0;
+! if (!binary)
+! while (filtd - chop - 1 >= tolist
+! && buf[filtd - chop - 1] == '\r')
+! ++chop;
+! len = filtd - tolist - chop;
+! if (prev == NULL)
+! s = vim_strnsave(buf + tolist, len);
+ else
+ {
+! s = alloc((unsigned)(prevlen + len + 1));
+! if (s != NULL)
+ {
+! mch_memmove(s, prev, prevlen);
+! vim_free(prev);
+! prev = NULL;
+! mch_memmove(s + prevlen, buf + tolist, len);
+ s[prevlen + len] = NUL;
+ }
+ }
+! tolist = filtd + 1;
+
+! li = listitem_alloc();
+! if (li == NULL)
+ {
+ vim_free(s);
+ break;
+ }
+ li->li_tv.v_type = VAR_STRING;
+--- 14359,14419 ----
+ return;
+ }
+
+ while (cnt < maxline || maxline < 0)
+ {
+! readlen = (int)fread(buf, 1, io_size, fd);
+!
+! /* This for loop processes what was read, but is also entered at end
+! * of file so that either:
+! * - an incomplete line gets written
+! * - a "binary" file gets an empty line at the end if it ends in a
+! * newline. */
+! for (p = buf, start = buf;
+! p < buf + readlen || (readlen <= 0 && (prevlen > 0 || binary));
+! ++p)
+! {
+! if (*p == '\n' || readlen <= 0)
+! {
+! listitem_T *li;
+! char_u *s = NULL;
+! long_u len = p - start;
+
+! /* Finished a line. Remove CRs before NL. */
+! if (readlen > 0 && !binary)
+! {
+! while (len > 0 && start[len - 1] == '\r')
+! --len;
+! /* removal may cross back to the "prev" string */
+! if (len == 0)
+! while (prevlen > 0 && prev[prevlen - 1] == '\r')
+! --prevlen;
+! }
+! if (prevlen == 0)
+! s = vim_strnsave(start, len);
+ else
+ {
+! /* Change "prev" buffer to be the right size. This way
+! * the bytes are only copied once, and very long lines are
+! * allocated only once. */
+! if ((s = vim_realloc(prev, prevlen + len + 1)) != NULL)
+ {
+! mch_memmove(s + prevlen, start, len);
+ s[prevlen + len] = NUL;
++ prev = NULL; /* the list will own the string */
++ prevlen = prevsize = 0;
+ }
+ }
+! if (s == NULL)
+! {
+! do_outofmem_msg((long_u) prevlen + len + 1);
+! failed = TRUE;
+! break;
+! }
+
+! if ((li = listitem_alloc()) == NULL)
+ {
+ vim_free(s);
++ failed = TRUE;
+ break;
+ }
+ li->li_tv.v_type = VAR_STRING;
+***************
+*** 14412,14485 ****
+ li->li_tv.vval.v_string = s;
+ list_append(rettv->vval.v_list, li);
+
+! if (++cnt >= maxline && maxline >= 0)
+! break;
+! if (readlen <= 0)
+ break;
+ }
+! else if (buf[filtd] == NUL)
+! buf[filtd] = '\n';
+ #ifdef FEAT_MBYTE
+! else if (buf[filtd] == 0xef
+! && enc_utf8
+! && filtd + 2 < buflen
+! && !binary
+! && buf[filtd + 1] == 0xbb
+! && buf[filtd + 2] == 0xbf)
+! {
+! /* remove utf-8 byte order mark */
+! mch_memmove(buf + filtd, buf + filtd + 3, buflen - filtd - 3);
+! --filtd;
+! buflen -= 3;
+ }
+ #endif
+! }
+! if (readlen <= 0)
+! break;
+
+! if (tolist == 0)
+ {
+! if (buflen >= FREAD_SIZE / 2)
+ {
+! /* "buf" is full, need to move text to an allocated buffer */
+! if (prev == NULL)
+ {
+! prev = vim_strnsave(buf, buflen);
+! prevlen = buflen;
+ }
+! else
+ {
+! s = alloc((unsigned)(prevlen + buflen));
+! if (s != NULL)
+! {
+! mch_memmove(s, prev, prevlen);
+! mch_memmove(s + prevlen, buf, buflen);
+! vim_free(prev);
+! prev = s;
+! prevlen += buflen;
+! }
+ }
+! filtd = 0;
+ }
+ }
+! else
+! {
+! mch_memmove(buf, buf + tolist, buflen - tolist);
+! filtd -= tolist;
+! }
+! }
+
+ /*
+ * For a negative line count use only the lines at the end of the file,
+ * free the rest.
+ */
+! if (maxline < 0)
+ while (cnt > -maxline)
+ {
+ listitem_remove(rettv->vval.v_list, rettv->vval.v_list->lv_first);
+ --cnt;
+ }
+
+ vim_free(prev);
+ fclose(fd);
+ }
+--- 14421,14529 ----
+ li->li_tv.vval.v_string = s;
+ list_append(rettv->vval.v_list, li);
+
+! start = p + 1; /* step over newline */
+! if ((++cnt >= maxline && maxline >= 0) || readlen <= 0)
+ break;
+ }
+! else if (*p == NUL)
+! *p = '\n';
+ #ifdef FEAT_MBYTE
+! /* Check for utf8 "bom"; U+FEFF is encoded as EF BB BF. Do this
+! * when finding the BF and check the previous two bytes. */
+! else if (*p == 0xbf && enc_utf8 && !binary)
+! {
+! /* Find the two bytes before the 0xbf. If p is at buf, or buf
+! * + 1, these may be in the "prev" string. */
+! char_u back1 = p >= buf + 1 ? p[-1]
+! : prevlen >= 1 ? prev[prevlen - 1] : NUL;
+! char_u back2 = p >= buf + 2 ? p[-2]
+! : p == buf + 1 && prevlen >= 1 ? prev[prevlen - 1]
+! : prevlen >= 2 ? prev[prevlen - 2] : NUL;
+!
+! if (back2 == 0xef && back1 == 0xbb)
+! {
+! char_u *dest = p - 2;
+!
+! /* Usually a BOM is at the beginning of a file, and so at
+! * the beginning of a line; then we can just step over it.
+! */
+! if (start == dest)
+! start = p + 1;
+! else
+! {
+! /* have to shuffle buf to close gap */
+! int adjust_prevlen = 0;
+!
+! if (dest < buf)
+! {
+! adjust_prevlen = buf - dest; /* must be 1 or 2 */
+! dest = buf;
+! }
+! if (readlen > p - buf + 1)
+! mch_memmove(dest, p + 1, readlen - (p - buf) - 1);
+! readlen -= 3 - adjust_prevlen;
+! prevlen -= adjust_prevlen;
+! p = dest - 1;
+! }
+! }
+ }
+ #endif
+! } /* for */
+
+! if (failed || (cnt >= maxline && maxline >= 0) || readlen <= 0)
+! break;
+! if (start < p)
+ {
+! /* There's part of a line in buf, store it in "prev". */
+! if (p - start + prevlen >= prevsize)
+ {
+! /* need bigger "prev" buffer */
+! char_u *newprev;
+!
+! /* A common use case is ordinary text files and "prev" gets a
+! * fragment of a line, so the first allocation is made
+! * small, to avoid repeatedly 'allocing' large and
+! * 'reallocing' small. */
+! if (prevsize == 0)
+! prevsize = p - start;
+! else
+ {
+! long grow50pc = (prevsize * 3) / 2;
+! long growmin = (p - start) * 2 + prevlen;
+! prevsize = grow50pc > growmin ? grow50pc : growmin;
+ }
+! if ((newprev = vim_realloc(prev, prevsize)) == NULL)
+ {
+! do_outofmem_msg((long_u)prevsize);
+! failed = TRUE;
+! break;
+ }
+! prev = newprev;
+ }
++ /* Add the line part to end of "prev". */
++ mch_memmove(prev + prevlen, start, p - start);
++ prevlen += p - start;
+ }
+! } /* while */
+
+ /*
+ * For a negative line count use only the lines at the end of the file,
+ * free the rest.
+ */
+! if (!failed && maxline < 0)
+ while (cnt > -maxline)
+ {
+ listitem_remove(rettv->vval.v_list, rettv->vval.v_list->lv_first);
+ --cnt;
+ }
+
++ if (failed)
++ {
++ list_free(rettv->vval.v_list, TRUE);
++ /* readfile doc says an empty list is returned on error */
++ rettv->vval.v_list = list_alloc();
++ }
++
+ vim_free(prev);
+ fclose(fd);
+ }
+*** ../vim-7.3.426/src/version.c 2012-02-04 23:34:57.000000000 +0100
+--- src/version.c 2012-02-05 00:38:34.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 427,
+ /**/
+
+--
+One difference between a man and a machine is that a machine is quiet
+when well oiled.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.428 b/source/ap/vim/patches/7.3.428
new file mode 100644
index 000000000..89567ed81
--- /dev/null
+++ b/source/ap/vim/patches/7.3.428
@@ -0,0 +1,113 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.428
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.428
+Problem: Win32: an xpm file without a mask crashes Vim.
+Solution: Fail when the mask is missing. (Dave Bodenstab)
+Files: src/xpm_w32.c
+
+
+*** ../vim-7.3.427/src/xpm_w32.c 2010-08-15 21:57:25.000000000 +0200
+--- src/xpm_w32.c 2012-02-05 00:46:13.000000000 +0100
+***************
+*** 1,4 ****
+! /*
+ * Load XPM image.
+ *
+ * This function is placed in separate file because Xpm headers conflict with
+--- 1,5 ----
+! /* vi:set ts=8 sts=4 sw=4:
+! *
+ * Load XPM image.
+ *
+ * This function is placed in separate file because Xpm headers conflict with
+***************
+*** 30,38 ****
+ #include "xpm.h"
+
+ /*
+! * Tries to load Xpm image from file 'filename'.
+! * If fails return -1.
+! * success - 0 and image and mask BITMAPS
+ */
+ int
+ LoadXpmImage(filename, hImage, hShape)
+--- 31,40 ----
+ #include "xpm.h"
+
+ /*
+! * Tries to load an Xpm image from the file "filename".
+! * Returns -1 on failure.
+! * Returns 0 on success and stores image and mask BITMAPS in "hImage" and
+! * "hShape".
+ */
+ int
+ LoadXpmImage(filename, hImage, hShape)
+***************
+*** 40,46 ****
+ HBITMAP *hImage;
+ HBITMAP *hShape;
+ {
+! XImage *img; /* loaded image */
+ XImage *shp; /* shapeimage */
+ XpmAttributes attr;
+ int res;
+--- 42,48 ----
+ HBITMAP *hImage;
+ HBITMAP *hShape;
+ {
+! XImage *img; /* loaded image */
+ XImage *shp; /* shapeimage */
+ XpmAttributes attr;
+ int res;
+***************
+*** 51,60 ****
+ DeleteDC(hdc);
+ if (res < 0)
+ return -1;
+! else
+ {
+! *hImage = img->bitmap;
+! *hShape = shp->bitmap;
+! return 0;
+ }
+ }
+--- 53,65 ----
+ DeleteDC(hdc);
+ if (res < 0)
+ return -1;
+! if (shp == NULL)
+ {
+! if (img)
+! XDestroyImage(img);
+! return -1;
+ }
++ *hImage = img->bitmap;
++ *hShape = shp->bitmap;
++ return 0;
+ }
+*** ../vim-7.3.427/src/version.c 2012-02-05 00:39:14.000000000 +0100
+--- src/version.c 2012-02-05 00:47:08.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 428,
+ /**/
+
+--
+I'm not familiar with this proof, but I'm aware of a significant
+following of toddlers who believe that peanut butter is the solution
+to all of life's problems... -- Tim Hammerquist
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.429 b/source/ap/vim/patches/7.3.429
new file mode 100644
index 000000000..801e25f9e
--- /dev/null
+++ b/source/ap/vim/patches/7.3.429
@@ -0,0 +1,192 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.429
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.429
+Problem: When 'cpoptions' includes "E" "c0" in the first column is an
+ error. The redo register is then set to the errornous command.
+Solution: Do not set the redo register if the command fails because of an
+ empty region. (Hideki Eiraku)
+Files: src/getchar.c, src/normal.c, src/proto/getchar.pro
+
+
+*** ../vim-7.3.428/src/getchar.c 2012-01-10 22:26:12.000000000 +0100
+--- src/getchar.c 2012-02-05 01:05:09.000000000 +0100
+***************
+*** 470,475 ****
+--- 470,493 ----
+ }
+ }
+
++ /*
++ * Discard the contents of the redo buffer and restore the previous redo
++ * buffer.
++ */
++ void
++ CancelRedo()
++ {
++ if (!block_redo)
++ {
++ free_buff(&redobuff);
++ redobuff = old_redobuff;
++ old_redobuff.bh_first.b_next = NULL;
++ start_stuff();
++ while (read_stuff(TRUE) != NUL)
++ ;
++ }
++ }
++
+ #if defined(FEAT_AUTOCMD) || defined(FEAT_EVAL) || defined(PROTO)
+ /*
+ * Save redobuff and old_redobuff to save_redobuff and save_old_redobuff.
+***************
+*** 691,699 ****
+ * Read a character from the redo buffer. Translates K_SPECIAL, CSI and
+ * multibyte characters.
+ * The redo buffer is left as it is.
+! * if init is TRUE, prepare for redo, return FAIL if nothing to redo, OK
+! * otherwise
+! * if old is TRUE, use old_redobuff instead of redobuff
+ */
+ static int
+ read_redo(init, old_redo)
+--- 709,717 ----
+ * Read a character from the redo buffer. Translates K_SPECIAL, CSI and
+ * multibyte characters.
+ * The redo buffer is left as it is.
+! * If init is TRUE, prepare for redo, return FAIL if nothing to redo, OK
+! * otherwise.
+! * If old is TRUE, use old_redobuff instead of redobuff.
+ */
+ static int
+ read_redo(init, old_redo)
+*** ../vim-7.3.428/src/normal.c 2012-01-26 11:43:04.000000000 +0100
+--- src/normal.c 2012-02-05 01:06:01.000000000 +0100
+***************
+*** 1978,1984 ****
+--- 1978,1987 ----
+ VIsual_reselect = FALSE; /* don't reselect now */
+ #endif
+ if (empty_region_error)
++ {
+ vim_beep();
++ CancelRedo();
++ }
+ else
+ {
+ (void)op_delete(oap);
+***************
+*** 1992,1998 ****
+--- 1995,2004 ----
+ if (empty_region_error)
+ {
+ if (!gui_yank)
++ {
+ vim_beep();
++ CancelRedo();
++ }
+ }
+ else
+ (void)op_yank(oap, FALSE, !gui_yank);
+***************
+*** 2004,2010 ****
+--- 2010,2019 ----
+ VIsual_reselect = FALSE; /* don't reselect now */
+ #endif
+ if (empty_region_error)
++ {
+ vim_beep();
++ CancelRedo();
++ }
+ else
+ {
+ /* This is a new edit command, not a restart. Need to
+***************
+*** 2066,2072 ****
+--- 2075,2084 ----
+ case OP_LOWER:
+ case OP_ROT13:
+ if (empty_region_error)
++ {
+ vim_beep();
++ CancelRedo();
++ }
+ else
+ op_tilde(oap);
+ check_cursor_col();
+***************
+*** 2099,2105 ****
+--- 2111,2120 ----
+ #endif
+ #ifdef FEAT_VISUALEXTRA
+ if (empty_region_error)
++ {
+ vim_beep();
++ CancelRedo();
++ }
+ else
+ {
+ /* This is a new edit command, not a restart. Need to
+***************
+*** 2129,2135 ****
+--- 2144,2153 ----
+ #ifdef FEAT_VISUALEXTRA
+ if (empty_region_error)
+ #endif
++ {
+ vim_beep();
++ CancelRedo();
++ }
+ #ifdef FEAT_VISUALEXTRA
+ else
+ op_replace(oap, cap->nchar);
+*** ../vim-7.3.428/src/proto/getchar.pro 2010-10-20 21:22:17.000000000 +0200
+--- src/proto/getchar.pro 2012-02-05 01:05:20.000000000 +0100
+***************
+*** 4,11 ****
+ char_u *get_inserted __ARGS((void));
+ int stuff_empty __ARGS((void));
+ void typeahead_noflush __ARGS((int c));
+! void flush_buffers __ARGS((int typeahead));
+ void ResetRedobuff __ARGS((void));
+ void saveRedobuff __ARGS((void));
+ void restoreRedobuff __ARGS((void));
+ void AppendToRedobuff __ARGS((char_u *s));
+--- 4,12 ----
+ char_u *get_inserted __ARGS((void));
+ int stuff_empty __ARGS((void));
+ void typeahead_noflush __ARGS((int c));
+! void flush_buffers __ARGS((int flush_typeahead));
+ void ResetRedobuff __ARGS((void));
++ void CancelRedo __ARGS((void));
+ void saveRedobuff __ARGS((void));
+ void restoreRedobuff __ARGS((void));
+ void AppendToRedobuff __ARGS((char_u *s));
+*** ../vim-7.3.428/src/version.c 2012-02-05 00:47:56.000000000 +0100
+--- src/version.c 2012-02-05 01:09:23.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 429,
+ /**/
+
+--
+The History of every major Galactic Civilization tends to pass through
+three distinct and recognizable phases, those of Survival, Inquiry and
+Sophistication, otherwise known as the How, Why and Where phases.
+For instance, the first phase is characterized by the question 'How can
+we eat?' the second by the question 'Why do we eat?' and the third by
+the question 'Where shall we have lunch?'
+ -- Douglas Adams, "The Hitchhiker's Guide to the Galaxy"
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.430 b/source/ap/vim/patches/7.3.430
new file mode 100644
index 000000000..c67e7fb03
--- /dev/null
+++ b/source/ap/vim/patches/7.3.430
@@ -0,0 +1,80 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.430
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.430
+Problem: When a custom filetype detection uses "augroup END" the conf
+ fileytpe detection does not have the filetypedetect group.
+Solution: Always end the group and include filetypedetect in the conf
+ autocommand. (Lech Lorens)
+Files: runtime/filetype.vim
+
+
+*** ../vim-7.3.429/runtime/filetype.vim 2012-02-05 20:08:08.000000000 +0100
+--- runtime/filetype.vim 2012-02-05 19:59:40.000000000 +0100
+***************
+*** 2545,2561 ****
+ " detected filetypes.
+ runtime! ftdetect/*.vim
+
+
+ " Generic configuration file (check this last, it's just guessing!)
+! au BufNewFile,BufRead,StdinReadPost *
+ \ if !did_filetype() && expand("<amatch>") !~ g:ft_ignore_pat
+ \ && (getline(1) =~ '^#' || getline(2) =~ '^#' || getline(3) =~ '^#'
+ \ || getline(4) =~ '^#' || getline(5) =~ '^#') |
+ \ setf conf |
+ \ endif
+
+- augroup END
+-
+
+ " If the GUI is already running, may still need to install the Syntax menu.
+ " Don't do it when the 'M' flag is included in 'guioptions'.
+--- 2545,2563 ----
+ " detected filetypes.
+ runtime! ftdetect/*.vim
+
++ " NOTE: The above command could have ended the filetypedetect autocmd group
++ " and started another one. Let's make sure it has ended to get to a consistant
++ " state.
++ augroup END
+
+ " Generic configuration file (check this last, it's just guessing!)
+! au filetypedetect BufNewFile,BufRead,StdinReadPost *
+ \ if !did_filetype() && expand("<amatch>") !~ g:ft_ignore_pat
+ \ && (getline(1) =~ '^#' || getline(2) =~ '^#' || getline(3) =~ '^#'
+ \ || getline(4) =~ '^#' || getline(5) =~ '^#') |
+ \ setf conf |
+ \ endif
+
+
+ " If the GUI is already running, may still need to install the Syntax menu.
+ " Don't do it when the 'M' flag is included in 'guioptions'.
+*** ../vim-7.3.429/src/version.c 2012-02-05 01:18:41.000000000 +0100
+--- src/version.c 2012-02-05 20:02:18.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 430,
+ /**/
+
+--
+The technology involved in making anything invisible is so infinitely
+complex that nine hundred and ninety-nine billion, nine hundred and
+ninety-nine million, nine hundred and ninety-nine thousand, nine hundred
+and ninety-nine times out of a trillion it is much simpler and more
+effective just to take the thing away and do without it.
+ -- Douglas Adams, "The Hitchhiker's Guide to the Galaxy"
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.431 b/source/ap/vim/patches/7.3.431
new file mode 100644
index 000000000..2e4e62b3f
--- /dev/null
+++ b/source/ap/vim/patches/7.3.431
@@ -0,0 +1,280 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.431
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.431
+Problem: Fetching a key at a prompt may be confused by escape sequences.
+ Especially when getting a prompt at a VimEnter autocommand.
+ (Alex Efros)
+Solution: Properly handle escape sequences deleted by check_termcode().
+Files: src/getchar.c, src/misc1.c, src/term.c, src/proto/term.pro
+
+
+*** ../vim-7.3.430/src/getchar.c 2012-02-05 01:18:41.000000000 +0100
+--- src/getchar.c 2012-02-05 22:04:33.000000000 +0100
+***************
+*** 2282,2288 ****
+ typebuf.tb_off] == RM_YES))
+ && !timedout)
+ {
+! keylen = check_termcode(max_mlen + 1, NULL, 0);
+
+ /* If no termcode matched but 'pastetoggle'
+ * matched partially it's like an incomplete key
+--- 2282,2289 ----
+ typebuf.tb_off] == RM_YES))
+ && !timedout)
+ {
+! keylen = check_termcode(max_mlen + 1,
+! NULL, 0, NULL);
+
+ /* If no termcode matched but 'pastetoggle'
+ * matched partially it's like an incomplete key
+*** ../vim-7.3.430/src/misc1.c 2012-01-10 18:37:53.000000000 +0100
+--- src/misc1.c 2012-02-05 21:59:53.000000000 +0100
+***************
+*** 3105,3112 ****
+ int
+ get_keystroke()
+ {
+! #define CBUFLEN 151
+! char_u buf[CBUFLEN];
+ int len = 0;
+ int n;
+ int save_mapped_ctrl_c = mapped_ctrl_c;
+--- 3105,3113 ----
+ int
+ get_keystroke()
+ {
+! char_u *buf = NULL;
+! int buflen = 150;
+! int maxlen;
+ int len = 0;
+ int n;
+ int save_mapped_ctrl_c = mapped_ctrl_c;
+***************
+*** 3118,3129 ****
+ cursor_on();
+ out_flush();
+
+ /* First time: blocking wait. Second time: wait up to 100ms for a
+! * terminal code to complete. Leave some room for check_termcode() to
+! * insert a key code into (max 5 chars plus NUL). And
+! * fix_input_buffer() can triple the number of bytes. */
+! n = ui_inchar(buf + len, (CBUFLEN - 6 - len) / 3,
+! len == 0 ? -1L : 100L, 0);
+ if (n > 0)
+ {
+ /* Replace zero and CSI by a special key code. */
+--- 3119,3147 ----
+ cursor_on();
+ out_flush();
+
++ /* Leave some room for check_termcode() to insert a key code into (max
++ * 5 chars plus NUL). And fix_input_buffer() can triple the number of
++ * bytes. */
++ maxlen = (buflen - 6 - len) / 3;
++ if (buf == NULL)
++ buf = alloc(buflen);
++ else if (maxlen < 10)
++ {
++ /* Need some more space. This migth happen when receiving a long
++ * escape sequence. */
++ buflen += 100;
++ buf = vim_realloc(buf, buflen);
++ maxlen = (buflen - 6 - len) / 3;
++ }
++ if (buf == NULL)
++ {
++ do_outofmem_msg((long_u)buflen);
++ return ESC; /* panic! */
++ }
++
+ /* First time: blocking wait. Second time: wait up to 100ms for a
+! * terminal code to complete. */
+! n = ui_inchar(buf + len, maxlen, len == 0 ? -1L : 100L, 0);
+ if (n > 0)
+ {
+ /* Replace zero and CSI by a special key code. */
+***************
+*** 3135,3141 ****
+ ++waited; /* keep track of the waiting time */
+
+ /* Incomplete termcode and not timed out yet: get more characters */
+! if ((n = check_termcode(1, buf, len)) < 0
+ && (!p_ttimeout || waited * 100L < (p_ttm < 0 ? p_tm : p_ttm)))
+ continue;
+
+--- 3153,3159 ----
+ ++waited; /* keep track of the waiting time */
+
+ /* Incomplete termcode and not timed out yet: get more characters */
+! if ((n = check_termcode(1, buf, buflen, &len)) < 0
+ && (!p_ttimeout || waited * 100L < (p_ttm < 0 ? p_tm : p_ttm)))
+ continue;
+
+***************
+*** 3203,3209 ****
+ {
+ if (MB_BYTE2LEN(n) > len)
+ continue; /* more bytes to get */
+! buf[len >= CBUFLEN ? CBUFLEN - 1 : len] = NUL;
+ n = (*mb_ptr2char)(buf);
+ }
+ #endif
+--- 3221,3227 ----
+ {
+ if (MB_BYTE2LEN(n) > len)
+ continue; /* more bytes to get */
+! buf[len >= buflen ? buflen - 1 : len] = NUL;
+ n = (*mb_ptr2char)(buf);
+ }
+ #endif
+***************
+*** 3213,3218 ****
+--- 3231,3237 ----
+ #endif
+ break;
+ }
++ vim_free(buf);
+
+ mapped_ctrl_c = save_mapped_ctrl_c;
+ return n;
+*** ../vim-7.3.430/src/term.c 2012-01-26 13:01:54.000000000 +0100
+--- src/term.c 2012-02-05 21:45:09.000000000 +0100
+***************
+*** 3785,3798 ****
+ * With a match, the match is removed, the replacement code is inserted in
+ * typebuf.tb_buf[] and the number of characters in typebuf.tb_buf[] is
+ * returned.
+! * When "buf" is not NULL, it is used instead of typebuf.tb_buf[]. "buflen" is
+! * then the length of the string in buf[].
+ */
+ int
+! check_termcode(max_offset, buf, buflen)
+ int max_offset;
+ char_u *buf;
+! int buflen;
+ {
+ char_u *tp;
+ char_u *p;
+--- 3785,3800 ----
+ * With a match, the match is removed, the replacement code is inserted in
+ * typebuf.tb_buf[] and the number of characters in typebuf.tb_buf[] is
+ * returned.
+! * When "buf" is not NULL, buf[bufsize] is used instead of typebuf.tb_buf[].
+! * "buflen" is then the length of the string in buf[] and is updated for
+! * inserts and deletes.
+ */
+ int
+! check_termcode(max_offset, buf, bufsize, buflen)
+ int max_offset;
+ char_u *buf;
+! int bufsize;
+! int *buflen;
+ {
+ char_u *tp;
+ char_u *p;
+***************
+*** 3864,3873 ****
+ }
+ else
+ {
+! if (offset >= buflen)
+ break;
+ tp = buf + offset;
+! len = buflen - offset;
+ }
+
+ /*
+--- 3866,3875 ----
+ }
+ else
+ {
+! if (offset >= *buflen)
+ break;
+ tp = buf + offset;
+! len = *buflen - offset;
+ }
+
+ /*
+***************
+*** 5002,5013 ****
+ if (extra < 0)
+ /* remove matched characters */
+ mch_memmove(buf + offset, buf + offset - extra,
+! (size_t)(buflen + offset + extra));
+ else if (extra > 0)
+! /* insert the extra space we need */
+ mch_memmove(buf + offset + extra, buf + offset,
+! (size_t)(buflen - offset));
+ mch_memmove(buf + offset, string, (size_t)new_slen);
+ }
+ return retval == 0 ? (len + extra + offset) : retval;
+ }
+--- 5004,5021 ----
+ if (extra < 0)
+ /* remove matched characters */
+ mch_memmove(buf + offset, buf + offset - extra,
+! (size_t)(*buflen + offset + extra));
+ else if (extra > 0)
+! {
+! /* Insert the extra space we need. If there is insufficient
+! * space return -1. */
+! if (*buflen + extra + new_slen >= bufsize)
+! return -1;
+ mch_memmove(buf + offset + extra, buf + offset,
+! (size_t)(*buflen - offset));
+! }
+ mch_memmove(buf + offset, string, (size_t)new_slen);
++ *buflen = *buflen + extra + new_slen;
+ }
+ return retval == 0 ? (len + extra + offset) : retval;
+ }
+*** ../vim-7.3.430/src/proto/term.pro 2010-08-15 21:57:28.000000000 +0200
+--- src/proto/term.pro 2012-02-05 21:45:16.000000000 +0100
+***************
+*** 50,56 ****
+ char_u *get_termcode __ARGS((int i));
+ void del_termcode __ARGS((char_u *name));
+ void set_mouse_topline __ARGS((win_T *wp));
+! int check_termcode __ARGS((int max_offset, char_u *buf, int buflen));
+ char_u *replace_termcodes __ARGS((char_u *from, char_u **bufp, int from_part, int do_lt, int special));
+ int find_term_bykeys __ARGS((char_u *src));
+ void show_termcodes __ARGS((void));
+--- 50,56 ----
+ char_u *get_termcode __ARGS((int i));
+ void del_termcode __ARGS((char_u *name));
+ void set_mouse_topline __ARGS((win_T *wp));
+! int check_termcode __ARGS((int max_offset, char_u *buf, int bufsize, int *buflen));
+ char_u *replace_termcodes __ARGS((char_u *from, char_u **bufp, int from_part, int do_lt, int special));
+ int find_term_bykeys __ARGS((char_u *src));
+ void show_termcodes __ARGS((void));
+*** ../vim-7.3.430/src/version.c 2012-02-05 20:08:30.000000000 +0100
+--- src/version.c 2012-02-05 22:03:43.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 431,
+ /**/
+
+--
+"You know, it's at times like this when I'm trapped in a Vogon airlock with
+a man from Betelgeuse and about to die of asphyxiation in deep space that I
+really wish I'd listened to what my mother told me when I was young!"
+"Why, what did she tell you?"
+"I don't know, I didn't listen!"
+ -- Arthur Dent and Ford Prefect in Douglas Adams'
+ "The Hitchhiker's Guide to the Galaxy"
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.432 b/source/ap/vim/patches/7.3.432
new file mode 100644
index 000000000..c01dd59a0
--- /dev/null
+++ b/source/ap/vim/patches/7.3.432
@@ -0,0 +1,228 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.432
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.432
+Problem: ACLs are not supported for ZFS or NFSv4 on Solaris.
+Solution: Add configure check and code. (Danek Duvall)
+Files: src/configure.in, src/auto/configure, src/config.h.in,
+ src/os_unix.c
+
+
+*** ../vim-7.3.431/src/configure.in 2011-12-14 20:51:19.000000000 +0100
+--- src/configure.in 2012-02-05 22:40:22.000000000 +0100
+***************
+*** 3106,3111 ****
+--- 3106,3112 ----
+
+ dnl Link with -lposix1e for ACL stuff; if not found, try -lacl for SGI
+ dnl when -lacl works, also try to use -lattr (required for Debian).
++ dnl On Solaris, use the acl_get/set functions in libsec, if present.
+ AC_MSG_CHECKING(--disable-acl argument)
+ AC_ARG_ENABLE(acl,
+ [ --disable-acl Don't check for ACL support.],
+***************
+*** 3128,3133 ****
+--- 3129,3135 ----
+ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_POSIX_ACL),
+ AC_MSG_RESULT(no))
+
++ AC_CHECK_LIB(sec, acl_get, [LIBS="$LIBS -lsec"; AC_DEFINE(HAVE_SOLARIS_ZFS_ACL)],
+ AC_MSG_CHECKING(for Solaris ACL support)
+ AC_TRY_LINK([
+ #ifdef HAVE_SYS_ACL_H
+***************
+*** 3135,3141 ****
+ #endif], [acl("foo", GETACLCNT, 0, NULL);
+ ],
+ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SOLARIS_ACL),
+! AC_MSG_RESULT(no))
+
+ AC_MSG_CHECKING(for AIX ACL support)
+ AC_TRY_LINK([
+--- 3137,3143 ----
+ #endif], [acl("foo", GETACLCNT, 0, NULL);
+ ],
+ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SOLARIS_ACL),
+! AC_MSG_RESULT(no)))
+
+ AC_MSG_CHECKING(for AIX ACL support)
+ AC_TRY_LINK([
+*** ../vim-7.3.431/src/auto/configure 2011-12-14 20:51:19.000000000 +0100
+--- src/auto/configure 2012-02-05 22:41:01.000000000 +0100
+***************
+*** 11328,11334 ****
+ rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+
+! { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Solaris ACL support" >&5
+ $as_echo_n "checking for Solaris ACL support... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h. */
+--- 11328,11374 ----
+ rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+
+! { $as_echo "$as_me:${as_lineno-$LINENO}: checking for acl_get in -lsec" >&5
+! $as_echo_n "checking for acl_get in -lsec... " >&6; }
+! if test "${ac_cv_lib_sec_acl_get+set}" = set; then :
+! $as_echo_n "(cached) " >&6
+! else
+! ac_check_lib_save_LIBS=$LIBS
+! LIBS="-lsec $LIBS"
+! cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+! /* end confdefs.h. */
+!
+! /* Override any GCC internal prototype to avoid an error.
+! Use char because int might match the return type of a GCC
+! builtin and then its argument prototype would still apply. */
+! #ifdef __cplusplus
+! extern "C"
+! #endif
+! char acl_get ();
+! int
+! main ()
+! {
+! return acl_get ();
+! ;
+! return 0;
+! }
+! _ACEOF
+! if ac_fn_c_try_link "$LINENO"; then :
+! ac_cv_lib_sec_acl_get=yes
+! else
+! ac_cv_lib_sec_acl_get=no
+! fi
+! rm -f core conftest.err conftest.$ac_objext \
+! conftest$ac_exeext conftest.$ac_ext
+! LIBS=$ac_check_lib_save_LIBS
+! fi
+! { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_sec_acl_get" >&5
+! $as_echo "$ac_cv_lib_sec_acl_get" >&6; }
+! if test "x$ac_cv_lib_sec_acl_get" = x""yes; then :
+! LIBS="$LIBS -lsec"; $as_echo "#define HAVE_SOLARIS_ZFS_ACL 1" >>confdefs.h
+!
+! else
+! { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Solaris ACL support" >&5
+ $as_echo_n "checking for Solaris ACL support... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h. */
+***************
+*** 11355,11360 ****
+--- 11395,11402 ----
+ fi
+ rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
++ fi
++
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for AIX ACL support" >&5
+ $as_echo_n "checking for AIX ACL support... " >&6; }
+*** ../vim-7.3.431/src/config.h.in 2011-09-02 12:27:20.000000000 +0200
+--- src/config.h.in 2012-02-05 22:40:22.000000000 +0100
+***************
+*** 363,368 ****
+--- 363,369 ----
+
+ /* Define if you want to add support for ACL */
+ #undef HAVE_POSIX_ACL
++ #undef HAVE_SOLARIS_ZFS_ACL
+ #undef HAVE_SOLARIS_ACL
+ #undef HAVE_AIX_ACL
+
+*** ../vim-7.3.431/src/os_unix.c 2012-01-10 22:26:12.000000000 +0100
+--- src/os_unix.c 2012-02-05 22:40:22.000000000 +0100
+***************
+*** 2746,2751 ****
+--- 2746,2758 ----
+ #ifdef HAVE_POSIX_ACL
+ ret = (vim_acl_T)acl_get_file((char *)fname, ACL_TYPE_ACCESS);
+ #else
++ #ifdef HAVE_SOLARIS_ZFS_ACL
++ acl_t *aclent;
++
++ if (acl_get((char *)fname, 0, &aclent) < 0)
++ return NULL;
++ ret = (vim_acl_T)aclent;
++ #else
+ #ifdef HAVE_SOLARIS_ACL
+ vim_acl_solaris_T *aclent;
+
+***************
+*** 2791,2796 ****
+--- 2798,2804 ----
+ ret = (vim_acl_T)aclent;
+ #endif /* HAVE_AIX_ACL */
+ #endif /* HAVE_SOLARIS_ACL */
++ #endif /* HAVE_SOLARIS_ZFS_ACL */
+ #endif /* HAVE_POSIX_ACL */
+ return ret;
+ }
+***************
+*** 2808,2813 ****
+--- 2816,2824 ----
+ #ifdef HAVE_POSIX_ACL
+ acl_set_file((char *)fname, ACL_TYPE_ACCESS, (acl_t)aclent);
+ #else
++ #ifdef HAVE_SOLARIS_ZFS_ACL
++ acl_set((char *)fname, (acl_t *)aclent);
++ #else
+ #ifdef HAVE_SOLARIS_ACL
+ acl((char *)fname, SETACL, ((vim_acl_solaris_T *)aclent)->acl_cnt,
+ ((vim_acl_solaris_T *)aclent)->acl_entry);
+***************
+*** 2816,2821 ****
+--- 2827,2833 ----
+ chacl((char *)fname, aclent, ((struct acl *)aclent)->acl_len);
+ #endif /* HAVE_AIX_ACL */
+ #endif /* HAVE_SOLARIS_ACL */
++ #endif /* HAVE_SOLARIS_ZFS_ACL */
+ #endif /* HAVE_POSIX_ACL */
+ }
+
+***************
+*** 2828,2833 ****
+--- 2840,2848 ----
+ #ifdef HAVE_POSIX_ACL
+ acl_free((acl_t)aclent);
+ #else
++ #ifdef HAVE_SOLARIS_ZFS_ACL
++ acl_free((acl_t *)aclent);
++ #else
+ #ifdef HAVE_SOLARIS_ACL
+ free(((vim_acl_solaris_T *)aclent)->acl_entry);
+ free(aclent);
+***************
+*** 2836,2841 ****
+--- 2851,2857 ----
+ free(aclent);
+ #endif /* HAVE_AIX_ACL */
+ #endif /* HAVE_SOLARIS_ACL */
++ #endif /* HAVE_SOLARIS_ZFS_ACL */
+ #endif /* HAVE_POSIX_ACL */
+ }
+ #endif
+*** ../vim-7.3.431/src/version.c 2012-02-05 22:05:44.000000000 +0100
+--- src/version.c 2012-02-05 22:44:10.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 432,
+ /**/
+
+--
+If you put 7 of the most talented OSS developers in a room for a week
+and asked them to fix a bug in a spreadsheet program, in 1 week
+you'd have 2 new mail readers and a text-based web browser.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.433 b/source/ap/vim/patches/7.3.433
new file mode 100644
index 000000000..bb83828ff
--- /dev/null
+++ b/source/ap/vim/patches/7.3.433
@@ -0,0 +1,92 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.433
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.433
+Problem: Using continued lines in a Vim script can be slow.
+Solution: Instead of reallocating for every line use a growarray. (Yasuhiro
+ Matsumoto)
+Files: src/ex_cmds2.c
+
+
+*** ../vim-7.3.432/src/ex_cmds2.c 2012-02-04 21:57:44.000000000 +0100
+--- src/ex_cmds2.c 2012-02-05 23:06:31.000000000 +0100
+***************
+*** 3439,3460 ****
+ {
+ /* compensate for the one line read-ahead */
+ --sourcing_lnum;
+! for (;;)
+ {
+! sp->nextline = get_one_sourceline(sp);
+! if (sp->nextline == NULL)
+! break;
+! p = skipwhite(sp->nextline);
+! if (*p != '\\')
+! break;
+! s = alloc((unsigned)(STRLEN(line) + STRLEN(p)));
+! if (s == NULL) /* out of memory */
+! break;
+! STRCPY(s, line);
+! STRCAT(s, p + 1);
+ vim_free(line);
+! line = s;
+! vim_free(sp->nextline);
+ }
+ }
+
+--- 3439,3470 ----
+ {
+ /* compensate for the one line read-ahead */
+ --sourcing_lnum;
+!
+! /* Get the next line and concatenate it when it starts with a
+! * backslash. We always need to read the next line, keep it in
+! * sp->nextline. */
+! sp->nextline = get_one_sourceline(sp);
+! if (sp->nextline != NULL && *(p = skipwhite(sp->nextline)) == '\\')
+ {
+! garray_T ga;
+!
+! ga_init2(&ga, (int)sizeof(char_u), 200);
+! ga_concat(&ga, line);
+! ga_concat(&ga, p + 1);
+! for (;;)
+! {
+! vim_free(sp->nextline);
+! sp->nextline = get_one_sourceline(sp);
+! if (sp->nextline == NULL)
+! break;
+! p = skipwhite(sp->nextline);
+! if (*p != '\\')
+! break;
+! ga_concat(&ga, p + 1);
+! }
+! ga_append(&ga, NUL);
+ vim_free(line);
+! line = ga.ga_data;
+ }
+ }
+
+*** ../vim-7.3.432/src/version.c 2012-02-05 22:51:27.000000000 +0100
+--- src/version.c 2012-02-05 23:09:21.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 433,
+ /**/
+
+--
+Due knot trussed yore spell chequer two fined awl miss steaks.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.434 b/source/ap/vim/patches/7.3.434
new file mode 100644
index 000000000..52c14b90d
--- /dev/null
+++ b/source/ap/vim/patches/7.3.434
@@ -0,0 +1,233 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.434
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.434
+Problem: Using join() can be slow.
+Solution: Compute the size of the result before allocation to avoid a lot of
+ allocations and copies. (Taro Muraoka)
+Files: src/eval.c
+
+
+*** ../vim-7.3.433/src/eval.c 2012-02-05 00:39:14.000000000 +0100
+--- src/eval.c 2012-02-06 00:05:31.000000000 +0100
+***************
+*** 442,447 ****
+--- 442,448 ----
+ static list_T *list_copy __ARGS((list_T *orig, int deep, int copyID));
+ static void list_remove __ARGS((list_T *l, listitem_T *item, listitem_T *item2));
+ static char_u *list2string __ARGS((typval_T *tv, int copyID));
++ static int list_join_inner __ARGS((garray_T *gap, list_T *l, char_u *sep, int echo_style, int copyID, garray_T *join_gap));
+ static int list_join __ARGS((garray_T *gap, list_T *l, char_u *sep, int echo, int copyID));
+ static int free_unref_items __ARGS((int copyID));
+ static void set_ref_in_ht __ARGS((hashtab_T *ht, int copyID));
+***************
+*** 6571,6617 ****
+ return (char_u *)ga.ga_data;
+ }
+
+! /*
+! * Join list "l" into a string in "*gap", using separator "sep".
+! * When "echo_style" is TRUE use String as echoed, otherwise as inside a List.
+! * Return FAIL or OK.
+! */
+ static int
+! list_join(gap, l, sep, echo_style, copyID)
+! garray_T *gap;
+ list_T *l;
+ char_u *sep;
+ int echo_style;
+ int copyID;
+ {
+ int first = TRUE;
+ char_u *tofree;
+ char_u numbuf[NUMBUFLEN];
+ listitem_T *item;
+ char_u *s;
+
+ for (item = l->lv_first; item != NULL && !got_int; item = item->li_next)
+ {
+- if (first)
+- first = FALSE;
+- else
+- ga_concat(gap, sep);
+-
+ if (echo_style)
+ s = echo_string(&item->li_tv, &tofree, numbuf, copyID);
+ else
+ s = tv2string(&item->li_tv, &tofree, numbuf, copyID);
+- if (s != NULL)
+- ga_concat(gap, s);
+- vim_free(tofree);
+ if (s == NULL)
+ return FAIL;
+ line_breakcheck();
+ }
+ return OK;
+ }
+
+ /*
+ * Garbage collection for lists and dictionaries.
+ *
+ * We use reference counts to be able to free most items right away when they
+--- 6572,6690 ----
+ return (char_u *)ga.ga_data;
+ }
+
+! typedef struct join_S {
+! char_u *s;
+! char_u *tofree;
+! } join_T;
+!
+ static int
+! list_join_inner(gap, l, sep, echo_style, copyID, join_gap)
+! garray_T *gap; /* to store the result in */
+ list_T *l;
+ char_u *sep;
+ int echo_style;
+ int copyID;
++ garray_T *join_gap; /* to keep each list item string */
+ {
++ int i;
++ join_T *p;
++ int len;
++ int sumlen = 0;
+ int first = TRUE;
+ char_u *tofree;
+ char_u numbuf[NUMBUFLEN];
+ listitem_T *item;
+ char_u *s;
+
++ /* Stringify each item in the list. */
+ for (item = l->lv_first; item != NULL && !got_int; item = item->li_next)
+ {
+ if (echo_style)
+ s = echo_string(&item->li_tv, &tofree, numbuf, copyID);
+ else
+ s = tv2string(&item->li_tv, &tofree, numbuf, copyID);
+ if (s == NULL)
+ return FAIL;
++
++ len = (int)STRLEN(s);
++ sumlen += len;
++
++ ga_grow(join_gap, 1);
++ p = ((join_T *)join_gap->ga_data) + (join_gap->ga_len++);
++ if (tofree != NULL || s != numbuf)
++ {
++ p->s = s;
++ p->tofree = tofree;
++ }
++ else
++ {
++ p->s = vim_strnsave(s, len);
++ p->tofree = p->s;
++ }
++
++ line_breakcheck();
++ }
++
++ /* Allocate result buffer with its total size, avoid re-allocation and
++ * multiple copy operations. Add 2 for a tailing ']' and NUL. */
++ if (join_gap->ga_len >= 2)
++ sumlen += (int)STRLEN(sep) * (join_gap->ga_len - 1);
++ if (ga_grow(gap, sumlen + 2) == FAIL)
++ return FAIL;
++
++ for (i = 0; i < join_gap->ga_len && !got_int; ++i)
++ {
++ if (first)
++ first = FALSE;
++ else
++ ga_concat(gap, sep);
++ p = ((join_T *)join_gap->ga_data) + i;
++
++ if (p->s != NULL)
++ ga_concat(gap, p->s);
+ line_breakcheck();
+ }
++
+ return OK;
+ }
+
+ /*
++ * Join list "l" into a string in "*gap", using separator "sep".
++ * When "echo_style" is TRUE use String as echoed, otherwise as inside a List.
++ * Return FAIL or OK.
++ */
++ static int
++ list_join(gap, l, sep, echo_style, copyID)
++ garray_T *gap;
++ list_T *l;
++ char_u *sep;
++ int echo_style;
++ int copyID;
++ {
++ garray_T join_ga;
++ int retval;
++ join_T *p;
++ int i;
++
++ ga_init2(&join_ga, (int)sizeof(join_T), l->lv_len);
++ retval = list_join_inner(gap, l, sep, echo_style, copyID, &join_ga);
++
++ /* Dispose each item in join_ga. */
++ if (join_ga.ga_data != NULL)
++ {
++ p = (join_T *)join_ga.ga_data;
++ for (i = 0; i < join_ga.ga_len; ++i)
++ {
++ vim_free(p->tofree);
++ ++p;
++ }
++ ga_clear(&join_ga);
++ }
++
++ return retval;
++ }
++
++ /*
+ * Garbage collection for lists and dictionaries.
+ *
+ * We use reference counts to be able to free most items right away when they
+***************
+*** 13406,13412 ****
+ char_u *rhs;
+ int mode;
+ int abbr = FALSE;
+! int get_dict = FALSE;
+ mapblock_T *mp;
+ int buffer_local;
+
+--- 13479,13485 ----
+ char_u *rhs;
+ int mode;
+ int abbr = FALSE;
+! int get_dict = FALSE;
+ mapblock_T *mp;
+ int buffer_local;
+
+*** ../vim-7.3.433/src/version.c 2012-02-05 23:10:25.000000000 +0100
+--- src/version.c 2012-02-06 00:10:23.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 434,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+30. Even though you died last week, you've managed to retain OPS on your
+ favorite IRC channel.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.435 b/source/ap/vim/patches/7.3.435
new file mode 100644
index 000000000..e1b13709a
--- /dev/null
+++ b/source/ap/vim/patches/7.3.435
@@ -0,0 +1,63 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.435
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.435
+Problem: Compiler warning for unused variable.
+Solution: Move the variable inside #ifdef.
+Files: src/ex_cmds2.c
+
+
+*** ../vim-7.3.434/src/ex_cmds2.c 2012-02-05 23:10:25.000000000 +0100
+--- src/ex_cmds2.c 2012-02-06 06:16:28.000000000 +0100
+***************
+*** 3400,3406 ****
+ {
+ struct source_cookie *sp = (struct source_cookie *)cookie;
+ char_u *line;
+! char_u *p, *s;
+
+ #ifdef FEAT_EVAL
+ /* If breakpoints have been added/deleted need to check for it. */
+--- 3400,3406 ----
+ {
+ struct source_cookie *sp = (struct source_cookie *)cookie;
+ char_u *line;
+! char_u *p;
+
+ #ifdef FEAT_EVAL
+ /* If breakpoints have been added/deleted need to check for it. */
+***************
+*** 3471,3476 ****
+--- 3471,3478 ----
+ #ifdef FEAT_MBYTE
+ if (line != NULL && sp->conv.vc_type != CONV_NONE)
+ {
++ char_u *s;
++
+ /* Convert the encoding of the script line. */
+ s = string_convert(&sp->conv, line, NULL);
+ if (s != NULL)
+*** ../vim-7.3.434/src/version.c 2012-02-06 00:13:16.000000000 +0100
+--- src/version.c 2012-02-11 20:38:49.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 435,
+ /**/
+
+--
+Light travels faster than sound. This is why some people
+appear bright until you hear them speak
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.436 b/source/ap/vim/patches/7.3.436
new file mode 100644
index 000000000..777371ca9
--- /dev/null
+++ b/source/ap/vim/patches/7.3.436
@@ -0,0 +1,111 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.436
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.436
+Problem: Compiler warnings for types on Windows.
+Solution: Add type casts. (Mike Williams)
+Files: src/eval.c
+
+
+*** ../vim-7.3.435/src/eval.c 2012-02-06 00:13:16.000000000 +0100
+--- src/eval.c 2012-02-11 20:38:16.000000000 +0100
+***************
+*** 14462,14468 ****
+ --prevlen;
+ }
+ if (prevlen == 0)
+! s = vim_strnsave(start, len);
+ else
+ {
+ /* Change "prev" buffer to be the right size. This way
+--- 14462,14468 ----
+ --prevlen;
+ }
+ if (prevlen == 0)
+! s = vim_strnsave(start, (int)len);
+ else
+ {
+ /* Change "prev" buffer to be the right size. This way
+***************
+*** 14529,14535 ****
+
+ if (dest < buf)
+ {
+! adjust_prevlen = buf - dest; /* must be 1 or 2 */
+ dest = buf;
+ }
+ if (readlen > p - buf + 1)
+--- 14529,14535 ----
+
+ if (dest < buf)
+ {
+! adjust_prevlen = (int)(buf - dest); /* must be 1 or 2 */
+ dest = buf;
+ }
+ if (readlen > p - buf + 1)
+***************
+*** 14558,14568 ****
+ * small, to avoid repeatedly 'allocing' large and
+ * 'reallocing' small. */
+ if (prevsize == 0)
+! prevsize = p - start;
+ else
+ {
+ long grow50pc = (prevsize * 3) / 2;
+! long growmin = (p - start) * 2 + prevlen;
+ prevsize = grow50pc > growmin ? grow50pc : growmin;
+ }
+ if ((newprev = vim_realloc(prev, prevsize)) == NULL)
+--- 14558,14568 ----
+ * small, to avoid repeatedly 'allocing' large and
+ * 'reallocing' small. */
+ if (prevsize == 0)
+! prevsize = (long)(p - start);
+ else
+ {
+ long grow50pc = (prevsize * 3) / 2;
+! long growmin = (long)((p - start) * 2 + prevlen);
+ prevsize = grow50pc > growmin ? grow50pc : growmin;
+ }
+ if ((newprev = vim_realloc(prev, prevsize)) == NULL)
+***************
+*** 14575,14581 ****
+ }
+ /* Add the line part to end of "prev". */
+ mch_memmove(prev + prevlen, start, p - start);
+! prevlen += p - start;
+ }
+ } /* while */
+
+--- 14575,14581 ----
+ }
+ /* Add the line part to end of "prev". */
+ mch_memmove(prev + prevlen, start, p - start);
+! prevlen += (long)(p - start);
+ }
+ } /* while */
+
+*** ../vim-7.3.435/src/version.c 2012-02-11 20:40:49.000000000 +0100
+--- src/version.c 2012-02-11 20:43:18.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 436,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+39. You move into a new house and decide to Netscape before you landscape.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.437 b/source/ap/vim/patches/7.3.437
new file mode 100644
index 000000000..889efe746
--- /dev/null
+++ b/source/ap/vim/patches/7.3.437
@@ -0,0 +1,73 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.437
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.437
+Problem: Continue looping inside FOR_ALL_TAB_WINDOWS even when already done.
+Solution: Use goto instead of break. (Hirohito Higashi)
+Files: src/fileio.c, src/globals.h
+
+
+*** ../vim-7.3.436/src/fileio.c 2011-09-02 11:56:15.000000000 +0200
+--- src/fileio.c 2012-02-11 23:40:23.000000000 +0100
+***************
+*** 8898,8907 ****
+ if (tp != curtab)
+ goto_tabpage_tp(tp);
+ win_goto(aucmd_win);
+! break;
+ }
+ }
+ }
+
+ /* Remove the window and frame from the tree of frames. */
+ (void)winframe_remove(curwin, &dummy, NULL);
+--- 8898,8908 ----
+ if (tp != curtab)
+ goto_tabpage_tp(tp);
+ win_goto(aucmd_win);
+! goto win_found;
+ }
+ }
+ }
++ win_found:
+
+ /* Remove the window and frame from the tree of frames. */
+ (void)winframe_remove(curwin, &dummy, NULL);
+*** ../vim-7.3.436/src/globals.h 2012-02-04 23:34:57.000000000 +0100
+--- src/globals.h 2012-02-11 23:43:45.000000000 +0100
+***************
+*** 535,540 ****
+--- 535,544 ----
+ EXTERN win_T *prevwin INIT(= NULL); /* previous window */
+ # define W_NEXT(wp) ((wp)->w_next)
+ # define FOR_ALL_WINDOWS(wp) for (wp = firstwin; wp != NULL; wp = wp->w_next)
++ /*
++ * When using this macro "break" only breaks out of the inner loop. Use "goto"
++ * to break out of the tabpage loop.
++ */
+ # define FOR_ALL_TAB_WINDOWS(tp, wp) \
+ for ((tp) = first_tabpage; (tp) != NULL; (tp) = (tp)->tp_next) \
+ for ((wp) = ((tp) == curtab) \
+*** ../vim-7.3.436/src/version.c 2012-02-11 20:44:01.000000000 +0100
+--- src/version.c 2012-02-11 23:40:47.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 437,
+ /**/
+
+--
+The future isn't what it used to be.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.438 b/source/ap/vim/patches/7.3.438
new file mode 100644
index 000000000..94786d7cc
--- /dev/null
+++ b/source/ap/vim/patches/7.3.438
@@ -0,0 +1,126 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.438
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.438
+Problem: There is no way to avoid ":doautoall" reading modelines.
+Solution: Add the <nomodeline> argument. Adjust documentation.
+Files: src/fileio.c, runtime/doc/autocmd.txt
+
+
+*** ../vim-7.3.437/src/fileio.c 2012-02-11 23:45:30.000000000 +0100
+--- src/fileio.c 2012-02-12 00:08:17.000000000 +0100
+***************
+*** 8739,8744 ****
+--- 8739,8752 ----
+ int retval;
+ aco_save_T aco;
+ buf_T *buf;
++ char_u *arg = eap->arg;
++ int call_do_modelines = TRUE;
++
++ if (STRNCMP(arg, "<nomodeline>", 12) == 0)
++ {
++ call_do_modelines = FALSE;
++ arg = skipwhite(arg + 12);
++ }
+
+ /*
+ * This is a bit tricky: For some commands curwin->w_buffer needs to be
+***************
+*** 8755,8765 ****
+ aucmd_prepbuf(&aco, buf);
+
+ /* execute the autocommands for this buffer */
+! retval = do_doautocmd(eap->arg, FALSE);
+
+! /* Execute the modeline settings, but don't set window-local
+! * options if we are using the current window for another buffer. */
+! do_modelines(curwin == aucmd_win ? OPT_NOWIN : 0);
+
+ /* restore the current window */
+ aucmd_restbuf(&aco);
+--- 8763,8777 ----
+ aucmd_prepbuf(&aco, buf);
+
+ /* execute the autocommands for this buffer */
+! retval = do_doautocmd(arg, FALSE);
+
+! if (call_do_modelines)
+! {
+! /* Execute the modeline settings, but don't set window-local
+! * options if we are using the current window for another
+! * buffer. */
+! do_modelines(curwin == aucmd_win ? OPT_NOWIN : 0);
+! }
+
+ /* restore the current window */
+ aucmd_restbuf(&aco);
+*** ../vim-7.3.437/runtime/doc/autocmd.txt 2011-05-19 17:25:36.000000000 +0200
+--- runtime/doc/autocmd.txt 2012-02-12 00:03:45.000000000 +0100
+***************
+*** 1065,1077 ****
+ autocommands for that group. Note: if you use an
+ undefined group name, Vim gives you an error message.
+
+- After applying the autocommands the modelines are
+- processed, so that their settings overrule the
+- settings from autocommands, like what happens when
+- editing a file.
+-
+ *:doautoa* *:doautoall*
+! :doautoa[ll] [group] {event} [fname]
+ Like ":doautocmd", but apply the autocommands to each
+ loaded buffer. Note that [fname] is used to select
+ the autocommands, not the buffers to which they are
+--- 1073,1080 ----
+ autocommands for that group. Note: if you use an
+ undefined group name, Vim gives you an error message.
+
+ *:doautoa* *:doautoall*
+! :doautoa[ll] [<nomodeline>] [group] {event} [fname]
+ Like ":doautocmd", but apply the autocommands to each
+ loaded buffer. Note that [fname] is used to select
+ the autocommands, not the buffers to which they are
+***************
+*** 1082,1087 ****
+--- 1085,1096 ----
+ This command is intended for autocommands that set
+ options, change highlighting, and things like that.
+
++ After applying the autocommands the modelines are
++ processed, so that their settings overrule the
++ settings from autocommands, like what happens when
++ editing a file. This is skipped when the <nomodeline>
++ argument is present.
++
+ ==============================================================================
+ 10. Using autocommands *autocmd-use*
+
+*** ../vim-7.3.437/src/version.c 2012-02-11 23:45:30.000000000 +0100
+--- src/version.c 2012-02-12 00:16:04.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 438,
+ /**/
+
+--
+"Oh, no! NOT the Spanish Inquisition!"
+"NOBODY expects the Spanish Inquisition!!!"
+ -- Monty Python sketch --
+"Oh, no! NOT another option!"
+"EVERYBODY expects another option!!!"
+ -- Discussion in vim-dev mailing list --
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.439 b/source/ap/vim/patches/7.3.439
new file mode 100644
index 000000000..63d8f693f
--- /dev/null
+++ b/source/ap/vim/patches/7.3.439
@@ -0,0 +1,87 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.439
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.439
+Problem: Compiler warnings to size casts in Perl interface.
+Solution: Use XS macros. (James McCoy)
+Files: src/if_perl.xs, src/typemap
+
+
+*** ../vim-7.3.438/src/if_perl.xs 2011-09-07 18:47:19.000000000 +0200
+--- src/if_perl.xs 2012-02-12 00:28:52.000000000 +0100
+***************
+*** 611,617 ****
+ if (ptr->w_perl_private == NULL)
+ {
+ ptr->w_perl_private = newSV(0);
+! sv_setiv(ptr->w_perl_private, (IV)ptr);
+ }
+ else
+ SvREFCNT_inc(ptr->w_perl_private);
+--- 611,617 ----
+ if (ptr->w_perl_private == NULL)
+ {
+ ptr->w_perl_private = newSV(0);
+! sv_setiv(ptr->w_perl_private, PTR2IV(ptr));
+ }
+ else
+ SvREFCNT_inc(ptr->w_perl_private);
+***************
+*** 629,635 ****
+ if (ptr->b_perl_private == NULL)
+ {
+ ptr->b_perl_private = newSV(0);
+! sv_setiv(ptr->b_perl_private, (IV)ptr);
+ }
+ else
+ SvREFCNT_inc(ptr->b_perl_private);
+--- 629,635 ----
+ if (ptr->b_perl_private == NULL)
+ {
+ ptr->b_perl_private = newSV(0);
+! sv_setiv(ptr->b_perl_private, PTR2IV(ptr));
+ }
+ else
+ SvREFCNT_inc(ptr->b_perl_private);
+*** ../vim-7.3.438/src/typemap 2010-08-15 21:57:29.000000000 +0200
+--- src/typemap 2012-02-12 00:28:52.000000000 +0100
+***************
+*** 6,12 ****
+ T_VIOBJNOMUNGE
+ if (sv_isa($arg, \"${ntype}\")) {
+ IV tmp = SvIV((SV*)SvRV($arg));
+! $var = ($type) tmp;
+ if (!tmp)
+ croak(\"$ntype no longer exists\");
+ }
+--- 6,12 ----
+ T_VIOBJNOMUNGE
+ if (sv_isa($arg, \"${ntype}\")) {
+ IV tmp = SvIV((SV*)SvRV($arg));
+! $var = INT2PTR($type, tmp);
+ if (!tmp)
+ croak(\"$ntype no longer exists\");
+ }
+*** ../vim-7.3.438/src/version.c 2012-02-12 00:18:54.000000000 +0100
+--- src/version.c 2012-02-12 00:31:18.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 439,
+ /**/
+
+--
+Microsoft is to software what McDonalds is to gourmet cooking
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.440 b/source/ap/vim/patches/7.3.440
new file mode 100644
index 000000000..39313b0f6
--- /dev/null
+++ b/source/ap/vim/patches/7.3.440
@@ -0,0 +1,211 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.440
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.440
+Problem: Vim does not support UTF8_STRING for the X selection.
+Solution: Add UTF8_STRING atom support. (Alex Efros) Use it only when
+ 'encoding' is set to Unicode.
+Files: src/ui.c
+
+
+*** ../vim-7.3.439/src/ui.c 2012-02-04 21:57:44.000000000 +0100
+--- src/ui.c 2012-02-12 01:28:30.000000000 +0100
+***************
+*** 1917,1922 ****
+--- 1917,1923 ----
+ static Atom vim_atom; /* Vim's own special selection format */
+ #ifdef FEAT_MBYTE
+ static Atom vimenc_atom; /* Vim's extended selection format */
++ static Atom utf8_atom;
+ #endif
+ static Atom compound_text_atom;
+ static Atom text_atom;
+***************
+*** 1930,1935 ****
+--- 1931,1937 ----
+ vim_atom = XInternAtom(dpy, VIM_ATOM_NAME, False);
+ #ifdef FEAT_MBYTE
+ vimenc_atom = XInternAtom(dpy, VIMENC_ATOM_NAME,False);
++ utf8_atom = XInternAtom(dpy, "UTF8_STRING", False);
+ #endif
+ compound_text_atom = XInternAtom(dpy, "COMPOUND_TEXT", False);
+ text_atom = XInternAtom(dpy, "TEXT", False);
+***************
+*** 2074,2080 ****
+ }
+ #endif
+
+! else if (*type == compound_text_atom || (
+ #ifdef FEAT_MBYTE
+ enc_dbcs != 0 &&
+ #endif
+--- 2076,2086 ----
+ }
+ #endif
+
+! else if (*type == compound_text_atom
+! #ifdef FEAT_MBYTE
+! || *type == utf8_atom
+! #endif
+! || (
+ #ifdef FEAT_MBYTE
+ enc_dbcs != 0 &&
+ #endif
+***************
+*** 2128,2134 ****
+ #else
+ 1
+ #endif
+! ; i < 5; i++)
+ {
+ switch (i)
+ {
+--- 2134,2140 ----
+ #else
+ 1
+ #endif
+! ; i < 6; i++)
+ {
+ switch (i)
+ {
+***************
+*** 2136,2145 ****
+ case 0: type = vimenc_atom; break;
+ #endif
+ case 1: type = vim_atom; break;
+! case 2: type = compound_text_atom; break;
+! case 3: type = text_atom; break;
+ default: type = XA_STRING;
+ }
+ success = MAYBE;
+ XtGetSelectionValue(myShell, cbd->sel_atom, type,
+ clip_x11_request_selection_cb, (XtPointer)&success, CurrentTime);
+--- 2142,2159 ----
+ case 0: type = vimenc_atom; break;
+ #endif
+ case 1: type = vim_atom; break;
+! #ifdef FEAT_MBYTE
+! case 2: type = utf8_atom; break;
+! #endif
+! case 3: type = compound_text_atom; break;
+! case 4: type = text_atom; break;
+ default: type = XA_STRING;
+ }
++ #ifdef FEAT_MBYTE
++ if (type == utf8_atom && !enc_utf8)
++ /* Only request utf-8 when 'encoding' is utf8. */
++ continue;
++ #endif
+ success = MAYBE;
+ XtGetSelectionValue(myShell, cbd->sel_atom, type,
+ clip_x11_request_selection_cb, (XtPointer)&success, CurrentTime);
+***************
+*** 2230,2247 ****
+ {
+ Atom *array;
+
+! if ((array = (Atom *)XtMalloc((unsigned)(sizeof(Atom) * 6))) == NULL)
+ return False;
+ *value = (XtPointer)array;
+ i = 0;
+- array[i++] = XA_STRING;
+ array[i++] = targets_atom;
+ #ifdef FEAT_MBYTE
+ array[i++] = vimenc_atom;
+ #endif
+ array[i++] = vim_atom;
+ array[i++] = text_atom;
+ array[i++] = compound_text_atom;
+ *type = XA_ATOM;
+ /* This used to be: *format = sizeof(Atom) * 8; but that caused
+ * crashes on 64 bit machines. (Peter Derr) */
+--- 2244,2266 ----
+ {
+ Atom *array;
+
+! if ((array = (Atom *)XtMalloc((unsigned)(sizeof(Atom) * 7))) == NULL)
+ return False;
+ *value = (XtPointer)array;
+ i = 0;
+ array[i++] = targets_atom;
+ #ifdef FEAT_MBYTE
+ array[i++] = vimenc_atom;
+ #endif
+ array[i++] = vim_atom;
++ #ifdef FEAT_MBYTE
++ if (enc_utf8)
++ array[i++] = utf8_atom;
++ #endif
++ array[i++] = XA_STRING;
+ array[i++] = text_atom;
+ array[i++] = compound_text_atom;
++
+ *type = XA_ATOM;
+ /* This used to be: *format = sizeof(Atom) * 8; but that caused
+ * crashes on 64 bit machines. (Peter Derr) */
+***************
+*** 2253,2258 ****
+--- 2272,2278 ----
+ if ( *target != XA_STRING
+ #ifdef FEAT_MBYTE
+ && *target != vimenc_atom
++ && *target != utf8_atom
+ #endif
+ && *target != vim_atom
+ && *target != text_atom
+***************
+*** 2282,2294 ****
+ return False;
+ }
+
+! if (*target == XA_STRING)
+ {
+ mch_memmove(result, string, (size_t)(*length));
+! *type = XA_STRING;
+ }
+! else if (*target == compound_text_atom
+! || *target == text_atom)
+ {
+ XTextProperty text_prop;
+ char *string_nt = (char *)alloc((unsigned)*length + 1);
+--- 2302,2317 ----
+ return False;
+ }
+
+! if (*target == XA_STRING
+! #ifdef FEAT_MBYTE
+! || (*target == utf8_atom && enc_utf8)
+! #endif
+! )
+ {
+ mch_memmove(result, string, (size_t)(*length));
+! *type = *target;
+ }
+! else if (*target == compound_text_atom || *target == text_atom)
+ {
+ XTextProperty text_prop;
+ char *string_nt = (char *)alloc((unsigned)*length + 1);
+*** ../vim-7.3.439/src/version.c 2012-02-12 00:31:47.000000000 +0100
+--- src/version.c 2012-02-12 01:34:22.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 440,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+42. Your virtual girlfriend finds a new net sweetheart with a larger bandwidth.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.441 b/source/ap/vim/patches/7.3.441
new file mode 100644
index 000000000..9a7539b5a
--- /dev/null
+++ b/source/ap/vim/patches/7.3.441
@@ -0,0 +1,341 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.441
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.441
+Problem: Newer versions of MzScheme (Racket) require earlier (trampolined)
+ initialisation.
+Solution: Call mzscheme_main() early in main(). (Sergey Khorev)
+Files: src/Make_mvc.mak, src/if_mzsch.c, src/main.c,
+ src/proto/if_mzsch.pro
+
+
+*** ../vim-7.3.440/src/Make_mvc.mak 2011-09-14 19:01:38.000000000 +0200
+--- src/Make_mvc.mak 2012-02-12 01:46:05.000000000 +0100
+***************
+*** 740,745 ****
+--- 740,747 ----
+ !endif
+ !endif
+ MZSCHEME_OBJ = $(OUTDIR)\if_mzsch.obj
++ # increase stack size
++ MZSCHEME_LIB = $(MZSCHEME_LIB) /STACK:8388608
+ !endif
+
+ # Perl interface
+*** ../vim-7.3.440/src/if_mzsch.c 2010-11-03 21:59:23.000000000 +0100
+--- src/if_mzsch.c 2012-02-12 01:47:31.000000000 +0100
+***************
+*** 31,38 ****
+ * depend". */
+ #if defined(FEAT_MZSCHEME) || defined(PROTO)
+
+- #include <assert.h>
+-
+ /* Base data structures */
+ #define SCHEME_VIMBUFFERP(obj) SAME_TYPE(SCHEME_TYPE(obj), mz_buffer_type)
+ #define SCHEME_VIMWINDOWP(obj) SAME_TYPE(SCHEME_TYPE(obj), mz_window_type)
+--- 31,36 ----
+***************
+*** 559,575 ****
+ hMzSch = vimLoadLib(sch_dll);
+ hMzGC = vimLoadLib(gc_dll);
+
+! if (!hMzSch)
+ {
+ if (verbose)
+! EMSG2(_(e_loadlib), sch_dll);
+ return FAIL;
+ }
+
+! if (!hMzGC)
+ {
+ if (verbose)
+! EMSG2(_(e_loadlib), gc_dll);
+ return FAIL;
+ }
+
+--- 557,573 ----
+ hMzSch = vimLoadLib(sch_dll);
+ hMzGC = vimLoadLib(gc_dll);
+
+! if (!hMzGC)
+ {
+ if (verbose)
+! EMSG2(_(e_loadlib), gc_dll);
+ return FAIL;
+ }
+
+! if (!hMzSch)
+ {
+ if (verbose)
+! EMSG2(_(e_loadlib), sch_dll);
+ return FAIL;
+ }
+
+***************
+*** 798,862 ****
+ static __declspec(thread) void *tls_space;
+ #endif
+
+! void
+! mzscheme_main(void)
+ {
+ #if MZSCHEME_VERSION_MAJOR >= 500 && defined(WIN32) && defined(USE_THREAD_LOCAL)
+ scheme_register_tls_space(&tls_space, 0);
+ #endif
+! #if defined(MZ_PRECISE_GC) && MZSCHEME_VERSION_MAJOR >= 400
+! /* use trampoline for precise GC in MzScheme >= 4.x */
+! scheme_main_setup(TRUE, mzscheme_env_main, 0, NULL);
+ #else
+! mzscheme_env_main(NULL, 0, NULL);
+ #endif
+ }
+
+ static int
+! mzscheme_env_main(Scheme_Env *env, int argc UNUSED, char **argv UNUSED)
+ {
+! /* neither argument nor return values are used */
+! #ifdef MZ_PRECISE_GC
+! # if MZSCHEME_VERSION_MAJOR < 400
+! /*
+! * Starting from version 4.x, embedding applications must use
+! * scheme_main_setup/scheme_main_stack_setup trampolines
+! * rather than setting stack base directly with scheme_set_stack_base
+! */
+ Scheme_Object *dummy = NULL;
+ MZ_GC_DECL_REG(1);
+ MZ_GC_VAR_IN_REG(0, dummy);
+
+ stack_base = &__gc_var_stack__;
+ # else
+- /* environment has been created by us by Scheme */
+- environment = env;
+- # endif
+- /*
+- * In 4.x, all activities must be performed inside trampoline
+- * so we are forced to initialise GC immediately
+- * This can be postponed in 3.x but I see no point in implementing
+- * a feature which will work in older versions only.
+- * One would better use conservative GC if he needs dynamic MzScheme
+- */
+- mzscheme_init();
+- #else
+ int dummy = 0;
+ stack_base = (void *)&dummy;
+ #endif
+! main_loop(FALSE, FALSE);
+! #if defined(MZ_PRECISE_GC) && MZSCHEME_VERSION_MAJOR < 400
+ /* releasing dummy */
+ MZ_GC_REG();
+ MZ_GC_UNREG();
+ #endif
+! return 0;
+ }
+
+ static void
+ startup_mzscheme(void)
+ {
+! #if !defined(MZ_PRECISE_GC) || MZSCHEME_VERSION_MAJOR < 400
+ scheme_set_stack_base(stack_base, 1);
+ #endif
+
+--- 796,863 ----
+ static __declspec(thread) void *tls_space;
+ #endif
+
+! /*
+! * Since version 4.x precise GC requires trampolined startup.
+! * Futures and places in version 5.x need it too.
+! */
+! #if defined(MZ_PRECISE_GC) && MZSCHEME_VERSION_MAJOR >= 400 \
+! || MZSCHEME_VERSION_MAJOR >= 500 && (defined(MZ_USE_FUTURES) || defined(MZ_USE_PLACES))
+! # ifdef DYNAMIC_MZSCHEME
+! # error Precise GC v.4+ or Racket with futures/places do not support dynamic MzScheme
+! # endif
+! # define TRAMPOLINED_MZVIM_STARTUP
+! #endif
+!
+! int
+! mzscheme_main(int argc, char** argv)
+ {
+ #if MZSCHEME_VERSION_MAJOR >= 500 && defined(WIN32) && defined(USE_THREAD_LOCAL)
+ scheme_register_tls_space(&tls_space, 0);
+ #endif
+! #ifdef TRAMPOLINED_MZVIM_STARTUP
+! return scheme_main_setup(TRUE, mzscheme_env_main, argc, argv);
+ #else
+! return mzscheme_env_main(NULL, argc, argv);
+ #endif
+ }
+
+ static int
+! mzscheme_env_main(Scheme_Env *env, int argc, char **argv)
+ {
+! int vim_main_result;
+! #ifdef TRAMPOLINED_MZVIM_STARTUP
+! /* Scheme has created the environment for us */
+! environment = env;
+! #else
+! # ifdef MZ_PRECISE_GC
+ Scheme_Object *dummy = NULL;
+ MZ_GC_DECL_REG(1);
+ MZ_GC_VAR_IN_REG(0, dummy);
+
+ stack_base = &__gc_var_stack__;
+ # else
+ int dummy = 0;
+ stack_base = (void *)&dummy;
++ # endif
+ #endif
+!
+! /* mzscheme_main is called as a trampoline from main.
+! * We trampoline into vim_main2
+! * Passing argc, argv through from mzscheme_main
+! */
+! vim_main_result = vim_main2(argc, argv);
+! #if !defined(TRAMPOLINED_MZVIM_STARTUP) && defined(MZ_PRECISE_GC)
+ /* releasing dummy */
+ MZ_GC_REG();
+ MZ_GC_UNREG();
+ #endif
+! return vim_main_result;
+ }
+
+ static void
+ startup_mzscheme(void)
+ {
+! #ifndef TRAMPOLINED_MZVIM_STARTUP
+ scheme_set_stack_base(stack_base, 1);
+ #endif
+
+***************
+*** 868,874 ****
+ MZ_REGISTER_STATIC(exn_message);
+ MZ_REGISTER_STATIC(vim_exn);
+
+! #if !defined(MZ_PRECISE_GC) || MZSCHEME_VERSION_MAJOR < 400
+ /* in newer versions of precise GC the initial env has been created */
+ environment = scheme_basic_env();
+ #endif
+--- 869,875 ----
+ MZ_REGISTER_STATIC(exn_message);
+ MZ_REGISTER_STATIC(vim_exn);
+
+! #ifndef TRAMPOLINED_MZVIM_STARTUP
+ /* in newer versions of precise GC the initial env has been created */
+ environment = scheme_basic_env();
+ #endif
+***************
+*** 3013,3019 ****
+ MZ_GC_REG();
+
+ tmp = scheme_make_struct_names(exn_name, scheme_null, 0, &nc);
+- assert(nc <= 5);
+ mch_memmove(exn_names, tmp, nc * sizeof(Scheme_Object *));
+ MZ_GC_CHECK();
+
+--- 3014,3019 ----
+*** ../vim-7.3.440/src/main.c 2011-12-08 15:57:54.000000000 +0100
+--- src/main.c 2012-02-12 01:49:50.000000000 +0100
+***************
+*** 554,559 ****
+--- 554,584 ----
+ debug_break_level = params.use_debug_break_level;
+ #endif
+
++ #ifdef FEAT_MZSCHEME
++ /*
++ * Newer version of MzScheme (Racket) require earlier (trampolined)
++ * initialisation via scheme_main_setup.
++ * Implement this by initialising it as early as possible
++ * and splitting off remaining Vim main into vim_main2
++ */
++ {
++ /* Pack up preprocessed command line arguments.
++ * It is safe because Scheme does not access argc/argv. */
++ char *args[2];
++ args[0] = (char *)fname;
++ args[1] = (char *)&params;
++ return mzscheme_main(2, args);
++ }
++ }
++
++ int vim_main2(int argc, char **argv)
++ {
++ char_u *fname = (char_u *)argv[0];
++ mparm_T params;
++
++ memcpy(&params, argv[1], sizeof(params));
++ #endif
++
+ /* Execute --cmd arguments. */
+ exe_pre_commands(&params);
+
+***************
+*** 957,970 ****
+
+ /*
+ * Call the main command loop. This never returns.
+! * For embedded MzScheme the main_loop will be called by Scheme
+! * for proper stack tracking
+! */
+! #ifndef FEAT_MZSCHEME
+ main_loop(FALSE, FALSE);
+- #else
+- mzscheme_main();
+- #endif
+
+ return 0;
+ }
+--- 982,989 ----
+
+ /*
+ * Call the main command loop. This never returns.
+! */
+ main_loop(FALSE, FALSE);
+
+ return 0;
+ }
+*** ../vim-7.3.440/src/proto/if_mzsch.pro 2010-08-15 21:57:28.000000000 +0200
+--- src/proto/if_mzsch.pro 2012-02-12 01:50:57.000000000 +0100
+***************
+*** 14,19 ****
+ void mzvim_reset_timer __ARGS((void));
+ void *mzvim_eval_string __ARGS((char_u *str));
+ int mzthreads_allowed __ARGS((void));
+! void mzscheme_main __ARGS((void));
+ void do_mzeval __ARGS((char_u *str, typval_T *rettv));
+ /* vim: set ft=c : */
+--- 14,20 ----
+ void mzvim_reset_timer __ARGS((void));
+ void *mzvim_eval_string __ARGS((char_u *str));
+ int mzthreads_allowed __ARGS((void));
+! int mzscheme_main __ARGS((int argc, char **argv));
+ void do_mzeval __ARGS((char_u *str, typval_T *rettv));
++ int vim_main2 __ARGS((int argc, char **argv));
+ /* vim: set ft=c : */
+*** ../vim-7.3.440/src/version.c 2012-02-12 01:35:06.000000000 +0100
+--- src/version.c 2012-02-12 01:54:14.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 441,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+43. You tell the kids they can't use the computer because "Daddy's got work to
+ do" and you don't even have a job.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.442 b/source/ap/vim/patches/7.3.442
new file mode 100644
index 000000000..58b58b4ea
--- /dev/null
+++ b/source/ap/vim/patches/7.3.442
@@ -0,0 +1,186 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.442
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.442 (after 7.3.438)
+Problem: Still read modelines for ":doautocmd".
+Solution: Move check for <nomodeline> to separate function.
+Files: src/fileio.c, src/ex_docmd.c, src/proto/fileio.pro,
+ runtime/doc/autocmd.txt
+
+
+*** ../vim-7.3.441/src/fileio.c 2012-02-12 00:18:54.000000000 +0100
+--- src/fileio.c 2012-02-12 20:05:35.000000000 +0100
+***************
+*** 8740,8752 ****
+ aco_save_T aco;
+ buf_T *buf;
+ char_u *arg = eap->arg;
+! int call_do_modelines = TRUE;
+!
+! if (STRNCMP(arg, "<nomodeline>", 12) == 0)
+! {
+! call_do_modelines = FALSE;
+! arg = skipwhite(arg + 12);
+! }
+
+ /*
+ * This is a bit tricky: For some commands curwin->w_buffer needs to be
+--- 8740,8746 ----
+ aco_save_T aco;
+ buf_T *buf;
+ char_u *arg = eap->arg;
+! int call_do_modelines = check_nomodeline(&arg);
+
+ /*
+ * This is a bit tricky: For some commands curwin->w_buffer needs to be
+***************
+*** 8786,8791 ****
+--- 8780,8802 ----
+ }
+
+ /*
++ * Check *argp for <nomodeline>. When it is present return FALSE, otherwise
++ * return TRUE and advance *argp to after it.
++ * Thus return TRUE when do_modelines() should be called.
++ */
++ int
++ check_nomodeline(argp)
++ char_u **argp;
++ {
++ if (STRNCMP(*argp, "<nomodeline>", 12) == 0)
++ {
++ *argp = skipwhite(*argp + 12);
++ return FALSE;
++ }
++ return TRUE;
++ }
++
++ /*
+ * Prepare for executing autocommands for (hidden) buffer "buf".
+ * Search for a visible window containing the current buffer. If there isn't
+ * one then use "aucmd_win".
+*** ../vim-7.3.441/src/ex_docmd.c 2012-01-26 20:41:22.000000000 +0100
+--- src/ex_docmd.c 2012-02-12 20:05:18.000000000 +0100
+***************
+*** 4955,4961 ****
+ map_clear(eap->cmd, eap->arg, TRUE, TRUE);
+ }
+
+! #ifdef FEAT_AUTOCMD
+ static void
+ ex_autocmd(eap)
+ exarg_T *eap;
+--- 4955,4961 ----
+ map_clear(eap->cmd, eap->arg, TRUE, TRUE);
+ }
+
+! #if defined(FEAT_AUTOCMD) || defined(PROTO)
+ static void
+ ex_autocmd(eap)
+ exarg_T *eap;
+***************
+*** 4982,4989 ****
+ ex_doautocmd(eap)
+ exarg_T *eap;
+ {
+! (void)do_doautocmd(eap->arg, TRUE);
+! do_modelines(0);
+ }
+ #endif
+
+--- 4982,4993 ----
+ ex_doautocmd(eap)
+ exarg_T *eap;
+ {
+! char_u *arg = eap->arg;
+! int call_do_modelines = check_nomodeline(&arg);
+!
+! (void)do_doautocmd(arg, TRUE);
+! if (call_do_modelines) /* Only when there is no <nomodeline>. */
+! do_modelines(0);
+ }
+ #endif
+
+*** ../vim-7.3.441/src/proto/fileio.pro 2010-12-17 16:27:10.000000000 +0100
+--- src/proto/fileio.pro 2012-02-12 20:05:26.000000000 +0100
+***************
+*** 35,40 ****
+--- 35,41 ----
+ void do_autocmd __ARGS((char_u *arg, int forceit));
+ int do_doautocmd __ARGS((char_u *arg, int do_msg));
+ void ex_doautoall __ARGS((exarg_T *eap));
++ int check_nomodeline __ARGS((char_u **argp));
+ void aucmd_prepbuf __ARGS((aco_save_T *aco, buf_T *buf));
+ void aucmd_restbuf __ARGS((aco_save_T *aco));
+ int apply_autocmds __ARGS((event_T event, char_u *fname, char_u *fname_io, int force, buf_T *buf));
+*** ../vim-7.3.441/runtime/doc/autocmd.txt 2012-02-12 00:18:54.000000000 +0100
+--- runtime/doc/autocmd.txt 2012-02-12 20:11:05.000000000 +0100
+***************
+*** 1064,1069 ****
+--- 1072,1085 ----
+ argument is included, Vim executes only the matching
+ autocommands for that group. Note: if you use an
+ undefined group name, Vim gives you an error message.
++ *<nomodeline>*
++ After applying the autocommands the modelines are
++ processed, so that their settings overrule the
++ settings from autocommands, like what happens when
++ editing a file. This is skipped when the <nomodeline>
++ argument is present. You probably want to use
++ <nomodeline> for events that are not used when loading
++ a buffer, such as |User|.
+
+ *:doautoa* *:doautoall*
+ :doautoa[ll] [<nomodeline>] [group] {event} [fname]
+***************
+*** 1077,1088 ****
+ This command is intended for autocommands that set
+ options, change highlighting, and things like that.
+
+- After applying the autocommands the modelines are
+- processed, so that their settings overrule the
+- settings from autocommands, like what happens when
+- editing a file. This is skipped when the <nomodeline>
+- argument is present.
+-
+ ==============================================================================
+ 10. Using autocommands *autocmd-use*
+
+--- 1093,1098 ----
+*** ../vim-7.3.441/src/version.c 2012-02-12 01:55:50.000000000 +0100
+--- src/version.c 2012-02-12 20:11:34.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 442,
+ /**/
+
+--
+The real
+trick is
+this: to
+keep the
+lines as
+short as
+possible
+and keep
+the size
+the same
+yet free
+from the
+need for
+hyphena-
+Dammit!! (Matthew Winn)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.443 b/source/ap/vim/patches/7.3.443
new file mode 100644
index 000000000..84b45baa2
--- /dev/null
+++ b/source/ap/vim/patches/7.3.443
@@ -0,0 +1,206 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.443
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.443
+Problem: MS-Windows: 'shcf' and 'shellxquote' defaults are not very good.
+Solution: Make a better guess when 'shell' is set to "cmd.exe". (Ben Fritz)
+Files: src/option.c, runtime/doc/options.txt
+
+
+*** ../vim-7.3.442/src/option.c 2012-01-28 18:03:30.000000000 +0100
+--- src/option.c 2012-02-12 23:17:55.000000000 +0100
+***************
+*** 3883,3889 ****
+
+ #if defined(MSDOS) || defined(WIN3264) || defined(OS2)
+ /*
+! * Set 'shellcmdflag and 'shellquote' depending on the 'shell' option.
+ * This is done after other initializations, where 'shell' might have been
+ * set, but only if they have not been set before. Default for p_shcf is
+ * "/c", for p_shq is "". For "sh" like shells it is changed here to
+--- 3883,3890 ----
+
+ #if defined(MSDOS) || defined(WIN3264) || defined(OS2)
+ /*
+! * Set 'shellcmdflag', 'shellxquote', and 'shellquote' depending on the
+! * 'shell' option.
+ * This is done after other initializations, where 'shell' might have been
+ * set, but only if they have not been set before. Default for p_shcf is
+ * "/c", for p_shq is "". For "sh" like shells it is changed here to
+***************
+*** 3920,3925 ****
+--- 3921,3962 ----
+ # endif
+ # endif
+ }
++ else if (strstr((char *)gettail(p_sh), "cmd.exe") != NULL)
++ {
++ int idx3;
++
++ /*
++ * cmd.exe on Windows will strip the first and last double quote given
++ * on the command line, e.g. most of the time things like:
++ * cmd /c "my path/to/echo" "my args to echo"
++ * become:
++ * my path/to/echo" "my args to echo
++ * when executed.
++ *
++ * To avoid this, use the /s argument in addition to /c to force the
++ * stripping behavior, and also set shellxquote to automatically
++ * surround the entire command in quotes (which get stripped as
++ * noted).
++ */
++
++ /* Set shellxquote default to add the quotes to be stripped. */
++ idx3 = findoption((char_u *)"sxq");
++ if (idx3 >= 0 && !(options[idx3].flags & P_WAS_SET))
++ {
++ p_sxq = (char_u *)"\"";
++ options[idx3].def_val[VI_DEFAULT] = p_sxq;
++ }
++
++ /* Set shellcmdflag default to always strip the quotes, note the order
++ * between /s and /c is important or cmd.exe will treat the /s as part
++ * of the command to be executed. */
++ idx3 = findoption((char_u *)"shcf");
++ if (idx3 >= 0 && !(options[idx3].flags & P_WAS_SET))
++ {
++ p_shcf = (char_u *)"/s /c";
++ options[idx3].def_val[VI_DEFAULT] = p_shcf;
++ }
++ }
+ #endif
+
+ #ifdef FEAT_TITLE
+*** ../vim-7.3.442/runtime/doc/options.txt 2011-06-26 05:36:07.000000000 +0200
+--- runtime/doc/options.txt 2012-02-12 23:21:59.000000000 +0100
+***************
+*** 5880,5895 ****
+ security reasons.
+
+ *'shellcmdflag'* *'shcf'*
+! 'shellcmdflag' 'shcf' string (default: "-c", MS-DOS and Win32, when 'shell'
+! does not contain "sh" somewhere: "/c")
+ global
+ {not in Vi}
+ Flag passed to the shell to execute "!" and ":!" commands; e.g.,
+ "bash.exe -c ls" or "command.com /c dir". For the MS-DOS-like
+ systems, the default is set according to the value of 'shell', to
+ reduce the need to set this option by the user. It's not used for
+! OS/2 (EMX figures this out itself). See |option-backslash| about
+! including spaces and backslashes. See |dos-shell|.
+ This option cannot be set from a |modeline| or in the |sandbox|, for
+ security reasons.
+
+--- 5899,5919 ----
+ security reasons.
+
+ *'shellcmdflag'* *'shcf'*
+! 'shellcmdflag' 'shcf' string (default: "-c";
+! Win32, when 'shell' is cmd.exe: "/s /c";
+! MS-DOS and Win32, when 'shell' neither is
+! cmd.exe nor contains "sh" somewhere: "/c")
+ global
+ {not in Vi}
+ Flag passed to the shell to execute "!" and ":!" commands; e.g.,
+ "bash.exe -c ls" or "command.com /c dir". For the MS-DOS-like
+ systems, the default is set according to the value of 'shell', to
+ reduce the need to set this option by the user. It's not used for
+! OS/2 (EMX figures this out itself).
+! On Unix it can have more than one flag. Each white space separated
+! part is passed as an argument to the shell command.
+! See |option-backslash| about including spaces and backslashes.
+! Also see |dos-shell| for MS-DOS and MS-Windows.
+ This option cannot be set from a |modeline| or in the |sandbox|, for
+ security reasons.
+
+***************
+*** 5910,5918 ****
+ For Unix the default it "| tee". The stdout of the compiler is saved
+ in a file and echoed to the screen. If the 'shell' option is "csh" or
+ "tcsh" after initializations, the default becomes "|& tee". If the
+! 'shell' option is "sh", "ksh", "zsh" or "bash" the default becomes
+! "2>&1| tee". This means that stderr is also included. Before using
+! the 'shell' option a path is removed, thus "/bin/sh" uses "sh".
+ The initialization of this option is done after reading the ".vimrc"
+ and the other initializations, so that when the 'shell' option is set
+ there, the 'shellpipe' option changes automatically, unless it was
+--- 5934,5943 ----
+ For Unix the default it "| tee". The stdout of the compiler is saved
+ in a file and echoed to the screen. If the 'shell' option is "csh" or
+ "tcsh" after initializations, the default becomes "|& tee". If the
+! 'shell' option is "sh", "ksh", "mksh", "pdksh", "zsh" or "bash" the
+! default becomes "2>&1| tee". This means that stderr is also included.
+! Before using the 'shell' option a path is removed, thus "/bin/sh" uses
+! "sh".
+ The initialization of this option is done after reading the ".vimrc"
+ and the other initializations, so that when the 'shell' option is set
+ there, the 'shellpipe' option changes automatically, unless it was
+***************
+*** 6017,6024 ****
+
+ *'shellxquote'* *'sxq'*
+ 'shellxquote' 'sxq' string (default: "";
+! for Win32, when 'shell' contains "sh"
+! somewhere: "\""
+ for Unix, when using system(): "\"")
+ global
+ {not in Vi}
+--- 6043,6050 ----
+
+ *'shellxquote'* *'sxq'*
+ 'shellxquote' 'sxq' string (default: "";
+! for Win32, when 'shell' is cmd.exe or
+! contains "sh" somewhere: "\""
+ for Unix, when using system(): "\"")
+ global
+ {not in Vi}
+***************
+*** 6026,6036 ****
+ the "!" and ":!" commands. Includes the redirection. See
+ 'shellquote' to exclude the redirection. It's probably not useful
+ to set both options.
+! This is an empty string by default. Known to be useful for
+! third-party shells when using the Win32 version, such as the MKS Korn
+! Shell or bash, where it should be "\"". The default is adjusted
+! according the value of 'shell', to reduce the need to set this option
+! by the user. See |dos-shell|.
+ This option cannot be set from a |modeline| or in the |sandbox|, for
+ security reasons.
+
+--- 6052,6063 ----
+ the "!" and ":!" commands. Includes the redirection. See
+ 'shellquote' to exclude the redirection. It's probably not useful
+ to set both options.
+! This is an empty string by default on most systems, but is known to be
+! useful for on Win32 version, either for cmd.exe which automatically
+! strips off the first and last quote on a command, or 3rd-party shells
+! such as the MKS Korn Shell or bash, where it should be "\"". The
+! default is adjusted according the value of 'shell', to reduce the need
+! to set this option by the user. See |dos-shell|.
+ This option cannot be set from a |modeline| or in the |sandbox|, for
+ security reasons.
+
+*** ../vim-7.3.442/src/version.c 2012-02-12 20:13:55.000000000 +0100
+--- src/version.c 2012-02-12 23:18:40.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 443,
+ /**/
+
+--
+CVS sux, men don't like commitment
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.444 b/source/ap/vim/patches/7.3.444
new file mode 100644
index 000000000..64ed88bf1
--- /dev/null
+++ b/source/ap/vim/patches/7.3.444
@@ -0,0 +1,96 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.444
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.444
+Problem: ":all!" and ":sall!" give error E477, even though the
+ documentation says these are valid commands.
+Solution: Support the exclamation mark. (Hirohito Higashi)
+Files: src/ex_cmds.h, src/testdir/test31.in, src/testdir/test31.ok
+
+
+*** ../vim-7.3.443/src/ex_cmds.h 2011-06-20 05:02:53.000000000 +0200
+--- src/ex_cmds.h 2012-02-12 23:53:31.000000000 +0100
+***************
+*** 102,108 ****
+ EX(CMD_aboveleft, "aboveleft", ex_wrongmodifier,
+ NEEDARG|EXTRA|NOTRLCOM),
+ EX(CMD_all, "all", ex_all,
+! RANGE|NOTADR|COUNT|TRLBAR),
+ EX(CMD_amenu, "amenu", ex_menu,
+ RANGE|NOTADR|ZEROR|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
+ EX(CMD_anoremenu, "anoremenu", ex_menu,
+--- 102,108 ----
+ EX(CMD_aboveleft, "aboveleft", ex_wrongmodifier,
+ NEEDARG|EXTRA|NOTRLCOM),
+ EX(CMD_all, "all", ex_all,
+! BANG|RANGE|NOTADR|COUNT|TRLBAR),
+ EX(CMD_amenu, "amenu", ex_menu,
+ RANGE|NOTADR|ZEROR|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
+ EX(CMD_anoremenu, "anoremenu", ex_menu,
+***************
+*** 798,804 ****
+ EX(CMD_sargument, "sargument", ex_argument,
+ BANG|RANGE|NOTADR|COUNT|EXTRA|EDITCMD|ARGOPT|TRLBAR),
+ EX(CMD_sall, "sall", ex_all,
+! RANGE|NOTADR|COUNT|TRLBAR),
+ EX(CMD_sandbox, "sandbox", ex_wrongmodifier,
+ NEEDARG|EXTRA|NOTRLCOM),
+ EX(CMD_saveas, "saveas", ex_write,
+--- 798,804 ----
+ EX(CMD_sargument, "sargument", ex_argument,
+ BANG|RANGE|NOTADR|COUNT|EXTRA|EDITCMD|ARGOPT|TRLBAR),
+ EX(CMD_sall, "sall", ex_all,
+! BANG|RANGE|NOTADR|COUNT|TRLBAR),
+ EX(CMD_sandbox, "sandbox", ex_wrongmodifier,
+ NEEDARG|EXTRA|NOTRLCOM),
+ EX(CMD_saveas, "saveas", ex_write,
+*** ../vim-7.3.443/src/testdir/test31.in 2010-08-15 21:57:29.000000000 +0200
+--- src/testdir/test31.in 2012-02-12 23:57:42.000000000 +0100
+***************
+*** 63,68 ****
+--- 63,74 ----
+ :" write "testtext 1"
+ A 3:close!
+ :w >>test.out
++ :set nohidden
++ :" test ":all!" hides changed buffer; write "testtext 2 2 2"
++ :sp Xtest4
++ GA 4:all!
++ :1wincmd w
++ :w >>test.out
+ :qa!
+ ENDTEST
+
+*** ../vim-7.3.443/src/testdir/test31.ok 2010-08-15 21:57:29.000000000 +0200
+--- src/testdir/test31.ok 2012-02-13 00:00:13.000000000 +0100
+***************
+*** 9,11 ****
+--- 9,12 ----
+ testtext 1
+ testtext 3 3 3
+ testtext 1
++ testtext 2 2 2
+*** ../vim-7.3.443/src/version.c 2012-02-12 23:23:25.000000000 +0100
+--- src/version.c 2012-02-12 23:52:47.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 444,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+50. The last girl you picked up was only a jpeg.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.445 b/source/ap/vim/patches/7.3.445
new file mode 100644
index 000000000..8d7c337be
--- /dev/null
+++ b/source/ap/vim/patches/7.3.445
@@ -0,0 +1,199 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.445
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.445 (after 7.3.443)
+Problem: Can't properly escape commands for cmd.exe.
+Solution: Default 'shellxquote' to '('. Append ')' to make '(command)'.
+ No need to use "/s" for 'shellcmdflag'.
+Files: src/misc2.c, src/option.c, src/os_win32.c
+
+
+*** ../vim-7.3.444/src/misc2.c 2012-01-20 17:15:47.000000000 +0100
+--- src/misc2.c 2012-02-16 05:34:37.000000000 +0100
+***************
+*** 3230,3236 ****
+ {
+ STRCPY(ncmd, p_sxq);
+ STRCAT(ncmd, cmd);
+! STRCAT(ncmd, p_sxq);
+ retval = mch_call_shell(ncmd, opt);
+ vim_free(ncmd);
+ }
+--- 3230,3240 ----
+ {
+ STRCPY(ncmd, p_sxq);
+ STRCAT(ncmd, cmd);
+! /* When 'shellxquote' is ( append ).
+! * When 'shellxquote' is "( append )". */
+! STRCAT(ncmd, STRCMP(p_sxq, "(") == 0 ? (char_u *)")"
+! : STRCMP(p_sxq, "\"(") == 0 ? (char_u *)")\""
+! : p_sxq);
+ retval = mch_call_shell(ncmd, opt);
+ vim_free(ncmd);
+ }
+*** ../vim-7.3.444/src/option.c 2012-02-12 23:23:25.000000000 +0100
+--- src/option.c 2012-02-19 18:08:48.000000000 +0100
+***************
+*** 3933,3959 ****
+ * my path/to/echo" "my args to echo
+ * when executed.
+ *
+! * To avoid this, use the /s argument in addition to /c to force the
+! * stripping behavior, and also set shellxquote to automatically
+! * surround the entire command in quotes (which get stripped as
+! * noted).
+ */
+-
+- /* Set shellxquote default to add the quotes to be stripped. */
+ idx3 = findoption((char_u *)"sxq");
+ if (idx3 >= 0 && !(options[idx3].flags & P_WAS_SET))
+ {
+! p_sxq = (char_u *)"\"";
+ options[idx3].def_val[VI_DEFAULT] = p_sxq;
+ }
+
+- /* Set shellcmdflag default to always strip the quotes, note the order
+- * between /s and /c is important or cmd.exe will treat the /s as part
+- * of the command to be executed. */
+ idx3 = findoption((char_u *)"shcf");
+ if (idx3 >= 0 && !(options[idx3].flags & P_WAS_SET))
+ {
+! p_shcf = (char_u *)"/s /c";
+ options[idx3].def_val[VI_DEFAULT] = p_shcf;
+ }
+ }
+--- 3933,3954 ----
+ * my path/to/echo" "my args to echo
+ * when executed.
+ *
+! * To avoid this, set shellxquote to surround the command in
+! * parenthesis. This appears to make most commands work, without
+! * breaking commands that worked previously, such as
+! * '"path with spaces/cmd" "a&b"'.
+ */
+ idx3 = findoption((char_u *)"sxq");
+ if (idx3 >= 0 && !(options[idx3].flags & P_WAS_SET))
+ {
+! p_sxq = (char_u *)"(";
+ options[idx3].def_val[VI_DEFAULT] = p_sxq;
+ }
+
+ idx3 = findoption((char_u *)"shcf");
+ if (idx3 >= 0 && !(options[idx3].flags & P_WAS_SET))
+ {
+! p_shcf = (char_u *)"/c";
+ options[idx3].def_val[VI_DEFAULT] = p_shcf;
+ }
+ }
+*** ../vim-7.3.444/src/os_win32.c 2011-08-27 15:10:00.000000000 +0200
+--- src/os_win32.c 2012-02-19 18:11:23.000000000 +0100
+***************
+*** 3908,3915 ****
+ newcmd = lalloc(cmdlen, TRUE);
+ if (newcmd != NULL)
+ {
+! char_u *cmdbase = (*cmd == '"' ? cmd + 1 : cmd);
+
+ if ((STRNICMP(cmdbase, "start", 5) == 0) && vim_iswhite(cmdbase[5]))
+ {
+ STARTUPINFO si;
+--- 3908,3920 ----
+ newcmd = lalloc(cmdlen, TRUE);
+ if (newcmd != NULL)
+ {
+! char_u *cmdbase = cmd;
+
++ /* Skip a leading ", ( and "(. */
++ if (*cmdbase == '"' )
++ ++cmdbase;
++ if (*cmdbase == '(')
++ ++cmdbase;
+ if ((STRNICMP(cmdbase, "start", 5) == 0) && vim_iswhite(cmdbase[5]))
+ {
+ STARTUPINFO si;
+***************
+*** 3953,3968 ****
+ * empty, keep the double quotes around the command.
+ * Otherwise remove the double quotes, they aren't needed
+ * here, because we don't use a shell to run the command. */
+! if (*cmd == '"' && *p_sxq == NUL)
+ {
+! newcmd[0] = '"';
+! STRCPY(newcmd + 1, cmdbase);
+! }
+! else
+! {
+! STRCPY(newcmd, cmdbase);
+! if (*cmd == '"' && *newcmd != NUL)
+! newcmd[STRLEN(newcmd) - 1] = NUL;
+ }
+
+ /*
+--- 3958,3983 ----
+ * empty, keep the double quotes around the command.
+ * Otherwise remove the double quotes, they aren't needed
+ * here, because we don't use a shell to run the command. */
+! if (cmdbase > cmd)
+ {
+! if (STRNCMP(cmd, p_sxq, cmd - cmdbase) != 0)
+! {
+! STRCPY(newcmd, cmd);
+! }
+! else
+! {
+! char_u *p;
+!
+! STRCPY(newcmd, cmdbase);
+! /* Remove a trailing ", ) and )" if they have a match
+! * at the start of the command. */
+! p = newcmd + STRLEN(newcmd);
+! if (p > newcmd && p[-1] == '"' && *cmd == '"')
+! *--p = NUL;
+! if (p > newcmd && p[-1] == ')'
+! && (*cmd =='(' || cmd[1] == '('))
+! *--p = NUL;
+! }
+ }
+
+ /*
+***************
+*** 3970,3976 ****
+ * inherit our handles which causes unpleasant dangling swap
+ * files if we exit before the spawned process
+ */
+! if (CreateProcess (NULL, // Executable name
+ newcmd, // Command to execute
+ NULL, // Process security attributes
+ NULL, // Thread security attributes
+--- 3985,3991 ----
+ * inherit our handles which causes unpleasant dangling swap
+ * files if we exit before the spawned process
+ */
+! if (CreateProcess(NULL, // Executable name
+ newcmd, // Command to execute
+ NULL, // Process security attributes
+ NULL, // Thread security attributes
+*** ../vim-7.3.444/src/version.c 2012-02-13 00:01:38.000000000 +0100
+--- src/version.c 2012-02-19 18:01:46.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 445,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+80. At parties, you introduce your spouse as your "service provider."
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.446 b/source/ap/vim/patches/7.3.446
new file mode 100644
index 000000000..59a2b254c
--- /dev/null
+++ b/source/ap/vim/patches/7.3.446
@@ -0,0 +1,164 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.446
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.446 (after 7.3.445)
+Problem: Win32: External commands with special characters don't work.
+Solution: Add the 'shellxescape' option.
+Files: src/misc2.c, src/option.c, src/option.h, runtime/doc/options.txt
+
+
+*** ../vim-7.3.445/src/misc2.c 2012-02-19 18:19:24.000000000 +0100
+--- src/misc2.c 2012-02-20 22:05:22.000000000 +0100
+***************
+*** 3225,3235 ****
+ retval = mch_call_shell(cmd, opt);
+ else
+ {
+! ncmd = alloc((unsigned)(STRLEN(cmd) + STRLEN(p_sxq) * 2 + 1));
+ if (ncmd != NULL)
+ {
+ STRCPY(ncmd, p_sxq);
+! STRCAT(ncmd, cmd);
+ /* When 'shellxquote' is ( append ).
+ * When 'shellxquote' is "( append )". */
+ STRCAT(ncmd, STRCMP(p_sxq, "(") == 0 ? (char_u *)")"
+--- 3225,3243 ----
+ retval = mch_call_shell(cmd, opt);
+ else
+ {
+! char_u *ecmd = cmd;
+!
+! if (*p_sxe != NUL && STRCMP(p_sxq, "(") == 0)
+! {
+! ecmd = vim_strsave_escaped_ext(cmd, p_sxe, '^', FALSE);
+! if (ecmd == NULL)
+! ecmd = cmd;
+! }
+! ncmd = alloc((unsigned)(STRLEN(ecmd) + STRLEN(p_sxq) * 2 + 1));
+ if (ncmd != NULL)
+ {
+ STRCPY(ncmd, p_sxq);
+! STRCAT(ncmd, ecmd);
+ /* When 'shellxquote' is ( append ).
+ * When 'shellxquote' is "( append )". */
+ STRCAT(ncmd, STRCMP(p_sxq, "(") == 0 ? (char_u *)")"
+***************
+*** 3240,3245 ****
+--- 3248,3255 ----
+ }
+ else
+ retval = -1;
++ if (ecmd != cmd)
++ vim_free(ecmd);
+ }
+ #ifdef FEAT_GUI
+ --hold_gui_events;
+*** ../vim-7.3.445/src/option.c 2012-02-19 18:19:24.000000000 +0100
+--- src/option.c 2012-02-20 22:01:07.000000000 +0100
+***************
+*** 2273,2278 ****
+--- 2273,2287 ----
+ (char_u *)"",
+ #endif
+ (char_u *)0L} SCRIPTID_INIT},
++ {"shellxescape", "sxe", P_STRING|P_VI_DEF|P_SECURE,
++ (char_u *)&p_sxe, PV_NONE,
++ {
++ #if defined(MSDOS) || defined(WIN16) || defined(WIN3264)
++ (char_u *)"\"&|<>()@^",
++ #else
++ (char_u *)"",
++ #endif
++ (char_u *)0L} SCRIPTID_INIT},
+ {"shiftround", "sr", P_BOOL|P_VI_DEF|P_VIM,
+ (char_u *)&p_sr, PV_NONE,
+ {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+*** ../vim-7.3.445/src/option.h 2011-10-20 21:09:25.000000000 +0200
+--- src/option.h 2012-02-20 21:45:31.000000000 +0100
+***************
+*** 712,717 ****
+--- 712,718 ----
+ #endif
+ EXTERN char_u *p_shq; /* 'shellquote' */
+ EXTERN char_u *p_sxq; /* 'shellxquote' */
++ EXTERN char_u *p_sxe; /* 'shellxescape' */
+ EXTERN char_u *p_srr; /* 'shellredir' */
+ #ifdef AMIGA
+ EXTERN long p_st; /* 'shelltype' */
+*** ../vim-7.3.445/runtime/doc/options.txt 2012-02-12 23:23:25.000000000 +0100
+--- runtime/doc/options.txt 2012-02-20 22:09:19.000000000 +0100
+***************
+*** 6023,6030 ****
+
+ *'shellxquote'* *'sxq'*
+ 'shellxquote' 'sxq' string (default: "";
+! for Win32, when 'shell' is cmd.exe or
+! contains "sh" somewhere: "\""
+ for Unix, when using system(): "\"")
+ global
+ {not in Vi}
+--- 6042,6050 ----
+
+ *'shellxquote'* *'sxq'*
+ 'shellxquote' 'sxq' string (default: "";
+! for Win32, when 'shell' is cmd.exe: "("
+! for Win32, when 'shell' contains "sh"
+! somewhere: "\""
+ for Unix, when using system(): "\"")
+ global
+ {not in Vi}
+***************
+*** 6032,6037 ****
+--- 6052,6060 ----
+ the "!" and ":!" commands. Includes the redirection. See
+ 'shellquote' to exclude the redirection. It's probably not useful
+ to set both options.
++ When the value is '(' then ')' is appended. When the value is '"('
++ then ')"' is appended.
++ When the value is '(' then also see 'shellxescape'.
+ This is an empty string by default on most systems, but is known to be
+ useful for on Win32 version, either for cmd.exe which automatically
+ strips off the first and last quote on a command, or 3rd-party shells
+***************
+*** 6041,6046 ****
+--- 6064,6079 ----
+ This option cannot be set from a |modeline| or in the |sandbox|, for
+ security reasons.
+
++ *'shellxescape'* *'sxe'*
++ 'shellxescape' 'sxe' string (default: "";
++ for MS-DOS and MS-Windows: "\"&|<>()@^")
++ global
++ {not in Vi}
++ When 'shellxquote' is set to "(" then the characters listed in this
++ option will be escaped with a '^' character. This makes it possible
++ to execute most external commands with cmd.exe.
++
++
+ *'shiftround'* *'sr'* *'noshiftround'* *'nosr'*
+ 'shiftround' 'sr' boolean (default off)
+ global
+*** ../vim-7.3.445/src/version.c 2012-02-19 18:19:24.000000000 +0100
+--- src/version.c 2012-02-20 22:12:32.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 446,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+86. E-mail Deficiency Depression (EDD) forces you to e-mail yourself.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.447 b/source/ap/vim/patches/7.3.447
new file mode 100644
index 000000000..9c0af9f4d
--- /dev/null
+++ b/source/ap/vim/patches/7.3.447
@@ -0,0 +1,377 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.447
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.447 (after 7.3.446)
+Problem: Win32: External commands with "start" do not work.
+Solution: Unescape part of the command. (Yasuhiro Matsumoto)
+Files: src/os_win32.c
+
+
+*** ../vim-7.3.446/src/os_win32.c 2012-02-19 18:19:24.000000000 +0100
+--- src/os_win32.c 2012-02-21 20:56:51.000000000 +0100
+***************
+*** 259,264 ****
+--- 259,287 ----
+ }
+
+ /*
++ * Unescape characters in "p" that appear in "escaped".
++ */
++ static void
++ unescape_shellxquote(char_u *p, char_u *escaped)
++ {
++ int l = STRLEN(p);
++ int n;
++
++ while (*p != NUL)
++ {
++ if (*p == '^' && vim_strchr(escaped, p[1]) != NULL)
++ mch_memmove(p, p + 1, l--);
++ #ifdef FEAT_MBYTE
++ n = (*mb_ptr2len)(p);
++ #else
++ n = 1;
++ #endif
++ p += n;
++ l -= n;
++ }
++ }
++
++ /*
+ * Load library "name".
+ */
+ HINSTANCE
+***************
+*** 3559,3564 ****
+--- 3582,3588 ----
+ garray_T ga;
+ int delay = 1;
+ DWORD buffer_off = 0; /* valid bytes in buffer[] */
++ char *p = NULL;
+
+ SECURITY_ATTRIBUTES saAttr;
+
+***************
+*** 3599,3607 ****
+ if (options & SHELL_READ)
+ ga_init2(&ga, 1, BUFLEN);
+
+ /* Now, run the command */
+ CreateProcess(NULL, /* Executable name */
+! cmd, /* Command to execute */
+ NULL, /* Process security attributes */
+ NULL, /* Thread security attributes */
+
+--- 3623,3640 ----
+ if (options & SHELL_READ)
+ ga_init2(&ga, 1, BUFLEN);
+
++ if (cmd != NULL)
++ {
++ p = (char *)vim_strsave((char_u *)cmd);
++ if (p != NULL)
++ unescape_shellxquote((char_u *)p, p_sxe);
++ else
++ p = cmd;
++ }
++
+ /* Now, run the command */
+ CreateProcess(NULL, /* Executable name */
+! p, /* Command to execute */
+ NULL, /* Process security attributes */
+ NULL, /* Thread security attributes */
+
+***************
+*** 3616,3621 ****
+--- 3649,3656 ----
+ &si, /* Startup information */
+ &pi); /* Process information */
+
++ if (p != cmd)
++ vim_free(p);
+
+ /* Close our unused side of the pipes */
+ CloseHandle(g_hChildStd_IN_Rd);
+***************
+*** 3898,4018 ****
+ else
+ {
+ /* we use "command" or "cmd" to start the shell; slow but easy */
+! char_u *newcmd;
+! long_u cmdlen = (
+! #ifdef FEAT_GUI_W32
+! (allowPiping && !p_stmp ? 0 : STRLEN(vimrun_path)) +
+! #endif
+! STRLEN(p_sh) + STRLEN(p_shcf) + STRLEN(cmd) + 10);
+!
+! newcmd = lalloc(cmdlen, TRUE);
+! if (newcmd != NULL)
+! {
+! char_u *cmdbase = cmd;
+!
+! /* Skip a leading ", ( and "(. */
+! if (*cmdbase == '"' )
+! ++cmdbase;
+! if (*cmdbase == '(')
+! ++cmdbase;
+! if ((STRNICMP(cmdbase, "start", 5) == 0) && vim_iswhite(cmdbase[5]))
+! {
+! STARTUPINFO si;
+! PROCESS_INFORMATION pi;
+! DWORD flags = CREATE_NEW_CONSOLE;
+!
+! si.cb = sizeof(si);
+! si.lpReserved = NULL;
+! si.lpDesktop = NULL;
+! si.lpTitle = NULL;
+! si.dwFlags = 0;
+! si.cbReserved2 = 0;
+! si.lpReserved2 = NULL;
+!
+! cmdbase = skipwhite(cmdbase + 5);
+! if ((STRNICMP(cmdbase, "/min", 4) == 0)
+! && vim_iswhite(cmdbase[4]))
+! {
+! cmdbase = skipwhite(cmdbase + 4);
+! si.dwFlags = STARTF_USESHOWWINDOW;
+! si.wShowWindow = SW_SHOWMINNOACTIVE;
+! }
+! else if ((STRNICMP(cmdbase, "/b", 2) == 0)
+! && vim_iswhite(cmdbase[2]))
+! {
+! cmdbase = skipwhite(cmdbase + 2);
+! flags = CREATE_NO_WINDOW;
+! si.dwFlags = STARTF_USESTDHANDLES;
+! si.hStdInput = CreateFile("\\\\.\\NUL", // File name
+! GENERIC_READ, // Access flags
+! 0, // Share flags
+! NULL, // Security att.
+! OPEN_EXISTING, // Open flags
+! FILE_ATTRIBUTE_NORMAL, // File att.
+! NULL); // Temp file
+! si.hStdOutput = si.hStdInput;
+! si.hStdError = si.hStdInput;
+! }
+
+! /* When the command is in double quotes, but 'shellxquote' is
+! * empty, keep the double quotes around the command.
+! * Otherwise remove the double quotes, they aren't needed
+! * here, because we don't use a shell to run the command. */
+! if (cmdbase > cmd)
+! {
+! if (STRNCMP(cmd, p_sxq, cmd - cmdbase) != 0)
+! {
+! STRCPY(newcmd, cmd);
+! }
+! else
+! {
+! char_u *p;
+
+! STRCPY(newcmd, cmdbase);
+! /* Remove a trailing ", ) and )" if they have a match
+! * at the start of the command. */
+! p = newcmd + STRLEN(newcmd);
+! if (p > newcmd && p[-1] == '"' && *cmd == '"')
+! *--p = NUL;
+! if (p > newcmd && p[-1] == ')'
+! && (*cmd =='(' || cmd[1] == '('))
+! *--p = NUL;
+! }
+! }
+
+! /*
+! * Now, start the command as a process, so that it doesn't
+! * inherit our handles which causes unpleasant dangling swap
+! * files if we exit before the spawned process
+! */
+! if (CreateProcess(NULL, // Executable name
+! newcmd, // Command to execute
+! NULL, // Process security attributes
+! NULL, // Thread security attributes
+! FALSE, // Inherit handles
+! flags, // Creation flags
+! NULL, // Environment
+! NULL, // Current directory
+! &si, // Startup information
+! &pi)) // Process information
+! x = 0;
+! else
+! {
+! x = -1;
+ #ifdef FEAT_GUI_W32
+! EMSG(_("E371: Command not found"));
+ #endif
+- }
+- if (si.hStdInput != NULL)
+- {
+- /* Close the handle to \\.\NUL */
+- CloseHandle(si.hStdInput);
+- }
+- /* Close the handles to the subprocess, so that it goes away */
+- CloseHandle(pi.hThread);
+- CloseHandle(pi.hProcess);
+ }
+! else
+ {
+ #if defined(FEAT_GUI_W32)
+ if (need_vimrun_warning)
+--- 3933,4048 ----
+ else
+ {
+ /* we use "command" or "cmd" to start the shell; slow but easy */
+! char_u *cmdbase = cmd;
+
+! /* Skip a leading ", ( and "(. */
+! if (*cmdbase == '"' )
+! ++cmdbase;
+! if (*cmdbase == '(')
+! ++cmdbase;
+!
+! if ((STRNICMP(cmdbase, "start", 5) == 0) && vim_iswhite(cmdbase[5]))
+! {
+! STARTUPINFO si;
+! PROCESS_INFORMATION pi;
+! DWORD flags = CREATE_NEW_CONSOLE;
+! char_u *p;
+!
+! si.cb = sizeof(si);
+! si.lpReserved = NULL;
+! si.lpDesktop = NULL;
+! si.lpTitle = NULL;
+! si.dwFlags = 0;
+! si.cbReserved2 = 0;
+! si.lpReserved2 = NULL;
+!
+! cmdbase = skipwhite(cmdbase + 5);
+! if ((STRNICMP(cmdbase, "/min", 4) == 0)
+! && vim_iswhite(cmdbase[4]))
+! {
+! cmdbase = skipwhite(cmdbase + 4);
+! si.dwFlags = STARTF_USESHOWWINDOW;
+! si.wShowWindow = SW_SHOWMINNOACTIVE;
+! }
+! else if ((STRNICMP(cmdbase, "/b", 2) == 0)
+! && vim_iswhite(cmdbase[2]))
+! {
+! cmdbase = skipwhite(cmdbase + 2);
+! flags = CREATE_NO_WINDOW;
+! si.dwFlags = STARTF_USESTDHANDLES;
+! si.hStdInput = CreateFile("\\\\.\\NUL", // File name
+! GENERIC_READ, // Access flags
+! 0, // Share flags
+! NULL, // Security att.
+! OPEN_EXISTING, // Open flags
+! FILE_ATTRIBUTE_NORMAL, // File att.
+! NULL); // Temp file
+! si.hStdOutput = si.hStdInput;
+! si.hStdError = si.hStdInput;
+! }
+!
+! /* Remove a trailing ", ) and )" if they have a match
+! * at the start of the command. */
+! if (cmdbase > cmd)
+! {
+! p = cmdbase + STRLEN(cmdbase);
+! if (p > cmdbase && p[-1] == '"' && *cmd == '"')
+! *--p = NUL;
+! if (p > cmdbase && p[-1] == ')'
+! && (*cmd =='(' || cmd[1] == '('))
+! *--p = NUL;
+! }
+
+! /*
+! * Unescape characters in shellxescape. This is workaround for
+! * /b option. Only redirect character should be unescaped.
+! */
+! unescape_shellxquote(cmdbase,
+! (flags & CREATE_NEW_CONSOLE) ? p_sxe : "<>");
+
+! /*
+! * Now, start the command as a process, so that it doesn't
+! * inherit our handles which causes unpleasant dangling swap
+! * files if we exit before the spawned process
+! */
+! if (CreateProcess(NULL, // Executable name
+! cmdbase, // Command to execute
+! NULL, // Process security attributes
+! NULL, // Thread security attributes
+! FALSE, // Inherit handles
+! flags, // Creation flags
+! NULL, // Environment
+! NULL, // Current directory
+! &si, // Startup information
+! &pi)) // Process information
+! x = 0;
+! else
+! {
+! x = -1;
+ #ifdef FEAT_GUI_W32
+! EMSG(_("E371: Command not found"));
+ #endif
+ }
+! if (si.hStdInput != NULL)
+! {
+! /* Close the handle to \\.\NUL */
+! CloseHandle(si.hStdInput);
+! }
+! /* Close the handles to the subprocess, so that it goes away */
+! CloseHandle(pi.hThread);
+! CloseHandle(pi.hProcess);
+! }
+! else
+! {
+! char_u *newcmd;
+! long_u cmdlen = (
+! #ifdef FEAT_GUI_W32
+! (allowPiping && !p_stmp ? 0 : STRLEN(vimrun_path)) +
+! #endif
+! STRLEN(p_sh) + STRLEN(p_shcf) + STRLEN(cmd) + 10);
+!
+! newcmd = lalloc(cmdlen, TRUE);
+! if (newcmd != NULL)
+ {
+ #if defined(FEAT_GUI_W32)
+ if (need_vimrun_warning)
+***************
+*** 4038,4045 ****
+ vim_snprintf((char *)newcmd, cmdlen, "%s %s %s",
+ p_sh, p_shcf, cmd);
+ x = mch_system((char *)newcmd, options);
+ }
+- vim_free(newcmd);
+ }
+ }
+
+--- 4068,4075 ----
+ vim_snprintf((char *)newcmd, cmdlen, "%s %s %s",
+ p_sh, p_shcf, cmd);
+ x = mch_system((char *)newcmd, options);
++ vim_free(newcmd);
+ }
+ }
+ }
+
+*** ../vim-7.3.446/src/version.c 2012-02-20 22:18:23.000000000 +0100
+--- src/version.c 2012-02-21 21:20:05.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 447,
+ /**/
+
+--
+From "know your smileys":
+ :----} You lie like Pinocchio
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.448 b/source/ap/vim/patches/7.3.448
new file mode 100644
index 000000000..91d8f26e0
--- /dev/null
+++ b/source/ap/vim/patches/7.3.448
@@ -0,0 +1,180 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.448
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.448 (after 7.3.447)
+Problem: Win32: Still a problem with "!start /b".
+Solution: Escape only '|'. (Yasuhiro Matsumoto)
+Files: src/os_win32.c
+
+
+*** ../vim-7.3.447/src/os_win32.c 2012-02-21 21:22:40.000000000 +0100
+--- src/os_win32.c 2012-02-22 13:06:55.000000000 +0100
+***************
+*** 3933,3939 ****
+ else
+ {
+ /* we use "command" or "cmd" to start the shell; slow but easy */
+! char_u *cmdbase = cmd;
+
+ /* Skip a leading ", ( and "(. */
+ if (*cmdbase == '"' )
+--- 3933,3941 ----
+ else
+ {
+ /* we use "command" or "cmd" to start the shell; slow but easy */
+! char_u *newcmd = NULL;
+! char_u *cmdbase = cmd;
+! long_u cmdlen;
+
+ /* Skip a leading ", ( and "(. */
+ if (*cmdbase == '"' )
+***************
+*** 3971,3982 ****
+ flags = CREATE_NO_WINDOW;
+ si.dwFlags = STARTF_USESTDHANDLES;
+ si.hStdInput = CreateFile("\\\\.\\NUL", // File name
+! GENERIC_READ, // Access flags
+ 0, // Share flags
+! NULL, // Security att.
+! OPEN_EXISTING, // Open flags
+! FILE_ATTRIBUTE_NORMAL, // File att.
+! NULL); // Temp file
+ si.hStdOutput = si.hStdInput;
+ si.hStdError = si.hStdInput;
+ }
+--- 3973,3984 ----
+ flags = CREATE_NO_WINDOW;
+ si.dwFlags = STARTF_USESTDHANDLES;
+ si.hStdInput = CreateFile("\\\\.\\NUL", // File name
+! GENERIC_READ, // Access flags
+ 0, // Share flags
+! NULL, // Security att.
+! OPEN_EXISTING, // Open flags
+! FILE_ATTRIBUTE_NORMAL, // File att.
+! NULL); // Temp file
+ si.hStdOutput = si.hStdInput;
+ si.hStdError = si.hStdInput;
+ }
+***************
+*** 3993,4004 ****
+ *--p = NUL;
+ }
+
+ /*
+! * Unescape characters in shellxescape. This is workaround for
+! * /b option. Only redirect character should be unescaped.
+ */
+! unescape_shellxquote(cmdbase,
+! (flags & CREATE_NEW_CONSOLE) ? p_sxe : "<>");
+
+ /*
+ * Now, start the command as a process, so that it doesn't
+--- 3995,4030 ----
+ *--p = NUL;
+ }
+
++ newcmd = cmdbase;
++ unescape_shellxquote(cmdbase, p_sxe);
++
+ /*
+! * If creating new console, arguments are passed to the
+! * 'cmd.exe' as-is. If it's not, arguments are not treated
+! * correctly for current 'cmd.exe'. So unescape characters in
+! * shellxescape except '|' for avoiding to be treated as
+! * argument to them. Pass the arguments to sub-shell.
+ */
+! if (flags != CREATE_NEW_CONSOLE)
+! {
+! char_u *subcmd;
+! char_u *cmd_shell = default_shell();
+!
+! subcmd = vim_strsave_escaped_ext(cmdbase, "|", '^', FALSE);
+! if (subcmd != NULL)
+! {
+! /* make "cmd.exe /c arguments" */
+! cmdlen = STRLEN(cmd_shell) + STRLEN(subcmd) + 5;
+! vim_free(subcmd);
+!
+! newcmd = lalloc(cmdlen, TRUE);
+! if (newcmd != NULL)
+! vim_snprintf((char *)newcmd, cmdlen, "%s /c %s",
+! default_shell, subcmd);
+! else
+! newcmd = cmdbase;
+! }
+! }
+
+ /*
+ * Now, start the command as a process, so that it doesn't
+***************
+*** 4006,4012 ****
+ * files if we exit before the spawned process
+ */
+ if (CreateProcess(NULL, // Executable name
+! cmdbase, // Command to execute
+ NULL, // Process security attributes
+ NULL, // Thread security attributes
+ FALSE, // Inherit handles
+--- 4032,4038 ----
+ * files if we exit before the spawned process
+ */
+ if (CreateProcess(NULL, // Executable name
+! newcmd, // Command to execute
+ NULL, // Process security attributes
+ NULL, // Thread security attributes
+ FALSE, // Inherit handles
+***************
+*** 4023,4028 ****
+--- 4049,4058 ----
+ EMSG(_("E371: Command not found"));
+ #endif
+ }
++
++ if (newcmd != cmdbase)
++ vim_free(newcmd);
++
+ if (si.hStdInput != NULL)
+ {
+ /* Close the handle to \\.\NUL */
+***************
+*** 4034,4041 ****
+ }
+ else
+ {
+! char_u *newcmd;
+! long_u cmdlen = (
+ #ifdef FEAT_GUI_W32
+ (allowPiping && !p_stmp ? 0 : STRLEN(vimrun_path)) +
+ #endif
+--- 4064,4070 ----
+ }
+ else
+ {
+! cmdlen = (
+ #ifdef FEAT_GUI_W32
+ (allowPiping && !p_stmp ? 0 : STRLEN(vimrun_path)) +
+ #endif
+*** ../vim-7.3.447/src/version.c 2012-02-21 21:22:40.000000000 +0100
+--- src/version.c 2012-02-22 13:02:15.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 448,
+ /**/
+
+--
+From "know your smileys":
+ ~#:-( I just washed my hair, and I can't do nuthin' with it.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.449 b/source/ap/vim/patches/7.3.449
new file mode 100644
index 000000000..9b5bdea85
--- /dev/null
+++ b/source/ap/vim/patches/7.3.449
@@ -0,0 +1,455 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.449
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.449
+Problem: Crash when a BufWinLeave autocommand closes the only other window.
+ (Daniel Hunt)
+Solution: Abort closing a buffer when it becomes the only one.
+Files: src/buffer.c, src/proto/buffer.pro, src/ex_cmds.c, src/ex_getln.c,
+ src/misc2.c, src/quickfix.c, src/window.c, src/proto/window.pro
+
+
+*** ../vim-7.3.448/src/buffer.c 2012-01-20 20:44:38.000000000 +0100
+--- src/buffer.c 2012-02-22 14:50:42.000000000 +0100
+***************
+*** 64,69 ****
+--- 64,72 ----
+ static char *msg_loclist = N_("[Location List]");
+ static char *msg_qflist = N_("[Quickfix List]");
+ #endif
++ #ifdef FEAT_AUTOCMD
++ static char *e_auabort = N_("E855: Autocommands caused command to abort");
++ #endif
+
+ /*
+ * Open current buffer, that is: open the memfile and read the file into
+***************
+*** 96,102 ****
+ * There MUST be a memfile, otherwise we can't do anything
+ * If we can't create one for the current buffer, take another buffer
+ */
+! close_buffer(NULL, curbuf, 0);
+ for (curbuf = firstbuf; curbuf != NULL; curbuf = curbuf->b_next)
+ if (curbuf->b_ml.ml_mfp != NULL)
+ break;
+--- 99,105 ----
+ * There MUST be a memfile, otherwise we can't do anything
+ * If we can't create one for the current buffer, take another buffer
+ */
+! close_buffer(NULL, curbuf, 0, FALSE);
+ for (curbuf = firstbuf; curbuf != NULL; curbuf = curbuf->b_next)
+ if (curbuf->b_ml.ml_mfp != NULL)
+ break;
+***************
+*** 316,327 ****
+ * get a new buffer very soon!
+ *
+ * The 'bufhidden' option can force freeing and deleting.
+ */
+ void
+! close_buffer(win, buf, action)
+ win_T *win; /* if not NULL, set b_last_cursor */
+ buf_T *buf;
+ int action;
+ {
+ #ifdef FEAT_AUTOCMD
+ int is_curbuf;
+--- 319,335 ----
+ * get a new buffer very soon!
+ *
+ * The 'bufhidden' option can force freeing and deleting.
++ *
++ * When "abort_if_last" is TRUE then do not close the buffer if autocommands
++ * cause there to be only one window with this buffer. e.g. when ":quit" is
++ * supposed to close the window but autocommands close all other windows.
+ */
+ void
+! close_buffer(win, buf, action, abort_if_last)
+ win_T *win; /* if not NULL, set b_last_cursor */
+ buf_T *buf;
+ int action;
++ int abort_if_last;
+ {
+ #ifdef FEAT_AUTOCMD
+ int is_curbuf;
+***************
+*** 371,378 ****
+ {
+ apply_autocmds(EVENT_BUFWINLEAVE, buf->b_fname, buf->b_fname,
+ FALSE, buf);
+! if (!buf_valid(buf)) /* autocommands may delete the buffer */
+ return;
+
+ /* When the buffer becomes hidden, but is not unloaded, trigger
+ * BufHidden */
+--- 379,390 ----
+ {
+ apply_autocmds(EVENT_BUFWINLEAVE, buf->b_fname, buf->b_fname,
+ FALSE, buf);
+! /* Return if autocommands deleted the buffer or made it the only one. */
+! if (!buf_valid(buf) || (abort_if_last && one_window()))
+! {
+! EMSG(_(e_auabort));
+ return;
++ }
+
+ /* When the buffer becomes hidden, but is not unloaded, trigger
+ * BufHidden */
+***************
+*** 380,387 ****
+ {
+ apply_autocmds(EVENT_BUFHIDDEN, buf->b_fname, buf->b_fname,
+ FALSE, buf);
+! if (!buf_valid(buf)) /* autocmds may delete the buffer */
+ return;
+ }
+ # ifdef FEAT_EVAL
+ if (aborting()) /* autocmds may abort script processing */
+--- 392,404 ----
+ {
+ apply_autocmds(EVENT_BUFHIDDEN, buf->b_fname, buf->b_fname,
+ FALSE, buf);
+! /* Return if autocommands deleted the buffer or made it the only
+! * one. */
+! if (!buf_valid(buf) || (abort_if_last && one_window()))
+! {
+! EMSG(_(e_auabort));
+ return;
++ }
+ }
+ # ifdef FEAT_EVAL
+ if (aborting()) /* autocmds may abort script processing */
+***************
+*** 775,781 ****
+ * open a new, empty buffer. */
+ swap_exists_action = SEA_NONE; /* don't want it again */
+ swap_exists_did_quit = TRUE;
+! close_buffer(curwin, curbuf, DOBUF_UNLOAD);
+ if (!buf_valid(old_curbuf) || old_curbuf == curbuf)
+ old_curbuf = buflist_new(NULL, NULL, 1L, BLN_CURBUF | BLN_LISTED);
+ if (old_curbuf != NULL)
+--- 792,798 ----
+ * open a new, empty buffer. */
+ swap_exists_action = SEA_NONE; /* don't want it again */
+ swap_exists_did_quit = TRUE;
+! close_buffer(curwin, curbuf, DOBUF_UNLOAD, FALSE);
+ if (!buf_valid(old_curbuf) || old_curbuf == curbuf)
+ old_curbuf = buflist_new(NULL, NULL, 1L, BLN_CURBUF | BLN_LISTED);
+ if (old_curbuf != NULL)
+***************
+*** 1122,1128 ****
+ * if the buffer still exists.
+ */
+ if (buf != curbuf && buf_valid(buf) && buf->b_nwindows == 0)
+! close_buffer(NULL, buf, action);
+ return retval;
+ }
+
+--- 1139,1145 ----
+ * if the buffer still exists.
+ */
+ if (buf != curbuf && buf_valid(buf) && buf->b_nwindows == 0)
+! close_buffer(NULL, buf, action, FALSE);
+ return retval;
+ }
+
+***************
+*** 1146,1152 ****
+ close_windows(buf, FALSE);
+ #endif
+ if (buf != curbuf && buf_valid(buf) && buf->b_nwindows <= 0)
+! close_buffer(NULL, buf, action);
+ return OK;
+ }
+
+--- 1163,1169 ----
+ close_windows(buf, FALSE);
+ #endif
+ if (buf != curbuf && buf_valid(buf) && buf->b_nwindows <= 0)
+! close_buffer(NULL, buf, action, FALSE);
+ return OK;
+ }
+
+***************
+*** 1378,1384 ****
+ close_buffer(prevbuf == curwin->w_buffer ? curwin : NULL, prevbuf,
+ unload ? action : (action == DOBUF_GOTO
+ && !P_HID(prevbuf)
+! && !bufIsChanged(prevbuf)) ? DOBUF_UNLOAD : 0);
+ }
+ }
+ #ifdef FEAT_AUTOCMD
+--- 1395,1401 ----
+ close_buffer(prevbuf == curwin->w_buffer ? curwin : NULL, prevbuf,
+ unload ? action : (action == DOBUF_GOTO
+ && !P_HID(prevbuf)
+! && !bufIsChanged(prevbuf)) ? DOBUF_UNLOAD : 0, FALSE);
+ }
+ }
+ #ifdef FEAT_AUTOCMD
+***************
+*** 2708,2714 ****
+ vim_free(ffname);
+ return FAIL;
+ }
+! close_buffer(NULL, obuf, DOBUF_WIPE); /* delete from the list */
+ }
+ sfname = vim_strsave(sfname);
+ if (ffname == NULL || sfname == NULL)
+--- 2725,2732 ----
+ vim_free(ffname);
+ return FAIL;
+ }
+! /* delete from the list */
+! close_buffer(NULL, obuf, DOBUF_WIPE, FALSE);
+ }
+ sfname = vim_strsave(sfname);
+ if (ffname == NULL || sfname == NULL)
+***************
+*** 5638,5644 ****
+ if (!aucmd) /* Don't trigger BufDelete autocommands here. */
+ block_autocmds();
+ #endif
+! close_buffer(NULL, buf, DOBUF_WIPE);
+ #ifdef FEAT_AUTOCMD
+ if (!aucmd)
+ unblock_autocmds();
+--- 5656,5662 ----
+ if (!aucmd) /* Don't trigger BufDelete autocommands here. */
+ block_autocmds();
+ #endif
+! close_buffer(NULL, buf, DOBUF_WIPE, FALSE);
+ #ifdef FEAT_AUTOCMD
+ if (!aucmd)
+ unblock_autocmds();
+*** ../vim-7.3.448/src/proto/buffer.pro 2010-08-15 21:57:28.000000000 +0200
+--- src/proto/buffer.pro 2012-02-22 14:04:26.000000000 +0100
+***************
+*** 1,7 ****
+ /* buffer.c */
+ int open_buffer __ARGS((int read_stdin, exarg_T *eap, int flags));
+ int buf_valid __ARGS((buf_T *buf));
+! void close_buffer __ARGS((win_T *win, buf_T *buf, int action));
+ void buf_clear_file __ARGS((buf_T *buf));
+ void buf_freeall __ARGS((buf_T *buf, int flags));
+ void goto_buffer __ARGS((exarg_T *eap, int start, int dir, int count));
+--- 1,7 ----
+ /* buffer.c */
+ int open_buffer __ARGS((int read_stdin, exarg_T *eap, int flags));
+ int buf_valid __ARGS((buf_T *buf));
+! void close_buffer __ARGS((win_T *win, buf_T *buf, int action, int abort_if_last));
+ void buf_clear_file __ARGS((buf_T *buf));
+ void buf_freeall __ARGS((buf_T *buf, int flags));
+ void goto_buffer __ARGS((exarg_T *eap, int start, int dir, int count));
+*** ../vim-7.3.448/src/ex_cmds.c 2011-12-30 15:01:55.000000000 +0100
+--- src/ex_cmds.c 2012-02-22 14:00:32.000000000 +0100
+***************
+*** 3387,3393 ****
+ /* close the link to the current buffer */
+ u_sync(FALSE);
+ close_buffer(oldwin, curbuf,
+! (flags & ECMD_HIDE) ? 0 : DOBUF_UNLOAD);
+
+ #ifdef FEAT_AUTOCMD
+ /* Autocommands may open a new window and leave oldwin open
+--- 3387,3393 ----
+ /* close the link to the current buffer */
+ u_sync(FALSE);
+ close_buffer(oldwin, curbuf,
+! (flags & ECMD_HIDE) ? 0 : DOBUF_UNLOAD, FALSE);
+
+ #ifdef FEAT_AUTOCMD
+ /* Autocommands may open a new window and leave oldwin open
+*** ../vim-7.3.448/src/ex_getln.c 2012-02-04 22:44:27.000000000 +0100
+--- src/ex_getln.c 2012-02-22 14:01:56.000000000 +0100
+***************
+*** 6443,6449 ****
+ /* win_close() may have already wiped the buffer when 'bh' is
+ * set to 'wipe' */
+ if (buf_valid(bp))
+! close_buffer(NULL, bp, DOBUF_WIPE);
+
+ /* Restore window sizes. */
+ win_size_restore(&winsizes);
+--- 6443,6449 ----
+ /* win_close() may have already wiped the buffer when 'bh' is
+ * set to 'wipe' */
+ if (buf_valid(bp))
+! close_buffer(NULL, bp, DOBUF_WIPE, FALSE);
+
+ /* Restore window sizes. */
+ win_size_restore(&winsizes);
+*** ../vim-7.3.448/src/misc2.c 2012-02-20 22:18:22.000000000 +0100
+--- src/misc2.c 2012-02-22 14:02:12.000000000 +0100
+***************
+*** 1173,1179 ****
+ for (buf = firstbuf; buf != NULL; )
+ {
+ nextbuf = buf->b_next;
+! close_buffer(NULL, buf, DOBUF_WIPE);
+ if (buf_valid(buf))
+ buf = nextbuf; /* didn't work, try next one */
+ else
+--- 1173,1179 ----
+ for (buf = firstbuf; buf != NULL; )
+ {
+ nextbuf = buf->b_next;
+! close_buffer(NULL, buf, DOBUF_WIPE, FALSE);
+ if (buf_valid(buf))
+ buf = nextbuf; /* didn't work, try next one */
+ else
+*** ../vim-7.3.448/src/quickfix.c 2012-01-20 13:39:03.000000000 +0100
+--- src/quickfix.c 2012-02-22 14:02:20.000000000 +0100
+***************
+*** 3565,3571 ****
+ buf_T *buf;
+ {
+ if (curbuf != buf) /* safety check */
+! close_buffer(NULL, buf, DOBUF_UNLOAD);
+ }
+
+ #if defined(FEAT_EVAL) || defined(PROTO)
+--- 3565,3571 ----
+ buf_T *buf;
+ {
+ if (curbuf != buf) /* safety check */
+! close_buffer(NULL, buf, DOBUF_UNLOAD, FALSE);
+ }
+
+ #if defined(FEAT_EVAL) || defined(PROTO)
+*** ../vim-7.3.448/src/window.c 2012-01-10 22:26:12.000000000 +0100
+--- src/window.c 2012-02-22 14:08:13.000000000 +0100
+***************
+*** 23,29 ****
+ static void win_totop __ARGS((int size, int flags));
+ static void win_equal_rec __ARGS((win_T *next_curwin, int current, frame_T *topfr, int dir, int col, int row, int width, int height));
+ static int last_window __ARGS((void));
+- static int one_window __ARGS((void));
+ static win_T *win_free_mem __ARGS((win_T *win, int *dirp, tabpage_T *tp));
+ static frame_T *win_altframe __ARGS((win_T *win, tabpage_T *tp));
+ static tabpage_T *alt_tabpage __ARGS((void));
+--- 23,28 ----
+***************
+*** 2083,2089 ****
+ * Return TRUE if there is only one window other than "aucmd_win" in the
+ * current tab page.
+ */
+! static int
+ one_window()
+ {
+ #ifdef FEAT_AUTOCMD
+--- 2082,2088 ----
+ * Return TRUE if there is only one window other than "aucmd_win" in the
+ * current tab page.
+ */
+! int
+ one_window()
+ {
+ #ifdef FEAT_AUTOCMD
+***************
+*** 2109,2115 ****
+ * Close window "win". Only works for the current tab page.
+ * If "free_buf" is TRUE related buffer may be unloaded.
+ *
+! * called by :quit, :close, :xit, :wq and findtag()
+ */
+ void
+ win_close(win, free_buf)
+--- 2108,2114 ----
+ * Close window "win". Only works for the current tab page.
+ * If "free_buf" is TRUE related buffer may be unloaded.
+ *
+! * Called by :quit, :close, :xit, :wq and findtag().
+ */
+ void
+ win_close(win, free_buf)
+***************
+*** 2222,2228 ****
+ * Close the link to the buffer.
+ */
+ if (win->w_buffer != NULL)
+! close_buffer(win, win->w_buffer, free_buf ? DOBUF_UNLOAD : 0);
+
+ /* Autocommands may have closed the window already, or closed the only
+ * other window or moved to another tab page. */
+--- 2221,2227 ----
+ * Close the link to the buffer.
+ */
+ if (win->w_buffer != NULL)
+! close_buffer(win, win->w_buffer, free_buf ? DOBUF_UNLOAD : 0, TRUE);
+
+ /* Autocommands may have closed the window already, or closed the only
+ * other window or moved to another tab page. */
+***************
+*** 2328,2334 ****
+ int free_tp = FALSE;
+
+ /* Close the link to the buffer. */
+! close_buffer(win, win->w_buffer, free_buf ? DOBUF_UNLOAD : 0);
+
+ /* Careful: Autocommands may have closed the tab page or made it the
+ * current tab page. */
+--- 2327,2333 ----
+ int free_tp = FALSE;
+
+ /* Close the link to the buffer. */
+! close_buffer(win, win->w_buffer, free_buf ? DOBUF_UNLOAD : 0, FALSE);
+
+ /* Careful: Autocommands may have closed the tab page or made it the
+ * current tab page. */
+*** ../vim-7.3.448/src/proto/window.pro 2010-08-15 21:57:28.000000000 +0200
+--- src/proto/window.pro 2012-02-22 14:08:28.000000000 +0100
+***************
+*** 1,13 ****
+ /* window.c */
+ void do_window __ARGS((int nchar, long Prenum, int xchar));
+ int win_split __ARGS((int size, int flags));
+! int win_split_ins __ARGS((int size, int flags, win_T *newwin, int dir));
+ int win_valid __ARGS((win_T *win));
+ int win_count __ARGS((void));
+ int make_windows __ARGS((int count, int vertical));
+ void win_move_after __ARGS((win_T *win1, win_T *win2));
+ void win_equal __ARGS((win_T *next_curwin, int current, int dir));
+ void close_windows __ARGS((buf_T *buf, int keep_curwin));
+ void win_close __ARGS((win_T *win, int free_buf));
+ void win_close_othertab __ARGS((win_T *win, int free_buf, tabpage_T *tp));
+ void win_free_all __ARGS((void));
+--- 1,14 ----
+ /* window.c */
+ void do_window __ARGS((int nchar, long Prenum, int xchar));
+ int win_split __ARGS((int size, int flags));
+! int win_split_ins __ARGS((int size, int flags, win_T *new_wp, int dir));
+ int win_valid __ARGS((win_T *win));
+ int win_count __ARGS((void));
+ int make_windows __ARGS((int count, int vertical));
+ void win_move_after __ARGS((win_T *win1, win_T *win2));
+ void win_equal __ARGS((win_T *next_curwin, int current, int dir));
+ void close_windows __ARGS((buf_T *buf, int keep_curwin));
++ int one_window __ARGS((void));
+ void win_close __ARGS((win_T *win, int free_buf));
+ void win_close_othertab __ARGS((win_T *win, int free_buf, tabpage_T *tp));
+ void win_free_all __ARGS((void));
+*** ../vim-7.3.448/src/version.c 2012-02-22 13:07:02.000000000 +0100
+--- src/version.c 2012-02-22 14:55:21.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 449,
+ /**/
+
+--
+From "know your smileys":
+ :-)-O Smiling doctor with stethoscope
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.450 b/source/ap/vim/patches/7.3.450
new file mode 100644
index 000000000..7112668f4
--- /dev/null
+++ b/source/ap/vim/patches/7.3.450
@@ -0,0 +1,81 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.450
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.450 (after 7.3.448)
+Problem: Win32: Still a problem with "!start /b".
+Solution: Fix pointer use. (Yasuhiro Matsumoto)
+Files: src/os_win32.c
+
+
+*** ../vim-7.3.449/src/os_win32.c 2012-02-22 13:07:02.000000000 +0100
+--- src/os_win32.c 2012-02-22 15:29:56.000000000 +0100
+***************
+*** 4008,4028 ****
+ if (flags != CREATE_NEW_CONSOLE)
+ {
+ char_u *subcmd;
+! char_u *cmd_shell = default_shell();
+
+ subcmd = vim_strsave_escaped_ext(cmdbase, "|", '^', FALSE);
+ if (subcmd != NULL)
+ {
+ /* make "cmd.exe /c arguments" */
+ cmdlen = STRLEN(cmd_shell) + STRLEN(subcmd) + 5;
+- vim_free(subcmd);
+-
+ newcmd = lalloc(cmdlen, TRUE);
+ if (newcmd != NULL)
+ vim_snprintf((char *)newcmd, cmdlen, "%s /c %s",
+! default_shell, subcmd);
+ else
+ newcmd = cmdbase;
+ }
+ }
+
+--- 4008,4030 ----
+ if (flags != CREATE_NEW_CONSOLE)
+ {
+ char_u *subcmd;
+! char_u *cmd_shell = mch_getenv("COMSPEC");
+!
+! if (cmd_shell == NULL || *cmd_shell == NUL)
+! cmd_shell = default_shell();
+
+ subcmd = vim_strsave_escaped_ext(cmdbase, "|", '^', FALSE);
+ if (subcmd != NULL)
+ {
+ /* make "cmd.exe /c arguments" */
+ cmdlen = STRLEN(cmd_shell) + STRLEN(subcmd) + 5;
+ newcmd = lalloc(cmdlen, TRUE);
+ if (newcmd != NULL)
+ vim_snprintf((char *)newcmd, cmdlen, "%s /c %s",
+! cmd_shell, subcmd);
+ else
+ newcmd = cmdbase;
++ vim_free(subcmd);
+ }
+ }
+
+*** ../vim-7.3.449/src/version.c 2012-02-22 14:58:24.000000000 +0100
+--- src/version.c 2012-02-22 15:33:53.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 450,
+ /**/
+
+--
+You are only young once, but you can stay immature indefinitely.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.451 b/source/ap/vim/patches/7.3.451
new file mode 100644
index 000000000..25d1b0467
--- /dev/null
+++ b/source/ap/vim/patches/7.3.451
@@ -0,0 +1,363 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.451
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.451
+Problem: Tcl doesn't work on 64 bit MS-Windows.
+Solution: Make it work. (Dave Bodenstab)
+Files: src/Make_mvc.mak, src/if_tcl.c
+
+
+*** ../vim-7.3.450/src/Make_mvc.mak 2012-02-12 01:55:50.000000000 +0100
+--- src/Make_mvc.mak 2012-02-22 15:43:01.000000000 +0100
+***************
+*** 616,622 ****
+ -DDYNAMIC_TCL_VER=\"$(TCL_VER_LONG)\"
+ TCL_OBJ = $(OUTDIR)\if_tcl.obj
+ TCL_INC = /I "$(TCL)\Include" /I "$(TCL)"
+! TCL_LIB = $(TCL)\lib\tclstub$(TCL_VER).lib
+ !else
+ CFLAGS = $(CFLAGS) -DFEAT_TCL
+ TCL_OBJ = $(OUTDIR)\if_tcl.obj
+--- 616,622 ----
+ -DDYNAMIC_TCL_VER=\"$(TCL_VER_LONG)\"
+ TCL_OBJ = $(OUTDIR)\if_tcl.obj
+ TCL_INC = /I "$(TCL)\Include" /I "$(TCL)"
+! TCL_LIB = "$(TCL)\lib\tclstub$(TCL_VER).lib"
+ !else
+ CFLAGS = $(CFLAGS) -DFEAT_TCL
+ TCL_OBJ = $(OUTDIR)\if_tcl.obj
+*** ../vim-7.3.450/src/if_tcl.c 2011-07-27 14:15:41.000000000 +0200
+--- src/if_tcl.c 2012-02-22 15:47:00.000000000 +0100
+***************
+*** 79,90 ****
+ typedef struct
+ {
+ Tcl_Interp *interp;
+ int range_start, range_end;
+ int lbase;
+ char *curbuf, *curwin;
+ } tcl_info;
+
+! static tcl_info tclinfo = { NULL, 0, 0, 0, NULL, NULL };
+
+ #define VAR_RANGE1 "::vim::range(start)"
+ #define VAR_RANGE2 "::vim::range(begin)"
+--- 79,91 ----
+ typedef struct
+ {
+ Tcl_Interp *interp;
++ int exitvalue;
+ int range_start, range_end;
+ int lbase;
+ char *curbuf, *curwin;
+ } tcl_info;
+
+! static tcl_info tclinfo = { NULL, 0, 0, 0, 0, NULL, NULL };
+
+ #define VAR_RANGE1 "::vim::range(start)"
+ #define VAR_RANGE2 "::vim::range(begin)"
+***************
+*** 279,294 ****
+ ****************************************************************************/
+
+ /*
+! * Replace standard "exit" and "catch" commands.
+ *
+! * This is a design flaw in Tcl - the standard "exit" command just calls
+! * exit() and kills the application. It should return TCL_EXIT to the
+! * app, which then decides if it wants to terminate or not. In our case,
+! * we just delete the Tcl interpreter (and create a new one with the next
+! * :tcl command).
+ */
+- #define TCL_EXIT 5
+-
+ static int
+ exitcmd(dummy, interp, objc, objv)
+ ClientData dummy UNUSED;
+--- 280,298 ----
+ ****************************************************************************/
+
+ /*
+! * Replace standard "exit" command.
+ *
+! * Delete the Tcl interpreter; a new one will be created with the next
+! * :tcl command). The exit code is saved (and retrieved in tclexit()).
+! * Since Tcl's exit is never expected to return and this replacement
+! * does, then (except for a trivial case) additional Tcl commands will
+! * be run. Since the interpreter is now marked as deleted, an error
+! * will be returned -- typically "attempt to call eval in deleted
+! * interpreter". Hopefully, at this point, checks for TCL_ERROR take
+! * place and control percolates back up to Vim -- but with this new error
+! * string in the interpreter's result value. Therefore it would be
+! * useless for this routine to return the exit code via Tcl_SetResult().
+ */
+ static int
+ exitcmd(dummy, interp, objc, objv)
+ ClientData dummy UNUSED;
+***************
+*** 305,351 ****
+ break;
+ /* FALLTHROUGH */
+ case 1:
+! Tcl_SetObjResult(interp, Tcl_NewIntObj(value));
+! return TCL_EXIT;
+! default:
+! Tcl_WrongNumArgs(interp, 1, objv, "?returnCode?");
+! }
+! return TCL_ERROR;
+! }
+
+! static int
+! catchcmd(dummy, interp, objc, objv)
+! ClientData dummy UNUSED;
+! Tcl_Interp *interp;
+! int objc;
+! Tcl_Obj *CONST objv[];
+! {
+! char *varname = NULL;
+! int result;
+!
+! switch (objc)
+! {
+! case 3:
+! varname = Tcl_GetStringFromObj(objv[2], NULL);
+! /* fallthrough */
+! case 2:
+! Tcl_ResetResult(interp);
+! Tcl_AllowExceptions(interp);
+! result = Tcl_EvalObj(interp, objv[1]);
+! if (result == TCL_EXIT)
+! return result;
+! if (varname)
+! {
+! if (Tcl_SetVar(interp, varname, Tcl_GetStringResult(interp), 0) == NULL)
+! {
+! Tcl_SetResult(interp, "couldn't save command result in variable", TCL_STATIC);
+! return TCL_ERROR;
+! }
+! }
+! Tcl_SetObjResult(interp, Tcl_NewIntObj(result));
+! return TCL_OK;
+ default:
+! Tcl_WrongNumArgs(interp, 1, objv, "command ?varName?");
+ }
+ return TCL_ERROR;
+ }
+--- 309,320 ----
+ break;
+ /* FALLTHROUGH */
+ case 1:
+! tclinfo.exitvalue = value;
+
+! Tcl_DeleteInterp(interp);
+! break;
+ default:
+! Tcl_WrongNumArgs(interp, 1, objv, "?returnCode?");
+ }
+ return TCL_ERROR;
+ }
+***************
+*** 372,377 ****
+--- 341,347 ----
+ /*
+ * "::vim::buffer list" - create a list of buffer commands.
+ * "::vim::buffer {N}" - create buffer command for buffer N.
++ * "::vim::buffer exists {N}" - test if buffer N exists.
+ * "::vim::buffer new" - create a new buffer (not implemented)
+ */
+ static int
+***************
+*** 1663,1669 ****
+ static Tcl_ChannelType channel_type =
+ {
+ "vimmessage", /* typeName */
+! NULL, /* version */
+ channel_close, /* closeProc */
+ channel_input, /* inputProc */
+ channel_output, /* outputProc */
+--- 1633,1639 ----
+ static Tcl_ChannelType channel_type =
+ {
+ "vimmessage", /* typeName */
+! TCL_CHANNEL_VERSION_2, /* version */
+ channel_close, /* closeProc */
+ channel_input, /* inputProc */
+ channel_output, /* outputProc */
+***************
+*** 1678,1683 ****
+--- 1648,1655 ----
+ NULL, /* flushProc */
+ NULL, /* handlerProc */
+ #endif
++ /* The following should not be necessary since TCL_CHANNEL_VERSION_2 was
++ * set above */
+ #ifdef TCL_CHANNEL_VERSION_3
+ NULL, /* wideSeekProc */
+ #endif
+***************
+*** 1741,1747 ****
+ Tcl_Interp *interp;
+ static Tcl_Channel ch1, ch2;
+
+! /* replace stdout and stderr */
+ ch1 = Tcl_CreateChannel(&channel_type, "vimout", VIMOUT, TCL_WRITABLE);
+ ch2 = Tcl_CreateChannel(&channel_type, "vimerr", VIMERR, TCL_WRITABLE);
+ Tcl_SetStdChannel(ch1, TCL_STDOUT);
+--- 1713,1721 ----
+ Tcl_Interp *interp;
+ static Tcl_Channel ch1, ch2;
+
+! /* Create replacement channels for stdout and stderr; this has to be
+! * done each time an interpreter is created since the channels are closed
+! * when the interpreter is deleted */
+ ch1 = Tcl_CreateChannel(&channel_type, "vimout", VIMOUT, TCL_WRITABLE);
+ ch2 = Tcl_CreateChannel(&channel_type, "vimerr", VIMERR, TCL_WRITABLE);
+ Tcl_SetStdChannel(ch1, TCL_STDOUT);
+***************
+*** 1761,1775 ****
+ #endif
+
+ Tcl_SetChannelOption(interp, ch1, "-buffering", "line");
+ Tcl_SetChannelOption(interp, ch2, "-buffering", "line");
+
+! /* replace some standard Tcl commands */
+ Tcl_DeleteCommand(interp, "exit");
+ Tcl_CreateObjCommand(interp, "exit", exitcmd,
+ (ClientData)NULL, (Tcl_CmdDeleteProc *)NULL);
+- Tcl_DeleteCommand(interp, "catch");
+- Tcl_CreateObjCommand(interp, "catch", catchcmd,
+- (ClientData)NULL, (Tcl_CmdDeleteProc *)NULL);
+
+ /* new commands, in ::vim namespace */
+ Tcl_CreateObjCommand(interp, "::vim::buffer", buffercmd,
+--- 1735,1752 ----
+ #endif
+
+ Tcl_SetChannelOption(interp, ch1, "-buffering", "line");
++ #ifdef WIN3264
++ Tcl_SetChannelOption(interp, ch1, "-translation", "lf");
++ #endif
+ Tcl_SetChannelOption(interp, ch2, "-buffering", "line");
++ #ifdef WIN3264
++ Tcl_SetChannelOption(interp, ch2, "-translation", "lf");
++ #endif
+
+! /* replace standard Tcl exit command */
+ Tcl_DeleteCommand(interp, "exit");
+ Tcl_CreateObjCommand(interp, "exit", exitcmd,
+ (ClientData)NULL, (Tcl_CmdDeleteProc *)NULL);
+
+ /* new commands, in ::vim namespace */
+ Tcl_CreateObjCommand(interp, "::vim::buffer", buffercmd,
+***************
+*** 1821,1826 ****
+--- 1798,1805 ----
+ tclinfo.range_end = row2tcl(eap->line2);
+ tclupdatevars();
+ }
++
++ tclinfo.exitvalue = 0;
+ return OK;
+ }
+
+***************
+*** 1884,1913 ****
+ {
+ int newerr = OK;
+
+! if (error == TCL_EXIT)
+ {
+- int retval;
+ char buf[50];
+- Tcl_Obj *robj;
+
+! robj = Tcl_GetObjResult(tclinfo.interp);
+! if (Tcl_GetIntFromObj(tclinfo.interp, robj, &retval) != TCL_OK)
+ {
+! EMSG(_("E281: TCL ERROR: exit code is not int!? Please report this to vim-dev@vim.org"));
+! newerr = FAIL;
+ }
+ else
+! {
+! sprintf(buf, _("E572: exit code %d"), retval);
+! tclerrmsg(buf);
+! if (retval == 0)
+! {
+! did_emsg = 0;
+! newerr = OK;
+! }
+! else
+! newerr = FAIL;
+! }
+
+ tcldelthisinterp();
+ }
+--- 1863,1885 ----
+ {
+ int newerr = OK;
+
+! if (Tcl_InterpDeleted(tclinfo.interp) /* True if we intercepted Tcl's exit command */
+! #if (TCL_MAJOR_VERSION == 8 && TCL_MINOR_VERSION >= 5) || TCL_MAJOR_VERSION > 8
+! || Tcl_LimitExceeded(tclinfo.interp) /* True if the interpreter cannot continue */
+! #endif
+! )
+ {
+ char buf[50];
+
+! sprintf(buf, _("E572: exit code %d"), tclinfo.exitvalue);
+! tclerrmsg(buf);
+! if (tclinfo.exitvalue == 0)
+ {
+! did_emsg = 0;
+! newerr = OK;
+ }
+ else
+! newerr = FAIL;
+
+ tcldelthisinterp();
+ }
+***************
+*** 2021,2027 ****
+ Tcl_SetVar(tclinfo.interp, var_line, line, 0);
+ Tcl_AllowExceptions(tclinfo.interp);
+ err = Tcl_Eval(tclinfo.interp, script);
+! if (err != TCL_OK)
+ break;
+ line = (char *)Tcl_GetVar(tclinfo.interp, var_line, 0);
+ if (line)
+--- 1993,2004 ----
+ Tcl_SetVar(tclinfo.interp, var_line, line, 0);
+ Tcl_AllowExceptions(tclinfo.interp);
+ err = Tcl_Eval(tclinfo.interp, script);
+! if (err != TCL_OK
+! || Tcl_InterpDeleted(tclinfo.interp)
+! #if (TCL_MAJOR_VERSION == 8 && TCL_MINOR_VERSION >= 5) || TCL_MAJOR_VERSION > 8
+! || Tcl_LimitExceeded(tclinfo.interp)
+! #endif
+! )
+ break;
+ line = (char *)Tcl_GetVar(tclinfo.interp, var_line, 0);
+ if (line)
+*** ../vim-7.3.450/src/version.c 2012-02-22 15:34:05.000000000 +0100
+--- src/version.c 2012-02-22 16:00:49.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 451,
+ /**/
+
+--
+Where do you want to crash today?
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.452 b/source/ap/vim/patches/7.3.452
new file mode 100644
index 000000000..295b2fe89
--- /dev/null
+++ b/source/ap/vim/patches/7.3.452
@@ -0,0 +1,70 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.452
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.452
+Problem: Undo broken when pasting close to the last line. (Andrey Radev)
+Solution: Use a flag to remember if the deleted included the last line.
+ (Christian Brabandt)
+Files: src/ops.c
+
+
+*** ../vim-7.3.451/src/ops.c 2012-01-10 13:46:18.000000000 +0100
+--- src/ops.c 2012-02-22 17:32:40.000000000 +0100
+***************
+*** 1943,1954 ****
+--- 1943,1956 ----
+ else /* delete characters between lines */
+ {
+ pos_T curpos;
++ int delete_last_line;
+
+ /* save deleted and changed lines for undo */
+ if (u_save((linenr_T)(curwin->w_cursor.lnum - 1),
+ (linenr_T)(curwin->w_cursor.lnum + oap->line_count)) == FAIL)
+ return FAIL;
+
++ delete_last_line = (oap->end.lnum == curbuf->b_ml.ml_line_count);
+ truncate_line(TRUE); /* delete from cursor to end of line */
+
+ curpos = curwin->w_cursor; /* remember curwin->w_cursor */
+***************
+*** 1956,1962 ****
+ del_lines((long)(oap->line_count - 2), FALSE);
+
+ n = (oap->end.col + 1 - !oap->inclusive);
+! if (oap->inclusive && oap->end.lnum == curbuf->b_ml.ml_line_count
+ && n > (int)STRLEN(ml_get(oap->end.lnum)))
+ {
+ /* Special case: gH<Del> deletes the last line. */
+--- 1958,1964 ----
+ del_lines((long)(oap->line_count - 2), FALSE);
+
+ n = (oap->end.col + 1 - !oap->inclusive);
+! if (oap->inclusive && delete_last_line
+ && n > (int)STRLEN(ml_get(oap->end.lnum)))
+ {
+ /* Special case: gH<Del> deletes the last line. */
+*** ../vim-7.3.451/src/version.c 2012-02-22 16:01:53.000000000 +0100
+--- src/version.c 2012-02-22 17:37:18.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 452,
+ /**/
+
+--
+From "know your smileys":
+ =):-) Uncle Sam
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.453 b/source/ap/vim/patches/7.3.453
new file mode 100644
index 000000000..cf0f0e716
--- /dev/null
+++ b/source/ap/vim/patches/7.3.453
@@ -0,0 +1,58 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.453
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.453
+Problem: Pasting in the command line is slow.
+Solution: Don't redraw if there is another character to read. (Dominique
+ Pelle)
+Files: src/ex_getln.c
+
+
+*** ../vim-7.3.452/src/ex_getln.c 2012-02-22 14:58:24.000000000 +0100
+--- src/ex_getln.c 2012-02-22 17:53:32.000000000 +0100
+***************
+*** 1852,1859 ****
+ # endif
+ )
+ /* Always redraw the whole command line to fix shaping and
+! * right-left typing. Not efficient, but it works. */
+! redrawcmd();
+ #endif
+ }
+
+--- 1852,1862 ----
+ # endif
+ )
+ /* Always redraw the whole command line to fix shaping and
+! * right-left typing. Not efficient, but it works.
+! * Do it only when there are no characters left to read
+! * to avoid useless intermediate redraws. */
+! if (vpeekc() == NUL)
+! redrawcmd();
+ #endif
+ }
+
+*** ../vim-7.3.452/src/version.c 2012-02-22 17:37:55.000000000 +0100
+--- src/version.c 2012-02-22 17:56:59.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 453,
+ /**/
+
+--
+From "know your smileys":
+ <<<:-{ Worf (Never smiles anyways, so he's a bad smiley)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.454 b/source/ap/vim/patches/7.3.454
new file mode 100644
index 000000000..8658926af
--- /dev/null
+++ b/source/ap/vim/patches/7.3.454
@@ -0,0 +1,84 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.454
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.454
+Problem: Re-allocating memory slows Vim down.
+Solution: Use realloc() in ga_grow(). (Dominique Pelle)
+Files: src/misc2.c
+
+
+*** ../vim-7.3.453/src/misc2.c 2012-02-22 14:58:24.000000000 +0100
+--- src/misc2.c 2012-02-22 18:07:45.000000000 +0100
+***************
+*** 2064,2087 ****
+ garray_T *gap;
+ int n;
+ {
+! size_t len;
+ char_u *pp;
+
+ if (gap->ga_maxlen - gap->ga_len < n)
+ {
+ if (n < gap->ga_growsize)
+ n = gap->ga_growsize;
+! len = gap->ga_itemsize * (gap->ga_len + n);
+! pp = alloc_clear((unsigned)len);
+ if (pp == NULL)
+ return FAIL;
+ gap->ga_maxlen = gap->ga_len + n;
+- if (gap->ga_data != NULL)
+- {
+- mch_memmove(pp, gap->ga_data,
+- (size_t)(gap->ga_itemsize * gap->ga_len));
+- vim_free(gap->ga_data);
+- }
+ gap->ga_data = pp;
+ }
+ return OK;
+--- 2064,2085 ----
+ garray_T *gap;
+ int n;
+ {
+! size_t old_len;
+! size_t new_len;
+ char_u *pp;
+
+ if (gap->ga_maxlen - gap->ga_len < n)
+ {
+ if (n < gap->ga_growsize)
+ n = gap->ga_growsize;
+! new_len = gap->ga_itemsize * (gap->ga_len + n);
+! pp = (gap->ga_data == NULL)
+! ? alloc(new_len) : vim_realloc(gap->ga_data, new_len);
+ if (pp == NULL)
+ return FAIL;
++ old_len = gap->ga_itemsize * gap->ga_maxlen;
++ vim_memset(pp + old_len, 0, new_len - old_len);
+ gap->ga_maxlen = gap->ga_len + n;
+ gap->ga_data = pp;
+ }
+ return OK;
+*** ../vim-7.3.453/src/version.c 2012-02-22 17:58:00.000000000 +0100
+--- src/version.c 2012-02-22 18:09:42.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 454,
+ /**/
+
+--
+From "know your smileys":
+ (X0||) Double hamburger with lettuce and tomato
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.455 b/source/ap/vim/patches/7.3.455
new file mode 100644
index 000000000..217b00d70
--- /dev/null
+++ b/source/ap/vim/patches/7.3.455
@@ -0,0 +1,70 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.455
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.455
+Problem: Using many continuation lines can be slow.
+Solution: Adjust the reallocation size to the current length.
+Files: src/ex_cmds2.c
+
+
+*** ../vim-7.3.454/src/ex_cmds2.c 2012-02-11 20:40:49.000000000 +0100
+--- src/ex_cmds2.c 2012-02-22 18:24:11.000000000 +0100
+***************
+*** 3448,3454 ****
+ {
+ garray_T ga;
+
+! ga_init2(&ga, (int)sizeof(char_u), 200);
+ ga_concat(&ga, line);
+ ga_concat(&ga, p + 1);
+ for (;;)
+--- 3448,3454 ----
+ {
+ garray_T ga;
+
+! ga_init2(&ga, (int)sizeof(char_u), 400);
+ ga_concat(&ga, line);
+ ga_concat(&ga, p + 1);
+ for (;;)
+***************
+*** 3460,3465 ****
+--- 3460,3474 ----
+ p = skipwhite(sp->nextline);
+ if (*p != '\\')
+ break;
++ /* Adjust the growsize to the current length to speed up
++ * concatenating many lines. */
++ if (ga.ga_len > 400)
++ {
++ if (ga.ga_len > 8000)
++ ga.ga_growsize = 8000;
++ else
++ ga.ga_growsize = ga.ga_len;
++ }
+ ga_concat(&ga, p + 1);
+ }
+ ga_append(&ga, NUL);
+*** ../vim-7.3.454/src/version.c 2012-02-22 18:12:29.000000000 +0100
+--- src/version.c 2012-02-22 18:24:58.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 455,
+ /**/
+
+--
+From "know your smileys":
+ :-X My lips are sealed
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.456 b/source/ap/vim/patches/7.3.456
new file mode 100644
index 000000000..26fc2a987
--- /dev/null
+++ b/source/ap/vim/patches/7.3.456
@@ -0,0 +1,376 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.456
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.456
+Problem: ":tab drop file" has several problems, including moving the
+ current window and opening a new tab for a file that already has a
+ window.
+Solution: Refactor ":tab drop" handling. (Hirohito Higashi)
+Files: src/buffer.c, src/testdir/test62.in, src/testdir/test62.ok
+
+
+*** ../vim-7.3.455/src/buffer.c 2012-02-22 14:58:24.000000000 +0100
+--- src/buffer.c 2012-02-22 19:08:34.000000000 +0100
+***************
+*** 4405,4411 ****
+ {
+ int i;
+ win_T *wp, *wpnext;
+! char_u *opened; /* array of flags for which args are open */
+ int opened_len; /* length of opened[] */
+ int use_firstwin = FALSE; /* use first window for arglist */
+ int split_ret = OK;
+--- 4405,4416 ----
+ {
+ int i;
+ win_T *wp, *wpnext;
+! char_u *opened; /* Array of weight for which args are open:
+! * 0: not opened
+! * 1: opened in other tab
+! * 2: opened in curtab
+! * 3: opened in curtab and curwin
+! */
+ int opened_len; /* length of opened[] */
+ int use_firstwin = FALSE; /* use first window for arglist */
+ int split_ret = OK;
+***************
+*** 4414,4419 ****
+--- 4419,4426 ----
+ buf_T *buf;
+ tabpage_T *tpnext;
+ int had_tab = cmdmod.tab;
++ win_T *old_curwin, *last_curwin;
++ tabpage_T *old_curtab, *last_curtab;
+ win_T *new_curwin = NULL;
+ tabpage_T *new_curtab = NULL;
+
+***************
+*** 4430,4435 ****
+--- 4437,4451 ----
+ if (opened == NULL)
+ return;
+
++ /* Autocommands may do anything to the argument list. Make sure it's not
++ * freed while we are working here by "locking" it. We still have to
++ * watch out for its size to be changed. */
++ alist = curwin->w_alist;
++ ++alist->al_refcount;
++
++ old_curwin = curwin;
++ old_curtab = curtab;
++
+ #ifdef FEAT_GUI
+ need_mouse_correct = TRUE;
+ #endif
+***************
+*** 4451,4486 ****
+ wpnext = wp->w_next;
+ buf = wp->w_buffer;
+ if (buf->b_ffname == NULL
+! || buf->b_nwindows > 1
+ #ifdef FEAT_VERTSPLIT
+ || wp->w_width != Columns
+ #endif
+ )
+! i = ARGCOUNT;
+ else
+ {
+ /* check if the buffer in this window is in the arglist */
+! for (i = 0; i < ARGCOUNT; ++i)
+ {
+! if (ARGLIST[i].ae_fnum == buf->b_fnum
+! || fullpathcmp(alist_name(&ARGLIST[i]),
+! buf->b_ffname, TRUE) & FPC_SAME)
+ {
+! if (i < opened_len)
+ {
+! opened[i] = TRUE;
+ if (i == 0)
+ {
+ new_curwin = wp;
+ new_curtab = curtab;
+ }
+ }
+! if (wp->w_alist != curwin->w_alist)
+ {
+ /* Use the current argument list for all windows
+ * containing a file from it. */
+ alist_unlink(wp->w_alist);
+! wp->w_alist = curwin->w_alist;
+ ++wp->w_alist->al_refcount;
+ }
+ break;
+--- 4467,4517 ----
+ wpnext = wp->w_next;
+ buf = wp->w_buffer;
+ if (buf->b_ffname == NULL
+! || (!keep_tabs && buf->b_nwindows > 1)
+ #ifdef FEAT_VERTSPLIT
+ || wp->w_width != Columns
+ #endif
+ )
+! i = opened_len;
+ else
+ {
+ /* check if the buffer in this window is in the arglist */
+! for (i = 0; i < opened_len; ++i)
+ {
+! if (i < alist->al_ga.ga_len
+! && (AARGLIST(alist)[i].ae_fnum == buf->b_fnum
+! || fullpathcmp(alist_name(&AARGLIST(alist)[i]),
+! buf->b_ffname, TRUE) & FPC_SAME))
+ {
+! int weight = 1;
+!
+! if (old_curtab == curtab)
+! {
+! ++weight;
+! if (old_curwin == wp)
+! ++weight;
+! }
+!
+! if (weight > (int)opened[i])
+ {
+! opened[i] = (char_u)weight;
+ if (i == 0)
+ {
++ if (new_curwin != NULL)
++ new_curwin->w_arg_idx = opened_len;
+ new_curwin = wp;
+ new_curtab = curtab;
+ }
+ }
+! else if (keep_tabs)
+! i = opened_len;
+!
+! if (wp->w_alist != alist)
+ {
+ /* Use the current argument list for all windows
+ * containing a file from it. */
+ alist_unlink(wp->w_alist);
+! wp->w_alist = alist;
+ ++wp->w_alist->al_refcount;
+ }
+ break;
+***************
+*** 4489,4495 ****
+ }
+ wp->w_arg_idx = i;
+
+! if (i == ARGCOUNT && !keep_tabs) /* close this window */
+ {
+ if (P_HID(buf) || forceit || buf->b_nwindows > 1
+ || !bufIsChanged(buf))
+--- 4520,4526 ----
+ }
+ wp->w_arg_idx = i;
+
+! if (i == opened_len && !keep_tabs)/* close this window */
+ {
+ if (P_HID(buf) || forceit || buf->b_nwindows > 1
+ || !bufIsChanged(buf))
+***************
+*** 4511,4517 ****
+ }
+ #ifdef FEAT_WINDOWS
+ /* don't close last window */
+! if (firstwin == lastwin && first_tabpage->tp_next == NULL)
+ #endif
+ use_firstwin = TRUE;
+ #ifdef FEAT_WINDOWS
+--- 4542,4549 ----
+ }
+ #ifdef FEAT_WINDOWS
+ /* don't close last window */
+! if (firstwin == lastwin
+! && (first_tabpage->tp_next == NULL || !had_tab))
+ #endif
+ use_firstwin = TRUE;
+ #ifdef FEAT_WINDOWS
+***************
+*** 4545,4564 ****
+ * Open a window for files in the argument list that don't have one.
+ * ARGCOUNT may change while doing this, because of autocommands.
+ */
+! if (count > ARGCOUNT || count <= 0)
+! count = ARGCOUNT;
+!
+! /* Autocommands may do anything to the argument list. Make sure it's not
+! * freed while we are working here by "locking" it. We still have to
+! * watch out for its size to be changed. */
+! alist = curwin->w_alist;
+! ++alist->al_refcount;
+
+ #ifdef FEAT_AUTOCMD
+ /* Don't execute Win/Buf Enter/Leave autocommands here. */
+ ++autocmd_no_enter;
+ ++autocmd_no_leave;
+ #endif
+ win_enter(lastwin, FALSE);
+ #ifdef FEAT_WINDOWS
+ /* ":drop all" should re-use an empty window to avoid "--remote-tab"
+--- 4577,4592 ----
+ * Open a window for files in the argument list that don't have one.
+ * ARGCOUNT may change while doing this, because of autocommands.
+ */
+! if (count > opened_len || count <= 0)
+! count = opened_len;
+
+ #ifdef FEAT_AUTOCMD
+ /* Don't execute Win/Buf Enter/Leave autocommands here. */
+ ++autocmd_no_enter;
+ ++autocmd_no_leave;
+ #endif
++ last_curwin = curwin;
++ last_curtab = curtab;
+ win_enter(lastwin, FALSE);
+ #ifdef FEAT_WINDOWS
+ /* ":drop all" should re-use an empty window to avoid "--remote-tab"
+***************
+*** 4568,4578 ****
+ use_firstwin = TRUE;
+ #endif
+
+! for (i = 0; i < count && i < alist->al_ga.ga_len && !got_int; ++i)
+ {
+ if (alist == &global_alist && i == global_alist.al_ga.ga_len - 1)
+ arg_had_last = TRUE;
+! if (i < opened_len && opened[i])
+ {
+ /* Move the already present window to below the current window */
+ if (curwin->w_arg_idx != i)
+--- 4596,4606 ----
+ use_firstwin = TRUE;
+ #endif
+
+! for (i = 0; i < count && i < opened_len && !got_int; ++i)
+ {
+ if (alist == &global_alist && i == global_alist.al_ga.ga_len - 1)
+ arg_had_last = TRUE;
+! if (opened[i] > 0)
+ {
+ /* Move the already present window to below the current window */
+ if (curwin->w_arg_idx != i)
+***************
+*** 4581,4587 ****
+ {
+ if (wpnext->w_arg_idx == i)
+ {
+! win_move_after(wpnext, curwin);
+ break;
+ }
+ }
+--- 4609,4621 ----
+ {
+ if (wpnext->w_arg_idx == i)
+ {
+! if (keep_tabs)
+! {
+! new_curwin = wpnext;
+! new_curtab = curtab;
+! }
+! else
+! win_move_after(wpnext, curwin);
+ break;
+ }
+ }
+***************
+*** 4636,4641 ****
+--- 4670,4683 ----
+ #ifdef FEAT_AUTOCMD
+ --autocmd_no_enter;
+ #endif
++ /* restore last referenced tabpage's curwin */
++ if (last_curtab != new_curtab)
++ {
++ if (valid_tabpage(last_curtab))
++ goto_tabpage_tp(last_curtab);
++ if (win_valid(last_curwin))
++ win_enter(last_curwin, FALSE);
++ }
+ /* to window with first arg */
+ if (valid_tabpage(new_curtab))
+ goto_tabpage_tp(new_curtab);
+*** ../vim-7.3.455/src/testdir/test62.in 2010-08-15 21:57:29.000000000 +0200
+--- src/testdir/test62.in 2012-02-22 18:45:10.000000000 +0100
+***************
+*** 50,55 ****
+--- 50,92 ----
+ :call append(line('$'), test_status)
+ :"
+ :"
++ :" Test for ":tab drop exist-file" to keep current window.
++ :sp test1
++ :tab drop test1
++ :let test_status = 'tab drop 1: fail'
++ :if tabpagenr('$') == 1 && winnr('$') == 2 && winnr() == 1
++ : let test_status = 'tab drop 1: pass'
++ :endif
++ :close
++ :call append(line('$'), test_status)
++ :"
++ :"
++ :" Test for ":tab drop new-file" to keep current window of tabpage 1.
++ :split
++ :tab drop newfile
++ :let test_status = 'tab drop 2: fail'
++ :if tabpagenr('$') == 2 && tabpagewinnr(1, '$') == 2 && tabpagewinnr(1) == 1
++ : let test_status = 'tab drop 2: pass'
++ :endif
++ :tabclose
++ :q
++ :call append(line('$'), test_status)
++ :"
++ :"
++ :" Test for ":tab drop multi-opend-file" to keep current tabpage and window.
++ :new test1
++ :tabnew
++ :new test1
++ :tab drop test1
++ :let test_status = 'tab drop 3: fail'
++ :if tabpagenr() == 2 && tabpagewinnr(2, '$') == 2 && tabpagewinnr(2) == 1
++ : let test_status = 'tab drop 3: pass'
++ :endif
++ :tabclose
++ :q
++ :call append(line('$'), test_status)
++ :"
++ :"
+ :/^Results/,$w! test.out
+ :qa!
+ ENDTEST
+*** ../vim-7.3.455/src/testdir/test62.ok 2010-08-15 21:57:29.000000000 +0200
+--- src/testdir/test62.ok 2012-02-22 18:45:10.000000000 +0100
+***************
+*** 5,7 ****
+--- 5,10 ----
+ this is tab page 4
+ gettabvar: pass
+ settabvar: pass
++ tab drop 1: pass
++ tab drop 2: pass
++ tab drop 3: pass
+*** ../vim-7.3.455/src/version.c 2012-02-22 18:29:29.000000000 +0100
+--- src/version.c 2012-02-22 19:11:52.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 456,
+ /**/
+
+--
+% cat /usr/include/life.h
+void life(void);
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.457 b/source/ap/vim/patches/7.3.457
new file mode 100644
index 000000000..e60d6242d
--- /dev/null
+++ b/source/ap/vim/patches/7.3.457
@@ -0,0 +1,81 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.457
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.457
+Problem: When setting $VIMRUNTIME later the directory for fetching
+ translated messages is not adjusted.
+Solution: Put bindtextdomain() in vim_setenv().
+Files: src/misc1.c
+
+
+*** ../vim-7.3.456/src/misc1.c 2012-02-05 22:05:44.000000000 +0100
+--- src/misc1.c 2012-02-26 13:27:28.000000000 +0100
+***************
+*** 4133,4149 ****
+ {
+ vim_setenv((char_u *)"VIMRUNTIME", p);
+ didset_vimruntime = TRUE;
+- #ifdef FEAT_GETTEXT
+- {
+- char_u *buf = concat_str(p, (char_u *)"/lang");
+-
+- if (buf != NULL)
+- {
+- bindtextdomain(VIMPACKAGE, (char *)buf);
+- vim_free(buf);
+- }
+- }
+- #endif
+ }
+ else
+ {
+--- 4133,4138 ----
+***************
+*** 4221,4226 ****
+--- 4210,4231 ----
+ putenv((char *)envbuf);
+ }
+ #endif
++ #ifdef FEAT_GETTEXT
++ /*
++ * When setting $VIMRUNTIME adjust the directory to find message
++ * translations to $VIMRUNTIME/lang.
++ */
++ if (*val != NUL && STRICMP(name, "VIMRUNTIME") == 0)
++ {
++ char_u *buf = concat_str(val, (char_u *)"/lang");
++
++ if (buf != NULL)
++ {
++ bindtextdomain(VIMPACKAGE, (char *)buf);
++ vim_free(buf);
++ }
++ }
++ #endif
+ }
+
+ #if defined(FEAT_CMDL_COMPL) || defined(PROTO)
+*** ../vim-7.3.456/src/version.c 2012-02-22 19:13:00.000000000 +0100
+--- src/version.c 2012-02-29 13:47:09.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 457,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+118. You are on a first-name basis with your ISP's staff.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.458 b/source/ap/vim/patches/7.3.458
new file mode 100644
index 000000000..9bd440734
--- /dev/null
+++ b/source/ap/vim/patches/7.3.458
@@ -0,0 +1,52 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.458
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.458
+Problem: Crash when calling smsg() during startup.
+Solution: Don't use 'shortmess' when it is not set yet.
+Files: src/option.c
+
+
+*** ../vim-7.3.457/src/option.c 2012-02-20 22:18:22.000000000 +0100
+--- src/option.c 2012-02-26 13:14:48.000000000 +0100
+***************
+*** 10984,10990 ****
+ shortmess(x)
+ int x;
+ {
+! return ( vim_strchr(p_shm, x) != NULL
+ || (vim_strchr(p_shm, 'a') != NULL
+ && vim_strchr((char_u *)SHM_A, x) != NULL));
+ }
+--- 10984,10991 ----
+ shortmess(x)
+ int x;
+ {
+! return p_shm != NULL &&
+! ( vim_strchr(p_shm, x) != NULL
+ || (vim_strchr(p_shm, 'a') != NULL
+ && vim_strchr((char_u *)SHM_A, x) != NULL));
+ }
+*** ../vim-7.3.457/src/version.c 2012-02-29 13:49:03.000000000 +0100
+--- src/version.c 2012-02-29 13:50:52.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 458,
+ /**/
+
+--
+Support your right to bare arms! Wear short sleeves!
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.459 b/source/ap/vim/patches/7.3.459
new file mode 100644
index 000000000..d75a38b44
--- /dev/null
+++ b/source/ap/vim/patches/7.3.459
@@ -0,0 +1,71 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.459
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.459
+Problem: Win32: Warnings for type conversion.
+Solution: Add type casts. (Mike Williams)
+Files: src/misc2.c, src/os_win32.c
+
+
+*** ../vim-7.3.458/src/misc2.c 2012-02-22 18:12:29.000000000 +0100
+--- src/misc2.c 2012-02-29 13:44:17.000000000 +0100
+***************
+*** 2074,2080 ****
+ n = gap->ga_growsize;
+ new_len = gap->ga_itemsize * (gap->ga_len + n);
+ pp = (gap->ga_data == NULL)
+! ? alloc(new_len) : vim_realloc(gap->ga_data, new_len);
+ if (pp == NULL)
+ return FAIL;
+ old_len = gap->ga_itemsize * gap->ga_maxlen;
+--- 2074,2080 ----
+ n = gap->ga_growsize;
+ new_len = gap->ga_itemsize * (gap->ga_len + n);
+ pp = (gap->ga_data == NULL)
+! ? alloc((unsigned)new_len) : vim_realloc(gap->ga_data, new_len);
+ if (pp == NULL)
+ return FAIL;
+ old_len = gap->ga_itemsize * gap->ga_maxlen;
+*** ../vim-7.3.458/src/os_win32.c 2012-02-22 15:34:05.000000000 +0100
+--- src/os_win32.c 2012-02-29 13:43:39.000000000 +0100
+***************
+*** 264,270 ****
+ static void
+ unescape_shellxquote(char_u *p, char_u *escaped)
+ {
+! int l = STRLEN(p);
+ int n;
+
+ while (*p != NUL)
+--- 264,270 ----
+ static void
+ unescape_shellxquote(char_u *p, char_u *escaped)
+ {
+! int l = (int)STRLEN(p);
+ int n;
+
+ while (*p != NUL)
+*** ../vim-7.3.458/src/version.c 2012-02-29 13:51:32.000000000 +0100
+--- src/version.c 2012-02-29 13:58:08.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 459,
+ /**/
+
+--
+"A clear conscience is usually the sign of a bad memory."
+ -- Steven Wright
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.460 b/source/ap/vim/patches/7.3.460
new file mode 100644
index 000000000..c1d7e85b3
--- /dev/null
+++ b/source/ap/vim/patches/7.3.460
@@ -0,0 +1,89 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.460
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.460
+Problem: Win32: UPX does not compress 64 bit binaries.
+Solution: Mention and add the alternative: mpress. (Dave Bodenstab)
+Files: src/INSTALLpc.txt, src/Make_ming.mak
+
+
+*** ../vim-7.3.459/src/INSTALLpc.txt 2011-07-15 13:51:57.000000000 +0200
+--- src/INSTALLpc.txt 2012-02-29 14:01:34.000000000 +0100
+***************
+*** 239,244 ****
+--- 239,250 ----
+ found at
+ http://www.upx.org/
+
++ As of 2011, UPX still does not support compressing 64-bit EXE's; if you have
++ built a 64-bit vim then an alternative to UPX is 'MPRESS'. MPRESS can be found
++ at:
++ http://www.matcode.com/mpress.htm
++
++
+ ADDITION: NLS support with MinGW
+
+ (by Eduardo F. Amatria <eferna1@platea.pntic.mec.es>)
+*** ../vim-7.3.459/src/Make_ming.mak 2011-10-12 14:11:43.000000000 +0200
+--- src/Make_ming.mak 2012-02-29 16:54:09.000000000 +0100
+***************
+*** 14,22 ****
+ # it's just run out of memory or something. Run again, and it will continue
+ # with 'xxd'.
+ #
+! # "make upx" makes *compressed* versions of the GUI and console EXEs, using the
+! # excellent UPX compressor:
+ # http://upx.sourceforge.net/
+ #
+ # Maintained by Ron Aaron <ronaharon@yahoo.com>
+ # updated 2003 Jan 20
+--- 14,24 ----
+ # it's just run out of memory or something. Run again, and it will continue
+ # with 'xxd'.
+ #
+! # "make upx" makes *compressed* versions of the 32 bit GUI and console EXEs,
+! # using the excellent UPX compressor:
+ # http://upx.sourceforge.net/
++ # "make mpress" uses the MPRESS compressor for 32- and 64-bit EXEs:
++ # http://www.matcode.com/mpress.htm
+ #
+ # Maintained by Ron Aaron <ronaharon@yahoo.com>
+ # updated 2003 Jan 20
+***************
+*** 640,645 ****
+--- 642,651 ----
+ upx gvim.exe
+ upx vim.exe
+
++ mpress: exes
++ mpress gvim.exe
++ mpress vim.exe
++
+ xxd/xxd.exe: xxd/xxd.c
+ $(MAKE) -C xxd -f Make_ming.mak CC=$(CC)
+
+*** ../vim-7.3.459/src/version.c 2012-02-29 13:58:43.000000000 +0100
+--- src/version.c 2012-02-29 16:54:40.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 460,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+119. You are reading a book and look for the scroll bar to get to
+ the next page.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.461 b/source/ap/vim/patches/7.3.461
new file mode 100644
index 000000000..53c83c061
--- /dev/null
+++ b/source/ap/vim/patches/7.3.461
@@ -0,0 +1,243 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.461
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.461
+Problem: The InsertCharPre autocommand event is not triggered during
+ completion and when typing several characters quickly.
+Solution: Also trigger InsertCharPre during completion. Do not read ahead
+ when an InsertCharPre autocommand is defined. (Yasuhiro Matsumoto)
+Files: src/edit.c, src/fileio.c, src/proto/fileio.pro
+
+
+*** ../vim-7.3.460/src/edit.c 2012-02-04 23:34:57.000000000 +0100
+--- src/edit.c 2012-02-29 18:17:31.000000000 +0100
+***************
+*** 259,264 ****
+--- 259,267 ----
+ static void ins_try_si __ARGS((int c));
+ #endif
+ static colnr_T get_nolist_virtcol __ARGS((void));
++ #ifdef FEAT_AUTOCMD
++ static char_u *do_insert_char_pre __ARGS((int c));
++ #endif
+
+ static colnr_T Insstart_textlen; /* length of line when insert started */
+ static colnr_T Insstart_blank_vcol; /* vcol for first inserted blank */
+***************
+*** 784,790 ****
+ * completion: Add to "compl_leader". */
+ if (ins_compl_accept_char(c))
+ {
+! ins_compl_addleader(c);
+ continue;
+ }
+
+--- 787,806 ----
+ * completion: Add to "compl_leader". */
+ if (ins_compl_accept_char(c))
+ {
+! #ifdef FEAT_AUTOCMD
+! /* Trigger InsertCharPre. */
+! char_u *str = do_insert_char_pre(c);
+! char_u *p;
+!
+! if (str != NULL)
+! {
+! for (p = str; *p != NUL; mb_ptr_adv(p))
+! ins_compl_addleader(PTR2CHAR(p));
+! vim_free(str);
+! }
+! else
+! #endif
+! ins_compl_addleader(c);
+ continue;
+ }
+
+***************
+*** 1393,1426 ****
+ #ifdef FEAT_AUTOCMD
+ if (!p_paste)
+ {
+! /* Trigger the InsertCharPre event. Lock the text to avoid
+! * weird things from happening. */
+! set_vim_var_char(c);
+! ++textlock;
+! if (apply_autocmds(EVENT_INSERTCHARPRE, NULL, NULL,
+! FALSE, curbuf))
+! {
+! /* Get the new value of v:char. If it is more than one
+! * character insert it literally. */
+! char_u *s = get_vim_var_str(VV_CHAR);
+! if (MB_CHARLEN(s) > 1)
+ {
+! if (stop_arrow() != FAIL)
+ {
+! ins_str(s);
+! AppendToRedobuffLit(s, -1);
+ }
+! c = NUL;
+ }
+! else
+! c = PTR2CHAR(s);
+ }
+
+! set_vim_var_string(VV_CHAR, NULL, -1);
+! --textlock;
+!
+! /* If the new value is an empty string then don't insert a
+! * char. */
+ if (c == NUL)
+ break;
+ }
+--- 1409,1439 ----
+ #ifdef FEAT_AUTOCMD
+ if (!p_paste)
+ {
+! /* Trigger InsertCharPre. */
+! char_u *str = do_insert_char_pre(c);
+! char_u *p;
+!
+! if (str != NULL)
+! {
+! if (*str != NUL && stop_arrow() != FAIL)
+ {
+! /* Insert the new value of v:char literally. */
+! for (p = str; *p != NUL; mb_ptr_adv(p))
+ {
+! c = PTR2CHAR(p);
+! if (c == CAR || c == K_KENTER || c == NL)
+! ins_eol(c);
+! else
+! ins_char(c);
+ }
+! AppendToRedobuffLit(str, -1);
+ }
+! vim_free(str);
+! c = NUL;
+ }
+
+! /* If the new value is already inserted or an empty string
+! * then don't insert any character. */
+ if (c == NUL)
+ break;
+ }
+***************
+*** 5883,5888 ****
+--- 5896,5903 ----
+ * Don't do this when 'cindent' or 'indentexpr' is set, because we might
+ * need to re-indent at a ':', or any other character (but not what
+ * 'paste' is set)..
++ * Don't do this when there an InsertCharPre autocommand is defined,
++ * because we need to fire the event for every character.
+ */
+ #ifdef USE_ON_FLY_SCROLL
+ dont_scroll = FALSE; /* allow scrolling here */
+***************
+*** 5900,5905 ****
+--- 5915,5923 ----
+ #ifdef FEAT_RIGHTLEFT
+ && !p_ri
+ #endif
++ #ifdef FEAT_AUTOCMD
++ && !has_insertcharpre()
++ #endif
+ )
+ {
+ #define INPUT_BUFLEN 100
+***************
+*** 10068,10070 ****
+--- 10086,10123 ----
+ validate_virtcol();
+ return curwin->w_virtcol;
+ }
++
++ #ifdef FEAT_AUTOCMD
++ /*
++ * Handle the InsertCharPre autocommand.
++ * "c" is the character that was typed.
++ * Return a pointer to allocated memory with the replacement string.
++ * Return NULL to continue inserting "c".
++ */
++ static char_u *
++ do_insert_char_pre(c)
++ int c;
++ {
++ char_u *res;
++
++ /* Return quickly when there is nothing to do. */
++ if (!has_insertcharpre())
++ return NULL;
++
++ /* Lock the text to avoid weird things from happening. */
++ ++textlock;
++ set_vim_var_char(c); /* set v:char */
++
++ if (apply_autocmds(EVENT_INSERTCHARPRE, NULL, NULL, FALSE, curbuf))
++ /* Get the new value of v:char. It may be empty or more than one
++ * character. */
++ res = vim_strsave(get_vim_var_str(VV_CHAR));
++ else
++ res = NULL;
++
++ set_vim_var_string(VV_CHAR, NULL, -1); /* clear v:char */
++ --textlock;
++
++ return res;
++ }
++ #endif
+*** ../vim-7.3.460/src/fileio.c 2012-02-12 20:13:55.000000000 +0100
+--- src/fileio.c 2012-02-29 17:50:32.000000000 +0100
+***************
+*** 9116,9121 ****
+--- 9116,9130 ----
+ return (first_autopat[(int)EVENT_CURSORMOVEDI] != NULL);
+ }
+
++ /*
++ * Return TRUE when there is an InsertCharPre autocommand defined.
++ */
++ int
++ has_insertcharpre()
++ {
++ return (first_autopat[(int)EVENT_INSERTCHARPRE] != NULL);
++ }
++
+ static int
+ apply_autocmds_group(event, fname, fname_io, force, group, buf, eap)
+ event_T event;
+*** ../vim-7.3.460/src/proto/fileio.pro 2012-02-12 20:13:55.000000000 +0100
+--- src/proto/fileio.pro 2012-02-29 17:50:38.000000000 +0100
+***************
+*** 44,49 ****
+--- 44,50 ----
+ int trigger_cursorhold __ARGS((void));
+ int has_cursormoved __ARGS((void));
+ int has_cursormovedI __ARGS((void));
++ int has_insertcharpre __ARGS((void));
+ void block_autocmds __ARGS((void));
+ void unblock_autocmds __ARGS((void));
+ int has_autocmd __ARGS((event_T event, char_u *sfname, buf_T *buf));
+*** ../vim-7.3.460/src/version.c 2012-02-29 16:56:35.000000000 +0100
+--- src/version.c 2012-02-29 18:15:34.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 461,
+ /**/
+
+--
+"Computers in the future may weigh no more than 1.5 tons."
+ Popular Mechanics, 1949
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.462 b/source/ap/vim/patches/7.3.462
new file mode 100644
index 000000000..df0372421
--- /dev/null
+++ b/source/ap/vim/patches/7.3.462
@@ -0,0 +1,191 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.462
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.462
+Problem: When using ":loadview" folds may be closed unexpectedly.
+Solution: Take into account foldlevel. (Xavier de Gaye)
+Files: src/fold.c
+
+
+*** ../vim-7.3.461/src/fold.c 2012-01-10 22:26:12.000000000 +0100
+--- src/fold.c 2012-02-29 19:18:07.000000000 +0100
+***************
+*** 3292,3298 ****
+ /* put_folds() {{{2 */
+ #if defined(FEAT_SESSION) || defined(PROTO)
+ static int put_folds_recurse __ARGS((FILE *fd, garray_T *gap, linenr_T off));
+! static int put_foldopen_recurse __ARGS((FILE *fd, garray_T *gap, linenr_T off));
+
+ /*
+ * Write commands to "fd" to restore the manual folds in window "wp".
+--- 3292,3299 ----
+ /* put_folds() {{{2 */
+ #if defined(FEAT_SESSION) || defined(PROTO)
+ static int put_folds_recurse __ARGS((FILE *fd, garray_T *gap, linenr_T off));
+! static int put_foldopen_recurse __ARGS((FILE *fd, win_T *wp, garray_T *gap, linenr_T off));
+! static int put_fold_open_close __ARGS((FILE *fd, fold_T *fp, linenr_T off));
+
+ /*
+ * Write commands to "fd" to restore the manual folds in window "wp".
+***************
+*** 3312,3318 ****
+
+ /* If some folds are manually opened/closed, need to restore that. */
+ if (wp->w_fold_manual)
+! return put_foldopen_recurse(fd, &wp->w_folds, (linenr_T)0);
+
+ return OK;
+ }
+--- 3313,3319 ----
+
+ /* If some folds are manually opened/closed, need to restore that. */
+ if (wp->w_fold_manual)
+! return put_foldopen_recurse(fd, wp, &wp->w_folds, (linenr_T)0);
+
+ return OK;
+ }
+***************
+*** 3352,3363 ****
+ * Returns FAIL when writing failed.
+ */
+ static int
+! put_foldopen_recurse(fd, gap, off)
+ FILE *fd;
+ garray_T *gap;
+ linenr_T off;
+ {
+ int i;
+ fold_T *fp;
+
+ fp = (fold_T *)gap->ga_data;
+--- 3353,3366 ----
+ * Returns FAIL when writing failed.
+ */
+ static int
+! put_foldopen_recurse(fd, wp, gap, off)
+ FILE *fd;
++ win_T *wp;
+ garray_T *gap;
+ linenr_T off;
+ {
+ int i;
++ int level;
+ fold_T *fp;
+
+ fp = (fold_T *)gap->ga_data;
+***************
+*** 3367,3393 ****
+ {
+ if (fp->fd_nested.ga_len > 0)
+ {
+! /* open/close nested folds while this fold is open */
+ if (fprintf(fd, "%ld", fp->fd_top + off) < 0
+ || put_eol(fd) == FAIL
+ || put_line(fd, "normal zo") == FAIL)
+ return FAIL;
+! if (put_foldopen_recurse(fd, &fp->fd_nested, off + fp->fd_top)
+ == FAIL)
+ return FAIL;
+ }
+- if (fprintf(fd, "%ld", fp->fd_top + off) < 0
+- || put_eol(fd) == FAIL
+- || fprintf(fd, "normal z%c",
+- fp->fd_flags == FD_CLOSED ? 'c' : 'o') < 0
+- || put_eol(fd) == FAIL)
+- return FAIL;
+ }
+ ++fp;
+ }
+
+ return OK;
+ }
+ #endif /* FEAT_SESSION */
+
+ /* }}}1 */
+--- 3370,3429 ----
+ {
+ if (fp->fd_nested.ga_len > 0)
+ {
+! /* open nested folds while this fold is open */
+ if (fprintf(fd, "%ld", fp->fd_top + off) < 0
+ || put_eol(fd) == FAIL
+ || put_line(fd, "normal zo") == FAIL)
+ return FAIL;
+! if (put_foldopen_recurse(fd, wp, &fp->fd_nested,
+! off + fp->fd_top)
+ == FAIL)
+ return FAIL;
++ /* close the parent when needed */
++ if (fp->fd_flags == FD_CLOSED)
++ {
++ if (put_fold_open_close(fd, fp, off) == FAIL)
++ return FAIL;
++ }
++ }
++ else
++ {
++ /* Open or close the leaf according to the window foldlevel.
++ * Do not close a leaf that is already closed, as it will close
++ * the parent. */
++ level = foldLevelWin(wp, off + fp->fd_top);
++ if ((fp->fd_flags == FD_CLOSED && wp->w_p_fdl >= level)
++ || (fp->fd_flags != FD_CLOSED && wp->w_p_fdl < level))
++ if (put_fold_open_close(fd, fp, off) == FAIL)
++ return FAIL;
+ }
+ }
+ ++fp;
+ }
+
+ return OK;
+ }
++
++ /* put_fold_open_close() {{{2 */
++ /*
++ * Write the open or close command to "fd".
++ * Returns FAIL when writing failed.
++ */
++ static int
++ put_fold_open_close(fd, fp, off)
++ FILE *fd;
++ fold_T *fp;
++ linenr_T off;
++ {
++ if (fprintf(fd, "%ld", fp->fd_top + off) < 0
++ || put_eol(fd) == FAIL
++ || fprintf(fd, "normal z%c",
++ fp->fd_flags == FD_CLOSED ? 'c' : 'o') < 0
++ || put_eol(fd) == FAIL)
++ return FAIL;
++
++ return OK;
++ }
+ #endif /* FEAT_SESSION */
+
+ /* }}}1 */
+*** ../vim-7.3.461/src/version.c 2012-02-29 18:22:03.000000000 +0100
+--- src/version.c 2012-02-29 18:40:43.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 462,
+ /**/
+
+--
+~
+~
+~
+".signature" 4 lines, 50 characters written
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.463 b/source/ap/vim/patches/7.3.463
new file mode 100644
index 000000000..1e7cb238f
--- /dev/null
+++ b/source/ap/vim/patches/7.3.463
@@ -0,0 +1,63 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.463
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.463
+Problem: When using ":s///c" the cursor is moved away from the match.
+ (Lawman)
+Solution: Don't move the cursor when do_ask is set. (Christian Brabandt)
+Files: src/ex_cmds.c
+
+
+*** ../vim-7.3.462/src/ex_cmds.c 2012-02-22 14:58:24.000000000 +0100
+--- src/ex_cmds.c 2012-03-07 14:54:21.000000000 +0100
+***************
+*** 5151,5160 ****
+
+ if (!global_busy)
+ {
+! if (endcolumn)
+! coladvance((colnr_T)MAXCOL);
+! else
+! beginline(BL_WHITE | BL_FIX);
+ if (!do_sub_msg(do_count) && do_ask)
+ MSG("");
+ }
+--- 5151,5163 ----
+
+ if (!global_busy)
+ {
+! if (!do_ask) /* when interactive leave cursor on the match */
+! {
+! if (endcolumn)
+! coladvance((colnr_T)MAXCOL);
+! else
+! beginline(BL_WHITE | BL_FIX);
+! }
+ if (!do_sub_msg(do_count) && do_ask)
+ MSG("");
+ }
+*** ../vim-7.3.462/src/version.c 2012-02-29 19:19:57.000000000 +0100
+--- src/version.c 2012-03-07 14:55:39.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 463,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+151. You find yourself engaged to someone you've never actually met,
+ except through e-mail.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.464 b/source/ap/vim/patches/7.3.464
new file mode 100644
index 000000000..fdfdfffc1
--- /dev/null
+++ b/source/ap/vim/patches/7.3.464
@@ -0,0 +1,60 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.464
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.464
+Problem: Compiler warning for sprintf.
+Solution: Put the length in a variable. (Dominique Pelle)
+Files: src/version.c
+
+
+*** ../vim-7.3.463/src/version.c 2012-03-07 14:57:50.000000000 +0100
+--- src/version.c 2012-03-07 17:58:41.000000000 +0100
+***************
+*** 2187,2198 ****
+ /* Check for 9.9x or 9.9xx, alpha/beta version */
+ if (isalpha((int)vers[3]))
+ {
+! if (isalpha((int)vers[4]))
+! sprintf((char *)vers + 5, ".%d%s", highest_patch(),
+! mediumVersion + 5);
+! else
+! sprintf((char *)vers + 4, ".%d%s", highest_patch(),
+! mediumVersion + 4);
+ }
+ else
+ sprintf((char *)vers + 3, ".%d", highest_patch());
+--- 2189,2197 ----
+ /* Check for 9.9x or 9.9xx, alpha/beta version */
+ if (isalpha((int)vers[3]))
+ {
+! int len = (isalpha((int)vers[4])) ? 5 : 4;
+! sprintf((char *)vers + len, ".%d%s", highest_patch(),
+! mediumVersion + len);
+ }
+ else
+ sprintf((char *)vers + 3, ".%d", highest_patch());
+*** ../vim-7.3.463/src/version.c 2012-03-07 14:57:50.000000000 +0100
+--- src/version.c 2012-03-07 17:58:41.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 464,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+152. You find yourself falling for someone you've never seen or hardly
+ know, but, boy can he/she TYPE!!!!!!
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.465 b/source/ap/vim/patches/7.3.465
new file mode 100644
index 000000000..c4a857ac9
--- /dev/null
+++ b/source/ap/vim/patches/7.3.465
@@ -0,0 +1,398 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.465
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.465
+Problem: Cannot get file name with newline from glob().
+Solution: Add argument to glob() and expand() to indicate they must return a
+ list. (Christian Brabandt)
+Files: runtime/doc/eval.txt, src/eval.c, src/ex_getln.c, src/vim.h
+
+
+*** ../vim-7.3.464/runtime/doc/eval.txt 2011-12-14 15:32:44.000000000 +0100
+--- runtime/doc/eval.txt 2012-03-07 18:49:26.000000000 +0100
+***************
+*** 1738,1744 ****
+ extend( {expr1}, {expr2} [, {expr3}])
+ List/Dict insert items of {expr2} into {expr1}
+ exp( {expr}) Float exponential of {expr}
+! expand( {expr} [, {flag}]) String expand special keywords in {expr}
+ feedkeys( {string} [, {mode}]) Number add key sequence to typeahead buffer
+ filereadable( {file}) Number TRUE if {file} is a readable file
+ filewritable( {file}) Number TRUE if {file} is a writable file
+--- 1746,1753 ----
+ extend( {expr1}, {expr2} [, {expr3}])
+ List/Dict insert items of {expr2} into {expr1}
+ exp( {expr}) Float exponential of {expr}
+! expand( {expr} [, {nosuf} [, {list}]])
+! any expand special keywords in {expr}
+ feedkeys( {string} [, {mode}]) Number add key sequence to typeahead buffer
+ filereadable( {file}) Number TRUE if {file} is a readable file
+ filewritable( {file}) Number TRUE if {file} is a writable file
+***************
+*** 1792,1798 ****
+ getwinposx() Number X coord in pixels of GUI Vim window
+ getwinposy() Number Y coord in pixels of GUI Vim window
+ getwinvar( {nr}, {varname}) any variable {varname} in window {nr}
+! glob( {expr} [, {flag}]) String expand file wildcards in {expr}
+ globpath( {path}, {expr} [, {flag}])
+ String do glob({expr}) for all dirs in {path}
+ has( {feature}) Number TRUE if feature {feature} supported
+--- 1801,1808 ----
+ getwinposx() Number X coord in pixels of GUI Vim window
+ getwinposy() Number Y coord in pixels of GUI Vim window
+ getwinvar( {nr}, {varname}) any variable {varname} in window {nr}
+! glob( {expr} [, {nosuf} [, {list}]])
+! any expand file wildcards in {expr}
+ globpath( {path}, {expr} [, {flag}])
+ String do glob({expr}) for all dirs in {path}
+ has( {feature}) Number TRUE if feature {feature} supported
+***************
+*** 2731,2743 ****
+ {only available when compiled with the |+float| feature}
+
+
+! expand({expr} [, {flag}]) *expand()*
+ Expand wildcards and the following special keywords in {expr}.
+! The result is a String.
+
+! When there are several matches, they are separated by <NL>
+! characters. [Note: in version 5.0 a space was used, which
+! caused problems when a file name contains a space]
+
+ If the expansion fails, the result is an empty string. A name
+ for a non-existing file is not included.
+--- 2744,2758 ----
+ {only available when compiled with the |+float| feature}
+
+
+! expand({expr} [, {nosuf} [, {list}]]) *expand()*
+ Expand wildcards and the following special keywords in {expr}.
+! 'wildignorecase' applies.
+
+! If {list} is given and it is non-zero, a List will be returned.
+! Otherwise the result is a String and when there are several
+! matches, they are separated by <NL> characters. [Note: in
+! version 5.0 a space was used, which caused problems when a
+! file name contains a space]
+
+ If the expansion fails, the result is an empty string. A name
+ for a non-existing file is not included.
+***************
+*** 2754,2759 ****
+--- 2769,2775 ----
+ <abuf> autocmd buffer number (as a String!)
+ <amatch> autocmd matched name
+ <sfile> sourced script file name
++ <slnum> sourced script file line number
+ <cword> word under the cursor
+ <cWORD> WORD under the cursor
+ <client> the {clientid} of the last received
+***************
+*** 2790,2799 ****
+ When {expr} does not start with '%', '#' or '<', it is
+ expanded like a file name is expanded on the command line.
+ 'suffixes' and 'wildignore' are used, unless the optional
+! {flag} argument is given and it is non-zero. Names for
+! non-existing files are included. The "**" item can be used to
+! search in a directory tree. For example, to find all "README"
+! files in the current directory and below: >
+ :echo expand("**/README")
+ <
+ Expand() can also be used to expand variables and environment
+--- 2806,2815 ----
+ When {expr} does not start with '%', '#' or '<', it is
+ expanded like a file name is expanded on the command line.
+ 'suffixes' and 'wildignore' are used, unless the optional
+! {nosuf} argument is given and it is non-zero.
+! Names for non-existing files are included. The "**" item can
+! be used to search in a directory tree. For example, to find
+! all "README" files in the current directory and below: >
+ :echo expand("**/README")
+ <
+ Expand() can also be used to expand variables and environment
+***************
+*** 3437,3453 ****
+ :let list_is_on = getwinvar(2, '&list')
+ :echo "myvar = " . getwinvar(1, 'myvar')
+ <
+! glob({expr} [, {flag}]) *glob()*
+ Expand the file wildcards in {expr}. See |wildcards| for the
+ use of special characters.
+! The result is a String.
+! When there are several matches, they are separated by <NL>
+! characters.
+! Unless the optional {flag} argument is given and is non-zero,
+ the 'suffixes' and 'wildignore' options apply: Names matching
+ one of the patterns in 'wildignore' will be skipped and
+ 'suffixes' affect the ordering of matches.
+! If the expansion fails, the result is an empty string.
+ A name for a non-existing file is not included.
+
+ For most systems backticks can be used to get files names from
+--- 3456,3478 ----
+ :let list_is_on = getwinvar(2, '&list')
+ :echo "myvar = " . getwinvar(1, 'myvar')
+ <
+! glob({expr} [, {nosuf} [, {list}]]) *glob()*
+ Expand the file wildcards in {expr}. See |wildcards| for the
+ use of special characters.
+!
+! Unless the optional {nosuf} argument is given and is non-zero,
+ the 'suffixes' and 'wildignore' options apply: Names matching
+ one of the patterns in 'wildignore' will be skipped and
+ 'suffixes' affect the ordering of matches.
+! 'wildignorecase' always applies.
+!
+! When {list} is present and it is non-zero the result is a List
+! with all matching files. The advantage of using a List is,
+! you also get filenames containing newlines correctly.
+! Otherwise the result is a String and when there are several
+! matches, they are separated by <NL> characters.
+!
+! If the expansion fails, the result is an empty String or List.
+ A name for a non-existing file is not included.
+
+ For most systems backticks can be used to get files names from
+*** ../vim-7.3.464/src/eval.c 2012-02-11 20:44:01.000000000 +0100
+--- src/eval.c 2012-03-07 19:08:36.000000000 +0100
+***************
+*** 7852,7858 ****
+ #ifdef FEAT_FLOAT
+ {"exp", 1, 1, f_exp},
+ #endif
+! {"expand", 1, 2, f_expand},
+ {"extend", 2, 3, f_extend},
+ {"feedkeys", 1, 2, f_feedkeys},
+ {"file_readable", 1, 1, f_filereadable}, /* obsolete */
+--- 7852,7858 ----
+ #ifdef FEAT_FLOAT
+ {"exp", 1, 1, f_exp},
+ #endif
+! {"expand", 1, 3, f_expand},
+ {"extend", 2, 3, f_extend},
+ {"feedkeys", 1, 2, f_feedkeys},
+ {"file_readable", 1, 1, f_filereadable}, /* obsolete */
+***************
+*** 7903,7909 ****
+ {"getwinposx", 0, 0, f_getwinposx},
+ {"getwinposy", 0, 0, f_getwinposy},
+ {"getwinvar", 2, 2, f_getwinvar},
+! {"glob", 1, 2, f_glob},
+ {"globpath", 2, 3, f_globpath},
+ {"has", 1, 1, f_has},
+ {"has_key", 2, 2, f_has_key},
+--- 7903,7909 ----
+ {"getwinposx", 0, 0, f_getwinposx},
+ {"getwinposy", 0, 0, f_getwinposy},
+ {"getwinvar", 2, 2, f_getwinvar},
+! {"glob", 1, 3, f_glob},
+ {"globpath", 2, 3, f_globpath},
+ {"has", 1, 1, f_has},
+ {"has_key", 2, 2, f_has_key},
+***************
+*** 10019,10032 ****
+ int options = WILD_SILENT|WILD_USE_NL|WILD_LIST_NOTFOUND;
+ expand_T xpc;
+ int error = FALSE;
+
+ rettv->v_type = VAR_STRING;
+ s = get_tv_string(&argvars[0]);
+ if (*s == '%' || *s == '#' || *s == '<')
+ {
+ ++emsg_off;
+! rettv->vval.v_string = eval_vars(s, s, &len, NULL, &errormsg, NULL);
+ --emsg_off;
+ }
+ else
+ {
+--- 10019,10051 ----
+ int options = WILD_SILENT|WILD_USE_NL|WILD_LIST_NOTFOUND;
+ expand_T xpc;
+ int error = FALSE;
++ char_u *result;
+
+ rettv->v_type = VAR_STRING;
++ if (argvars[1].v_type != VAR_UNKNOWN
++ && argvars[2].v_type != VAR_UNKNOWN
++ && get_tv_number_chk(&argvars[2], &error)
++ && !error)
++ {
++ rettv->v_type = VAR_LIST;
++ rettv->vval.v_list = NULL;
++ }
++
+ s = get_tv_string(&argvars[0]);
+ if (*s == '%' || *s == '#' || *s == '<')
+ {
+ ++emsg_off;
+! result = eval_vars(s, s, &len, NULL, &errormsg, NULL);
+ --emsg_off;
++ if (rettv->v_type == VAR_LIST)
++ {
++ if (rettv_list_alloc(rettv) != FAIL && result != NULL)
++ list_append_string(rettv->vval.v_list, result, -1);
++ else
++ vim_free(result);
++ }
++ else
++ rettv->vval.v_string = result;
+ }
+ else
+ {
+***************
+*** 10041,10047 ****
+ xpc.xp_context = EXPAND_FILES;
+ if (p_wic)
+ options += WILD_ICASE;
+! rettv->vval.v_string = ExpandOne(&xpc, s, NULL, options, WILD_ALL);
+ }
+ else
+ rettv->vval.v_string = NULL;
+--- 10060,10077 ----
+ xpc.xp_context = EXPAND_FILES;
+ if (p_wic)
+ options += WILD_ICASE;
+! if (rettv->v_type == VAR_STRING)
+! rettv->vval.v_string = ExpandOne(&xpc, s, NULL,
+! options, WILD_ALL);
+! else if (rettv_list_alloc(rettv) != FAIL)
+! {
+! int i;
+!
+! ExpandOne(&xpc, s, NULL, options, WILD_ALL_KEEP);
+! for (i = 0; i < xpc.xp_numfiles; i++)
+! list_append_string(rettv->vval.v_list, xpc.xp_files[i], -1);
+! ExpandCleanup(&xpc);
+! }
+ }
+ else
+ rettv->vval.v_string = NULL;
+***************
+*** 11833,11851 ****
+ int error = FALSE;
+
+ /* When the optional second argument is non-zero, don't remove matches
+! * for 'wildignore' and don't put matches for 'suffixes' at the end. */
+! if (argvars[1].v_type != VAR_UNKNOWN
+! && get_tv_number_chk(&argvars[1], &error))
+! options |= WILD_KEEP_ALL;
+ rettv->v_type = VAR_STRING;
+ if (!error)
+ {
+ ExpandInit(&xpc);
+ xpc.xp_context = EXPAND_FILES;
+ if (p_wic)
+ options += WILD_ICASE;
+! rettv->vval.v_string = ExpandOne(&xpc, get_tv_string(&argvars[0]),
+ NULL, options, WILD_ALL);
+ }
+ else
+ rettv->vval.v_string = NULL;
+--- 11863,11901 ----
+ int error = FALSE;
+
+ /* When the optional second argument is non-zero, don't remove matches
+! * for 'wildignore' and don't put matches for 'suffixes' at the end. */
+ rettv->v_type = VAR_STRING;
++ if (argvars[1].v_type != VAR_UNKNOWN)
++ {
++ if (get_tv_number_chk(&argvars[1], &error))
++ options |= WILD_KEEP_ALL;
++ if (argvars[2].v_type != VAR_UNKNOWN
++ && get_tv_number_chk(&argvars[2], &error))
++ {
++ rettv->v_type = VAR_LIST;
++ rettv->vval.v_list = NULL;
++ }
++ }
+ if (!error)
+ {
+ ExpandInit(&xpc);
+ xpc.xp_context = EXPAND_FILES;
+ if (p_wic)
+ options += WILD_ICASE;
+! if (rettv->v_type == VAR_STRING)
+! rettv->vval.v_string = ExpandOne(&xpc, get_tv_string(&argvars[0]),
+ NULL, options, WILD_ALL);
++ else if (rettv_list_alloc(rettv) != FAIL)
++ {
++ int i;
++
++ ExpandOne(&xpc, get_tv_string(&argvars[0]),
++ NULL, options, WILD_ALL_KEEP);
++ for (i = 0; i < xpc.xp_numfiles; i++)
++ list_append_string(rettv->vval.v_list, xpc.xp_files[i], -1);
++
++ ExpandCleanup(&xpc);
++ }
+ }
+ else
+ rettv->vval.v_string = NULL;
+*** ../vim-7.3.464/src/ex_getln.c 2012-02-22 17:58:00.000000000 +0100
+--- src/ex_getln.c 2012-03-07 19:07:01.000000000 +0100
+***************
+*** 3461,3466 ****
+--- 3461,3467 ----
+ * mode = WILD_PREV: use previous match in multiple match, wrap to first
+ * mode = WILD_ALL: return all matches concatenated
+ * mode = WILD_LONGEST: return longest matched part
++ * mode = WILD_ALL_KEEP: get all matches, keep matches
+ *
+ * options = WILD_LIST_NOTFOUND: list entries without a match
+ * options = WILD_HOME_REPLACE: do home_replace() for buffer names
+***************
+*** 3584,3590 ****
+ /*
+ * Check for matching suffixes in file names.
+ */
+! if (mode != WILD_ALL && mode != WILD_LONGEST)
+ {
+ if (xp->xp_numfiles)
+ non_suf_match = xp->xp_numfiles;
+--- 3585,3592 ----
+ /*
+ * Check for matching suffixes in file names.
+ */
+! if (mode != WILD_ALL && mode != WILD_ALL_KEEP
+! && mode != WILD_LONGEST)
+ {
+ if (xp->xp_numfiles)
+ non_suf_match = xp->xp_numfiles;
+*** ../vim-7.3.464/src/vim.h 2011-07-27 17:31:42.000000000 +0200
+--- src/vim.h 2012-03-07 19:03:43.000000000 +0100
+***************
+*** 794,799 ****
+--- 794,800 ----
+ #define WILD_PREV 5
+ #define WILD_ALL 6
+ #define WILD_LONGEST 7
++ #define WILD_ALL_KEEP 8
+
+ #define WILD_LIST_NOTFOUND 1
+ #define WILD_HOME_REPLACE 2
+*** ../vim-7.3.464/src/version.c 2012-03-07 18:04:00.000000000 +0100
+--- src/version.c 2012-03-07 19:14:39.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 465,
+ /**/
+
+--
+Although the scythe isn't pre-eminent among the weapons of war, anyone who
+has been on the wrong end of, say, a peasants' revolt will know that in
+skilled hands it is fearsome.
+ -- (Terry Pratchett, Mort)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.466 b/source/ap/vim/patches/7.3.466
new file mode 100644
index 000000000..0dc42934d
--- /dev/null
+++ b/source/ap/vim/patches/7.3.466
@@ -0,0 +1,49 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.466
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.466
+Problem: Get ml_get error when ":behave mswin" was used and selecting
+ several lines. (A. Sinan Unur)
+Solution: Adjust the end of the operation. (Christian Brabandt)
+Files: src/ops.c
+
+
+*** ../vim-7.3.465/src/ops.c 2012-02-22 17:37:55.000000000 +0100
+--- src/ops.c 2012-03-07 19:27:08.000000000 +0100
+***************
+*** 1957,1962 ****
+--- 1957,1965 ----
+ ++curwin->w_cursor.lnum;
+ del_lines((long)(oap->line_count - 2), FALSE);
+
++ if (delete_last_line)
++ oap->end.lnum = curbuf->b_ml.ml_line_count;
++
+ n = (oap->end.col + 1 - !oap->inclusive);
+ if (oap->inclusive && delete_last_line
+ && n > (int)STRLEN(ml_get(oap->end.lnum)))
+*** ../vim-7.3.465/src/version.c 2012-03-07 19:16:49.000000000 +0100
+--- src/version.c 2012-03-07 19:29:52.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 466,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+153. You find yourself staring at your "inbox" waiting for new e-mail
+ to arrive.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.467 b/source/ap/vim/patches/7.3.467
new file mode 100644
index 000000000..7764217c7
--- /dev/null
+++ b/source/ap/vim/patches/7.3.467
@@ -0,0 +1,54 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.467
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.467
+Problem: Cursor positioned wrong at the command line when regaining focus
+ and using some input method.
+Solution: Do not position the cursor in command line mode.
+Files: src/mbyte.c
+
+
+*** ../vim-7.3.466/src/mbyte.c 2011-12-08 15:09:46.000000000 +0100
+--- src/mbyte.c 2012-03-07 19:36:44.000000000 +0100
+***************
+*** 4504,4510 ****
+ vgetc_busy = TRUE;
+ showmode();
+ vgetc_busy = old_vgetc_busy;
+! setcursor();
+ out_flush();
+ }
+
+--- 4504,4511 ----
+ vgetc_busy = TRUE;
+ showmode();
+ vgetc_busy = old_vgetc_busy;
+! if ((State & NORMAL) || (State & INSERT))
+! setcursor();
+ out_flush();
+ }
+
+*** ../vim-7.3.466/src/version.c 2012-03-07 19:30:32.000000000 +0100
+--- src/version.c 2012-03-07 19:38:22.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 467,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+154. You fondle your mouse.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.468 b/source/ap/vim/patches/7.3.468
new file mode 100644
index 000000000..e078f9eae
--- /dev/null
+++ b/source/ap/vim/patches/7.3.468
@@ -0,0 +1,144 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.468
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.468
+Problem: For some compilers the error file is not easily readable.
+Solution: Use QuickFixCmdPre for more commands. (Marcin Szamotulski)
+Files: runtime/doc/autocmd.txt, src/quickfix.c
+
+
+*** ../vim-7.3.467/runtime/doc/autocmd.txt 2012-02-12 20:13:55.000000000 +0100
+--- runtime/doc/autocmd.txt 2012-03-07 20:07:23.000000000 +0100
+***************
+*** 695,701 ****
+ QuickFixCmdPre Before a quickfix command is run (|:make|,
+ |:lmake|, |:grep|, |:lgrep|, |:grepadd|,
+ |:lgrepadd|, |:vimgrep|, |:lvimgrep|,
+! |:vimgrepadd|, |:lvimgrepadd|, |:cscope|).
+ The pattern is matched against the command
+ being run. When |:grep| is used but 'grepprg'
+ is set to "internal" it still matches "grep".
+--- 699,708 ----
+ QuickFixCmdPre Before a quickfix command is run (|:make|,
+ |:lmake|, |:grep|, |:lgrep|, |:grepadd|,
+ |:lgrepadd|, |:vimgrep|, |:lvimgrep|,
+! |:vimgrepadd|, |:lvimgrepadd|, |:cscope|,
+! |:cfile|, |:cgetfile|, |:caddfile|, |:lfile|,
+! |:lgetfile|, |:laddfile|, |:helpgrep|,
+! |:lhelpgrep|).
+ The pattern is matched against the command
+ being run. When |:grep| is used but 'grepprg'
+ is set to "internal" it still matches "grep".
+***************
+*** 706,712 ****
+ *QuickFixCmdPost*
+ QuickFixCmdPost Like QuickFixCmdPre, but after a quickfix
+ command is run, before jumping to the first
+! location. See |QuickFixCmdPost-example|.
+ *RemoteReply*
+ RemoteReply When a reply from a Vim that functions as
+ server was received |server2client()|. The
+--- 713,722 ----
+ *QuickFixCmdPost*
+ QuickFixCmdPost Like QuickFixCmdPre, but after a quickfix
+ command is run, before jumping to the first
+! location. For |:cfile| and |:lfile| commands
+! it is run after error file is read and before
+! moving to the first error.
+! See |QuickFixCmdPost-example|.
+ *RemoteReply*
+ RemoteReply When a reply from a Vim that functions as
+ server was received |server2client()|. The
+*** ../vim-7.3.467/src/quickfix.c 2012-02-22 14:58:24.000000000 +0100
+--- src/quickfix.c 2012-03-07 20:10:07.000000000 +0100
+***************
+*** 2995,3005 ****
+ {
+ win_T *wp = NULL;
+ qf_info_T *qi = &ql_info;
+
+ if (eap->cmdidx == CMD_lfile || eap->cmdidx == CMD_lgetfile
+! || eap->cmdidx == CMD_laddfile)
+ wp = curwin;
+
+ #ifdef FEAT_BROWSE
+ if (cmdmod.browse)
+ {
+--- 2995,3022 ----
+ {
+ win_T *wp = NULL;
+ qf_info_T *qi = &ql_info;
++ #ifdef FEAT_AUTOCMD
++ char_u *au_name = NULL;
++ #endif
+
+ if (eap->cmdidx == CMD_lfile || eap->cmdidx == CMD_lgetfile
+! || eap->cmdidx == CMD_laddfile)
+ wp = curwin;
+
++ #ifdef FEAT_AUTOCMD
++ switch (eap->cmdidx)
++ {
++ case CMD_cfile: au_name = (char_u *)"cfile"; break;
++ case CMD_cgetfile: au_name = (char_u *)"cgetfile"; break;
++ case CMD_caddfile: au_name = (char_u *)"caddfile"; break;
++ case CMD_lfile: au_name = (char_u *)"lfile"; break;
++ case CMD_lgetfile: au_name = (char_u *)"lgetfile"; break;
++ case CMD_laddfile: au_name = (char_u *)"laddfile"; break;
++ default: break;
++ }
++ if (au_name != NULL)
++ apply_autocmds(EVENT_QUICKFIXCMDPRE, au_name, NULL, FALSE, curbuf);
++ #endif
+ #ifdef FEAT_BROWSE
+ if (cmdmod.browse)
+ {
+***************
+*** 3031,3040 ****
+--- 3048,3069 ----
+ && (eap->cmdidx == CMD_cfile
+ || eap->cmdidx == CMD_lfile))
+ {
++ #ifdef FEAT_AUTOCMD
++ if (au_name != NULL)
++ apply_autocmds(EVENT_QUICKFIXCMDPOST, au_name, NULL, FALSE, curbuf);
++ #endif
+ if (wp != NULL)
+ qi = GET_LOC_LIST(wp);
+ qf_jump(qi, 0, 0, eap->forceit); /* display first error */
+ }
++
++ else
++ {
++ #ifdef FEAT_AUTOCMD
++ if (au_name != NULL)
++ apply_autocmds(EVENT_QUICKFIXCMDPOST, au_name, NULL, FALSE, curbuf);
++ #endif
++ }
+ }
+
+ /*
+*** ../vim-7.3.467/src/version.c 2012-03-07 19:38:52.000000000 +0100
+--- src/version.c 2012-03-07 20:11:54.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 468,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+155. You forget to eat because you're too busy surfing the net.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.469 b/source/ap/vim/patches/7.3.469
new file mode 100644
index 000000000..77ca4a05e
--- /dev/null
+++ b/source/ap/vim/patches/7.3.469
@@ -0,0 +1,53 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.469
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.469
+Problem: Compiler warning for unused argument without some features.
+Solution: Add UNUSED.
+Files: src/buffer.c
+
+
+*** ../vim-7.3.468/src/buffer.c 2012-02-22 19:13:00.000000000 +0100
+--- src/buffer.c 2012-03-07 22:30:56.000000000 +0100
+***************
+*** 329,335 ****
+ win_T *win; /* if not NULL, set b_last_cursor */
+ buf_T *buf;
+ int action;
+! int abort_if_last;
+ {
+ #ifdef FEAT_AUTOCMD
+ int is_curbuf;
+--- 329,335 ----
+ win_T *win; /* if not NULL, set b_last_cursor */
+ buf_T *buf;
+ int action;
+! int abort_if_last UNUSED;
+ {
+ #ifdef FEAT_AUTOCMD
+ int is_curbuf;
+*** ../vim-7.3.468/src/version.c 2012-03-07 20:13:44.000000000 +0100
+--- src/version.c 2012-03-07 22:51:54.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 469,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+157. You fum through a magazine, you first check to see if it has a web
+ address.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.470 b/source/ap/vim/patches/7.3.470
new file mode 100644
index 000000000..80bec1564
--- /dev/null
+++ b/source/ap/vim/patches/7.3.470
@@ -0,0 +1,67 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.470
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.470
+Problem: Test 62 fails when compiled without GUI and X11.
+Solution: Don't test :drop when it is not supported.
+Files: src/testdir/test62.in
+
+
+*** ../vim-7.3.469/src/testdir/test62.in 2012-02-22 19:13:00.000000000 +0100
+--- src/testdir/test62.in 2012-03-07 22:46:17.000000000 +0100
+***************
+*** 49,55 ****
+ :tabclose
+ :call append(line('$'), test_status)
+ :"
+! :"
+ :" Test for ":tab drop exist-file" to keep current window.
+ :sp test1
+ :tab drop test1
+--- 49,55 ----
+ :tabclose
+ :call append(line('$'), test_status)
+ :"
+! :if has('gui') || has('clientserver')
+ :" Test for ":tab drop exist-file" to keep current window.
+ :sp test1
+ :tab drop test1
+***************
+*** 85,90 ****
+--- 85,96 ----
+ :tabclose
+ :q
+ :call append(line('$'), test_status)
++ :else
++ :" :drop not supported
++ :call append(line('$'), 'tab drop 1: pass')
++ :call append(line('$'), 'tab drop 2: pass')
++ :call append(line('$'), 'tab drop 3: pass')
++ :endif
+ :"
+ :"
+ :/^Results/,$w! test.out
+*** ../vim-7.3.469/src/version.c 2012-03-07 22:52:30.000000000 +0100
+--- src/version.c 2012-03-07 22:53:40.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 470,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+158. You get a tuner card so you can watch TV while surfing.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.471 b/source/ap/vim/patches/7.3.471
new file mode 100644
index 000000000..be814324f
--- /dev/null
+++ b/source/ap/vim/patches/7.3.471
@@ -0,0 +1,92 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.471
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.471
+Problem: Can't abort listing placed signs.
+Solution: Check "got_int". (Christian Brabandt)
+Files: src/buffer.c, src/ex_cmds.c
+
+
+*** ../vim-7.3.470/src/buffer.c 2012-03-07 22:52:30.000000000 +0100
+--- src/buffer.c 2012-03-16 13:54:48.000000000 +0100
+***************
+*** 5557,5563 ****
+ buf = firstbuf;
+ else
+ buf = rbuf;
+! while (buf != NULL)
+ {
+ if (buf->b_signlist != NULL)
+ {
+--- 5557,5563 ----
+ buf = firstbuf;
+ else
+ buf = rbuf;
+! while (buf != NULL && !got_int)
+ {
+ if (buf->b_signlist != NULL)
+ {
+***************
+*** 5565,5571 ****
+ MSG_PUTS_ATTR(lbuf, hl_attr(HLF_D));
+ msg_putchar('\n');
+ }
+! for (p = buf->b_signlist; p != NULL; p = p->next)
+ {
+ vim_snprintf(lbuf, BUFSIZ, _(" line=%ld id=%d name=%s"),
+ (long)p->lnum, p->id, sign_typenr2name(p->typenr));
+--- 5565,5571 ----
+ MSG_PUTS_ATTR(lbuf, hl_attr(HLF_D));
+ msg_putchar('\n');
+ }
+! for (p = buf->b_signlist; p != NULL && !got_int; p = p->next)
+ {
+ vim_snprintf(lbuf, BUFSIZ, _(" line=%ld id=%d name=%s"),
+ (long)p->lnum, p->id, sign_typenr2name(p->typenr));
+*** ../vim-7.3.470/src/ex_cmds.c 2012-03-07 14:57:50.000000000 +0100
+--- src/ex_cmds.c 2012-03-16 13:58:50.000000000 +0100
+***************
+*** 6729,6735 ****
+ if (idx == SIGNCMD_LIST && *arg == NUL)
+ {
+ /* ":sign list": list all defined signs */
+! for (sp = first_sign; sp != NULL; sp = sp->sn_next)
+ sign_list_defined(sp);
+ }
+ else if (*arg == NUL)
+--- 6729,6735 ----
+ if (idx == SIGNCMD_LIST && *arg == NUL)
+ {
+ /* ":sign list": list all defined signs */
+! for (sp = first_sign; sp != NULL && !got_int; sp = sp->sn_next)
+ sign_list_defined(sp);
+ }
+ else if (*arg == NUL)
+*** ../vim-7.3.470/src/version.c 2012-03-07 22:55:17.000000000 +0100
+--- src/version.c 2012-03-16 13:55:28.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 471,
+ /**/
+
+--
+Some of the well know MS-Windows errors:
+ EMEMORY Memory error caused by..., eh...
+ ELICENSE Your license has expired, give us more money!
+ EMOUSE Mouse moved, reinstall Windows
+ EILLEGAL Illegal error, you are not allowed to see this
+ EVIRUS Undetectable virus found
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.472 b/source/ap/vim/patches/7.3.472
new file mode 100644
index 000000000..217b2fc99
--- /dev/null
+++ b/source/ap/vim/patches/7.3.472
@@ -0,0 +1,88 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.472
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.472
+Problem: Crash when using ":redraw" in a BufEnter autocommand and
+ switching to another tab. (驼峰)
+Solution: Move triggering the the autocommands to after correcting the
+ option values. Also check the row value to be out of bounds.
+ (Christian Brabandt, Sergey Khorev)
+Files: src/screen.c, src/window.c
+
+
+*** ../vim-7.3.471/src/screen.c 2012-02-04 23:34:57.000000000 +0100
+--- src/screen.c 2012-03-16 18:59:20.000000000 +0100
+***************
+*** 5371,5376 ****
+--- 5371,5382 ----
+ # define CHAR_CELLS 1
+ #endif
+
++ /* Check for illegal row and col, just in case. */
++ if (row >= Rows)
++ row = Rows - 1;
++ if (endcol > Columns)
++ endcol = Columns;
++
+ # ifdef FEAT_CLIPBOARD
+ clip_may_clear_selection(row, row);
+ # endif
+*** ../vim-7.3.471/src/window.c 2012-02-22 14:58:24.000000000 +0100
+--- src/window.c 2012-03-16 18:43:01.000000000 +0100
+***************
+*** 3676,3688 ****
+ win_enter_ext(tp->tp_curwin, FALSE, TRUE);
+ prevwin = next_prevwin;
+
+- #ifdef FEAT_AUTOCMD
+- apply_autocmds(EVENT_TABENTER, NULL, NULL, FALSE, curbuf);
+-
+- if (old_curbuf != curbuf)
+- apply_autocmds(EVENT_BUFENTER, NULL, NULL, FALSE, curbuf);
+- #endif
+-
+ last_status(FALSE); /* status line may appear or disappear */
+ (void)win_comp_pos(); /* recompute w_winrow for all windows */
+ must_redraw = CLEAR; /* need to redraw everything */
+--- 3676,3681 ----
+***************
+*** 3712,3717 ****
+--- 3705,3718 ----
+ gui_may_update_scrollbars();
+ #endif
+
++ #ifdef FEAT_AUTOCMD
++ /* Apply autocommands after updating the display, when 'rows' and
++ * 'columns' have been set correctly. */
++ apply_autocmds(EVENT_TABENTER, NULL, NULL, FALSE, curbuf);
++ if (old_curbuf != curbuf)
++ apply_autocmds(EVENT_BUFENTER, NULL, NULL, FALSE, curbuf);
++ #endif
++
+ redraw_all_later(CLEAR);
+ }
+
+*** ../vim-7.3.471/src/version.c 2012-03-16 14:32:10.000000000 +0100
+--- src/version.c 2012-03-16 19:02:53.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 472,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+200. You really believe in the concept of a "paperless" office.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.473 b/source/ap/vim/patches/7.3.473
new file mode 100644
index 000000000..571f85dac
--- /dev/null
+++ b/source/ap/vim/patches/7.3.473
@@ -0,0 +1,68 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.473
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.473
+Problem: 'cursorbind' does not work correctly in combination with
+ 'virtualedit' set to "all".
+Solution: Copy coladd. (Gary Johnson)
+Files: src/move.c
+
+
+*** ../vim-7.3.472/src/move.c 2012-02-04 23:34:57.000000000 +0100
+--- src/move.c 2012-03-16 19:20:57.000000000 +0100
+***************
+*** 2843,2849 ****
+ do_check_cursorbind()
+ {
+ linenr_T line = curwin->w_cursor.lnum;
+! colnr_T col = curwin->w_cursor.col;
+ win_T *old_curwin = curwin;
+ buf_T *old_curbuf = curbuf;
+ int restart_edit_save;
+--- 2843,2852 ----
+ do_check_cursorbind()
+ {
+ linenr_T line = curwin->w_cursor.lnum;
+! colnr_T col = curwin->w_cursor.col;
+! # ifdef FEAT_VIRTUALEDIT
+! colnr_T coladd = curwin->w_cursor.coladd;
+! # endif
+ win_T *old_curwin = curwin;
+ buf_T *old_curbuf = curbuf;
+ int restart_edit_save;
+***************
+*** 2875,2880 ****
+--- 2878,2886 ----
+ # endif
+ curwin->w_cursor.lnum = line;
+ curwin->w_cursor.col = col;
++ # ifdef FEAT_VIRTUALEDIT
++ curwin->w_cursor.coladd = coladd;
++ # endif
+
+ /* Make sure the cursor is in a valid position. Temporarily set
+ * "restart_edit" to allow the cursor to be beyond the EOL. */
+*** ../vim-7.3.472/src/version.c 2012-03-16 19:07:54.000000000 +0100
+--- src/version.c 2012-03-16 19:24:06.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 473,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+201. When somebody asks you where you are, you tell them in which chat room.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.474 b/source/ap/vim/patches/7.3.474
new file mode 100644
index 000000000..dc6b1d6eb
--- /dev/null
+++ b/source/ap/vim/patches/7.3.474
@@ -0,0 +1,62 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.474
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.474
+Problem: Perl build with gcc 4 fails.
+Solution: Remove XS() statements. (Yasuhiro Matsumoto)
+Files: src/if_perl.xs
+
+
+*** ../vim-7.3.473/src/if_perl.xs 2012-02-12 00:31:47.000000000 +0100
+--- src/if_perl.xs 2012-03-16 19:33:23.000000000 +0100
+***************
+*** 913,936 ****
+ win_T *win_find_nr(int n) { return curwin; }
+ #endif
+
+- XS(XS_VIM_Msg);
+- XS(XS_VIM_SetOption);
+- XS(XS_VIM_DoCommand);
+- XS(XS_VIM_Eval);
+- XS(XS_VIM_Buffers);
+- XS(XS_VIM_Windows);
+- XS(XS_VIWIN_DESTROY);
+- XS(XS_VIWIN_Buffer);
+- XS(XS_VIWIN_SetHeight);
+- XS(XS_VIWIN_Cursor);
+- XS(XS_VIBUF_DESTROY);
+- XS(XS_VIBUF_Name);
+- XS(XS_VIBUF_Number);
+- XS(XS_VIBUF_Count);
+- XS(XS_VIBUF_Get);
+- XS(XS_VIBUF_Set);
+- XS(XS_VIBUF_Delete);
+- XS(XS_VIBUF_Append);
+ XS(boot_VIM);
+
+ static void
+--- 913,918 ----
+*** ../vim-7.3.473/src/version.c 2012-03-16 19:24:21.000000000 +0100
+--- src/version.c 2012-03-16 19:28:03.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 474,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+202. You're amazed to find out Spam is a food.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.475 b/source/ap/vim/patches/7.3.475
new file mode 100644
index 000000000..54c27a21f
--- /dev/null
+++ b/source/ap/vim/patches/7.3.475
@@ -0,0 +1,98 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.475
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.475
+Problem: In a terminal with few colors the omnicomplete menu may be hard to
+ see when using the default colors.
+Solution: Use more explicit colors. (suggested by Alex Henrie)
+Files: src/syntax.c
+
+
+*** ../vim-7.3.474/src/syntax.c 2012-01-10 22:26:12.000000000 +0100
+--- src/syntax.c 2012-03-16 20:14:22.000000000 +0100
+***************
+*** 6516,6523 ****
+ "DiffText term=reverse cterm=bold ctermbg=Red gui=bold guibg=Red"),
+ #endif
+ #ifdef FEAT_INS_EXPAND
+- CENT("PmenuThumb cterm=reverse",
+- "PmenuThumb cterm=reverse gui=reverse"),
+ CENT("PmenuSbar ctermbg=Grey",
+ "PmenuSbar ctermbg=Grey guibg=Grey"),
+ #endif
+--- 6516,6521 ----
+***************
+*** 6557,6566 ****
+ "SpellLocal term=underline ctermbg=Cyan guisp=DarkCyan gui=undercurl"),
+ #endif
+ #ifdef FEAT_INS_EXPAND
+! CENT("Pmenu ctermbg=LightMagenta",
+! "Pmenu ctermbg=LightMagenta guibg=LightMagenta"),
+! CENT("PmenuSel ctermbg=LightGrey",
+! "PmenuSel ctermbg=LightGrey guibg=Grey"),
+ #endif
+ CENT("SpecialKey term=bold ctermfg=DarkBlue",
+ "SpecialKey term=bold ctermfg=DarkBlue guifg=Blue"),
+--- 6555,6566 ----
+ "SpellLocal term=underline ctermbg=Cyan guisp=DarkCyan gui=undercurl"),
+ #endif
+ #ifdef FEAT_INS_EXPAND
+! CENT("PmenuThumb ctermbg=Black",
+! "PmenuThumb ctermbg=Black guibg=Black"),
+! CENT("Pmenu ctermbg=LightMagenta ctermfg=Black",
+! "Pmenu ctermbg=LightMagenta ctermfg=Black guibg=LightMagenta"),
+! CENT("PmenuSel ctermbg=LightGrey ctermfg=Black",
+! "PmenuSel ctermbg=LightGrey ctermfg=Black guibg=Grey"),
+ #endif
+ CENT("SpecialKey term=bold ctermfg=DarkBlue",
+ "SpecialKey term=bold ctermfg=DarkBlue guifg=Blue"),
+***************
+*** 6645,6654 ****
+ "SpellLocal term=underline ctermbg=Cyan guisp=Cyan gui=undercurl"),
+ #endif
+ #ifdef FEAT_INS_EXPAND
+! CENT("Pmenu ctermbg=Magenta",
+! "Pmenu ctermbg=Magenta guibg=Magenta"),
+! CENT("PmenuSel ctermbg=DarkGrey",
+! "PmenuSel ctermbg=DarkGrey guibg=DarkGrey"),
+ #endif
+ CENT("Title term=bold ctermfg=LightMagenta",
+ "Title term=bold ctermfg=LightMagenta gui=bold guifg=Magenta"),
+--- 6645,6656 ----
+ "SpellLocal term=underline ctermbg=Cyan guisp=Cyan gui=undercurl"),
+ #endif
+ #ifdef FEAT_INS_EXPAND
+! CENT("PmenuThumb ctermbg=White",
+! "PmenuThumb ctermbg=White guibg=White"),
+! CENT("Pmenu ctermbg=Magenta ctermfg=Black",
+! "Pmenu ctermbg=Magenta ctermfg=Black guibg=Magenta"),
+! CENT("PmenuSel ctermbg=DarkGrey ctermfg=Black",
+! "PmenuSel ctermbg=DarkGrey ctermfg=Black guibg=DarkGrey"),
+ #endif
+ CENT("Title term=bold ctermfg=LightMagenta",
+ "Title term=bold ctermfg=LightMagenta gui=bold guifg=Magenta"),
+*** ../vim-7.3.474/src/version.c 2012-03-16 19:34:43.000000000 +0100
+--- src/version.c 2012-03-16 20:05:35.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 475,
+ /**/
+
+--
+Spam seems to be something useful to novices. Later you realize that
+it's a bunch of indigestable junk that only clogs your system.
+Applies to both the food and the e-mail!
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.476 b/source/ap/vim/patches/7.3.476
new file mode 100644
index 000000000..959b906bc
--- /dev/null
+++ b/source/ap/vim/patches/7.3.476
@@ -0,0 +1,56 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.476
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.476
+Problem: When selecting a block, using "$" to include the end of each line
+ and using "A" and typing a backspace strange things happen.
+ (Yuangchen Xie)
+Solution: Avoid using a negative length. (Christian Brabandt)
+Files: src/ops.c
+
+
+*** ../vim-7.3.475/src/ops.c 2012-03-07 19:30:32.000000000 +0100
+--- src/ops.c 2012-03-23 12:22:36.000000000 +0100
+***************
+*** 2602,2608 ****
+ firstline = ml_get(oap->start.lnum) + bd.textcol;
+ if (oap->op_type == OP_APPEND)
+ firstline += bd.textlen;
+! if ((ins_len = (long)STRLEN(firstline) - pre_textlen) > 0)
+ {
+ ins_text = vim_strnsave(firstline, (int)ins_len);
+ if (ins_text != NULL)
+--- 2602,2609 ----
+ firstline = ml_get(oap->start.lnum) + bd.textcol;
+ if (oap->op_type == OP_APPEND)
+ firstline += bd.textlen;
+! if (pre_textlen >= 0
+! && (ins_len = (long)STRLEN(firstline) - pre_textlen) > 0)
+ {
+ ins_text = vim_strnsave(firstline, (int)ins_len);
+ if (ins_text != NULL)
+*** ../vim-7.3.475/src/version.c 2012-03-16 20:16:42.000000000 +0100
+--- src/version.c 2012-03-23 14:14:49.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 476,
+ /**/
+
+--
+"Marriage is a wonderful institution...
+but who wants to live in an institution?"
+ - Groucho Marx
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.477 b/source/ap/vim/patches/7.3.477
new file mode 100644
index 000000000..8030ee65a
--- /dev/null
+++ b/source/ap/vim/patches/7.3.477
@@ -0,0 +1,52 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.477
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.477
+Problem: Using ":echo" to output enough lines to scroll, then using "j" and
+ "k" at the more prompt, displays the command on top of the output.
+ (Marcin Szamotulski)
+Solution: Put the output below the command. (Christian Brabandt)
+Files: src/eval.c
+
+
+*** ../vim-7.3.476/src/eval.c 2012-03-07 19:16:49.000000000 +0100
+--- src/eval.c 2012-03-23 15:11:30.000000000 +0100
+***************
+*** 20492,20498 ****
+--- 20492,20503 ----
+ /* Call msg_start() after eval1(), evaluating the expression
+ * may cause a message to appear. */
+ if (eap->cmdidx == CMD_echo)
++ {
++ /* Put the output below the command, makes scrolling back
++ * at more prompt work. */
++ msg_didout = TRUE;
+ msg_start();
++ }
+ }
+ else if (eap->cmdidx == CMD_echo)
+ msg_puts_attr((char_u *)" ", echo_attr);
+*** ../vim-7.3.476/src/version.c 2012-03-23 14:16:19.000000000 +0100
+--- src/version.c 2012-03-23 15:13:58.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 477,
+ /**/
+
+--
+"Marriage is when a man and woman become as one; the trouble starts
+when they try to decide which one"
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.478 b/source/ap/vim/patches/7.3.478
new file mode 100644
index 000000000..bad69ef2f
--- /dev/null
+++ b/source/ap/vim/patches/7.3.478
@@ -0,0 +1,46 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.478
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.478
+Problem: Memory leak using the ':rv!' command when reading dictionary or
+ list global variables i.e. with 'viminfo' containing !.
+Solution: Free the typeval. (Dominique Pelle)
+Files: src/eval.c
+
+
+*** ../vim-7.3.477/src/eval.c 2012-03-23 15:18:20.000000000 +0100
+--- src/eval.c 2012-03-23 15:28:42.000000000 +0100
+***************
+*** 22976,22981 ****
+--- 22976,22982 ----
+ {
+ vim_free(tv.vval.v_string);
+ tv = *etv;
++ vim_free(etv);
+ }
+ }
+
+*** ../vim-7.3.477/src/version.c 2012-03-23 15:18:20.000000000 +0100
+--- src/version.c 2012-03-23 15:29:22.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 478,
+ /**/
+
+--
+"Marriage is the process of finding out what kind of man your wife
+would have preferred"
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.479 b/source/ap/vim/patches/7.3.479
new file mode 100644
index 000000000..fc256c1fb
--- /dev/null
+++ b/source/ap/vim/patches/7.3.479
@@ -0,0 +1,134 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.479
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.479
+Problem: When 'cursorline' is set the line number highlighting can't be set
+ separately.
+Solution: Add "CursorLineNr". (Howard Buchholz)
+Files: src/option.c, src/screen.c, src/syntax.c, src/vim.h
+
+
+*** ../vim-7.3.478/src/option.c 2012-02-29 13:51:32.000000000 +0100
+--- src/option.c 2012-03-23 15:44:57.000000000 +0100
+***************
+*** 460,468 ****
+ #if defined(FEAT_DIFF) || defined(FEAT_FOLDING) || defined(FEAT_SPELL) \
+ || defined(FEAT_VERTSPLIT) || defined(FEAT_CLIPBOARD) \
+ || defined(FEAT_INS_EXPAND) || defined(FEAT_SYN_HL) || defined(FEAT_CONCEAL)
+! # define HIGHLIGHT_INIT "8:SpecialKey,@:NonText,d:Directory,e:ErrorMsg,i:IncSearch,l:Search,m:MoreMsg,M:ModeMsg,n:LineNr,r:Question,s:StatusLine,S:StatusLineNC,c:VertSplit,t:Title,v:Visual,V:VisualNOS,w:WarningMsg,W:WildMenu,f:Folded,F:FoldColumn,A:DiffAdd,C:DiffChange,D:DiffDelete,T:DiffText,>:SignColumn,-:Conceal,B:SpellBad,P:SpellCap,R:SpellRare,L:SpellLocal,+:Pmenu,=:PmenuSel,x:PmenuSbar,X:PmenuThumb,*:TabLine,#:TabLineSel,_:TabLineFill,!:CursorColumn,.:CursorLine,o:ColorColumn"
+ #else
+! # define HIGHLIGHT_INIT "8:SpecialKey,@:NonText,d:Directory,e:ErrorMsg,i:IncSearch,l:Search,m:MoreMsg,M:ModeMsg,n:LineNr,r:Question,s:StatusLine,S:StatusLineNC,t:Title,v:Visual,w:WarningMsg,W:WildMenu,>:SignColumn,*:TabLine,#:TabLineSel,_:TabLineFill"
+ #endif
+
+ /*
+--- 460,468 ----
+ #if defined(FEAT_DIFF) || defined(FEAT_FOLDING) || defined(FEAT_SPELL) \
+ || defined(FEAT_VERTSPLIT) || defined(FEAT_CLIPBOARD) \
+ || defined(FEAT_INS_EXPAND) || defined(FEAT_SYN_HL) || defined(FEAT_CONCEAL)
+! # define HIGHLIGHT_INIT "8:SpecialKey,@:NonText,d:Directory,e:ErrorMsg,i:IncSearch,l:Search,m:MoreMsg,M:ModeMsg,n:LineNr,N:CursorLineNr,r:Question,s:StatusLine,S:StatusLineNC,c:VertSplit,t:Title,v:Visual,V:VisualNOS,w:WarningMsg,W:WildMenu,f:Folded,F:FoldColumn,A:DiffAdd,C:DiffChange,D:DiffDelete,T:DiffText,>:SignColumn,-:Conceal,B:SpellBad,P:SpellCap,R:SpellRare,L:SpellLocal,+:Pmenu,=:PmenuSel,x:PmenuSbar,X:PmenuThumb,*:TabLine,#:TabLineSel,_:TabLineFill,!:CursorColumn,.:CursorLine,o:ColorColumn"
+ #else
+! # define HIGHLIGHT_INIT "8:SpecialKey,@:NonText,d:Directory,e:ErrorMsg,i:IncSearch,l:Search,m:MoreMsg,M:ModeMsg,n:LineNr,N:CursorLineNr,r:Question,s:StatusLine,S:StatusLineNC,t:Title,v:Visual,w:WarningMsg,W:WildMenu,>:SignColumn,*:TabLine,#:TabLineSel,_:TabLineFill"
+ #endif
+
+ /*
+*** ../vim-7.3.478/src/screen.c 2012-03-16 19:07:54.000000000 +0100
+--- src/screen.c 2012-03-23 16:09:15.000000000 +0100
+***************
+*** 3501,3509 ****
+ char_attr = hl_attr(HLF_N);
+ #ifdef FEAT_SYN_HL
+ /* When 'cursorline' is set highlight the line number of
+! * the current line differently. */
+ if (wp->w_p_cul && lnum == wp->w_cursor.lnum)
+! char_attr = hl_combine_attr(hl_attr(HLF_CUL), char_attr);
+ #endif
+ }
+ }
+--- 3501,3511 ----
+ char_attr = hl_attr(HLF_N);
+ #ifdef FEAT_SYN_HL
+ /* When 'cursorline' is set highlight the line number of
+! * the current line differently.
+! * TODO: Can we use CursorLine instead of CursorLineNr
+! * when CursorLineNr isn't set? */
+ if (wp->w_p_cul && lnum == wp->w_cursor.lnum)
+! char_attr = hl_attr(HLF_CLN);
+ #endif
+ }
+ }
+*** ../vim-7.3.478/src/syntax.c 2012-03-16 20:16:42.000000000 +0100
+--- src/syntax.c 2012-03-23 16:23:57.000000000 +0100
+***************
+*** 6538,6543 ****
+--- 6538,6545 ----
+ "Directory term=bold ctermfg=DarkBlue guifg=Blue"),
+ CENT("LineNr term=underline ctermfg=Brown",
+ "LineNr term=underline ctermfg=Brown guifg=Brown"),
++ CENT("CursorLineNr term=bold ctermfg=Brown",
++ "CursorLineNr term=bold ctermfg=Brown gui=bold guifg=Brown"),
+ CENT("MoreMsg term=bold ctermfg=DarkGreen",
+ "MoreMsg term=bold ctermfg=DarkGreen gui=bold guifg=SeaGreen"),
+ CENT("Question term=standout ctermfg=DarkGreen",
+***************
+*** 6626,6631 ****
+--- 6628,6635 ----
+ "Directory term=bold ctermfg=LightCyan guifg=Cyan"),
+ CENT("LineNr term=underline ctermfg=Yellow",
+ "LineNr term=underline ctermfg=Yellow guifg=Yellow"),
++ CENT("CursorLineNr term=bold ctermfg=Yellow",
++ "CursorLineNr term=bold ctermfg=Yellow gui=bold guifg=Yellow"),
+ CENT("MoreMsg term=bold ctermfg=LightGreen",
+ "MoreMsg term=bold ctermfg=LightGreen gui=bold guifg=SeaGreen"),
+ CENT("Question term=standout ctermfg=LightGreen",
+*** ../vim-7.3.478/src/vim.h 2012-03-07 19:16:49.000000000 +0100
+--- src/vim.h 2012-03-23 15:44:57.000000000 +0100
+***************
+*** 1318,1323 ****
+--- 1318,1324 ----
+ , HLF_M /* "--More--" message */
+ , HLF_CM /* Mode (e.g., "-- INSERT --") */
+ , HLF_N /* line number for ":number" and ":#" commands */
++ , HLF_CLN /* current line number */
+ , HLF_R /* return to continue message and yes/no questions */
+ , HLF_S /* status lines */
+ , HLF_SNC /* status lines of not-current windows */
+***************
+*** 1355,1361 ****
+ /* The HL_FLAGS must be in the same order as the HLF_ enums!
+ * When changing this also adjust the default for 'highlight'. */
+ #define HL_FLAGS {'8', '@', 'd', 'e', 'h', 'i', 'l', 'm', 'M', \
+! 'n', 'r', 's', 'S', 'c', 't', 'v', 'V', 'w', 'W', \
+ 'f', 'F', 'A', 'C', 'D', 'T', '-', '>', \
+ 'B', 'P', 'R', 'L', \
+ '+', '=', 'x', 'X', '*', '#', '_', '!', '.', 'o'}
+--- 1356,1362 ----
+ /* The HL_FLAGS must be in the same order as the HLF_ enums!
+ * When changing this also adjust the default for 'highlight'. */
+ #define HL_FLAGS {'8', '@', 'd', 'e', 'h', 'i', 'l', 'm', 'M', \
+! 'n', 'N', 'r', 's', 'S', 'c', 't', 'v', 'V', 'w', 'W', \
+ 'f', 'F', 'A', 'C', 'D', 'T', '-', '>', \
+ 'B', 'P', 'R', 'L', \
+ '+', '=', 'x', 'X', '*', '#', '_', '!', '.', 'o'}
+*** ../vim-7.3.478/src/version.c 2012-03-23 15:36:57.000000000 +0100
+--- src/version.c 2012-03-23 16:16:41.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 479,
+ /**/
+
+--
+If you're sending someone Styrofoam, what do you pack it in?
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.480 b/source/ap/vim/patches/7.3.480
new file mode 100644
index 000000000..6d1e21dee
--- /dev/null
+++ b/source/ap/vim/patches/7.3.480
@@ -0,0 +1,237 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.480
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.480
+Problem: When using ":qa" and there is a changed buffer picking the buffer
+ to jump to is not very good.
+Solution: Consider current and other tab pages. (Hirohito Higashi)
+Files: src/ex_cmds2.c
+
+
+*** ../vim-7.3.479/src/ex_cmds2.c 2012-02-22 18:29:29.000000000 +0100
+--- src/ex_cmds2.c 2012-03-23 17:01:31.000000000 +0100
+***************
+*** 1569,1574 ****
+--- 1569,1594 ----
+ || forceit);
+ }
+
++ static void add_bufnum __ARGS((int *bufnrs, int *bufnump, int nr));
++
++ /*
++ * Add a buffer number to "bufnrs", unless it's already there.
++ */
++ static void
++ add_bufnum(bufnrs, bufnump, nr)
++ int *bufnrs;
++ int *bufnump;
++ int nr;
++ {
++ int i;
++
++ for (i = 0; i < *bufnump; ++i)
++ if (bufnrs[i] == nr)
++ return;
++ bufnrs[*bufnump] = nr;
++ *bufnump = *bufnump + 1;
++ }
++
+ /*
+ * Return TRUE if any buffer was changed and cannot be abandoned.
+ * That changed buffer becomes the current buffer.
+***************
+*** 1577,1608 ****
+ check_changed_any(hidden)
+ int hidden; /* Only check hidden buffers */
+ {
+ buf_T *buf;
+ int save;
+ #ifdef FEAT_WINDOWS
+ win_T *wp;
+ #endif
+
+! for (;;)
+ {
+! /* check curbuf first: if it was changed we can't abandon it */
+! if (!hidden && curbufIsChanged())
+! buf = curbuf;
+! else
+ {
+! for (buf = firstbuf; buf != NULL; buf = buf->b_next)
+! if ((!hidden || buf->b_nwindows == 0) && bufIsChanged(buf))
+! break;
+ }
+- if (buf == NULL) /* No buffers changed */
+- return FALSE;
+-
+- /* Try auto-writing the buffer. If this fails but the buffer no
+- * longer exists it's not changed, that's OK. */
+- if (check_changed(buf, p_awa, TRUE, FALSE, TRUE) && buf_valid(buf))
+- break; /* didn't save - still changes */
+ }
+
+ exiting = FALSE;
+ #if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG)
+ /*
+--- 1597,1660 ----
+ check_changed_any(hidden)
+ int hidden; /* Only check hidden buffers */
+ {
++ int ret = FALSE;
+ buf_T *buf;
+ int save;
++ int i;
++ int bufnum = 0;
++ int bufcount = 0;
++ int *bufnrs;
+ #ifdef FEAT_WINDOWS
++ tabpage_T *tp;
+ win_T *wp;
+ #endif
+
+! for (buf = firstbuf; buf != NULL; buf = buf->b_next)
+! ++bufcount;
+!
+! if (bufcount == 0)
+! return FALSE;
+!
+! bufnrs = (int *)alloc(sizeof(int) * bufcount);
+! if (bufnrs == NULL)
+! return FALSE;
+!
+! /* curbuf */
+! bufnrs[bufnum++] = curbuf->b_fnum;
+! #ifdef FEAT_WINDOWS
+! /* buf in curtab */
+! FOR_ALL_WINDOWS(wp)
+! if (wp->w_buffer != curbuf)
+! add_bufnum(bufnrs, &bufnum, wp->w_buffer->b_fnum);
+!
+! /* buf in other tab */
+! for (tp = first_tabpage; tp != NULL; tp = tp->tp_next)
+! if (tp != curtab)
+! for (wp = tp->tp_firstwin; wp != NULL; wp = wp->w_next)
+! add_bufnum(bufnrs, &bufnum, wp->w_buffer->b_fnum);
+! #endif
+! /* any other buf */
+! for (buf = firstbuf; buf != NULL; buf = buf->b_next)
+! add_bufnum(bufnrs, &bufnum, buf->b_fnum);
+!
+! for (i = 0; i < bufnum; ++i)
+ {
+! buf = buflist_findnr(bufnrs[i]);
+! if (buf == NULL)
+! continue;
+! if ((!hidden || buf->b_nwindows == 0) && bufIsChanged(buf))
+ {
+! /* Try auto-writing the buffer. If this fails but the buffer no
+! * longer exists it's not changed, that's OK. */
+! if (check_changed(buf, p_awa, TRUE, FALSE, TRUE) && buf_valid(buf))
+! break; /* didn't save - still changes */
+ }
+ }
+
++ if (i >= bufnum)
++ goto theend;
++
++ ret = TRUE;
+ exiting = FALSE;
+ #if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG)
+ /*
+***************
+*** 1635,1658 ****
+ #ifdef FEAT_WINDOWS
+ /* Try to find a window that contains the buffer. */
+ if (buf != curbuf)
+! for (wp = firstwin; wp != NULL; wp = wp->w_next)
+ if (wp->w_buffer == buf)
+ {
+! win_goto(wp);
+ # ifdef FEAT_AUTOCMD
+ /* Paranoia: did autocms wipe out the buffer with changes? */
+ if (!buf_valid(buf))
+! return TRUE;
+ # endif
+! break;
+ }
+ #endif
+
+ /* Open the changed buffer in the current window. */
+ if (buf != curbuf)
+ set_curbuf(buf, DOBUF_GOTO);
+
+! return TRUE;
+ }
+
+ /*
+--- 1687,1715 ----
+ #ifdef FEAT_WINDOWS
+ /* Try to find a window that contains the buffer. */
+ if (buf != curbuf)
+! FOR_ALL_TAB_WINDOWS(tp, wp)
+ if (wp->w_buffer == buf)
+ {
+! goto_tabpage_win(tp, wp);
+ # ifdef FEAT_AUTOCMD
+ /* Paranoia: did autocms wipe out the buffer with changes? */
+ if (!buf_valid(buf))
+! {
+! goto theend;
+! }
+ # endif
+! goto buf_found;
+ }
++ buf_found:
+ #endif
+
+ /* Open the changed buffer in the current window. */
+ if (buf != curbuf)
+ set_curbuf(buf, DOBUF_GOTO);
+
+! theend:
+! vim_free(bufnrs);
+! return ret;
+ }
+
+ /*
+***************
+*** 3274,3280 ****
+ home_replace(NULL, SCRIPT_ITEM(i).sn_name,
+ NameBuff, MAXPATHL, TRUE);
+ smsg((char_u *)"%3d: %s", i, NameBuff);
+! }
+ }
+
+ # if defined(BACKSLASH_IN_FILENAME) || defined(PROTO)
+--- 3331,3337 ----
+ home_replace(NULL, SCRIPT_ITEM(i).sn_name,
+ NameBuff, MAXPATHL, TRUE);
+ smsg((char_u *)"%3d: %s", i, NameBuff);
+! }
+ }
+
+ # if defined(BACKSLASH_IN_FILENAME) || defined(PROTO)
+*** ../vim-7.3.479/src/version.c 2012-03-23 16:25:13.000000000 +0100
+--- src/version.c 2012-03-23 16:48:06.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 480,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+243. You unsuccessfully try to download a pizza from www.dominos.com.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.481 b/source/ap/vim/patches/7.3.481
new file mode 100644
index 000000000..69f691585
--- /dev/null
+++ b/source/ap/vim/patches/7.3.481
@@ -0,0 +1,65 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.481
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.481
+Problem: Changing 'virtualedit' in an operator function to "all" does not
+ have the desired effect. (Aaron Bohannon)
+Solution: Save, reset and restore virtual_op when executing an operator
+ function.
+Files: src/normal.c
+
+
+*** ../vim-7.3.480/src/normal.c 2012-02-05 01:18:41.000000000 +0100
+--- src/normal.c 2012-03-28 12:59:46.000000000 +0200
+***************
+*** 2279,2284 ****
+--- 2279,2285 ----
+ {
+ #ifdef FEAT_EVAL
+ char_u *(argv[1]);
++ int save_virtual_op = virtual_op;
+
+ if (*p_opfunc == NUL)
+ EMSG(_("E774: 'operatorfunc' is empty"));
+***************
+*** 2297,2303 ****
+--- 2298,2311 ----
+ argv[0] = (char_u *)"line";
+ else
+ argv[0] = (char_u *)"char";
++
++ /* Reset virtual_op so that 'virtualedit' can be changed in the
++ * function. */
++ virtual_op = MAYBE;
++
+ (void)call_func_retnr(p_opfunc, 1, argv, FALSE);
++
++ virtual_op = save_virtual_op;
+ }
+ #else
+ EMSG(_("E775: Eval feature not available"));
+*** ../vim-7.3.480/src/version.c 2012-03-23 18:39:10.000000000 +0100
+--- src/version.c 2012-03-28 12:50:20.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 481,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+269. You wonder how you can make your dustbin produce Sesame Street's
+ Oscar's the Garbage Monster song when you empty it.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.482 b/source/ap/vim/patches/7.3.482
new file mode 100644
index 000000000..56ff30178
--- /dev/null
+++ b/source/ap/vim/patches/7.3.482
@@ -0,0 +1,57 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.482
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.482
+Problem: With 'cursorbind' set moving up/down does not always keep the same
+ column.
+Solution: Set curswant appropriately. (Gary Johnson)
+Files: src/move.c
+
+
+*** ../vim-7.3.481/src/move.c 2012-03-16 19:24:21.000000000 +0100
+--- src/move.c 2012-03-28 14:16:02.000000000 +0200
+***************
+*** 2847,2852 ****
+--- 2847,2854 ----
+ # ifdef FEAT_VIRTUALEDIT
+ colnr_T coladd = curwin->w_cursor.coladd;
+ # endif
++ colnr_T curswant = curwin->w_curswant;
++ int set_curswant = curwin->w_set_curswant;
+ win_T *old_curwin = curwin;
+ buf_T *old_curbuf = curbuf;
+ int restart_edit_save;
+***************
+*** 2881,2886 ****
+--- 2883,2890 ----
+ # ifdef FEAT_VIRTUALEDIT
+ curwin->w_cursor.coladd = coladd;
+ # endif
++ curwin->w_curswant = curswant;
++ curwin->w_set_curswant = set_curswant;
+
+ /* Make sure the cursor is in a valid position. Temporarily set
+ * "restart_edit" to allow the cursor to be beyond the EOL. */
+*** ../vim-7.3.481/src/version.c 2012-03-28 12:59:53.000000000 +0200
+--- src/version.c 2012-03-28 14:15:56.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 482,
+ /**/
+
+--
+Women are probably the main cause of free software starvation.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.483 b/source/ap/vim/patches/7.3.483
new file mode 100644
index 000000000..bab488b4a
--- /dev/null
+++ b/source/ap/vim/patches/7.3.483
@@ -0,0 +1,97 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.483
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.483 (after 7.3.477)
+Problem: More prompt shows up too often.
+Solution: Instead of adding a line break, only start a new line in the
+ message history. (Christian Brabandt)
+Files: src/eval.c, src/message.c, src/proto/message.pro
+
+
+*** ../vim-7.3.482/src/eval.c 2012-03-23 15:36:57.000000000 +0100
+--- src/eval.c 2012-03-28 16:41:03.000000000 +0200
+***************
+*** 20493,20501 ****
+ * may cause a message to appear. */
+ if (eap->cmdidx == CMD_echo)
+ {
+! /* Put the output below the command, makes scrolling back
+! * at more prompt work. */
+! msg_didout = TRUE;
+ msg_start();
+ }
+ }
+--- 20493,20502 ----
+ * may cause a message to appear. */
+ if (eap->cmdidx == CMD_echo)
+ {
+! /* Mark the saved text as finishing the line, so that what
+! * follows is displayed on a new line when scrolling back
+! * at the more prompt. */
+! msg_sb_eol();
+ msg_start();
+ }
+ }
+*** ../vim-7.3.482/src/message.c 2012-01-26 13:01:54.000000000 +0100
+--- src/message.c 2012-03-28 16:35:26.000000000 +0200
+***************
+*** 2348,2353 ****
+--- 2348,2363 ----
+ }
+
+ /*
++ * Mark the last message chunk as finishing the line.
++ */
++ void
++ msg_sb_eol()
++ {
++ if (last_msgchunk != NULL)
++ last_msgchunk->sb_eol = TRUE;
++ }
++
++ /*
+ * Display a screen line from previously displayed text at row "row".
+ * Returns a pointer to the text for the next line (can be NULL).
+ */
+*** ../vim-7.3.482/src/proto/message.pro 2012-01-20 20:44:38.000000000 +0100
+--- src/proto/message.pro 2012-03-28 16:35:33.000000000 +0200
+***************
+*** 45,50 ****
+--- 45,51 ----
+ void may_clear_sb_text __ARGS((void));
+ void clear_sb_text __ARGS((void));
+ void show_sb_text __ARGS((void));
++ void msg_sb_eol __ARGS((void));
+ int msg_use_printf __ARGS((void));
+ void mch_errmsg __ARGS((char *str));
+ void mch_msg __ARGS((char *str));
+*** ../vim-7.3.482/src/version.c 2012-03-28 14:19:46.000000000 +0200
+--- src/version.c 2012-03-28 16:48:53.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 483,
+ /**/
+
+--
+ We're knights of the Round Table
+ Our shows are formidable
+ But many times
+ We're given rhymes
+ That are quite unsingable
+ We're opera mad in Camelot
+ We sing from the diaphragm a lot.
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.484 b/source/ap/vim/patches/7.3.484
new file mode 100644
index 000000000..99968eb2b
--- /dev/null
+++ b/source/ap/vim/patches/7.3.484
@@ -0,0 +1,62 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.484
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.484
+Problem: The -E and --echo-wid command line arguments are not mentioned in
+ "vim --help".
+Solution: Add the help lines. (Dominique Pelle)
+Files: src/main.c
+
+
+*** ../vim-7.3.483/src/main.c 2012-02-12 01:55:50.000000000 +0100
+--- src/main.c 2012-03-28 16:55:03.000000000 +0200
+***************
+*** 3181,3186 ****
+--- 3181,3187 ----
+ #endif
+ main_msg(_("-v\t\t\tVi mode (like \"vi\")"));
+ main_msg(_("-e\t\t\tEx mode (like \"ex\")"));
++ main_msg(_("-E\t\t\tImproved Ex mode"));
+ main_msg(_("-s\t\t\tSilent (batch) mode (only for \"ex\")"));
+ #ifdef FEAT_DIFF
+ main_msg(_("-d\t\t\tDiff mode (like \"vimdiff\")"));
+***************
+*** 3304,3309 ****
+--- 3305,3311 ----
+ main_msg(_("-display <display>\tRun vim on <display> (also: --display)"));
+ main_msg(_("--role <role>\tSet a unique role to identify the main window"));
+ main_msg(_("--socketid <xid>\tOpen Vim inside another GTK widget"));
++ main_msg(_("--echo-wid\t\tMake gvim echo the Window ID on stdout"));
+ #endif
+ #ifdef FEAT_GUI_W32
+ main_msg(_("-P <parent title>\tOpen Vim inside parent application"));
+*** ../vim-7.3.483/src/version.c 2012-03-28 16:49:25.000000000 +0200
+--- src/version.c 2012-03-28 17:10:08.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 484,
+ /**/
+
+--
+ In war we're tough and able.
+ Quite indefatigable
+ Between our quests
+ We sequin vests
+ And impersonate Clark Gable
+ It's a busy life in Camelot.
+ I have to push the pram a lot.
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.485 b/source/ap/vim/patches/7.3.485
new file mode 100644
index 000000000..46b4cb732
--- /dev/null
+++ b/source/ap/vim/patches/7.3.485
@@ -0,0 +1,52 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.485
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.485
+Problem: When building Vim LDFLAGS isn't passed on to building xxd.
+Solution: Pass the LDFLAGS value. (James McCoy)
+Files: src/Makefile
+
+
+*** ../vim-7.3.484/src/Makefile 2011-12-14 20:51:19.000000000 +0100
+--- src/Makefile 2012-03-28 17:16:06.000000000 +0200
+***************
+*** 1720,1726 ****
+ sh $(srcdir)/link.sh
+
+ xxd/xxd$(EXEEXT): xxd/xxd.c
+! cd xxd; CC="$(CC)" CFLAGS="$(CPPFLAGS) $(CFLAGS)" \
+ $(MAKE) -f Makefile
+
+ # Build the language specific files if they were unpacked.
+--- 1720,1726 ----
+ sh $(srcdir)/link.sh
+
+ xxd/xxd$(EXEEXT): xxd/xxd.c
+! cd xxd; CC="$(CC)" CFLAGS="$(CPPFLAGS) $(CFLAGS)" LDFLAGS="$(LDFLAGS)" \
+ $(MAKE) -f Makefile
+
+ # Build the language specific files if they were unpacked.
+*** ../vim-7.3.484/src/version.c 2012-03-28 17:10:26.000000000 +0200
+--- src/version.c 2012-03-28 17:16:15.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 485,
+ /**/
+
+--
+GOD: That is your purpose Arthur ... the Quest for the Holy Grail ...
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.486 b/source/ap/vim/patches/7.3.486
new file mode 100644
index 000000000..44e2afe84
--- /dev/null
+++ b/source/ap/vim/patches/7.3.486
@@ -0,0 +1,58 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.486
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.486
+Problem: Build error with mingw64 on Windows 7.
+Solution: Avoid the step of going through vimres.res. (Guopeng Wen)
+Files: src/Make_ming.mak
+
+
+*** ../vim-7.3.485/src/Make_ming.mak 2012-02-29 16:56:35.000000000 +0100
+--- src/Make_ming.mak 2012-03-28 17:41:55.000000000 +0200
+***************
+*** 681,691 ****
+ $(OUTDIR)/%.o : %.c $(INCL)
+ $(CC) -c $(CFLAGS) $< -o $@
+
+! $(OUTDIR)/vimres.res: vim.rc version.h gui_w32_rc.h
+! $(WINDRES) $(WINDRES_FLAGS) $(DEFINES) vim.rc $(OUTDIR)/vimres.res
+!
+! $(OUTDIR)/vimrc.o: $(OUTDIR)/vimres.res
+! $(WINDRES) $(WINDRES_FLAGS) $(OUTDIR)/vimres.res $(OUTDIR)/vimrc.o
+
+ $(OUTDIR):
+ $(MKDIR) $(OUTDIR)
+--- 681,689 ----
+ $(OUTDIR)/%.o : %.c $(INCL)
+ $(CC) -c $(CFLAGS) $< -o $@
+
+! $(OUTDIR)/vimrc.o: vim.rc version.h gui_w32_rc.h
+! $(WINDRES) $(WINDRES_FLAGS) $(DEFINES) \
+! --input-format=rc --output-format=coff -i vim.rc -o $@
+
+ $(OUTDIR):
+ $(MKDIR) $(OUTDIR)
+*** ../vim-7.3.485/src/version.c 2012-03-28 17:17:45.000000000 +0200
+--- src/version.c 2012-03-28 17:42:25.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 486,
+ /**/
+
+--
+There is a fine line between courage and foolishness.
+Unfortunately, it's not a fence.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.487 b/source/ap/vim/patches/7.3.487
new file mode 100644
index 000000000..3c00349b3
--- /dev/null
+++ b/source/ap/vim/patches/7.3.487
@@ -0,0 +1,572 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.487
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.487
+Problem: When setting 'timeoutlen' or 'ttimeoutlen' the column for vertical
+ movement is reset unnecessarily.
+Solution: Do not set w_set_curswant for every option. Add a test for this.
+ (Kana Natsuno) Add the P_CURSWANT flag for options.
+Files: src/option.c, src/testdir/test84.in, src/testdir/test84.ok,
+ src/testdir/Make_amiga.mak, src/testdir/Make_dos.mak,
+ src/testdir/Make_ming.mak, src/testdir/Make_os2.mak,
+ src/testdir/Make_vms.mms, src/testdir/Makefile
+
+
+*** ../vim-7.3.486/src/option.c 2012-03-23 16:25:13.000000000 +0100
+--- src/option.c 2012-03-28 19:57:46.000000000 +0200
+***************
+*** 433,449 ****
+ #define P_RCLR 0x7000 /* clear and redraw all */
+
+ #define P_COMMA 0x8000 /* comma separated list */
+! #define P_NODUP 0x10000L/* don't allow duplicate strings */
+! #define P_FLAGLIST 0x20000L/* list of single-char flags */
+
+! #define P_SECURE 0x40000L/* cannot change in modeline or secure mode */
+! #define P_GETTEXT 0x80000L/* expand default value with _() */
+! #define P_NOGLOB 0x100000L/* do not use local value for global vimrc */
+! #define P_NFNAME 0x200000L/* only normal file name chars allowed */
+! #define P_INSECURE 0x400000L/* option was set from a modeline */
+! #define P_PRI_MKRC 0x800000L/* priority for :mkvimrc (setting option has
+ side effects) */
+! #define P_NO_ML 0x1000000L/* not allowed in modeline */
+
+ #define ISK_LATIN1 (char_u *)"@,48-57,_,192-255"
+
+--- 433,451 ----
+ #define P_RCLR 0x7000 /* clear and redraw all */
+
+ #define P_COMMA 0x8000 /* comma separated list */
+! #define P_NODUP 0x10000L /* don't allow duplicate strings */
+! #define P_FLAGLIST 0x20000L /* list of single-char flags */
+
+! #define P_SECURE 0x40000L /* cannot change in modeline or secure mode */
+! #define P_GETTEXT 0x80000L /* expand default value with _() */
+! #define P_NOGLOB 0x100000L /* do not use local value for global vimrc */
+! #define P_NFNAME 0x200000L /* only normal file name chars allowed */
+! #define P_INSECURE 0x400000L /* option was set from a modeline */
+! #define P_PRI_MKRC 0x800000L /* priority for :mkvimrc (setting option has
+ side effects) */
+! #define P_NO_ML 0x1000000L /* not allowed in modeline */
+! #define P_CURSWANT 0x2000000L /* update curswant required; not needed when
+! * there is a redraw flag */
+
+ #define ISK_LATIN1 (char_u *)"@,48-57,_,192-255"
+
+***************
+*** 479,485 ****
+ #endif
+ options[] =
+ {
+! {"aleph", "al", P_NUM|P_VI_DEF,
+ #ifdef FEAT_RIGHTLEFT
+ (char_u *)&p_aleph, PV_NONE,
+ #else
+--- 481,487 ----
+ #endif
+ options[] =
+ {
+! {"aleph", "al", P_NUM|P_VI_DEF|P_CURSWANT,
+ #ifdef FEAT_RIGHTLEFT
+ (char_u *)&p_aleph, PV_NONE,
+ #else
+***************
+*** 501,507 ****
+ {(char_u *)FALSE, (char_u *)FALSE}
+ #endif
+ SCRIPTID_INIT},
+! {"arabic", "arab", P_BOOL|P_VI_DEF|P_VIM,
+ #ifdef FEAT_ARABIC
+ (char_u *)VAR_WIN, PV_ARAB,
+ #else
+--- 503,509 ----
+ {(char_u *)FALSE, (char_u *)FALSE}
+ #endif
+ SCRIPTID_INIT},
+! {"arabic", "arab", P_BOOL|P_VI_DEF|P_VIM|P_CURSWANT,
+ #ifdef FEAT_ARABIC
+ (char_u *)VAR_WIN, PV_ARAB,
+ #else
+***************
+*** 778,784 ****
+ {"columns", "co", P_NUM|P_NODEFAULT|P_NO_MKRC|P_VI_DEF|P_RCLR,
+ (char_u *)&Columns, PV_NONE,
+ {(char_u *)80L, (char_u *)0L} SCRIPTID_INIT},
+! {"comments", "com", P_STRING|P_ALLOCED|P_VI_DEF|P_COMMA|P_NODUP,
+ #ifdef FEAT_COMMENTS
+ (char_u *)&p_com, PV_COM,
+ {(char_u *)"s1:/*,mb:*,ex:*/,://,b:#,:%,:XCOMM,n:>,fb:-",
+--- 780,786 ----
+ {"columns", "co", P_NUM|P_NODEFAULT|P_NO_MKRC|P_VI_DEF|P_RCLR,
+ (char_u *)&Columns, PV_NONE,
+ {(char_u *)80L, (char_u *)0L} SCRIPTID_INIT},
+! {"comments", "com", P_STRING|P_ALLOCED|P_VI_DEF|P_COMMA|P_NODUP|P_CURSWANT,
+ #ifdef FEAT_COMMENTS
+ (char_u *)&p_com, PV_COM,
+ {(char_u *)"s1:/*,mb:*,ex:*/,://,b:#,:%,:XCOMM,n:>,fb:-",
+***************
+*** 788,794 ****
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+ SCRIPTID_INIT},
+! {"commentstring", "cms", P_STRING|P_ALLOCED|P_VI_DEF,
+ #ifdef FEAT_FOLDING
+ (char_u *)&p_cms, PV_CMS,
+ {(char_u *)"/*%s*/", (char_u *)0L}
+--- 790,796 ----
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+ SCRIPTID_INIT},
+! {"commentstring", "cms", P_STRING|P_ALLOCED|P_VI_DEF|P_CURSWANT,
+ #ifdef FEAT_FOLDING
+ (char_u *)&p_cms, PV_CMS,
+ {(char_u *)"/*%s*/", (char_u *)0L}
+***************
+*** 953,959 ****
+ {"debug", NULL, P_STRING|P_VI_DEF,
+ (char_u *)&p_debug, PV_NONE,
+ {(char_u *)"", (char_u *)0L} SCRIPTID_INIT},
+! {"define", "def", P_STRING|P_ALLOCED|P_VI_DEF,
+ #ifdef FEAT_FIND_ID
+ (char_u *)&p_def, PV_DEF,
+ {(char_u *)"^\\s*#\\s*define", (char_u *)0L}
+--- 955,961 ----
+ {"debug", NULL, P_STRING|P_VI_DEF,
+ (char_u *)&p_debug, PV_NONE,
+ {(char_u *)"", (char_u *)0L} SCRIPTID_INIT},
+! {"define", "def", P_STRING|P_ALLOCED|P_VI_DEF|P_CURSWANT,
+ #ifdef FEAT_FIND_ID
+ (char_u *)&p_def, PV_DEF,
+ {(char_u *)"^\\s*#\\s*define", (char_u *)0L}
+***************
+*** 983,989 ****
+ (char_u *)NULL, PV_NONE,
+ #endif
+ {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+! {"diffexpr", "dex", P_STRING|P_VI_DEF|P_SECURE,
+ #if defined(FEAT_DIFF) && defined(FEAT_EVAL)
+ (char_u *)&p_dex, PV_NONE,
+ {(char_u *)"", (char_u *)0L}
+--- 985,991 ----
+ (char_u *)NULL, PV_NONE,
+ #endif
+ {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+! {"diffexpr", "dex", P_STRING|P_VI_DEF|P_SECURE|P_CURSWANT,
+ #if defined(FEAT_DIFF) && defined(FEAT_EVAL)
+ (char_u *)&p_dex, PV_NONE,
+ {(char_u *)"", (char_u *)0L}
+***************
+*** 1099,1105 ****
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+ SCRIPTID_INIT},
+! {"fileformat", "ff", P_STRING|P_ALLOCED|P_VI_DEF|P_RSTAT|P_NO_MKRC,
+ (char_u *)&p_ff, PV_FF,
+ {(char_u *)DFLT_FF, (char_u *)0L} SCRIPTID_INIT},
+ {"fileformats", "ffs", P_STRING|P_VIM|P_COMMA|P_NODUP,
+--- 1101,1107 ----
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+ SCRIPTID_INIT},
+! {"fileformat", "ff", P_STRING|P_ALLOCED|P_VI_DEF|P_RSTAT|P_NO_MKRC|P_CURSWANT,
+ (char_u *)&p_ff, PV_FF,
+ {(char_u *)DFLT_FF, (char_u *)0L} SCRIPTID_INIT},
+ {"fileformats", "ffs", P_STRING|P_VIM|P_COMMA|P_NODUP,
+***************
+*** 1159,1165 ****
+ {"foldlevel", "fdl", P_NUM|P_VI_DEF|P_RWIN,
+ (char_u *)VAR_WIN, PV_FDL,
+ {(char_u *)0L, (char_u *)0L} SCRIPTID_INIT},
+! {"foldlevelstart","fdls", P_NUM|P_VI_DEF,
+ (char_u *)&p_fdls, PV_NONE,
+ {(char_u *)-1L, (char_u *)0L} SCRIPTID_INIT},
+ {"foldmarker", "fmr", P_STRING|P_ALLOCED|P_VIM|P_VI_DEF|
+--- 1161,1167 ----
+ {"foldlevel", "fdl", P_NUM|P_VI_DEF|P_RWIN,
+ (char_u *)VAR_WIN, PV_FDL,
+ {(char_u *)0L, (char_u *)0L} SCRIPTID_INIT},
+! {"foldlevelstart","fdls", P_NUM|P_VI_DEF|P_CURSWANT,
+ (char_u *)&p_fdls, PV_NONE,
+ {(char_u *)-1L, (char_u *)0L} SCRIPTID_INIT},
+ {"foldmarker", "fmr", P_STRING|P_ALLOCED|P_VIM|P_VI_DEF|
+***************
+*** 1176,1182 ****
+ {"foldnestmax", "fdn", P_NUM|P_VI_DEF|P_RWIN,
+ (char_u *)VAR_WIN, PV_FDN,
+ {(char_u *)20L, (char_u *)0L} SCRIPTID_INIT},
+! {"foldopen", "fdo", P_STRING|P_VI_DEF|P_COMMA|P_NODUP,
+ (char_u *)&p_fdo, PV_NONE,
+ {(char_u *)"block,hor,mark,percent,quickfix,search,tag,undo",
+ (char_u *)0L} SCRIPTID_INIT},
+--- 1178,1184 ----
+ {"foldnestmax", "fdn", P_NUM|P_VI_DEF|P_RWIN,
+ (char_u *)VAR_WIN, PV_FDN,
+ {(char_u *)20L, (char_u *)0L} SCRIPTID_INIT},
+! {"foldopen", "fdo", P_STRING|P_VI_DEF|P_COMMA|P_NODUP|P_CURSWANT,
+ (char_u *)&p_fdo, PV_NONE,
+ {(char_u *)"block,hor,mark,percent,quickfix,search,tag,undo",
+ (char_u *)0L} SCRIPTID_INIT},
+***************
+*** 1741,1747 ****
+ {"matchtime", "mat", P_NUM|P_VI_DEF,
+ (char_u *)&p_mat, PV_NONE,
+ {(char_u *)5L, (char_u *)0L} SCRIPTID_INIT},
+! {"maxcombine", "mco", P_NUM|P_VI_DEF,
+ #ifdef FEAT_MBYTE
+ (char_u *)&p_mco, PV_NONE,
+ #else
+--- 1743,1749 ----
+ {"matchtime", "mat", P_NUM|P_VI_DEF,
+ (char_u *)&p_mat, PV_NONE,
+ {(char_u *)5L, (char_u *)0L} SCRIPTID_INIT},
+! {"maxcombine", "mco", P_NUM|P_VI_DEF|P_CURSWANT,
+ #ifdef FEAT_MBYTE
+ (char_u *)&p_mco, PV_NONE,
+ #else
+***************
+*** 2710,2716 ****
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+ SCRIPTID_INIT},
+! {"virtualedit", "ve", P_STRING|P_COMMA|P_NODUP|P_VI_DEF|P_VIM,
+ #ifdef FEAT_VIRTUALEDIT
+ (char_u *)&p_ve, PV_NONE,
+ {(char_u *)"", (char_u *)""}
+--- 2712,2718 ----
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+ SCRIPTID_INIT},
+! {"virtualedit", "ve", P_STRING|P_COMMA|P_NODUP|P_VI_DEF|P_VIM|P_CURSWANT,
+ #ifdef FEAT_VIRTUALEDIT
+ (char_u *)&p_ve, PV_NONE,
+ {(char_u *)"", (char_u *)""}
+***************
+*** 7064,7071 ****
+ }
+ #endif
+
+! if (curwin->w_curswant != MAXCOL)
+! curwin->w_set_curswant = TRUE; /* in case 'showbreak' changed */
+ #ifdef FEAT_GUI
+ /* check redraw when it's not a GUI option or the GUI is active. */
+ if (!redraw_gui_only || gui.in_use)
+--- 7066,7075 ----
+ }
+ #endif
+
+! if (curwin->w_curswant != MAXCOL
+! && (options[opt_idx].flags & (P_CURSWANT | P_RCLR)) != 0)
+! curwin->w_set_curswant = TRUE;
+!
+ #ifdef FEAT_GUI
+ /* check redraw when it's not a GUI option or the GUI is active. */
+ if (!redraw_gui_only || gui.in_use)
+***************
+*** 7587,7595 ****
+ || (int *)varp == &curwin->w_p_nu
+ || (int *)varp == &curwin->w_p_rnu)
+ {
+- if (curwin->w_curswant != MAXCOL)
+- curwin->w_set_curswant = TRUE;
+-
+ /* If 'number' is set, reset 'relativenumber'. */
+ /* If 'relativenumber' is set, reset 'number'. */
+ if ((int *)varp == &curwin->w_p_nu && curwin->w_p_nu)
+--- 7591,7596 ----
+***************
+*** 7834,7841 ****
+ {
+ if (curwin->w_p_wrap)
+ curwin->w_leftcol = 0;
+- if (curwin->w_curswant != MAXCOL)
+- curwin->w_set_curswant = TRUE;
+ }
+
+ #ifdef FEAT_WINDOWS
+--- 7835,7840 ----
+***************
+*** 8062,8092 ****
+ curbuf->b_p_imsearch = B_IMODE_USE_INSERT;
+ # endif
+ }
+- if (curwin->w_curswant != MAXCOL)
+- curwin->w_set_curswant = TRUE;
+ }
+
+- else if ((int *)varp == &p_arshape)
+- {
+- if (curwin->w_curswant != MAXCOL)
+- curwin->w_set_curswant = TRUE;
+- }
+- #endif
+-
+- #ifdef FEAT_LINEBREAK
+- if ((int *)varp == &curwin->w_p_lbr)
+- {
+- if (curwin->w_curswant != MAXCOL)
+- curwin->w_set_curswant = TRUE;
+- }
+- #endif
+-
+- #ifdef FEAT_RIGHTLEFT
+- if ((int *)varp == &curwin->w_p_rl)
+- {
+- if (curwin->w_curswant != MAXCOL)
+- curwin->w_set_curswant = TRUE;
+- }
+ #endif
+
+ /*
+--- 8061,8068 ----
+***************
+*** 8096,8102 ****
+ options[opt_idx].flags |= P_WAS_SET;
+
+ comp_col(); /* in case 'ruler' or 'showcmd' changed */
+!
+ check_redraw(options[opt_idx].flags);
+
+ return NULL;
+--- 8072,8080 ----
+ options[opt_idx].flags |= P_WAS_SET;
+
+ comp_col(); /* in case 'ruler' or 'showcmd' changed */
+! if (curwin->w_curswant != MAXCOL
+! && (options[opt_idx].flags & (P_CURSWANT | P_RCLR)) != 0)
+! curwin->w_set_curswant = TRUE;
+ check_redraw(options[opt_idx].flags);
+
+ return NULL;
+***************
+*** 8611,8618 ****
+ options[opt_idx].flags |= P_WAS_SET;
+
+ comp_col(); /* in case 'columns' or 'ls' changed */
+! if (curwin->w_curswant != MAXCOL)
+! curwin->w_set_curswant = TRUE; /* in case 'tabstop' changed */
+ check_redraw(options[opt_idx].flags);
+
+ return errmsg;
+--- 8589,8597 ----
+ options[opt_idx].flags |= P_WAS_SET;
+
+ comp_col(); /* in case 'columns' or 'ls' changed */
+! if (curwin->w_curswant != MAXCOL
+! && (options[opt_idx].flags & (P_CURSWANT | P_RCLR)) != 0)
+! curwin->w_set_curswant = TRUE;
+ check_redraw(options[opt_idx].flags);
+
+ return errmsg;
+*** ../vim-7.3.486/src/testdir/test84.in 2012-03-28 19:55:12.000000000 +0200
+--- src/testdir/test84.in 2012-03-28 19:46:53.000000000 +0200
+***************
+*** 0 ****
+--- 1,35 ----
++ Tests for curswant not changing when setting an option
++
++ STARTTEST
++ :so small.vim
++ :/^start target options$/+1,/^end target options$/-1 yank
++ :let target_option_names = split(@0)
++ :function TestCurswant(option_name)
++ : normal! ggf8j
++ : let curswant_before = winsaveview().curswant
++ : execute 'let' '&'.a:option_name '=' '&'.a:option_name
++ : let curswant_after = winsaveview().curswant
++ : return [a:option_name, curswant_before, curswant_after]
++ :endfunction
++ :
++ :new
++ :put =['1234567890', '12345']
++ :1 delete _
++ :let result = []
++ :for option_name in target_option_names
++ : call add(result, TestCurswant(option_name))
++ :endfor
++ :
++ :new
++ :put =map(copy(result), 'join(v:val, '' '')')
++ :1 delete _
++ :write test.out
++ :
++ :qall!
++ ENDTEST
++
++ start target options
++ tabstop
++ timeoutlen
++ ttimeoutlen
++ end target options
+*** ../vim-7.3.486/src/testdir/test84.ok 2012-03-28 19:55:12.000000000 +0200
+--- src/testdir/test84.ok 2012-03-28 19:48:36.000000000 +0200
+***************
+*** 0 ****
+--- 1,3 ----
++ tabstop 7 4
++ timeoutlen 7 7
++ ttimeoutlen 7 7
+*** ../vim-7.3.486/src/testdir/Make_amiga.mak 2011-10-12 19:53:31.000000000 +0200
+--- src/testdir/Make_amiga.mak 2012-03-28 18:14:08.000000000 +0200
+***************
+*** 29,35 ****
+ test66.out test67.out test68.out test69.out test70.out \
+ test71.out test72.out test73.out test74.out test75.out \
+ test76.out test77.out test78.out test79.out test80.out \
+! test81.out test82.out test83.out
+
+ .SUFFIXES: .in .out
+
+--- 29,35 ----
+ test66.out test67.out test68.out test69.out test70.out \
+ test71.out test72.out test73.out test74.out test75.out \
+ test76.out test77.out test78.out test79.out test80.out \
+! test81.out test82.out test83.out test84.out
+
+ .SUFFIXES: .in .out
+
+***************
+*** 132,134 ****
+--- 132,135 ----
+ test81.out: test81.in
+ test82.out: test82.in
+ test83.out: test83.in
++ test84.out: test84.in
+*** ../vim-7.3.486/src/testdir/Make_dos.mak 2011-10-12 19:53:31.000000000 +0200
+--- src/testdir/Make_dos.mak 2012-03-28 18:14:41.000000000 +0200
+***************
+*** 29,35 ****
+ test42.out test52.out test65.out test66.out test67.out \
+ test68.out test69.out test71.out test72.out test73.out \
+ test74.out test75.out test76.out test77.out test78.out \
+! test79.out test80.out test81.out test82.out test83.out
+
+ SCRIPTS32 = test50.out test70.out
+
+--- 29,36 ----
+ test42.out test52.out test65.out test66.out test67.out \
+ test68.out test69.out test71.out test72.out test73.out \
+ test74.out test75.out test76.out test77.out test78.out \
+! test79.out test80.out test81.out test82.out test83.out \
+! test84.out
+
+ SCRIPTS32 = test50.out test70.out
+
+*** ../vim-7.3.486/src/testdir/Make_ming.mak 2011-10-12 19:53:31.000000000 +0200
+--- src/testdir/Make_ming.mak 2012-03-28 18:14:46.000000000 +0200
+***************
+*** 49,55 ****
+ test42.out test52.out test65.out test66.out test67.out \
+ test68.out test69.out test71.out test72.out test73.out \
+ test74.out test75.out test76.out test77.out test78.out \
+! test79.out test80.out test81.out test82.out test83.out
+
+ SCRIPTS32 = test50.out test70.out
+
+--- 49,56 ----
+ test42.out test52.out test65.out test66.out test67.out \
+ test68.out test69.out test71.out test72.out test73.out \
+ test74.out test75.out test76.out test77.out test78.out \
+! test79.out test80.out test81.out test82.out test83.out \
+! test84.out
+
+ SCRIPTS32 = test50.out test70.out
+
+*** ../vim-7.3.486/src/testdir/Make_os2.mak 2011-10-12 19:53:31.000000000 +0200
+--- src/testdir/Make_os2.mak 2012-03-28 18:15:00.000000000 +0200
+***************
+*** 29,35 ****
+ test66.out test67.out test68.out test69.out test70.out \
+ test71.out test72.out test73.out test74.out test75.out \
+ test76.out test77.out test78.out test79.out test80.out \
+! test81.out test82.out test83.out
+
+ .SUFFIXES: .in .out
+
+--- 29,35 ----
+ test66.out test67.out test68.out test69.out test70.out \
+ test71.out test72.out test73.out test74.out test75.out \
+ test76.out test77.out test78.out test79.out test80.out \
+! test81.out test82.out test83.out test84.out
+
+ .SUFFIXES: .in .out
+
+*** ../vim-7.3.486/src/testdir/Make_vms.mms 2011-10-12 19:53:31.000000000 +0200
+--- src/testdir/Make_vms.mms 2012-03-28 18:15:15.000000000 +0200
+***************
+*** 4,10 ****
+ # Authors: Zoltan Arpadffy, <arpadffy@polarhome.com>
+ # Sandor Kopanyi, <sandor.kopanyi@mailbox.hu>
+ #
+! # Last change: 2011 Jul 15
+ #
+ # This has been tested on VMS 6.2 to 8.3 on DEC Alpha, VAX and IA64.
+ # Edit the lines in the Configuration section below to select.
+--- 4,10 ----
+ # Authors: Zoltan Arpadffy, <arpadffy@polarhome.com>
+ # Sandor Kopanyi, <sandor.kopanyi@mailbox.hu>
+ #
+! # Last change: 2012 Mar 28
+ #
+ # This has been tested on VMS 6.2 to 8.3 on DEC Alpha, VAX and IA64.
+ # Edit the lines in the Configuration section below to select.
+***************
+*** 76,82 ****
+ test66.out test67.out test68.out test69.out \
+ test71.out test72.out test74.out test75.out test76.out \
+ test77.out test78.out test79.out test80.out test81.out \
+! test82.out test83.out
+
+ # Known problems:
+ # Test 30: a problem around mac format - unknown reason
+--- 76,82 ----
+ test66.out test67.out test68.out test69.out \
+ test71.out test72.out test74.out test75.out test76.out \
+ test77.out test78.out test79.out test80.out test81.out \
+! test82.out test83.out test84.out
+
+ # Known problems:
+ # Test 30: a problem around mac format - unknown reason
+*** ../vim-7.3.486/src/testdir/Makefile 2011-10-12 19:53:31.000000000 +0200
+--- src/testdir/Makefile 2012-03-28 18:15:29.000000000 +0200
+***************
+*** 26,32 ****
+ test64.out test65.out test66.out test67.out test68.out \
+ test69.out test70.out test71.out test72.out test73.out \
+ test74.out test75.out test76.out test77.out test78.out \
+! test79.out test80.out test81.out test82.out test83.out
+
+ SCRIPTS_GUI = test16.out
+
+--- 26,33 ----
+ test64.out test65.out test66.out test67.out test68.out \
+ test69.out test70.out test71.out test72.out test73.out \
+ test74.out test75.out test76.out test77.out test78.out \
+! test79.out test80.out test81.out test82.out test83.out \
+! test84.out
+
+ SCRIPTS_GUI = test16.out
+
+*** ../vim-7.3.486/src/version.c 2012-03-28 17:43:06.000000000 +0200
+--- src/version.c 2012-03-28 19:49:41.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 487,
+ /**/
+
+--
+"Time flies like an arrow". So I put an arrow on my desk, now
+awaiting one of these time flies showing up.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.488 b/source/ap/vim/patches/7.3.488
new file mode 100644
index 000000000..e07874040
--- /dev/null
+++ b/source/ap/vim/patches/7.3.488
@@ -0,0 +1,52 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.488
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.488
+Problem: ":help!" in a help file does not work as document.
+Solution: When in a help file don't give an error message. (thinca)
+Files: src/ex_cmds.c
+
+
+*** ../vim-7.3.487/src/ex_cmds.c 2012-03-16 14:32:10.000000000 +0100
+--- src/ex_cmds.c 2012-04-01 14:25:35.000000000 +0200
+***************
+*** 5546,5552 ****
+ }
+ arg = eap->arg;
+
+! if (eap->forceit && *arg == NUL)
+ {
+ EMSG(_("E478: Don't panic!"));
+ return;
+--- 5546,5552 ----
+ }
+ arg = eap->arg;
+
+! if (eap->forceit && *arg == NUL && !curbuf->b_help)
+ {
+ EMSG(_("E478: Don't panic!"));
+ return;
+*** ../vim-7.3.487/src/version.c 2012-03-28 19:58:34.000000000 +0200
+--- src/version.c 2012-04-05 16:04:13.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 488,
+ /**/
+
+
+--
+I'd like to meet the man who invented sex and see what he's working on now.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.489 b/source/ap/vim/patches/7.3.489
new file mode 100644
index 000000000..fbdf2c39f
--- /dev/null
+++ b/source/ap/vim/patches/7.3.489
@@ -0,0 +1,89 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.489
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.489
+Problem: CTRL-] in Insert mode does not expand abbreviation when used in a
+ mapping. (Yichao Zhou)
+Solution: Special case using CTRL-]. (Christian Brabandt)
+Files: src/getchar.c, src/edit.c
+
+
+*** ../vim-7.3.488/src/getchar.c 2012-02-05 22:05:44.000000000 +0100
+--- src/getchar.c 2012-04-05 15:54:00.000000000 +0200
+***************
+*** 4352,4359 ****
+
+ if (typebuf.tb_no_abbr_cnt) /* abbrev. are not recursive */
+ return FALSE;
+! if ((KeyNoremap & (RM_NONE|RM_SCRIPT)) != 0)
+! /* no remapping implies no abbreviation */
+ return FALSE;
+
+ /*
+--- 4352,4360 ----
+
+ if (typebuf.tb_no_abbr_cnt) /* abbrev. are not recursive */
+ return FALSE;
+!
+! /* no remapping implies no abbreviation, except for CTRL-] */
+! if ((KeyNoremap & (RM_NONE|RM_SCRIPT)) != 0 && c != Ctrl_RSB)
+ return FALSE;
+
+ /*
+*** ../vim-7.3.488/src/edit.c 2012-02-29 18:22:03.000000000 +0100
+--- src/edit.c 2012-04-05 15:57:46.000000000 +0200
+***************
+*** 1455,1467 ****
+ Insstart_blank_vcol = get_nolist_virtcol();
+ }
+
+! if (vim_iswordc(c) || !echeck_abbr(
+ #ifdef FEAT_MBYTE
+ /* Add ABBR_OFF for characters above 0x100, this is
+ * what check_abbr() expects. */
+ (has_mbyte && c >= 0x100) ? (c + ABBR_OFF) :
+ #endif
+! c))
+ {
+ insert_special(c, FALSE, FALSE);
+ #ifdef FEAT_RIGHTLEFT
+--- 1455,1470 ----
+ Insstart_blank_vcol = get_nolist_virtcol();
+ }
+
+! /* Insert a normal character and check for abbreviations on a
+! * special character. Let CTRL-] expand abbreviations without
+! * inserting it. */
+! if (vim_iswordc(c) || (!echeck_abbr(
+ #ifdef FEAT_MBYTE
+ /* Add ABBR_OFF for characters above 0x100, this is
+ * what check_abbr() expects. */
+ (has_mbyte && c >= 0x100) ? (c + ABBR_OFF) :
+ #endif
+! c) && c != Ctrl_RSB))
+ {
+ insert_special(c, FALSE, FALSE);
+ #ifdef FEAT_RIGHTLEFT
+*** ../vim-7.3.488/src/version.c 2012-04-05 16:04:58.000000000 +0200
+--- src/version.c 2012-04-05 16:06:12.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 489,
+ /**/
+
+--
+Just think of all the things we haven't thought of yet.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.490 b/source/ap/vim/patches/7.3.490
new file mode 100644
index 000000000..6c49a48d5
--- /dev/null
+++ b/source/ap/vim/patches/7.3.490
@@ -0,0 +1,2517 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.490
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.490
+Problem: Member confusion in Lua interface.
+Solution: Fix it. Add luaeval(). (Taro Muraoka, Luis Carvalho)
+Files: runtime/doc/if_lua.txt, src/eval.c, src/if_lua.c,
+ src/proto/if_lua.pro
+
+
+*** ../vim-7.3.489/runtime/doc/if_lua.txt 2010-08-15 21:57:14.000000000 +0200
+--- runtime/doc/if_lua.txt 2012-04-05 16:41:35.000000000 +0200
+***************
+*** 1,4 ****
+! *if_lua.txt* For Vim version 7.3. Last change: 2010 Jul 22
+
+
+ VIM REFERENCE MANUAL by Luis Carvalho
+--- 1,4 ----
+! *if_lua.txt* For Vim version 7.3. Last change: 2012 Jan 16
+
+
+ VIM REFERENCE MANUAL by Luis Carvalho
+***************
+*** 8,15 ****
+
+ 1. Commands |lua-commands|
+ 2. The vim module |lua-vim|
+! 3. Buffer userdata |lua-buffer|
+! 4. Window userdata |lua-window|
+
+ {Vi does not have any of these commands}
+
+--- 8,18 ----
+
+ 1. Commands |lua-commands|
+ 2. The vim module |lua-vim|
+! 3. List userdata |lua-list|
+! 4. Dict userdata |lua-dict|
+! 5. Buffer userdata |lua-buffer|
+! 6. Window userdata |lua-window|
+! 7. The luaeval function |lua-luaeval|
+
+ {Vi does not have any of these commands}
+
+***************
+*** 88,98 ****
+ All these commands execute a Lua chunk from either the command line (:lua and
+ :luado) or a file (:luafile) with the given line [range]. Similarly to the Lua
+ interpreter, each chunk has its own scope and so only global variables are
+! shared between command calls. Lua default libraries "table", "string", "math",
+! and "package" are available, "io" and "debug" are not, and "os" is restricted
+! to functions "date", "clock", "time", "difftime", and "getenv". In addition,
+! Lua "print" function has its output redirected to the Vim message area, with
+! arguments separated by a white space instead of a tab.
+
+ Lua uses the "vim" module (see |lua-vim|) to issue commands to Vim
+ and manage buffers (|lua-buffer|) and windows (|lua-window|). However,
+--- 91,99 ----
+ All these commands execute a Lua chunk from either the command line (:lua and
+ :luado) or a file (:luafile) with the given line [range]. Similarly to the Lua
+ interpreter, each chunk has its own scope and so only global variables are
+! shared between command calls. All Lua default libraries are available. In
+! addition, Lua "print" function has its output redirected to the Vim message
+! area, with arguments separated by a white space instead of a tab.
+
+ Lua uses the "vim" module (see |lua-vim|) to issue commands to Vim
+ and manage buffers (|lua-buffer|) and windows (|lua-window|). However,
+***************
+*** 108,116 ****
+ module also includes routines for buffer, window, and current line queries,
+ Vim evaluation and command execution, and others.
+
+! vim.isbuffer(value) Returns 'true' (boolean, not string) if
+! "value" is a buffer userdata and 'false'
+! otherwise (see |lua-buffer|).
+
+ vim.buffer([arg]) If "arg" is a number, returns buffer with
+ number "arg" in the buffer list or, if "arg"
+--- 109,117 ----
+ module also includes routines for buffer, window, and current line queries,
+ Vim evaluation and command execution, and others.
+
+! vim.list() Returns an empty list (see |List|).
+!
+! vim.dict() Returns an empty dictionary (see |Dictionary|).
+
+ vim.buffer([arg]) If "arg" is a number, returns buffer with
+ number "arg" in the buffer list or, if "arg"
+***************
+*** 121,136 ****
+ 'true' returns the first buffer in the buffer
+ list or else the current buffer.
+
+- vim.iswindow(value) Returns 'true' (boolean, not string) if
+- "value" is a window userdata and
+- 'false' otherwise (see |lua-window|).
+-
+ vim.window([arg]) If "arg" is a number, returns window with
+ number "arg" or 'nil' (nil value, not string)
+ if not found. Otherwise, if "toboolean(arg)"
+ is 'true' returns the first window or else the
+ current window.
+
+ vim.command({cmd}) Executes the vim (ex-mode) command {cmd}.
+ Examples: >
+ :lua vim.command"set tw=60"
+--- 122,142 ----
+ 'true' returns the first buffer in the buffer
+ list or else the current buffer.
+
+ vim.window([arg]) If "arg" is a number, returns window with
+ number "arg" or 'nil' (nil value, not string)
+ if not found. Otherwise, if "toboolean(arg)"
+ is 'true' returns the first window or else the
+ current window.
+
++ vim.type({arg}) Returns the type of {arg}. It is equivalent to
++ Lua's "type" function, but returns "list",
++ "dict", "buffer", or "window" if {arg} is a
++ list, dictionary, buffer, or window,
++ respectively. Examples: >
++ :lua l = vim.list()
++ :lua print(type(l), vim.type(l))
++ :" userdata list
++ <
+ vim.command({cmd}) Executes the vim (ex-mode) command {cmd}.
+ Examples: >
+ :lua vim.command"set tw=60"
+***************
+*** 141,147 ****
+ Vim strings and numbers are directly converted
+ to Lua strings and numbers respectively. Vim
+ lists and dictionaries are converted to Lua
+! tables (lists become integer-keyed tables).
+ Examples: >
+ :lua tw = vim.eval"&tw"
+ :lua print(vim.eval"{'a': 'one'}".a)
+--- 147,153 ----
+ Vim strings and numbers are directly converted
+ to Lua strings and numbers respectively. Vim
+ lists and dictionaries are converted to Lua
+! userdata (see |lua-list| and |lua-dict|).
+ Examples: >
+ :lua tw = vim.eval"&tw"
+ :lua print(vim.eval"{'a': 'one'}".a)
+***************
+*** 157,163 ****
+
+
+ ==============================================================================
+! 3. Buffer userdata *lua-buffer*
+
+ Buffer userdata represent vim buffers. A buffer userdata "b" has the following
+ properties and methods:
+--- 163,234 ----
+
+
+ ==============================================================================
+! 3. List userdata *lua-list*
+!
+! List userdata represent vim lists, and the interface tries to follow closely
+! Vim's syntax for lists. Since lists are objects, changes in list references in
+! Lua are reflected in Vim and vice-versa. A list "l" has the following
+! properties and methods:
+!
+! Properties
+! ----------
+! o "#l" is the number of items in list "l", equivalent to "len(l)"
+! in Vim.
+! o "l[k]" returns the k-th item in "l"; "l" is zero-indexed, as in Vim.
+! To modify the k-th item, simply do "l[k] = newitem"; in
+! particular, "l[k] = nil" removes the k-th item from "l".
+! o "l()" returns an iterator for "l".
+!
+! Methods
+! -------
+! o "l:add(item)" appends "item" to the end of "l".
+! o "l:insert(item[, pos])" inserts "item" at (optional)
+! position "pos" in the list. The default value for "pos" is 0.
+!
+! Examples:
+! >
+! :let l = [1, 'item']
+! :lua l = vim.eval('l') -- same 'l'
+! :lua l:add(vim.list())
+! :lua l[0] = math.pi
+! :echo l[0] " 3.141593
+! :lua l[0] = nil -- remove first item
+! :lua l:insert(true, 1)
+! :lua print(l, #l, l[0], l[1], l[-1])
+! :lua for item in l() do print(item) end
+! <
+!
+! ==============================================================================
+! 4. Dict userdata *lua-dict*
+!
+! Similarly to list userdata, dict userdata represent vim dictionaries; since
+! dictionaries are also objects, references are kept between Lua and Vim. A dict
+! "d" has the following properties:
+!
+! Properties
+! ----------
+! o "#d" is the number of items in dict "d", equivalent to "len(d)"
+! in Vim.
+! o "d.key" or "d['key']" returns the value at entry "key" in "d".
+! To modify the entry at this key, simply do "d.key = newvalue"; in
+! particular, "d.key = nil" removes the entry from "d".
+! o "d()" returns an iterator for "d" and is equivalent to "items(d)" in
+! Vim.
+!
+! Examples:
+! >
+! :let d = {'n':10}
+! :lua d = vim.eval('d') -- same 'd'
+! :lua print(d, d.n, #d)
+! :let d.self = d
+! :lua for k, v in d() do print(d, k, v) end
+! :lua d.x = math.pi
+! :lua d.self = nil -- remove entry
+! :echo d
+! <
+!
+! ==============================================================================
+! 5. Buffer userdata *lua-buffer*
+
+ Buffer userdata represent vim buffers. A buffer userdata "b" has the following
+ properties and methods:
+***************
+*** 209,215 ****
+ <
+
+ ==============================================================================
+! 4. Window userdata *lua-window*
+
+ Window objects represent vim windows. A window userdata "w" has the following
+ properties and methods:
+--- 280,286 ----
+ <
+
+ ==============================================================================
+! 6. Window userdata *lua-window*
+
+ Window objects represent vim windows. A window userdata "w" has the following
+ properties and methods:
+***************
+*** 241,244 ****
+ <
+
+ ==============================================================================
+! vim:tw=78:ts=8:ft=help:norl:
+--- 312,340 ----
+ <
+
+ ==============================================================================
+! 7. The luaeval function *lua-luaeval*
+!
+! The (dual) equivalent of "vim.eval" for passing Lua values to Vim is
+! "luaeval". "luaeval" takes an expression string and an optional argument and
+! returns the result of the expression. It is semantically equivalent in Lua to:
+! >
+! local chunkheader = "local _A = select(1, ...) return "
+! function luaeval (expstr, arg)
+! local chunk = assert(loadstring(chunkheader .. expstr, "luaeval"))
+! return chunk(arg) -- return typval
+! end
+! <
+! Note that "_A" receives the argument to "luaeval". Examples: >
+!
+! :echo luaeval('math.pi')
+! :lua a = vim.list():add('newlist')
+! :let a = luaeval('a')
+! :echo a[0] " 'newlist'
+! :function Rand(x,y) " random uniform between x and y
+! : return luaeval('(_A.y-_A.x)*math.random()+_A.x', {'x':a:x,'y':a:y})
+! : endfunction
+! :echo Rand(1,10)
+!
+!
+! ==============================================================================
+! vim:tw=78:ts=8:noet:ft=help:norl:
+*** ../vim-7.3.489/src/eval.c 2012-03-28 16:49:25.000000000 +0200
+--- src/eval.c 2012-04-05 16:41:35.000000000 +0200
+***************
+*** 622,627 ****
+--- 622,630 ----
+ static void f_log __ARGS((typval_T *argvars, typval_T *rettv));
+ static void f_log10 __ARGS((typval_T *argvars, typval_T *rettv));
+ #endif
++ #ifdef FEAT_LUA
++ static void f_luaeval __ARGS((typval_T *argvars, typval_T *rettv));
++ #endif
+ static void f_map __ARGS((typval_T *argvars, typval_T *rettv));
+ static void f_maparg __ARGS((typval_T *argvars, typval_T *rettv));
+ static void f_mapcheck __ARGS((typval_T *argvars, typval_T *rettv));
+***************
+*** 6777,6782 ****
+--- 6780,6789 ----
+ /* v: vars */
+ set_ref_in_ht(&vimvarht, copyID);
+
++ #ifdef FEAT_LUA
++ set_ref_in_lua(copyID);
++ #endif
++
+ /*
+ * 2. Free lists and dictionaries that are not referenced.
+ */
+***************
+*** 7946,7951 ****
+--- 7953,7961 ----
+ {"log", 1, 1, f_log},
+ {"log10", 1, 1, f_log10},
+ #endif
++ #ifdef FEAT_LUA
++ {"luaeval", 1, 2, f_luaeval},
++ #endif
+ {"map", 2, 2, f_map},
+ {"maparg", 1, 4, f_maparg},
+ {"mapcheck", 1, 3, f_mapcheck},
+***************
+*** 13626,13631 ****
+--- 13636,13658 ----
+ }
+ #endif
+
++ #ifdef FEAT_LUA
++ /*
++ * "luaeval()" function
++ */
++ static void
++ f_luaeval(argvars, rettv)
++ typval_T *argvars;
++ typval_T *rettv;
++ {
++ char_u *str;
++ char_u buf[NUMBUFLEN];
++
++ str = get_tv_string_buf(&argvars[0], buf);
++ do_luaeval(str, argvars + 1, rettv);
++ }
++ #endif
++
+ /*
+ * "map()" function
+ */
+*** ../vim-7.3.489/src/if_lua.c 2011-12-08 16:00:12.000000000 +0100
+--- src/if_lua.c 2012-04-05 16:41:35.000000000 +0200
+***************
+*** 1,4 ****
+! /* vi:set ts=8 sts=4 sw=4:
+ *
+ * VIM - Vi IMproved by Bram Moolenaar
+ *
+--- 1,4 ----
+! /* vi:set ts=8 sts=4 sw=4 noet:
+ *
+ * VIM - Vi IMproved by Bram Moolenaar
+ *
+***************
+*** 21,35 ****
+--- 21,53 ----
+
+ #define LUAVIM_CHUNKNAME "vim chunk"
+ #define LUAVIM_NAME "vim"
++ #define LUAVIM_EVALNAME "luaeval"
++ #define LUAVIM_EVALHEADER "local _A=select(1,...) return "
+
+ typedef buf_T *luaV_Buffer;
+ typedef win_T *luaV_Window;
++ typedef dict_T *luaV_Dict;
++ typedef list_T *luaV_List;
+ typedef void (*msgfunc_T)(char_u *);
+
++ static const char LUAVIM_DICT[] = "dict";
++ static const char LUAVIM_LIST[] = "list";
+ static const char LUAVIM_BUFFER[] = "buffer";
+ static const char LUAVIM_WINDOW[] = "window";
+ static const char LUAVIM_FREE[] = "luaV_free";
++ static const char LUAVIM_LUAEVAL[] = "luaV_luaeval";
++ static const char LUAVIM_SETREF[] = "luaV_setref";
+
++ /* most functions are closures with a cache table as first upvalue;
++ * get/setudata manage references to vim userdata in cache table through
++ * object pointers (light userdata) */
++ #define luaV_getudata(L, v) \
++ lua_pushlightuserdata((L), (void *) (v)); \
++ lua_rawget((L), lua_upvalueindex(1))
++ #define luaV_setudata(L, v) \
++ lua_pushlightuserdata((L), (void *) (v)); \
++ lua_pushvalue((L), -2); \
++ lua_rawset((L), lua_upvalueindex(1))
+ #define luaV_getfield(L, s) \
+ lua_pushlightuserdata((L), (void *)(s)); \
+ lua_rawget((L), LUA_REGISTRYINDEX)
+***************
+*** 38,43 ****
+--- 56,70 ----
+ #define luaV_msg(L) luaV_msgfunc((L), (msgfunc_T) msg)
+ #define luaV_emsg(L) luaV_msgfunc((L), (msgfunc_T) emsg)
+
++ static luaV_List *luaV_pushlist (lua_State *L, list_T *lis);
++ static luaV_Dict *luaV_pushdict (lua_State *L, dict_T *dic);
++
++ #if LUA_VERSION_NUM <= 501
++ #define luaV_openlib(L, l, n) luaL_openlib(L, NULL, l, n)
++ #define luaL_typeerror luaL_typerror
++ #else
++ #define luaV_openlib luaL_setfuncs
++ #endif
+
+ #ifdef DYNAMIC_LUA
+
+***************
+*** 54,85 ****
+ #endif
+
+ /* lauxlib */
+ #define luaL_register dll_luaL_register
+ #define luaL_typerror dll_luaL_typerror
+ #define luaL_checklstring dll_luaL_checklstring
+ #define luaL_checkinteger dll_luaL_checkinteger
+ #define luaL_optinteger dll_luaL_optinteger
+ #define luaL_checktype dll_luaL_checktype
+ #define luaL_error dll_luaL_error
+- #define luaL_loadfile dll_luaL_loadfile
+- #define luaL_loadbuffer dll_luaL_loadbuffer
+ #define luaL_newstate dll_luaL_newstate
+ #define luaL_buffinit dll_luaL_buffinit
+- #define luaL_prepbuffer dll_luaL_prepbuffer
+ #define luaL_addlstring dll_luaL_addlstring
+ #define luaL_pushresult dll_luaL_pushresult
+ /* lua */
+ #define lua_close dll_lua_close
+ #define lua_gettop dll_lua_gettop
+ #define lua_settop dll_lua_settop
+ #define lua_pushvalue dll_lua_pushvalue
+ #define lua_replace dll_lua_replace
+ #define lua_isnumber dll_lua_isnumber
+ #define lua_isstring dll_lua_isstring
+ #define lua_type dll_lua_type
+ #define lua_rawequal dll_lua_rawequal
+- #define lua_tonumber dll_lua_tonumber
+- #define lua_tointeger dll_lua_tointeger
+ #define lua_toboolean dll_lua_toboolean
+ #define lua_tolstring dll_lua_tolstring
+ #define lua_touserdata dll_lua_touserdata
+--- 81,134 ----
+ #endif
+
+ /* lauxlib */
++ #if LUA_VERSION_NUM <= 501
+ #define luaL_register dll_luaL_register
++ #define luaL_prepbuffer dll_luaL_prepbuffer
++ #define luaL_openlib dll_luaL_openlib
+ #define luaL_typerror dll_luaL_typerror
++ #define luaL_loadfile dll_luaL_loadfile
++ #define luaL_loadbuffer dll_luaL_loadbuffer
++ #else
++ #define luaL_prepbuffsize dll_luaL_prepbuffsize
++ #define luaL_setfuncs dll_luaL_setfuncs
++ #define luaL_loadfilex dll_luaL_loadfilex
++ #define luaL_loadbufferx dll_luaL_loadbufferx
++ #define luaL_argerror dll_luaL_argerror
++ #endif
+ #define luaL_checklstring dll_luaL_checklstring
+ #define luaL_checkinteger dll_luaL_checkinteger
+ #define luaL_optinteger dll_luaL_optinteger
+ #define luaL_checktype dll_luaL_checktype
+ #define luaL_error dll_luaL_error
+ #define luaL_newstate dll_luaL_newstate
+ #define luaL_buffinit dll_luaL_buffinit
+ #define luaL_addlstring dll_luaL_addlstring
+ #define luaL_pushresult dll_luaL_pushresult
+ /* lua */
++ #if LUA_VERSION_NUM <= 501
++ #define lua_tonumber dll_lua_tonumber
++ #define lua_tointeger dll_lua_tointeger
++ #define lua_call dll_lua_call
++ #define lua_pcall dll_lua_pcall
++ #else
++ #define lua_tonumberx dll_lua_tonumberx
++ #define lua_tointegerx dll_lua_tointegerx
++ #define lua_callk dll_lua_callk
++ #define lua_pcallk dll_lua_pcallk
++ #define lua_getglobal dll_lua_getglobal
++ #define lua_setglobal dll_lua_setglobal
++ #define lua_typename dll_lua_typename
++ #endif
+ #define lua_close dll_lua_close
+ #define lua_gettop dll_lua_gettop
+ #define lua_settop dll_lua_settop
+ #define lua_pushvalue dll_lua_pushvalue
+ #define lua_replace dll_lua_replace
++ #define lua_remove dll_lua_remove
+ #define lua_isnumber dll_lua_isnumber
+ #define lua_isstring dll_lua_isstring
+ #define lua_type dll_lua_type
+ #define lua_rawequal dll_lua_rawequal
+ #define lua_toboolean dll_lua_toboolean
+ #define lua_tolstring dll_lua_tolstring
+ #define lua_touserdata dll_lua_touserdata
+***************
+*** 94,109 ****
+ #define lua_pushlightuserdata dll_lua_pushlightuserdata
+ #define lua_getfield dll_lua_getfield
+ #define lua_rawget dll_lua_rawget
+ #define lua_createtable dll_lua_createtable
+ #define lua_newuserdata dll_lua_newuserdata
+ #define lua_getmetatable dll_lua_getmetatable
+ #define lua_setfield dll_lua_setfield
+ #define lua_rawset dll_lua_rawset
+ #define lua_rawseti dll_lua_rawseti
+- #define lua_remove dll_lua_remove
+ #define lua_setmetatable dll_lua_setmetatable
+- #define lua_call dll_lua_call
+- #define lua_pcall dll_lua_pcall
+ /* libs */
+ #define luaopen_base dll_luaopen_base
+ #define luaopen_table dll_luaopen_table
+--- 143,156 ----
+ #define lua_pushlightuserdata dll_lua_pushlightuserdata
+ #define lua_getfield dll_lua_getfield
+ #define lua_rawget dll_lua_rawget
++ #define lua_rawgeti dll_lua_rawgeti
+ #define lua_createtable dll_lua_createtable
+ #define lua_newuserdata dll_lua_newuserdata
+ #define lua_getmetatable dll_lua_getmetatable
+ #define lua_setfield dll_lua_setfield
+ #define lua_rawset dll_lua_rawset
+ #define lua_rawseti dll_lua_rawseti
+ #define lua_setmetatable dll_lua_setmetatable
+ /* libs */
+ #define luaopen_base dll_luaopen_base
+ #define luaopen_table dll_luaopen_table
+***************
+*** 116,147 ****
+ #define luaL_openlibs dll_luaL_openlibs
+
+ /* lauxlib */
+ void (*dll_luaL_register) (lua_State *L, const char *libname, const luaL_Reg *l);
+ int (*dll_luaL_typerror) (lua_State *L, int narg, const char *tname);
+ const char *(*dll_luaL_checklstring) (lua_State *L, int numArg, size_t *l);
+ lua_Integer (*dll_luaL_checkinteger) (lua_State *L, int numArg);
+ lua_Integer (*dll_luaL_optinteger) (lua_State *L, int nArg, lua_Integer def);
+ void (*dll_luaL_checktype) (lua_State *L, int narg, int t);
+ int (*dll_luaL_error) (lua_State *L, const char *fmt, ...);
+- int (*dll_luaL_loadfile) (lua_State *L, const char *filename);
+- int (*dll_luaL_loadbuffer) (lua_State *L, const char *buff, size_t sz, const char *name);
+ lua_State *(*dll_luaL_newstate) (void);
+ void (*dll_luaL_buffinit) (lua_State *L, luaL_Buffer *B);
+- char *(*dll_luaL_prepbuffer) (luaL_Buffer *B);
+ void (*dll_luaL_addlstring) (luaL_Buffer *B, const char *s, size_t l);
+ void (*dll_luaL_pushresult) (luaL_Buffer *B);
+ /* lua */
+ void (*dll_lua_close) (lua_State *L);
+ int (*dll_lua_gettop) (lua_State *L);
+ void (*dll_lua_settop) (lua_State *L, int idx);
+ void (*dll_lua_pushvalue) (lua_State *L, int idx);
+ void (*dll_lua_replace) (lua_State *L, int idx);
+ int (*dll_lua_isnumber) (lua_State *L, int idx);
+ int (*dll_lua_isstring) (lua_State *L, int idx);
+ int (*dll_lua_type) (lua_State *L, int idx);
+ int (*dll_lua_rawequal) (lua_State *L, int idx1, int idx2);
+- lua_Number (*dll_lua_tonumber) (lua_State *L, int idx);
+- lua_Integer (*dll_lua_tointeger) (lua_State *L, int idx);
+ int (*dll_lua_toboolean) (lua_State *L, int idx);
+ const char *(*dll_lua_tolstring) (lua_State *L, int idx, size_t *len);
+ void *(*dll_lua_touserdata) (lua_State *L, int idx);
+--- 163,218 ----
+ #define luaL_openlibs dll_luaL_openlibs
+
+ /* lauxlib */
++ #if LUA_VERSION_NUM <= 501
+ void (*dll_luaL_register) (lua_State *L, const char *libname, const luaL_Reg *l);
++ char *(*dll_luaL_prepbuffer) (luaL_Buffer *B);
++ void (*dll_luaL_openlib) (lua_State *L, const char *libname, const luaL_Reg *l, int nup);
+ int (*dll_luaL_typerror) (lua_State *L, int narg, const char *tname);
++ int (*dll_luaL_loadfile) (lua_State *L, const char *filename);
++ int (*dll_luaL_loadbuffer) (lua_State *L, const char *buff, size_t sz, const char *name);
++ #else
++ char *(*dll_luaL_prepbuffsize) (luaL_Buffer *B, size_t sz);
++ void (*dll_luaL_setfuncs) (lua_State *L, const luaL_Reg *l, int nup);
++ int (*dll_luaL_loadfilex) (lua_State *L, const char *filename, const char *mode);
++ int (*dll_luaL_loadbufferx) (lua_State *L, const char *buff, size_t sz, const char *name, const char *mode);
++ int (*dll_luaL_argerror) (lua_State *L, int numarg, const char *extramsg);
++ #endif
+ const char *(*dll_luaL_checklstring) (lua_State *L, int numArg, size_t *l);
+ lua_Integer (*dll_luaL_checkinteger) (lua_State *L, int numArg);
+ lua_Integer (*dll_luaL_optinteger) (lua_State *L, int nArg, lua_Integer def);
+ void (*dll_luaL_checktype) (lua_State *L, int narg, int t);
+ int (*dll_luaL_error) (lua_State *L, const char *fmt, ...);
+ lua_State *(*dll_luaL_newstate) (void);
+ void (*dll_luaL_buffinit) (lua_State *L, luaL_Buffer *B);
+ void (*dll_luaL_addlstring) (luaL_Buffer *B, const char *s, size_t l);
+ void (*dll_luaL_pushresult) (luaL_Buffer *B);
+ /* lua */
++ #if LUA_VERSION_NUM <= 501
++ lua_Number (*dll_lua_tonumber) (lua_State *L, int idx);
++ lua_Integer (*dll_lua_tointeger) (lua_State *L, int idx);
++ void (*dll_lua_call) (lua_State *L, int nargs, int nresults);
++ int (*dll_lua_pcall) (lua_State *L, int nargs, int nresults, int errfunc);
++ #else
++ lua_Number (*dll_lua_tonumberx) (lua_State *L, int idx, int *isnum);
++ lua_Integer (*dll_lua_tointegerx) (lua_State *L, int idx, int *isnum);
++ void (*dll_lua_callk) (lua_State *L, int nargs, int nresults, int ctx,
++ lua_CFunction k);
++ int (*dll_lua_pcallk) (lua_State *L, int nargs, int nresults, int errfunc,
++ int ctx, lua_CFunction k);
++ void (*dll_lua_getglobal) (lua_State *L, const char *var);
++ void (*dll_lua_setglobal) (lua_State *L, const char *var);
++ const char *(*dll_lua_typename) (lua_State *L, int tp);
++ #endif
+ void (*dll_lua_close) (lua_State *L);
+ int (*dll_lua_gettop) (lua_State *L);
+ void (*dll_lua_settop) (lua_State *L, int idx);
+ void (*dll_lua_pushvalue) (lua_State *L, int idx);
+ void (*dll_lua_replace) (lua_State *L, int idx);
++ void (*dll_lua_remove) (lua_State *L, int idx);
+ int (*dll_lua_isnumber) (lua_State *L, int idx);
+ int (*dll_lua_isstring) (lua_State *L, int idx);
+ int (*dll_lua_type) (lua_State *L, int idx);
+ int (*dll_lua_rawequal) (lua_State *L, int idx1, int idx2);
+ int (*dll_lua_toboolean) (lua_State *L, int idx);
+ const char *(*dll_lua_tolstring) (lua_State *L, int idx, size_t *len);
+ void *(*dll_lua_touserdata) (lua_State *L, int idx);
+***************
+*** 156,171 ****
+ void (*dll_lua_pushlightuserdata) (lua_State *L, void *p);
+ void (*dll_lua_getfield) (lua_State *L, int idx, const char *k);
+ void (*dll_lua_rawget) (lua_State *L, int idx);
+ void (*dll_lua_createtable) (lua_State *L, int narr, int nrec);
+ void *(*dll_lua_newuserdata) (lua_State *L, size_t sz);
+ int (*dll_lua_getmetatable) (lua_State *L, int objindex);
+ void (*dll_lua_setfield) (lua_State *L, int idx, const char *k);
+ void (*dll_lua_rawset) (lua_State *L, int idx);
+ void (*dll_lua_rawseti) (lua_State *L, int idx, int n);
+- void (*dll_lua_remove) (lua_State *L, int idx);
+ int (*dll_lua_setmetatable) (lua_State *L, int objindex);
+- void (*dll_lua_call) (lua_State *L, int nargs, int nresults);
+- int (*dll_lua_pcall) (lua_State *L, int nargs, int nresults, int errfunc);
+ /* libs */
+ int (*dll_luaopen_base) (lua_State *L);
+ int (*dll_luaopen_table) (lua_State *L);
+--- 227,240 ----
+ void (*dll_lua_pushlightuserdata) (lua_State *L, void *p);
+ void (*dll_lua_getfield) (lua_State *L, int idx, const char *k);
+ void (*dll_lua_rawget) (lua_State *L, int idx);
++ void (*dll_lua_rawgeti) (lua_State *L, int idx, int n);
+ void (*dll_lua_createtable) (lua_State *L, int narr, int nrec);
+ void *(*dll_lua_newuserdata) (lua_State *L, size_t sz);
+ int (*dll_lua_getmetatable) (lua_State *L, int objindex);
+ void (*dll_lua_setfield) (lua_State *L, int idx, const char *k);
+ void (*dll_lua_rawset) (lua_State *L, int idx);
+ void (*dll_lua_rawseti) (lua_State *L, int idx, int n);
+ int (*dll_lua_setmetatable) (lua_State *L, int objindex);
+ /* libs */
+ int (*dll_luaopen_base) (lua_State *L);
+ int (*dll_luaopen_table) (lua_State *L);
+***************
+*** 185,216 ****
+
+ static const luaV_Reg luaV_dll[] = {
+ /* lauxlib */
+ {"luaL_register", (luaV_function) &dll_luaL_register},
+ {"luaL_typerror", (luaV_function) &dll_luaL_typerror},
+ {"luaL_checklstring", (luaV_function) &dll_luaL_checklstring},
+ {"luaL_checkinteger", (luaV_function) &dll_luaL_checkinteger},
+ {"luaL_optinteger", (luaV_function) &dll_luaL_optinteger},
+ {"luaL_checktype", (luaV_function) &dll_luaL_checktype},
+ {"luaL_error", (luaV_function) &dll_luaL_error},
+- {"luaL_loadfile", (luaV_function) &dll_luaL_loadfile},
+- {"luaL_loadbuffer", (luaV_function) &dll_luaL_loadbuffer},
+ {"luaL_newstate", (luaV_function) &dll_luaL_newstate},
+ {"luaL_buffinit", (luaV_function) &dll_luaL_buffinit},
+- {"luaL_prepbuffer", (luaV_function) &dll_luaL_prepbuffer},
+ {"luaL_addlstring", (luaV_function) &dll_luaL_addlstring},
+ {"luaL_pushresult", (luaV_function) &dll_luaL_pushresult},
+ /* lua */
+ {"lua_close", (luaV_function) &dll_lua_close},
+ {"lua_gettop", (luaV_function) &dll_lua_gettop},
+ {"lua_settop", (luaV_function) &dll_lua_settop},
+ {"lua_pushvalue", (luaV_function) &dll_lua_pushvalue},
+ {"lua_replace", (luaV_function) &dll_lua_replace},
+ {"lua_isnumber", (luaV_function) &dll_lua_isnumber},
+ {"lua_isstring", (luaV_function) &dll_lua_isstring},
+ {"lua_type", (luaV_function) &dll_lua_type},
+ {"lua_rawequal", (luaV_function) &dll_lua_rawequal},
+- {"lua_tonumber", (luaV_function) &dll_lua_tonumber},
+- {"lua_tointeger", (luaV_function) &dll_lua_tointeger},
+ {"lua_toboolean", (luaV_function) &dll_lua_toboolean},
+ {"lua_tolstring", (luaV_function) &dll_lua_tolstring},
+ {"lua_touserdata", (luaV_function) &dll_lua_touserdata},
+--- 254,307 ----
+
+ static const luaV_Reg luaV_dll[] = {
+ /* lauxlib */
++ #if LUA_VERSION_NUM <= 501
+ {"luaL_register", (luaV_function) &dll_luaL_register},
++ {"luaL_prepbuffer", (luaV_function) &dll_luaL_prepbuffer},
++ {"luaL_openlib", (luaV_function) &dll_luaL_openlib},
+ {"luaL_typerror", (luaV_function) &dll_luaL_typerror},
++ {"luaL_loadfile", (luaV_function) &dll_luaL_loadfile},
++ {"luaL_loadbuffer", (luaV_function) &dll_luaL_loadbuffer},
++ #else
++ {"luaL_prepbuffsize", (luaV_function) &dll_luaL_prepbuffsize},
++ {"luaL_setfuncs", (luaV_function) &dll_luaL_setfuncs},
++ {"luaL_loadfilex", (luaV_function) &dll_luaL_loadfilex},
++ {"luaL_loadbufferx", (luaV_function) &dll_luaL_loadbufferx},
++ {"luaL_argerror", (luaV_function) &dll_luaL_argerror},
++ #endif
+ {"luaL_checklstring", (luaV_function) &dll_luaL_checklstring},
+ {"luaL_checkinteger", (luaV_function) &dll_luaL_checkinteger},
+ {"luaL_optinteger", (luaV_function) &dll_luaL_optinteger},
+ {"luaL_checktype", (luaV_function) &dll_luaL_checktype},
+ {"luaL_error", (luaV_function) &dll_luaL_error},
+ {"luaL_newstate", (luaV_function) &dll_luaL_newstate},
+ {"luaL_buffinit", (luaV_function) &dll_luaL_buffinit},
+ {"luaL_addlstring", (luaV_function) &dll_luaL_addlstring},
+ {"luaL_pushresult", (luaV_function) &dll_luaL_pushresult},
+ /* lua */
++ #if LUA_VERSION_NUM <= 501
++ {"lua_tonumber", (luaV_function) &dll_lua_tonumber},
++ {"lua_tointeger", (luaV_function) &dll_lua_tointeger},
++ {"lua_call", (luaV_function) &dll_lua_call},
++ {"lua_pcall", (luaV_function) &dll_lua_pcall},
++ #else
++ {"lua_tonumberx", (luaV_function) &dll_lua_tonumberx},
++ {"lua_tointegerx", (luaV_function) &dll_lua_tointegerx},
++ {"lua_callk", (luaV_function) &dll_lua_callk},
++ {"lua_pcallk", (luaV_function) &dll_lua_pcallk},
++ {"lua_getglobal", (luaV_function) &dll_lua_getglobal},
++ {"lua_setglobal", (luaV_function) &dll_lua_setglobal},
++ {"lua_typename", (luaV_function) &dll_lua_typename},
++ #endif
+ {"lua_close", (luaV_function) &dll_lua_close},
+ {"lua_gettop", (luaV_function) &dll_lua_gettop},
+ {"lua_settop", (luaV_function) &dll_lua_settop},
+ {"lua_pushvalue", (luaV_function) &dll_lua_pushvalue},
+ {"lua_replace", (luaV_function) &dll_lua_replace},
++ {"lua_remove", (luaV_function) &dll_lua_remove},
+ {"lua_isnumber", (luaV_function) &dll_lua_isnumber},
+ {"lua_isstring", (luaV_function) &dll_lua_isstring},
+ {"lua_type", (luaV_function) &dll_lua_type},
+ {"lua_rawequal", (luaV_function) &dll_lua_rawequal},
+ {"lua_toboolean", (luaV_function) &dll_lua_toboolean},
+ {"lua_tolstring", (luaV_function) &dll_lua_tolstring},
+ {"lua_touserdata", (luaV_function) &dll_lua_touserdata},
+***************
+*** 225,240 ****
+ {"lua_pushlightuserdata", (luaV_function) &dll_lua_pushlightuserdata},
+ {"lua_getfield", (luaV_function) &dll_lua_getfield},
+ {"lua_rawget", (luaV_function) &dll_lua_rawget},
+ {"lua_createtable", (luaV_function) &dll_lua_createtable},
+ {"lua_newuserdata", (luaV_function) &dll_lua_newuserdata},
+ {"lua_getmetatable", (luaV_function) &dll_lua_getmetatable},
+ {"lua_setfield", (luaV_function) &dll_lua_setfield},
+ {"lua_rawset", (luaV_function) &dll_lua_rawset},
+ {"lua_rawseti", (luaV_function) &dll_lua_rawseti},
+- {"lua_remove", (luaV_function) &dll_lua_remove},
+ {"lua_setmetatable", (luaV_function) &dll_lua_setmetatable},
+- {"lua_call", (luaV_function) &dll_lua_call},
+- {"lua_pcall", (luaV_function) &dll_lua_pcall},
+ /* libs */
+ {"luaopen_base", (luaV_function) &dll_luaopen_base},
+ {"luaopen_table", (luaV_function) &dll_luaopen_table},
+--- 316,329 ----
+ {"lua_pushlightuserdata", (luaV_function) &dll_lua_pushlightuserdata},
+ {"lua_getfield", (luaV_function) &dll_lua_getfield},
+ {"lua_rawget", (luaV_function) &dll_lua_rawget},
++ {"lua_rawgeti", (luaV_function) &dll_lua_rawgeti},
+ {"lua_createtable", (luaV_function) &dll_lua_createtable},
+ {"lua_newuserdata", (luaV_function) &dll_lua_newuserdata},
+ {"lua_getmetatable", (luaV_function) &dll_lua_getmetatable},
+ {"lua_setfield", (luaV_function) &dll_lua_setfield},
+ {"lua_rawset", (luaV_function) &dll_lua_rawset},
+ {"lua_rawseti", (luaV_function) &dll_lua_rawseti},
+ {"lua_setmetatable", (luaV_function) &dll_lua_setmetatable},
+ /* libs */
+ {"luaopen_base", (luaV_function) &dll_luaopen_base},
+ {"luaopen_table", (luaV_function) &dll_luaopen_table},
+***************
+*** 294,299 ****
+--- 383,398 ----
+
+ #endif /* DYNAMIC_LUA */
+
++ #if LUA_VERSION_NUM > 501
++ static int
++ luaL_typeerror (lua_State *L, int narg, const char *tname)
++ {
++ const char *msg = lua_pushfstring(L, "%s expected, got %s",
++ tname, luaL_typename(L, narg));
++ return luaL_argerror(L, narg, msg);
++ }
++ #endif
++
+
+ /* ======= Internal ======= */
+
+***************
+*** 327,343 ****
+ }
+
+ static void *
+ luaV_checkudata(lua_State *L, int ud, const char *tname)
+ {
+ void *p = luaV_toudata(L, ud, tname);
+! if (p == NULL) luaL_typerror(L, ud, tname);
+ return p;
+ }
+
+ static void
+ luaV_pushtypval(lua_State *L, typval_T *tv)
+ {
+! if (tv == NULL) luaL_error(L, "null type");
+ switch (tv->v_type)
+ {
+ case VAR_STRING:
+--- 426,460 ----
+ }
+
+ static void *
++ luaV_checkcache(lua_State *L, void *p)
++ {
++ luaV_getudata(L, p);
++ if (lua_isnil(L, -1)) luaL_error(L, "invalid object");
++ lua_pop(L, 1);
++ return p;
++ }
++
++ #define luaV_unbox(L,luatyp,ud) (*((luatyp *) lua_touserdata((L),(ud))))
++
++ #define luaV_checkvalid(L,luatyp,ud) \
++ luaV_checkcache((L), (void *) luaV_unbox((L),luatyp,(ud)))
++
++ static void *
+ luaV_checkudata(lua_State *L, int ud, const char *tname)
+ {
+ void *p = luaV_toudata(L, ud, tname);
+! if (p == NULL) luaL_typeerror(L, ud, tname);
+ return p;
+ }
+
+ static void
+ luaV_pushtypval(lua_State *L, typval_T *tv)
+ {
+! if (tv == NULL)
+! {
+! lua_pushnil(L);
+! return;
+! }
+ switch (tv->v_type)
+ {
+ case VAR_STRING:
+***************
+*** 351,418 ****
+ lua_pushnumber(L, (lua_Number) tv->vval.v_float);
+ break;
+ #endif
+! case VAR_LIST: {
+! list_T *l = tv->vval.v_list;
+
+! if (l != NULL)
+ {
+! /* check cache */
+! lua_pushlightuserdata(L, (void *) l);
+! lua_rawget(L, LUA_ENVIRONINDEX);
+! if (lua_isnil(L, -1)) /* not interned? */
+ {
+! listitem_T *li;
+! int n = 0;
+! lua_pop(L, 1); /* nil */
+! lua_newtable(L);
+! lua_pushlightuserdata(L, (void *) l);
+! lua_pushvalue(L, -2);
+! lua_rawset(L, LUA_ENVIRONINDEX);
+! for (li = l->lv_first; li != NULL; li = li->li_next)
+! {
+! luaV_pushtypval(L, &li->li_tv);
+! lua_rawseti(L, -2, ++n);
+! }
+ }
+! }
+! else lua_pushnil(L);
+! break;
+! }
+! case VAR_DICT: {
+! dict_T *d = tv->vval.v_dict;
+!
+! if (d != NULL)
+! {
+! /* check cache */
+! lua_pushlightuserdata(L, (void *) d);
+! lua_rawget(L, LUA_ENVIRONINDEX);
+! if (lua_isnil(L, -1)) /* not interned? */
+ {
+! hashtab_T *ht = &d->dv_hashtab;
+! hashitem_T *hi;
+! int n = ht->ht_used; /* remaining items */
+! lua_pop(L, 1); /* nil */
+! lua_newtable(L);
+! lua_pushlightuserdata(L, (void *) d);
+! lua_pushvalue(L, -2);
+! lua_rawset(L, LUA_ENVIRONINDEX);
+! for (hi = ht->ht_array; n > 0; hi++)
+! {
+! if (!HASHITEM_EMPTY(hi))
+! {
+! dictitem_T *di = dict_lookup(hi);
+! luaV_pushtypval(L, &di->di_tv);
+! lua_setfield(L, -2, (char *) hi->hi_key);
+! n--;
+! }
+! }
+ }
+ }
+- else lua_pushnil(L);
+ break;
+ }
+ default:
+! luaL_error(L, "invalid type");
+ }
+ }
+
+--- 468,537 ----
+ lua_pushnumber(L, (lua_Number) tv->vval.v_float);
+ break;
+ #endif
+! case VAR_LIST:
+! luaV_pushlist(L, tv->vval.v_list);
+! break;
+! case VAR_DICT:
+! luaV_pushdict(L, tv->vval.v_dict);
+! break;
+! default:
+! lua_pushnil(L);
+! }
+! }
+
+! /* converts lua value at 'pos' to typval 'tv' */
+! static void
+! luaV_totypval (lua_State *L, int pos, typval_T *tv)
+! {
+! switch(lua_type(L, pos)) {
+! case LUA_TBOOLEAN:
+! tv->v_type = VAR_NUMBER;
+! tv->vval.v_number = (varnumber_T) lua_toboolean(L, pos);
+! break;
+! case LUA_TSTRING:
+! tv->v_type = VAR_STRING;
+! tv->vval.v_string = vim_strsave((char_u *) lua_tostring(L, pos));
+! break;
+! case LUA_TNUMBER:
+! #ifdef FEAT_FLOAT
+! tv->v_type = VAR_FLOAT;
+! tv->vval.v_float = (float_T) lua_tonumber(L, pos);
+! #else
+! tv->v_type = VAR_NUMBER;
+! tv->vval.v_number = (varnumber_T) lua_tointeger(L, pos);
+! #endif
+! break;
+! case LUA_TUSERDATA: {
+! void *p = lua_touserdata(L, pos);
+! if (lua_getmetatable(L, pos)) /* has metatable? */
+ {
+! /* check list */
+! luaV_getfield(L, LUAVIM_LIST);
+! if (lua_rawequal(L, -1, -2))
+ {
+! tv->v_type = VAR_LIST;
+! tv->vval.v_list = *((luaV_List *) p);
+! ++tv->vval.v_list->lv_refcount;
+! lua_pop(L, 2); /* MTs */
+! return;
+ }
+! /* check dict */
+! luaV_getfield(L, LUAVIM_DICT);
+! if (lua_rawequal(L, -1, -3))
+ {
+! tv->v_type = VAR_DICT;
+! tv->vval.v_dict = *((luaV_Dict *) p);
+! ++tv->vval.v_dict->dv_refcount;
+! lua_pop(L, 3); /* MTs */
+! return;
+ }
++ lua_pop(L, 3); /* MTs */
+ }
+ break;
+ }
+ default:
+! tv->v_type = VAR_NUMBER;
+! tv->vval.v_number = 0;
+ }
+ }
+
+***************
+*** 481,569 ****
+ lua_pop(L, 2); /* original and modified strings */
+ }
+
+
+! /* ======= Buffer type ======= */
+
+! static luaV_Buffer *
+! luaV_newbuffer(lua_State *L, buf_T *buf)
+ {
+! luaV_Buffer *b = (luaV_Buffer *) lua_newuserdata(L, sizeof(luaV_Buffer));
+! *b = buf;
+! lua_pushlightuserdata(L, (void *) buf);
+! lua_pushvalue(L, -2);
+! lua_rawset(L, LUA_ENVIRONINDEX); /* env[buf] = udata */
+! /* to avoid GC, store as key in env */
+! lua_pushvalue(L, -1);
+! lua_pushboolean(L, 1);
+! lua_rawset(L, LUA_ENVIRONINDEX); /* env[udata] = true */
+! /* set metatable */
+! luaV_getfield(L, LUAVIM_BUFFER);
+ lua_setmetatable(L, -2);
+! return b;
+ }
+
+! static luaV_Buffer *
+! luaV_pushbuffer (lua_State *L, buf_T *buf)
+ {
+! luaV_Buffer *b = NULL;
+! if (buf == NULL)
+! lua_pushnil(L);
+! else {
+! lua_pushlightuserdata(L, (void *) buf);
+! lua_rawget(L, LUA_ENVIRONINDEX);
+! if (lua_isnil(L, -1)) /* not interned? */
+ {
+! lua_pop(L, 1);
+! b = luaV_newbuffer(L, buf);
+ }
+ else
+! b = (luaV_Buffer *) lua_touserdata(L, -1);
+ }
+! return b;
+ }
+
+! /* Buffer metamethods */
+
+ static int
+! luaV_buffer_tostring(lua_State *L)
+ {
+! lua_pushfstring(L, "%s: %p", LUAVIM_BUFFER, lua_touserdata(L, 1));
+ return 1;
+ }
+
+ static int
+ luaV_buffer_len(lua_State *L)
+ {
+! luaV_Buffer *b = lua_touserdata(L, 1);
+! lua_pushinteger(L, (*b)->b_ml.ml_line_count);
+ return 1;
+ }
+
+ static int
+ luaV_buffer_call(lua_State *L)
+ {
+! luaV_Buffer *b = (luaV_Buffer *) lua_touserdata(L, 1);
+ lua_settop(L, 1);
+! set_curbuf(*b, DOBUF_SPLIT);
+ return 1;
+ }
+
+ static int
+ luaV_buffer_index(lua_State *L)
+ {
+! luaV_Buffer *b = (luaV_Buffer *) lua_touserdata(L, 1);
+ linenr_T n = (linenr_T) lua_tointeger(L, 2);
+! if (n > 0 && n <= (*b)->b_ml.ml_line_count)
+! luaV_pushline(L, *b, n);
+ else if (lua_isstring(L, 2))
+ {
+ const char *s = lua_tostring(L, 2);
+ if (strncmp(s, "name", 4) == 0)
+! lua_pushstring(L, (char *) (*b)->b_sfname);
+ else if (strncmp(s, "fname", 5) == 0)
+! lua_pushstring(L, (char *) (*b)->b_ffname);
+ else if (strncmp(s, "number", 6) == 0)
+! lua_pushinteger(L, (*b)->b_fnum);
+ /* methods */
+ else if (strncmp(s, "insert", 6) == 0
+ || strncmp(s, "next", 4) == 0
+--- 600,1107 ----
+ lua_pop(L, 2); /* original and modified strings */
+ }
+
++ #define luaV_newtype(typ,tname,luatyp,luatname) \
++ static luatyp * \
++ luaV_new##tname (lua_State *L, typ *obj) \
++ { \
++ luatyp *o = (luatyp *) lua_newuserdata(L, sizeof(luatyp)); \
++ *o = obj; \
++ luaV_setudata(L, obj); /* cache[obj] = udata */ \
++ luaV_getfield(L, luatname); \
++ lua_setmetatable(L, -2); \
++ return o; \
++ }
++
++ #define luaV_pushtype(typ,tname,luatyp) \
++ static luatyp * \
++ luaV_push##tname (lua_State *L, typ *obj) \
++ { \
++ luatyp *o = NULL; \
++ if (obj == NULL) \
++ lua_pushnil(L); \
++ else { \
++ luaV_getudata(L, obj); \
++ if (lua_isnil(L, -1)) /* not interned? */ \
++ { \
++ lua_pop(L, 1); \
++ o = luaV_new##tname(L, obj); \
++ } \
++ else \
++ o = (luatyp *) lua_touserdata(L, -1); \
++ } \
++ return o; \
++ }
++
++ #define luaV_type_tostring(tname,luatname) \
++ static int \
++ luaV_##tname##_tostring (lua_State *L) \
++ { \
++ lua_pushfstring(L, "%s: %p", luatname, lua_touserdata(L, 1)); \
++ return 1; \
++ }
++
+
+! /* adapted from eval.c */
+!
+! #define listitem_alloc() (listitem_T *)alloc(sizeof(listitem_T))
+!
+! static listitem_T *
+! list_find (list_T *l, long n)
+! {
+! listitem_T *li;
+! if (l == NULL || n < -l->lv_len || n >= l->lv_len)
+! return NULL;
+! if (n < 0) /* search backward? */
+! for (li = l->lv_last; n < -1; li = li->li_prev)
+! n++;
+! else /* search forward */
+! for (li = l->lv_first; n > 0; li = li->li_next)
+! n--;
+! return li;
+! }
+
+! static void
+! list_remove (list_T *l, listitem_T *li)
+ {
+! listwatch_T *lw;
+! --l->lv_len;
+! /* fix watchers */
+! for (lw = l->lv_watch; lw != NULL; lw = lw->lw_next)
+! if (lw->lw_item == li)
+! lw->lw_item = li->li_next;
+! /* fix list pointers */
+! if (li->li_next == NULL) /* last? */
+! l->lv_last = li->li_prev;
+! else
+! li->li_next->li_prev = li->li_prev;
+! if (li->li_prev == NULL) /* first? */
+! l->lv_first = li->li_next;
+! else
+! li->li_prev->li_next = li->li_next;
+! l->lv_idx_item = NULL;
+! }
+!
+! static void
+! list_append(list_T *l, listitem_T *item)
+! {
+! if (l->lv_last == NULL) /* empty list? */
+! l->lv_first = item;
+! else
+! l->lv_last->li_next = item;
+! item->li_prev = l->lv_last;
+! item->li_next = NULL;
+! l->lv_last = item;
+! ++l->lv_len;
+! }
+!
+! static int
+! list_insert_tv(list_T *l, typval_T *tv, listitem_T *item)
+! {
+! listitem_T *ni = listitem_alloc();
+!
+! if (ni == NULL)
+! return FAIL;
+! copy_tv(tv, &ni->li_tv);
+! if (item == NULL)
+! list_append(l, ni);
+! else
+! {
+! ni->li_prev = item->li_prev;
+! ni->li_next = item;
+! if (item->li_prev == NULL)
+! {
+! l->lv_first = ni;
+! ++l->lv_idx;
+! }
+! else
+! {
+! item->li_prev->li_next = ni;
+! l->lv_idx_item = NULL;
+! }
+! item->li_prev = ni;
+! ++l->lv_len;
+! }
+! return OK;
+! }
+!
+! /* set references */
+!
+! static void set_ref_in_tv (typval_T *tv, int copyID);
+!
+! static void
+! set_ref_in_dict(dict_T *d, int copyID)
+! {
+! hashtab_T *ht = &d->dv_hashtab;
+! int n = ht->ht_used;
+! hashitem_T *hi;
+! for (hi = ht->ht_array; n > 0; ++hi)
+! if (!HASHITEM_EMPTY(hi))
+! {
+! dictitem_T *di = dict_lookup(hi);
+! set_ref_in_tv(&di->di_tv, copyID);
+! --n;
+! }
+! }
+!
+! static void
+! set_ref_in_list(list_T *l, int copyID)
+! {
+! listitem_T *li;
+! for (li = l->lv_first; li != NULL; li = li->li_next)
+! set_ref_in_tv(&li->li_tv, copyID);
+! }
+!
+! static void
+! set_ref_in_tv(typval_T *tv, int copyID)
+! {
+! if (tv->v_type == VAR_LIST)
+! {
+! list_T *l = tv->vval.v_list;
+! if (l != NULL && l->lv_copyID != copyID)
+! {
+! l->lv_copyID = copyID;
+! set_ref_in_list(l, copyID);
+! }
+! }
+! else if (tv->v_type == VAR_DICT)
+! {
+! dict_T *d = tv->vval.v_dict;
+! if (d != NULL && d->dv_copyID != copyID)
+! {
+! d->dv_copyID = copyID;
+! set_ref_in_dict(d, copyID);
+! }
+! }
+! }
+!
+!
+! /* ======= List type ======= */
+!
+! static luaV_List *
+! luaV_newlist (lua_State *L, list_T *lis)
+! {
+! luaV_List *l = (luaV_List *) lua_newuserdata(L, sizeof(luaV_List));
+! *l = lis;
+! lis->lv_refcount++; /* reference in Lua */
+! luaV_setudata(L, lis); /* cache[lis] = udata */
+! luaV_getfield(L, LUAVIM_LIST);
+ lua_setmetatable(L, -2);
+! return l;
+ }
+
+! luaV_pushtype(list_T, list, luaV_List)
+! luaV_type_tostring(list, LUAVIM_LIST)
+!
+! static int
+! luaV_list_gc (lua_State *L)
+ {
+! list_unref(luaV_unbox(L, luaV_List, 1));
+! return 0;
+! }
+!
+! static int
+! luaV_list_len (lua_State *L)
+! {
+! list_T *l = luaV_unbox(L, luaV_List, 1);
+! lua_pushinteger(L, (l == NULL) ? 0 : (int) l->lv_len);
+! return 1;
+! }
+!
+! static int
+! luaV_list_iter (lua_State *L)
+! {
+! listitem_T *li = (listitem_T *) lua_touserdata(L, lua_upvalueindex(2));
+! if (li == NULL) return 0;
+! luaV_pushtypval(L, &li->li_tv);
+! lua_pushlightuserdata(L, (void *) li->li_next);
+! lua_replace(L, lua_upvalueindex(2));
+! return 1;
+! }
+!
+! static int
+! luaV_list_call (lua_State *L)
+! {
+! list_T *l = luaV_unbox(L, luaV_List, 1);
+! lua_pushvalue(L, lua_upvalueindex(1)); /* pass cache table along */
+! lua_pushlightuserdata(L, (void *) l->lv_first);
+! lua_pushcclosure(L, luaV_list_iter, 2);
+! return 1;
+! }
+!
+! static int
+! luaV_list_index (lua_State *L)
+! {
+! list_T *l = luaV_unbox(L, luaV_List, 1);
+! if (lua_isnumber(L, 2)) /* list item? */
+! {
+! listitem_T *li = list_find(l, (long) luaL_checkinteger(L, 2));
+! if (li == NULL)
+! lua_pushnil(L);
+! else
+! luaV_pushtypval(L, &li->li_tv);
+! }
+! else if (lua_isstring(L, 2)) /* method? */
+! {
+! const char *s = lua_tostring(L, 2);
+! if (strncmp(s, "add", 3) == 0
+! || strncmp(s, "insert", 6) == 0
+! || strncmp(s, "extend", 6) == 0)
+ {
+! lua_getmetatable(L, 1);
+! lua_getfield(L, -1, s);
+ }
+ else
+! lua_pushnil(L);
+ }
+! else
+! lua_pushnil(L);
+! return 1;
+ }
+
+! static int
+! luaV_list_newindex (lua_State *L)
+! {
+! list_T *l = luaV_unbox(L, luaV_List, 1);
+! long n = (long) luaL_checkinteger(L, 2);
+! listitem_T *li;
+! if (l->lv_lock)
+! luaL_error(L, "list is locked");
+! li = list_find(l, n);
+! if (li == NULL) return 0;
+! if (lua_isnil(L, 3)) /* remove? */
+! {
+! list_remove(l, li);
+! clear_tv(&li->li_tv);
+! vim_free(li);
+! }
+! else
+! {
+! typval_T v;
+! luaV_totypval(L, 3, &v);
+! clear_tv(&li->li_tv);
+! copy_tv(&v, &li->li_tv);
+! }
+! return 0;
+! }
+
+ static int
+! luaV_list_add (lua_State *L)
+ {
+! luaV_List *lis = luaV_checkudata(L, 1, LUAVIM_LIST);
+! list_T *l = (list_T *) luaV_checkcache(L, (void *) *lis);
+! listitem_T *li;
+! if (l->lv_lock)
+! luaL_error(L, "list is locked");
+! li = listitem_alloc();
+! if (li != NULL)
+! {
+! typval_T v;
+! lua_settop(L, 2);
+! luaV_totypval(L, 2, &v);
+! copy_tv(&v, &li->li_tv);
+! list_append(l, li);
+! }
+! lua_settop(L, 1);
+ return 1;
+ }
+
+ static int
++ luaV_list_insert (lua_State *L)
++ {
++ luaV_List *lis = luaV_checkudata(L, 1, LUAVIM_LIST);
++ list_T *l = (list_T *) luaV_checkcache(L, (void *) *lis);
++ long pos = luaL_optlong(L, 3, 0);
++ listitem_T *li = NULL;
++ typval_T v;
++ if (l->lv_lock)
++ luaL_error(L, "list is locked");
++ if (pos < l->lv_len)
++ {
++ li = list_find(l, pos);
++ if (li == NULL)
++ luaL_error(L, "invalid position");
++ }
++ lua_settop(L, 2);
++ luaV_totypval(L, 2, &v);
++ list_insert_tv(l, &v, li);
++ lua_settop(L, 1);
++ return 1;
++ }
++
++ static const luaL_Reg luaV_List_mt[] = {
++ {"__tostring", luaV_list_tostring},
++ {"__gc", luaV_list_gc},
++ {"__len", luaV_list_len},
++ {"__call", luaV_list_call},
++ {"__index", luaV_list_index},
++ {"__newindex", luaV_list_newindex},
++ {"add", luaV_list_add},
++ {"insert", luaV_list_insert},
++ {NULL, NULL}
++ };
++
++
++ /* ======= Dict type ======= */
++
++ static luaV_Dict *
++ luaV_newdict (lua_State *L, dict_T *dic)
++ {
++ luaV_Dict *d = (luaV_Dict *) lua_newuserdata(L, sizeof(luaV_Dict));
++ *d = dic;
++ dic->dv_refcount++; /* reference in Lua */
++ luaV_setudata(L, dic); /* cache[dic] = udata */
++ luaV_getfield(L, LUAVIM_DICT);
++ lua_setmetatable(L, -2);
++ return d;
++ }
++
++ luaV_pushtype(dict_T, dict, luaV_Dict)
++ luaV_type_tostring(dict, LUAVIM_DICT)
++
++ static int
++ luaV_dict_gc (lua_State *L)
++ {
++ dict_unref(luaV_unbox(L, luaV_Dict, 1));
++ return 0;
++ }
++
++ static int
++ luaV_dict_len (lua_State *L)
++ {
++ dict_T *d = luaV_unbox(L, luaV_Dict, 1);
++ lua_pushinteger(L, (d == NULL) ? 0 : (int) d->dv_hashtab.ht_used);
++ return 1;
++ }
++
++ static int
++ luaV_dict_iter (lua_State *L)
++ {
++ hashitem_T *hi = (hashitem_T *) lua_touserdata(L, lua_upvalueindex(2));
++ int n = lua_tointeger(L, lua_upvalueindex(3));
++ dictitem_T *di;
++ if (n <= 0) return 0;
++ while (HASHITEM_EMPTY(hi)) hi++;
++ di = dict_lookup(hi);
++ lua_pushstring(L, (char *) hi->hi_key);
++ luaV_pushtypval(L, &di->di_tv);
++ lua_pushlightuserdata(L, (void *) (hi + 1));
++ lua_replace(L, lua_upvalueindex(2));
++ lua_pushinteger(L, n - 1);
++ lua_replace(L, lua_upvalueindex(3));
++ return 2;
++ }
++
++ static int
++ luaV_dict_call (lua_State *L)
++ {
++ dict_T *d = luaV_unbox(L, luaV_Dict, 1);
++ hashtab_T *ht = &d->dv_hashtab;
++ lua_pushvalue(L, lua_upvalueindex(1)); /* pass cache table along */
++ lua_pushlightuserdata(L, (void *) ht->ht_array);
++ lua_pushinteger(L, ht->ht_used); /* # remaining items */
++ lua_pushcclosure(L, luaV_dict_iter, 3);
++ return 1;
++ }
++
++ static int
++ luaV_dict_index (lua_State *L)
++ {
++ dict_T *d = luaV_unbox(L, luaV_Dict, 1);
++ char_u *key = (char_u *) luaL_checkstring(L, 2);
++ dictitem_T *di = dict_find(d, key, -1);
++ if (di == NULL)
++ lua_pushnil(L);
++ else
++ luaV_pushtypval(L, &di->di_tv);
++ return 1;
++ }
++
++ static int
++ luaV_dict_newindex (lua_State *L)
++ {
++ dict_T *d = luaV_unbox(L, luaV_Dict, 1);
++ char_u *key = (char_u *) luaL_checkstring(L, 2);
++ dictitem_T *di;
++ if (d->dv_lock)
++ luaL_error(L, "dict is locked");
++ di = dict_find(d, key, -1);
++ if (di == NULL) /* non-existing key? */
++ {
++ if (lua_isnil(L, 3)) return 0;
++ di = dictitem_alloc(key);
++ if (di == NULL) return 0;
++ if (dict_add(d, di) == FAIL)
++ {
++ vim_free(di);
++ return 0;
++ }
++ }
++ else
++ clear_tv(&di->di_tv);
++ if (lua_isnil(L, 3)) /* remove? */
++ {
++ hashitem_T *hi = hash_find(&d->dv_hashtab, di->di_key);
++ hash_remove(&d->dv_hashtab, hi);
++ dictitem_free(di);
++ }
++ else {
++ typval_T v;
++ luaV_totypval(L, 3, &v);
++ copy_tv(&v, &di->di_tv);
++ }
++ return 0;
++ }
++
++ static const luaL_Reg luaV_Dict_mt[] = {
++ {"__tostring", luaV_dict_tostring},
++ {"__gc", luaV_dict_gc},
++ {"__len", luaV_dict_len},
++ {"__call", luaV_dict_call},
++ {"__index", luaV_dict_index},
++ {"__newindex", luaV_dict_newindex},
++ {NULL, NULL}
++ };
++
++
++ /* ======= Buffer type ======= */
++
++ luaV_newtype(buf_T, buffer, luaV_Buffer, LUAVIM_BUFFER)
++ luaV_pushtype(buf_T, buffer, luaV_Buffer)
++ luaV_type_tostring(buffer, LUAVIM_BUFFER)
++
++ static int
+ luaV_buffer_len(lua_State *L)
+ {
+! buf_T *b = (buf_T *) luaV_checkvalid(L, luaV_Buffer, 1);
+! lua_pushinteger(L, b->b_ml.ml_line_count);
+ return 1;
+ }
+
+ static int
+ luaV_buffer_call(lua_State *L)
+ {
+! buf_T *b = (buf_T *) luaV_checkvalid(L, luaV_Buffer, 1);
+ lua_settop(L, 1);
+! set_curbuf(b, DOBUF_SPLIT);
+ return 1;
+ }
+
+ static int
+ luaV_buffer_index(lua_State *L)
+ {
+! buf_T *b = (buf_T *) luaV_checkvalid(L, luaV_Buffer, 1);
+ linenr_T n = (linenr_T) lua_tointeger(L, 2);
+! if (n > 0 && n <= b->b_ml.ml_line_count)
+! luaV_pushline(L, b, n);
+ else if (lua_isstring(L, 2))
+ {
+ const char *s = lua_tostring(L, 2);
+ if (strncmp(s, "name", 4) == 0)
+! lua_pushstring(L, (char *) b->b_sfname);
+ else if (strncmp(s, "fname", 5) == 0)
+! lua_pushstring(L, (char *) b->b_ffname);
+ else if (strncmp(s, "number", 6) == 0)
+! lua_pushinteger(L, b->b_fnum);
+ /* methods */
+ else if (strncmp(s, "insert", 6) == 0
+ || strncmp(s, "next", 4) == 0
+***************
+*** 584,600 ****
+ static int
+ luaV_buffer_newindex(lua_State *L)
+ {
+! luaV_Buffer *b = (luaV_Buffer *) lua_touserdata(L, 1);
+ linenr_T n = (linenr_T) luaL_checkinteger(L, 2);
+ #ifdef HAVE_SANDBOX
+ luaV_checksandbox(L);
+ #endif
+! if (n < 1 || n > (*b)->b_ml.ml_line_count)
+ luaL_error(L, "invalid line number");
+ if (lua_isnil(L, 3)) /* delete line */
+ {
+ buf_T *buf = curbuf;
+! curbuf = *b;
+ if (u_savedel(n, 1L) == FAIL)
+ {
+ curbuf = buf;
+--- 1122,1138 ----
+ static int
+ luaV_buffer_newindex(lua_State *L)
+ {
+! buf_T *b = (buf_T *) luaV_checkvalid(L, luaV_Buffer, 1);
+ linenr_T n = (linenr_T) luaL_checkinteger(L, 2);
+ #ifdef HAVE_SANDBOX
+ luaV_checksandbox(L);
+ #endif
+! if (n < 1 || n > b->b_ml.ml_line_count)
+ luaL_error(L, "invalid line number");
+ if (lua_isnil(L, 3)) /* delete line */
+ {
+ buf_T *buf = curbuf;
+! curbuf = b;
+ if (u_savedel(n, 1L) == FAIL)
+ {
+ curbuf = buf;
+***************
+*** 607,613 ****
+ }
+ else {
+ deleted_lines_mark(n, 1L);
+! if (*b == curwin->w_buffer) /* fix cursor in current window? */
+ {
+ if (curwin->w_cursor.lnum >= n)
+ {
+--- 1145,1151 ----
+ }
+ else {
+ deleted_lines_mark(n, 1L);
+! if (b == curwin->w_buffer) /* fix cursor in current window? */
+ {
+ if (curwin->w_cursor.lnum >= n)
+ {
+***************
+*** 627,633 ****
+ else if (lua_isstring(L, 3)) /* update line */
+ {
+ buf_T *buf = curbuf;
+! curbuf = *b;
+ if (u_savesub(n) == FAIL)
+ {
+ curbuf = buf;
+--- 1165,1171 ----
+ else if (lua_isstring(L, 3)) /* update line */
+ {
+ buf_T *buf = curbuf;
+! curbuf = b;
+ if (u_savesub(n) == FAIL)
+ {
+ curbuf = buf;
+***************
+*** 640,646 ****
+ }
+ else changed_bytes(n, 0);
+ curbuf = buf;
+! if (*b == curwin->w_buffer)
+ check_cursor_col();
+ }
+ else
+--- 1178,1184 ----
+ }
+ else changed_bytes(n, 0);
+ curbuf = buf;
+! if (b == curwin->w_buffer)
+ check_cursor_col();
+ }
+ else
+***************
+*** 651,658 ****
+ static int
+ luaV_buffer_insert(lua_State *L)
+ {
+! luaV_Buffer *b = luaV_checkudata(L, 1, LUAVIM_BUFFER);
+! linenr_T last = (*b)->b_ml.ml_line_count;
+ linenr_T n = (linenr_T) luaL_optinteger(L, 3, last);
+ buf_T *buf;
+ luaL_checktype(L, 2, LUA_TSTRING);
+--- 1189,1197 ----
+ static int
+ luaV_buffer_insert(lua_State *L)
+ {
+! luaV_Buffer *lb = luaV_checkudata(L, 1, LUAVIM_BUFFER);
+! buf_T *b = (buf_T *) luaV_checkcache(L, (void *) *lb);
+! linenr_T last = b->b_ml.ml_line_count;
+ linenr_T n = (linenr_T) luaL_optinteger(L, 3, last);
+ buf_T *buf;
+ luaL_checktype(L, 2, LUA_TSTRING);
+***************
+*** 664,670 ****
+ if (n > last) n = last;
+ /* insert */
+ buf = curbuf;
+! curbuf = *b;
+ if (u_save(n, n + 1) == FAIL)
+ {
+ curbuf = buf;
+--- 1203,1209 ----
+ if (n > last) n = last;
+ /* insert */
+ buf = curbuf;
+! curbuf = b;
+ if (u_save(n, n + 1) == FAIL)
+ {
+ curbuf = buf;
+***************
+*** 686,692 ****
+ luaV_buffer_next(lua_State *L)
+ {
+ luaV_Buffer *b = luaV_checkudata(L, 1, LUAVIM_BUFFER);
+! luaV_pushbuffer(L, (*b)->b_next);
+ return 1;
+ }
+
+--- 1225,1232 ----
+ luaV_buffer_next(lua_State *L)
+ {
+ luaV_Buffer *b = luaV_checkudata(L, 1, LUAVIM_BUFFER);
+! buf_T *buf = (buf_T *) luaV_checkcache(L, (void *) *b);
+! luaV_pushbuffer(L, buf->b_next);
+ return 1;
+ }
+
+***************
+*** 694,700 ****
+ luaV_buffer_previous(lua_State *L)
+ {
+ luaV_Buffer *b = luaV_checkudata(L, 1, LUAVIM_BUFFER);
+! luaV_pushbuffer(L, (*b)->b_prev);
+ return 1;
+ }
+
+--- 1234,1241 ----
+ luaV_buffer_previous(lua_State *L)
+ {
+ luaV_Buffer *b = luaV_checkudata(L, 1, LUAVIM_BUFFER);
+! buf_T *buf = (buf_T *) luaV_checkcache(L, (void *) *b);
+! luaV_pushbuffer(L, buf->b_prev);
+ return 1;
+ }
+
+***************
+*** 702,709 ****
+ luaV_buffer_isvalid(lua_State *L)
+ {
+ luaV_Buffer *b = luaV_checkudata(L, 1, LUAVIM_BUFFER);
+! lua_pushlightuserdata(L, (void *) (*b));
+! lua_rawget(L, LUA_ENVIRONINDEX);
+ lua_pushboolean(L, !lua_isnil(L, -1));
+ return 1;
+ }
+--- 1243,1249 ----
+ luaV_buffer_isvalid(lua_State *L)
+ {
+ luaV_Buffer *b = luaV_checkudata(L, 1, LUAVIM_BUFFER);
+! luaV_getudata(L, *b);
+ lua_pushboolean(L, !lua_isnil(L, -1));
+ return 1;
+ }
+***************
+*** 724,801 ****
+
+ /* ======= Window type ======= */
+
+! static luaV_Window *
+! luaV_newwindow(lua_State *L, win_T *win)
+! {
+! luaV_Window *w = (luaV_Window *) lua_newuserdata(L, sizeof(luaV_Window));
+! *w = win;
+! lua_pushlightuserdata(L, (void *) win);
+! lua_pushvalue(L, -2);
+! lua_rawset(L, LUA_ENVIRONINDEX); /* env[win] = udata */
+! /* to avoid GC, store as key in env */
+! lua_pushvalue(L, -1);
+! lua_pushboolean(L, 1);
+! lua_rawset(L, LUA_ENVIRONINDEX); /* env[udata] = true */
+! /* set metatable */
+! luaV_getfield(L, LUAVIM_WINDOW);
+! lua_setmetatable(L, -2);
+! return w;
+! }
+!
+! static luaV_Window *
+! luaV_pushwindow(lua_State *L, win_T *win)
+! {
+! luaV_Window *w = NULL;
+! if (win == NULL)
+! lua_pushnil(L);
+! else {
+! lua_pushlightuserdata(L, (void *) win);
+! lua_rawget(L, LUA_ENVIRONINDEX);
+! if (lua_isnil(L, -1)) /* not interned? */
+! {
+! lua_pop(L, 1);
+! w = luaV_newwindow(L, win);
+! }
+! else w = (luaV_Window *) lua_touserdata(L, -1);
+! }
+! return w;
+! }
+!
+! /* Window metamethods */
+!
+! static int
+! luaV_window_tostring(lua_State *L)
+! {
+! lua_pushfstring(L, "%s: %p", LUAVIM_WINDOW, lua_touserdata(L, 1));
+! return 1;
+! }
+
+ static int
+ luaV_window_call(lua_State *L)
+ {
+! luaV_Window *w = (luaV_Window *) lua_touserdata(L, 1);
+ lua_settop(L, 1);
+! win_goto(*w);
+ return 1;
+ }
+
+ static int
+ luaV_window_index(lua_State *L)
+ {
+! luaV_Window *w = (luaV_Window *) lua_touserdata(L, 1);
+ const char *s = luaL_checkstring(L, 2);
+ if (strncmp(s, "buffer", 6) == 0)
+! luaV_pushbuffer(L, (*w)->w_buffer);
+ else if (strncmp(s, "line", 4) == 0)
+! lua_pushinteger(L, (*w)->w_cursor.lnum);
+ else if (strncmp(s, "col", 3) == 0)
+! lua_pushinteger(L, (*w)->w_cursor.col + 1);
+ #ifdef FEAT_VERTSPLIT
+ else if (strncmp(s, "width", 5) == 0)
+! lua_pushinteger(L, W_WIDTH((*w)));
+ #endif
+ else if (strncmp(s, "height", 6) == 0)
+! lua_pushinteger(L, (*w)->w_height);
+ /* methods */
+ else if (strncmp(s, "next", 4) == 0
+ || strncmp(s, "previous", 8) == 0
+--- 1264,1299 ----
+
+ /* ======= Window type ======= */
+
+! luaV_newtype(win_T, window, luaV_Window, LUAVIM_WINDOW)
+! luaV_pushtype(win_T, window, luaV_Window)
+! luaV_type_tostring(window, LUAVIM_WINDOW)
+
+ static int
+ luaV_window_call(lua_State *L)
+ {
+! win_T *w = (win_T *) luaV_checkvalid(L, luaV_Window, 1);
+ lua_settop(L, 1);
+! win_goto(w);
+ return 1;
+ }
+
+ static int
+ luaV_window_index(lua_State *L)
+ {
+! win_T *w = (win_T *) luaV_checkvalid(L, luaV_Window, 1);
+ const char *s = luaL_checkstring(L, 2);
+ if (strncmp(s, "buffer", 6) == 0)
+! luaV_pushbuffer(L, w->w_buffer);
+ else if (strncmp(s, "line", 4) == 0)
+! lua_pushinteger(L, w->w_cursor.lnum);
+ else if (strncmp(s, "col", 3) == 0)
+! lua_pushinteger(L, w->w_cursor.col + 1);
+ #ifdef FEAT_VERTSPLIT
+ else if (strncmp(s, "width", 5) == 0)
+! lua_pushinteger(L, W_WIDTH(w));
+ #endif
+ else if (strncmp(s, "height", 6) == 0)
+! lua_pushinteger(L, w->w_height);
+ /* methods */
+ else if (strncmp(s, "next", 4) == 0
+ || strncmp(s, "previous", 8) == 0
+***************
+*** 812,818 ****
+ static int
+ luaV_window_newindex (lua_State *L)
+ {
+! luaV_Window *w = (luaV_Window *) lua_touserdata(L, 1);
+ const char *s = luaL_checkstring(L, 2);
+ int v = luaL_checkinteger(L, 3);
+ if (strncmp(s, "line", 4) == 0)
+--- 1310,1316 ----
+ static int
+ luaV_window_newindex (lua_State *L)
+ {
+! win_T *w = (win_T *) luaV_checkvalid(L, luaV_Window, 1);
+ const char *s = luaL_checkstring(L, 2);
+ int v = luaL_checkinteger(L, 3);
+ if (strncmp(s, "line", 4) == 0)
+***************
+*** 820,828 ****
+ #ifdef HAVE_SANDBOX
+ luaV_checksandbox(L);
+ #endif
+! if (v < 1 || v > (*w)->w_buffer->b_ml.ml_line_count)
+ luaL_error(L, "line out of range");
+! (*w)->w_cursor.lnum = v;
+ update_screen(VALID);
+ }
+ else if (strncmp(s, "col", 3) == 0)
+--- 1318,1326 ----
+ #ifdef HAVE_SANDBOX
+ luaV_checksandbox(L);
+ #endif
+! if (v < 1 || v > w->w_buffer->b_ml.ml_line_count)
+ luaL_error(L, "line out of range");
+! w->w_cursor.lnum = v;
+ update_screen(VALID);
+ }
+ else if (strncmp(s, "col", 3) == 0)
+***************
+*** 830,836 ****
+ #ifdef HAVE_SANDBOX
+ luaV_checksandbox(L);
+ #endif
+! (*w)->w_cursor.col = v - 1;
+ update_screen(VALID);
+ }
+ #ifdef FEAT_VERTSPLIT
+--- 1328,1334 ----
+ #ifdef HAVE_SANDBOX
+ luaV_checksandbox(L);
+ #endif
+! w->w_cursor.col = v - 1;
+ update_screen(VALID);
+ }
+ #ifdef FEAT_VERTSPLIT
+***************
+*** 840,846 ****
+ #ifdef FEAT_GUI
+ need_mouse_correct = TRUE;
+ #endif
+! curwin = *w;
+ win_setwidth(v);
+ curwin = win;
+ }
+--- 1338,1344 ----
+ #ifdef FEAT_GUI
+ need_mouse_correct = TRUE;
+ #endif
+! curwin = w;
+ win_setwidth(v);
+ curwin = win;
+ }
+***************
+*** 851,857 ****
+ #ifdef FEAT_GUI
+ need_mouse_correct = TRUE;
+ #endif
+! curwin = *w;
+ win_setheight(v);
+ curwin = win;
+ }
+--- 1349,1355 ----
+ #ifdef FEAT_GUI
+ need_mouse_correct = TRUE;
+ #endif
+! curwin = w;
+ win_setheight(v);
+ curwin = win;
+ }
+***************
+*** 864,870 ****
+ luaV_window_next(lua_State *L)
+ {
+ luaV_Window *w = luaV_checkudata(L, 1, LUAVIM_WINDOW);
+! luaV_pushwindow(L, (*w)->w_next);
+ return 1;
+ }
+
+--- 1362,1369 ----
+ luaV_window_next(lua_State *L)
+ {
+ luaV_Window *w = luaV_checkudata(L, 1, LUAVIM_WINDOW);
+! win_T *win = (win_T *) luaV_checkcache(L, (void *) *w);
+! luaV_pushwindow(L, win->w_next);
+ return 1;
+ }
+
+***************
+*** 872,878 ****
+ luaV_window_previous(lua_State *L)
+ {
+ luaV_Window *w = luaV_checkudata(L, 1, LUAVIM_WINDOW);
+! luaV_pushwindow(L, (*w)->w_prev);
+ return 1;
+ }
+
+--- 1371,1378 ----
+ luaV_window_previous(lua_State *L)
+ {
+ luaV_Window *w = luaV_checkudata(L, 1, LUAVIM_WINDOW);
+! win_T *win = (win_T *) luaV_checkcache(L, (void *) *w);
+! luaV_pushwindow(L, win->w_prev);
+ return 1;
+ }
+
+***************
+*** 880,887 ****
+ luaV_window_isvalid(lua_State *L)
+ {
+ luaV_Window *w = luaV_checkudata(L, 1, LUAVIM_WINDOW);
+! lua_pushlightuserdata(L, (void *) (*w));
+! lua_rawget(L, LUA_ENVIRONINDEX);
+ lua_pushboolean(L, !lua_isnil(L, -1));
+ return 1;
+ }
+--- 1380,1386 ----
+ luaV_window_isvalid(lua_State *L)
+ {
+ luaV_Window *w = luaV_checkudata(L, 1, LUAVIM_WINDOW);
+! luaV_getudata(L, *w);
+ lua_pushboolean(L, !lua_isnil(L, -1));
+ return 1;
+ }
+***************
+*** 983,988 ****
+--- 1482,1509 ----
+ }
+
+ static int
++ luaV_list(lua_State *L)
++ {
++ list_T *l = list_alloc();
++ if (l == NULL)
++ lua_pushnil(L);
++ else
++ luaV_newlist(L, l);
++ return 1;
++ }
++
++ static int
++ luaV_dict(lua_State *L)
++ {
++ dict_T *d = dict_alloc();
++ if (d == NULL)
++ lua_pushnil(L);
++ else
++ luaV_newdict(L, d);
++ return 1;
++ }
++
++ static int
+ luaV_buffer(lua_State *L)
+ {
+ buf_T *buf;
+***************
+*** 1008,1022 ****
+ break;
+ }
+ }
+- if (buf == NULL) /* not found? */
+- lua_pushnil(L);
+- else
+- luaV_pushbuffer(L, buf);
+ }
+! else {
+ buf = (lua_toboolean(L, 1)) ? firstbuf : curbuf; /* first buffer? */
+! luaV_pushbuffer(L, buf);
+! }
+ return 1;
+ }
+
+--- 1529,1538 ----
+ break;
+ }
+ }
+ }
+! else
+ buf = (lua_toboolean(L, 1)) ? firstbuf : curbuf; /* first buffer? */
+! luaV_pushbuffer(L, buf);
+ return 1;
+ }
+
+***************
+*** 1029,1043 ****
+ int n = lua_tointeger(L, 1);
+ for (win = firstwin; win != NULL; win = win->w_next, n--)
+ if (n == 1) break;
+- if (win == NULL) /* not found? */
+- lua_pushnil(L);
+- else
+- luaV_pushwindow(L, win);
+ }
+! else {
+ win = (lua_toboolean(L, 1)) ? firstwin : curwin; /* first window? */
+! luaV_pushwindow(L, win);
+! }
+ return 1;
+ }
+
+--- 1545,1554 ----
+ int n = lua_tointeger(L, 1);
+ for (win = firstwin; win != NULL; win = win->w_next, n--)
+ if (n == 1) break;
+ }
+! else
+ win = (lua_toboolean(L, 1)) ? firstwin : curwin; /* first window? */
+! luaV_pushwindow(L, win);
+ return 1;
+ }
+
+***************
+*** 1054,1086 ****
+ }
+
+ static int
+! luaV_isbuffer(lua_State *L)
+! {
+! lua_pushboolean(L, luaV_toudata(L, 1, LUAVIM_BUFFER) != NULL);
+! return 1;
+! }
+!
+! static int
+! luaV_iswindow(lua_State *L)
+ {
+! lua_pushboolean(L, luaV_toudata(L, 1, LUAVIM_WINDOW) != NULL);
+! return 1;
+! }
+!
+! /* for freeing buffer and window objects; lightuserdata as arg */
+! static int
+! luaV_free(lua_State *L)
+! {
+! lua_pushvalue(L, 1); /* lightudata */
+! lua_rawget(L, LUA_ENVIRONINDEX);
+! if (!lua_isnil(L, -1))
+ {
+! lua_pushnil(L);
+! lua_rawset(L, LUA_ENVIRONINDEX); /* env[udata] = nil */
+! lua_pushnil(L);
+! lua_rawset(L, LUA_ENVIRONINDEX); /* env[lightudata] = nil */
+ }
+! return 0;
+ }
+
+ static const luaL_Reg luaV_module[] = {
+--- 1565,1606 ----
+ }
+
+ static int
+! luaV_type(lua_State *L)
+ {
+! luaL_checkany(L, 1);
+! if (lua_type(L, 1) == LUA_TUSERDATA) /* check vim udata? */
+ {
+! lua_settop(L, 1);
+! if (lua_getmetatable(L, 1))
+! {
+! luaV_getfield(L, LUAVIM_LIST);
+! if (lua_rawequal(L, -1, 2))
+! {
+! lua_pushstring(L, "list");
+! return 1;
+! }
+! luaV_getfield(L, LUAVIM_DICT);
+! if (lua_rawequal(L, -1, 2))
+! {
+! lua_pushstring(L, "dict");
+! return 1;
+! }
+! luaV_getfield(L, LUAVIM_BUFFER);
+! if (lua_rawequal(L, -1, 2))
+! {
+! lua_pushstring(L, "buffer");
+! return 1;
+! }
+! luaV_getfield(L, LUAVIM_WINDOW);
+! if (lua_rawequal(L, -1, 2))
+! {
+! lua_pushstring(L, "window");
+! return 1;
+! }
+! }
+ }
+! lua_pushstring(L, luaL_typename(L, 1)); /* fallback */
+! return 1;
+ }
+
+ static const luaL_Reg luaV_module[] = {
+***************
+*** 1088,1111 ****
+ {"eval", luaV_eval},
+ {"beep", luaV_beep},
+ {"line", luaV_line},
+ {"buffer", luaV_buffer},
+ {"window", luaV_window},
+ {"open", luaV_open},
+! {"isbuffer", luaV_isbuffer},
+! {"iswindow", luaV_iswindow},
+ {NULL, NULL}
+ };
+
+ static int
+ luaopen_vim(lua_State *L)
+ {
+! /* set environment */
+ lua_newtable(L);
+ lua_newtable(L);
+! lua_pushliteral(L, "v");
+ lua_setfield(L, -2, "__mode");
+! lua_setmetatable(L, -2);
+! lua_replace(L, LUA_ENVIRONINDEX);
+ /* print */
+ lua_pushcfunction(L, luaV_print);
+ lua_setglobal(L, "print");
+--- 1608,1695 ----
+ {"eval", luaV_eval},
+ {"beep", luaV_beep},
+ {"line", luaV_line},
++ {"list", luaV_list},
++ {"dict", luaV_dict},
+ {"buffer", luaV_buffer},
+ {"window", luaV_window},
+ {"open", luaV_open},
+! {"type", luaV_type},
+ {NULL, NULL}
+ };
+
++ /* for freeing list, dict, buffer and window objects; lightuserdata as arg */
++ static int
++ luaV_free(lua_State *L)
++ {
++ lua_pushnil(L);
++ luaV_setudata(L, lua_touserdata(L, 1));
++ return 0;
++ }
++
++ static int
++ luaV_luaeval (lua_State *L)
++ {
++ luaL_Buffer b;
++ size_t l;
++ const char *str = lua_tolstring(L, 1, &l);
++ typval_T *arg = (typval_T *) lua_touserdata(L, 2);
++ typval_T *rettv = (typval_T *) lua_touserdata(L, 3);
++ luaL_buffinit(L, &b);
++ luaL_addlstring(&b, LUAVIM_EVALHEADER, sizeof(LUAVIM_EVALHEADER) - 1);
++ luaL_addlstring(&b, str, l);
++ luaL_pushresult(&b);
++ str = lua_tolstring(L, -1, &l);
++ if (luaL_loadbuffer(L, str, l, LUAVIM_EVALNAME)) /* compile error? */
++ {
++ luaV_emsg(L);
++ return 0;
++ }
++ luaV_pushtypval(L, arg);
++ if (lua_pcall(L, 1, 1, 0)) /* running error? */
++ {
++ luaV_emsg(L);
++ return 0;
++ }
++ luaV_totypval(L, -1, rettv);
++ return 0;
++ }
++
++ static int
++ luaV_setref (lua_State *L)
++ {
++ int copyID = lua_tointeger(L, 1);
++ typval_T tv;
++ luaV_getfield(L, LUAVIM_LIST);
++ luaV_getfield(L, LUAVIM_DICT);
++ lua_pushnil(L);
++ while (lua_next(L, lua_upvalueindex(1)) != 0) /* traverse cache table */
++ {
++ lua_getmetatable(L, -1);
++ if (lua_rawequal(L, -1, 2)) /* list? */
++ {
++ tv.v_type = VAR_LIST;
++ tv.vval.v_list = (list_T *) lua_touserdata(L, 4); /* key */
++ }
++ else if (lua_rawequal(L, -1, 3)) /* dict? */
++ {
++ tv.v_type = VAR_DICT;
++ tv.vval.v_dict = (dict_T *) lua_touserdata(L, 4); /* key */
++ }
++ lua_pop(L, 2); /* metatable and value */
++ set_ref_in_tv(&tv, copyID);
++ }
++ return 0;
++ }
++
+ static int
+ luaopen_vim(lua_State *L)
+ {
+! /* set cache table */
+ lua_newtable(L);
+ lua_newtable(L);
+! lua_pushstring(L, "v");
+ lua_setfield(L, -2, "__mode");
+! lua_setmetatable(L, -2); /* cache is weak-valued */
+ /* print */
+ lua_pushcfunction(L, luaV_print);
+ lua_setglobal(L, "print");
+***************
+*** 1116,1129 ****
+ lua_pop(L, 1);
+ /* free */
+ lua_pushlightuserdata(L, (void *) LUAVIM_FREE);
+! lua_pushcfunction(L, luaV_free);
+ lua_rawset(L, LUA_REGISTRYINDEX);
+ /* register */
+ luaV_newmetatable(L, LUAVIM_BUFFER);
+! luaL_register(L, NULL, luaV_Buffer_mt);
+ luaV_newmetatable(L, LUAVIM_WINDOW);
+! luaL_register(L, NULL, luaV_Window_mt);
+! luaL_register(L, LUAVIM_NAME, luaV_module);
+ return 0;
+ }
+
+--- 1700,1735 ----
+ lua_pop(L, 1);
+ /* free */
+ lua_pushlightuserdata(L, (void *) LUAVIM_FREE);
+! lua_pushvalue(L, 1); /* cache table */
+! lua_pushcclosure(L, luaV_free, 1);
+! lua_rawset(L, LUA_REGISTRYINDEX);
+! /* luaeval */
+! lua_pushlightuserdata(L, (void *) LUAVIM_LUAEVAL);
+! lua_pushvalue(L, 1); /* cache table */
+! lua_pushcclosure(L, luaV_luaeval, 1);
+! lua_rawset(L, LUA_REGISTRYINDEX);
+! /* setref */
+! lua_pushlightuserdata(L, (void *) LUAVIM_SETREF);
+! lua_pushvalue(L, 1); /* cache table */
+! lua_pushcclosure(L, luaV_setref, 1);
+ lua_rawset(L, LUA_REGISTRYINDEX);
+ /* register */
++ luaV_newmetatable(L, LUAVIM_LIST);
++ lua_pushvalue(L, 1);
++ luaV_openlib(L, luaV_List_mt, 1);
++ luaV_newmetatable(L, LUAVIM_DICT);
++ lua_pushvalue(L, 1);
++ luaV_openlib(L, luaV_Dict_mt, 1);
+ luaV_newmetatable(L, LUAVIM_BUFFER);
+! lua_pushvalue(L, 1); /* cache table */
+! luaV_openlib(L, luaV_Buffer_mt, 1);
+ luaV_newmetatable(L, LUAVIM_WINDOW);
+! lua_pushvalue(L, 1); /* cache table */
+! luaV_openlib(L, luaV_Window_mt, 1);
+! lua_newtable(L); /* vim table */
+! lua_pushvalue(L, 1); /* cache table */
+! luaV_openlib(L, luaV_module, 1);
+! lua_setglobal(L, LUAVIM_NAME);
+ return 0;
+ }
+
+***************
+*** 1154,1160 ****
+ static lua_State *L = NULL;
+
+ static int
+! lua_is_open(void)
+ {
+ return L != NULL;
+ }
+--- 1760,1766 ----
+ static lua_State *L = NULL;
+
+ static int
+! lua_isopen(void)
+ {
+ return L != NULL;
+ }
+***************
+*** 1162,1168 ****
+ static int
+ lua_init(void)
+ {
+! if (L == NULL)
+ {
+ #ifdef DYNAMIC_LUA
+ if (!lua_enabled(TRUE))
+--- 1768,1774 ----
+ static int
+ lua_init(void)
+ {
+! if (!lua_isopen())
+ {
+ #ifdef DYNAMIC_LUA
+ if (!lua_enabled(TRUE))
+***************
+*** 1179,1185 ****
+ void
+ lua_end(void)
+ {
+! if (L != NULL)
+ {
+ lua_close(L);
+ L = NULL;
+--- 1785,1791 ----
+ void
+ lua_end(void)
+ {
+! if (lua_isopen())
+ {
+ lua_close(L);
+ L = NULL;
+***************
+*** 1273,1295 ****
+ }
+ }
+
+! /* buffer */
+ void
+! lua_buffer_free(buf_T *buf)
+ {
+! if (!lua_is_open()) return;
+! luaV_getfield(L, LUAVIM_FREE);
+! lua_pushlightuserdata(L, (void *) buf);
+! lua_call(L, 1, 0);
+ }
+
+- /* window */
+ void
+! lua_window_free(win_T *win)
+ {
+! if (!lua_is_open()) return;
+! luaV_getfield(L, LUAVIM_FREE);
+! lua_pushlightuserdata(L, (void *) win);
+ lua_call(L, 1, 0);
+ }
+
+--- 1879,1914 ----
+ }
+ }
+
+! #define luaV_freetype(typ,tname) \
+! void \
+! lua_##tname##_free(typ *o) \
+! { \
+! if (!lua_isopen()) return; \
+! luaV_getfield(L, LUAVIM_FREE); \
+! lua_pushlightuserdata(L, (void *) o); \
+! lua_call(L, 1, 0); \
+! }
+!
+! luaV_freetype(buf_T, buffer)
+! luaV_freetype(win_T, window)
+!
+ void
+! do_luaeval (char_u *str, typval_T *arg, typval_T *rettv)
+ {
+! lua_init();
+! luaV_getfield(L, LUAVIM_LUAEVAL);
+! lua_pushstring(L, (char *) str);
+! lua_pushlightuserdata(L, (void *) arg);
+! lua_pushlightuserdata(L, (void *) rettv);
+! lua_call(L, 3, 0);
+ }
+
+ void
+! set_ref_in_lua (int copyID)
+ {
+! if (!lua_isopen()) return;
+! luaV_getfield(L, LUAVIM_SETREF);
+! lua_pushinteger(L, copyID);
+ lua_call(L, 1, 0);
+ }
+
+*** ../vim-7.3.489/src/proto/if_lua.pro 2010-08-15 21:57:28.000000000 +0200
+--- src/proto/if_lua.pro 2012-04-05 16:41:35.000000000 +0200
+***************
+*** 6,9 ****
+--- 6,11 ----
+ void ex_luafile __ARGS((exarg_T *eap));
+ void lua_buffer_free __ARGS((buf_T *buf));
+ void lua_window_free __ARGS((win_T *win));
++ void do_luaeval __ARGS((char_u *str, typval_T *arg, typval_T *rettv));
++ void set_ref_in_lua __ARGS((int copyID));
+ /* vim: set ft=c : */
+*** ../vim-7.3.489/src/version.c 2012-04-05 16:07:01.000000000 +0200
+--- src/version.c 2012-04-05 16:52:08.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 490,
+ /**/
+
+--
+Even got a Datapoint 3600(?) with a DD50 connector instead of the
+usual DB25... what a nightmare trying to figure out the pinout
+for *that* with no spex...
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.491 b/source/ap/vim/patches/7.3.491
new file mode 100644
index 000000000..b675722e1
--- /dev/null
+++ b/source/ap/vim/patches/7.3.491
@@ -0,0 +1,235 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.491
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.491
+Problem: No tests for Lua.
+Solution: Add some simple tests for Lua. (Luis Carvalho)
+Files: src/testdir/test1.in, src/testdir/test85.in, src/testdir/test85.ok
+ src/testdir/Make_amiga.mak, src/testdir/Make_dos.mak,
+ src/testdir/Make_ming.mak, src/testdir/Make_os2.mak,
+ src/testdir/Make_vms.mms, src/testdir/Makefile
+
+
+*** ../vim-7.3.490/src/testdir/test1.in 2010-08-15 21:57:29.000000000 +0200
+--- src/testdir/test1.in 2012-04-05 16:37:37.000000000 +0200
+***************
+*** 15,20 ****
+--- 15,21 ----
+ be set like small.vim above. mbyte.vim is sourced by tests that require the
+ +multi_byte feature.
+ Similar logic is applied to the +mzscheme feature, using mzscheme.vim.
++ Similar logic is applied to the +lua feature, using lua.vim.
+
+ STARTTEST
+ :" Write a single line to test.out to check if testing works at all.
+***************
+*** 28,37 ****
+--- 29,45 ----
+ qa!
+ :w! mbyte.vim
+ :w! mzscheme.vim
++ :w! lua.vim
++ :"
+ :" If +multi_byte feature supported, make mbyte.vim empty.
+ :if has("multi_byte") | sp another | w! mbyte.vim | q | endif
++ :"
+ :" If +mzscheme feature supported, make mzscheme.vim empty.
+ :if has("mzscheme") | sp another | w! mzscheme.vim | q | endif
++ :"
++ :" If +lua feature supported, make lua.vim empty.
++ :if has("lua") | sp another | w! lua.vim | q | endif
++ :"
+ :" If +eval feature supported quit here, leaving tiny.vim and small.vim empty.
+ :" Otherwise write small.vim to skip the test.
+ :if 1 | q! | endif
+*** ../vim-7.3.490/src/testdir/test85.in 2012-04-05 16:56:12.000000000 +0200
+--- src/testdir/test85.in 2012-04-05 16:44:00.000000000 +0200
+***************
+*** 0 ****
+--- 1,42 ----
++ Test for Lua interface and luaeval() function
++
++ STARTTEST
++ :so small.vim
++ :so lua.vim
++ :set nocompatible viminfo+=nviminfo
++ :lua l = vim.list():add"item0":add"dictionary with list OK":add"item2"
++ :lua h = vim.dict(); h.list = l
++ :call garbagecollect()
++ /^1
++ :" change buffer contents
++ :lua curbuf = vim.buffer()
++ :lua curline = vim.eval"line('.')"
++ :lua curbuf[curline] = "1 changed line 1"
++ :" scalar test
++ :let tmp_string = luaeval('"string"')
++ :let tmp_1000 = luaeval('1000')
++ :if printf("%s%.0f", tmp_string, tmp_1000) == "string1000"
++ :let scalar_res = "OK"
++ :else
++ :let scalar_res = "FAILED"
++ :endif
++ :call append(search("^1"), "scalar test " . scalar_res)
++ :" dictionary containing a list
++ :let tmp = luaeval("h").list[1]
++ :/^2/put =tmp
++ :" circular list (at the same time test lists containing lists)
++ :lua l[2] = l
++ :let l2 = luaeval("h").list
++ :if l2[2] == l2
++ :let res = "OK"
++ :else
++ :let res = "FAILED"
++ :endif
++ :call setline(search("^3"), "circular test " . res)
++ :?^1?,$w! test.out
++ :qa!
++ ENDTEST
++
++ 1 line 1
++ 2 line 2
++ 3 line 3
+*** ../vim-7.3.490/src/testdir/test85.ok 2012-04-05 16:56:12.000000000 +0200
+--- src/testdir/test85.ok 2012-04-05 16:18:56.000000000 +0200
+***************
+*** 0 ****
+--- 1,5 ----
++ 1 changed line 1
++ scalar test OK
++ 2 line 2
++ dictionary with list OK
++ circular test OK
+*** ../vim-7.3.490/src/testdir/Make_amiga.mak 2012-03-28 19:58:34.000000000 +0200
+--- src/testdir/Make_amiga.mak 2012-04-05 16:21:55.000000000 +0200
+***************
+*** 13,18 ****
+--- 13,19 ----
+ # test25 uses symbolic link
+ # test27 can't edit file with "*"
+ # test52 only for Win32
++ # test85 no Lua interface
+
+ SCRIPTS = test1.out test3.out test4.out test5.out test6.out \
+ test7.out test8.out test9.out \
+*** ../vim-7.3.490/src/testdir/Make_dos.mak 2012-03-28 19:58:34.000000000 +0200
+--- src/testdir/Make_dos.mak 2012-04-05 16:22:16.000000000 +0200
+***************
+*** 30,36 ****
+ test68.out test69.out test71.out test72.out test73.out \
+ test74.out test75.out test76.out test77.out test78.out \
+ test79.out test80.out test81.out test82.out test83.out \
+! test84.out
+
+ SCRIPTS32 = test50.out test70.out
+
+--- 30,36 ----
+ test68.out test69.out test71.out test72.out test73.out \
+ test74.out test75.out test76.out test77.out test78.out \
+ test79.out test80.out test81.out test82.out test83.out \
+! test84.out test85.out
+
+ SCRIPTS32 = test50.out test70.out
+
+*** ../vim-7.3.490/src/testdir/Make_ming.mak 2012-03-28 19:58:34.000000000 +0200
+--- src/testdir/Make_ming.mak 2012-04-05 16:22:25.000000000 +0200
+***************
+*** 50,56 ****
+ test68.out test69.out test71.out test72.out test73.out \
+ test74.out test75.out test76.out test77.out test78.out \
+ test79.out test80.out test81.out test82.out test83.out \
+! test84.out
+
+ SCRIPTS32 = test50.out test70.out
+
+--- 50,56 ----
+ test68.out test69.out test71.out test72.out test73.out \
+ test74.out test75.out test76.out test77.out test78.out \
+ test79.out test80.out test81.out test82.out test83.out \
+! test84.out test85.out
+
+ SCRIPTS32 = test50.out test70.out
+
+*** ../vim-7.3.490/src/testdir/Make_os2.mak 2012-03-28 19:58:34.000000000 +0200
+--- src/testdir/Make_os2.mak 2012-04-05 16:22:38.000000000 +0200
+***************
+*** 13,18 ****
+--- 13,19 ----
+ # test25 uses symbolic link
+ # test27 can't edit file with "*" in file name
+ # test52 only for Win32
++ # test85 no Lua interface
+
+ SCRIPTS = test1.out test3.out test4.out test5.out test6.out \
+ test7.out test8.out test9.out \
+*** ../vim-7.3.490/src/testdir/Make_vms.mms 2012-03-28 19:58:34.000000000 +0200
+--- src/testdir/Make_vms.mms 2012-04-05 16:23:08.000000000 +0200
+***************
+*** 4,10 ****
+ # Authors: Zoltan Arpadffy, <arpadffy@polarhome.com>
+ # Sandor Kopanyi, <sandor.kopanyi@mailbox.hu>
+ #
+! # Last change: 2012 Mar 28
+ #
+ # This has been tested on VMS 6.2 to 8.3 on DEC Alpha, VAX and IA64.
+ # Edit the lines in the Configuration section below to select.
+--- 4,10 ----
+ # Authors: Zoltan Arpadffy, <arpadffy@polarhome.com>
+ # Sandor Kopanyi, <sandor.kopanyi@mailbox.hu>
+ #
+! # Last change: 2012 Apr 05
+ #
+ # This has been tested on VMS 6.2 to 8.3 on DEC Alpha, VAX and IA64.
+ # Edit the lines in the Configuration section below to select.
+***************
+*** 89,94 ****
+--- 89,95 ----
+ # with too many dots).
+ #
+ # Test 72: unknown reason
++ # Test 85: no Lua interface
+
+ .IFDEF WANT_GUI
+ SCRIPT_GUI = test16.out
+*** ../vim-7.3.490/src/testdir/Makefile 2012-03-28 19:58:34.000000000 +0200
+--- src/testdir/Makefile 2012-04-05 16:21:13.000000000 +0200
+***************
+*** 27,33 ****
+ test69.out test70.out test71.out test72.out test73.out \
+ test74.out test75.out test76.out test77.out test78.out \
+ test79.out test80.out test81.out test82.out test83.out \
+! test84.out
+
+ SCRIPTS_GUI = test16.out
+
+--- 27,33 ----
+ test69.out test70.out test71.out test72.out test73.out \
+ test74.out test75.out test76.out test77.out test78.out \
+ test79.out test80.out test81.out test82.out test83.out \
+! test84.out test85.out
+
+ SCRIPTS_GUI = test16.out
+
+*** ../vim-7.3.490/src/version.c 2012-04-05 16:53:56.000000000 +0200
+--- src/version.c 2012-04-05 16:55:27.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 491,
+ /**/
+
+--
+You had connectors? Eeee, when I were a lad we 'ad to carry the
+bits between the computer and the terminal with a spoon...
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.492 b/source/ap/vim/patches/7.3.492
new file mode 100644
index 000000000..b32b6f68e
--- /dev/null
+++ b/source/ap/vim/patches/7.3.492
@@ -0,0 +1,718 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.492
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.492
+Problem: Can't indent conditions separately from function arguments.
+Solution: Add the 'k' flag in 'cino. (Lech Lorens)
+Files: runtime/doc/indent.txt, src/misc1.c, src/testdir/test3.in,
+ src/testdir/test3.ok
+
+
+*** ../vim-7.3.491/runtime/doc/indent.txt 2011-06-26 03:16:58.000000000 +0200
+--- runtime/doc/indent.txt 2012-04-05 17:12:14.000000000 +0200
+***************
+*** 459,464 ****
+--- 460,481 ----
+ a_short_line(argument, a_short_line(argument,
+ argument); argument);
+ <
++ *cino-k*
++ kN When in unclosed parentheses which follow "if", "for" or
++ "while" and N is non-zero, overrides the behaviour defined by
++ "(N": causes the indent to be N characters relative to the outer
++ context (i.e. the line where "if", "for" or "while" is). Has
++ no effect on deeper levels of nesting. Affects flags like "wN"
++ only for the "if", "for" and "while" conditions. If 0, defaults
++ to behaviour defined by the "(N" flag. (default: 0).
++
++ cino=(0 cino=(0,ks >
++ if (condition1 if (condition1
++ && condition2) && condition2)
++ action(); action();
++ function(argument1 function(argument1
++ && argument2); && argument2);
++ <
+ *cino-m*
+ mN When N is non-zero, line up a line starting with a closing
+ parentheses with the first character of the line with the
+***************
+*** 527,540 ****
+
+ *cino-#*
+ #N When N is non-zero recognize shell/Perl comments, starting with
+! '#'. Default N is zero: don't recognizes '#' comments. Note
+ that lines starting with # will still be seen as preprocessor
+ lines.
+
+
+ The defaults, spelled out in full, are:
+ cinoptions=>s,e0,n0,f0,{0,}0,^0,L-1,:s,=s,l0,b0,gs,hs,N0,ps,ts,is,+s,
+! c3,C0,/0,(2s,us,U0,w0,W0,m0,j0,J0,)20,*70,#0
+
+ Vim puts a line in column 1 if:
+ - It starts with '#' (preprocessor directives), if 'cinkeys' contains '#'.
+--- 546,559 ----
+
+ *cino-#*
+ #N When N is non-zero recognize shell/Perl comments, starting with
+! '#'. Default N is zero: don't recognize '#' comments. Note
+ that lines starting with # will still be seen as preprocessor
+ lines.
+
+
+ The defaults, spelled out in full, are:
+ cinoptions=>s,e0,n0,f0,{0,}0,^0,L-1,:s,=s,l0,b0,gs,hs,N0,ps,ts,is,+s,
+! c3,C0,/0,(2s,us,U0,w0,W0,k0,m0,j0,J0,)20,*70,#0
+
+ Vim puts a line in column 1 if:
+ - It starts with '#' (preprocessor directives), if 'cinkeys' contains '#'.
+*** ../vim-7.3.491/src/misc1.c 2012-02-29 13:49:03.000000000 +0100
+--- src/misc1.c 2012-04-05 17:12:14.000000000 +0200
+***************
+*** 5771,5776 ****
+--- 5771,5822 ----
+ }
+
+ /*
++ * Check whether in "p" there is an "if", "for" or "while" before offset.
++ * Return 0 if there is none.
++ * Otherwise return !0 and update "*poffset" to point to the place where the
++ * string was found.
++ */
++ static int
++ cin_is_if_for_while_before_offset(line, offset, poffset)
++ char_u *line;
++ size_t offset;
++ int *poffset;
++ {
++
++ if (offset-- < 2)
++ return 0;
++ while (offset > 2 && vim_iswhite(line[offset]))
++ --offset;
++
++ offset -= 1;
++ if (!STRNCMP(line + offset, "if", 2))
++ goto probablyFound;
++
++ if (offset >= 1)
++ {
++ offset -= 1;
++ if (!STRNCMP(line + offset, "for", 3))
++ goto probablyFound;
++
++ if (offset >= 2)
++ {
++ offset -= 2;
++ if (!STRNCMP(line + offset, "while", 5))
++ goto probablyFound;
++ }
++ }
++
++ return 0;
++ probablyFound:
++ if (!offset || !vim_isIDc(line[offset - 1]))
++ {
++ *poffset = offset;
++ return 1;
++ }
++ return 0;
++ }
++
++ /*
+ * Return TRUE if we are at the end of a do-while.
+ * do
+ * nothing;
+***************
+*** 6124,6130 ****
+
+ /*
+ * Find the matching '(', failing if it is in a comment.
+! * Return NULL of no match found.
+ */
+ static pos_T *
+ find_match_paren(ind_maxparen, ind_maxcomment) /* XXX */
+--- 6170,6176 ----
+
+ /*
+ * Find the matching '(', failing if it is in a comment.
+! * Return NULL if no match found.
+ */
+ static pos_T *
+ find_match_paren(ind_maxparen, ind_maxcomment) /* XXX */
+***************
+*** 6393,6398 ****
+--- 6439,6450 ----
+ */
+ int ind_cpp_namespace = 0;
+
++ /*
++ * handle continuation lines containing conditions of if(), for() and
++ * while()
++ */
++ int ind_if_for_while = 0;
++
+ pos_T cur_curpos;
+ int amount;
+ int scope_amount;
+***************
+*** 6437,6442 ****
+--- 6489,6495 ----
+ int cont_amount = 0; /* amount for continuation line */
+ int original_line_islabel;
+ int added_to_amount = 0;
++ int is_if_for_while = 0;
+
+ for (options = curbuf->b_p_cino; *options; )
+ {
+***************
+*** 6509,6514 ****
+--- 6562,6568 ----
+ case 'l': ind_keep_case_label = n; break;
+ case '#': ind_hash_comment = n; break;
+ case 'N': ind_cpp_namespace = n; break;
++ case 'k': ind_if_for_while = n; break;
+ }
+ if (*options == ',')
+ ++options;
+***************
+*** 6812,6817 ****
+--- 6866,6900 ----
+ if (amount == -1)
+ {
+ int ignore_paren_col = 0;
++ int is_if_for_while = 0;
++
++ if (ind_if_for_while)
++ {
++ /* Look for the outermost opening parenthesis on this line
++ * and check whether it belongs to an "if", "for" or "while". */
++
++ pos_T cursor_save = curwin->w_cursor;
++ pos_T outermost;
++ char_u *line;
++ int look_col;
++
++ trypos = &our_paren_pos;
++ do {
++ outermost = *trypos;
++ curwin->w_cursor.lnum = outermost.lnum;
++ curwin->w_cursor.col = outermost.col;
++
++ trypos = find_match_paren(ind_maxparen, ind_maxcomment);
++ } while (trypos && trypos->lnum == outermost.lnum);
++
++ curwin->w_cursor = cursor_save;
++
++ line = ml_get(outermost.lnum);
++
++ is_if_for_while =
++ cin_is_if_for_while_before_offset(line, outermost.col,
++ &outermost.col);
++ }
+
+ amount = skip_label(our_paren_pos.lnum, &look, ind_maxcomment);
+ look = skipwhite(look);
+***************
+*** 6836,6842 ****
+ curwin->w_cursor.lnum = save_lnum;
+ look = ml_get(our_paren_pos.lnum) + look_col;
+ }
+! if (theline[0] == ')' || ind_unclosed == 0
+ || (!ind_unclosed_noignore && *look == '('
+ && ignore_paren_col == 0))
+ {
+--- 6919,6925 ----
+ curwin->w_cursor.lnum = save_lnum;
+ look = ml_get(our_paren_pos.lnum) + look_col;
+ }
+! if (theline[0] == ')' || (ind_unclosed == 0 && is_if_for_while == 0)
+ || (!ind_unclosed_noignore && *look == '('
+ && ignore_paren_col == 0))
+ {
+***************
+*** 6907,6913 ****
+ {
+ /* Line up with the start of the matching paren line. */
+ }
+! else if (ind_unclosed == 0 || (!ind_unclosed_noignore
+ && *look == '(' && ignore_paren_col == 0))
+ {
+ if (cur_amount != MAXCOL)
+--- 6990,6997 ----
+ {
+ /* Line up with the start of the matching paren line. */
+ }
+! else if ((ind_unclosed == 0 && is_if_for_while == 0)
+! || (!ind_unclosed_noignore
+ && *look == '(' && ignore_paren_col == 0))
+ {
+ if (cur_amount != MAXCOL)
+***************
+*** 6943,6949 ****
+ if (find_match_paren(ind_maxparen, ind_maxcomment) != NULL)
+ amount += ind_unclosed2;
+ else
+! amount += ind_unclosed;
+ }
+ /*
+ * For a line starting with ')' use the minimum of the two
+--- 7027,7038 ----
+ if (find_match_paren(ind_maxparen, ind_maxcomment) != NULL)
+ amount += ind_unclosed2;
+ else
+! {
+! if (is_if_for_while)
+! amount += ind_if_for_while;
+! else
+! amount += ind_unclosed;
+! }
+ }
+ /*
+ * For a line starting with ')' use the minimum of the two
+*** ../vim-7.3.491/src/testdir/test3.in 2011-12-14 20:21:29.000000000 +0100
+--- src/testdir/test3.in 2012-04-05 17:12:14.000000000 +0200
+***************
+*** 1574,1579 ****
+--- 1574,1793 ----
+ }
+
+ STARTTEST
++ :set cino=k2s,(0
++ 2kdd3j=][
++ ENDTEST
++
++ void func(void)
++ {
++ if (condition1
++ && condition2)
++ action();
++ function(argument1
++ && argument2);
++
++ if (c1 && (c2 ||
++ c3))
++ foo;
++ if (c1 &&
++ (c2 || c3))
++ {
++ }
++
++ if ( c1
++ && ( c2
++ || c3))
++ foo;
++ func( c1
++ && ( c2
++ || c3))
++ foo;
++ }
++
++ STARTTEST
++ :set cino=k2s,(s
++ 2kdd3j=][
++ ENDTEST
++
++ void func(void)
++ {
++ if (condition1
++ && condition2)
++ action();
++ function(argument1
++ && argument2);
++
++ if (c1 && (c2 ||
++ c3))
++ foo;
++ if (c1 &&
++ (c2 || c3))
++ {
++ }
++
++ if ( c1
++ && ( c2
++ || c3))
++ foo;
++ func( c1
++ && ( c2
++ || c3))
++ foo;
++ }
++
++ STARTTEST
++ :set cino=k2s,(s,U1
++ 2kdd3j=][
++ ENDTEST
++
++ void func(void)
++ {
++ if (condition1
++ && condition2)
++ action();
++ function(argument1
++ && argument2);
++
++ if (c1 && (c2 ||
++ c3))
++ foo;
++ if (c1 &&
++ (c2 || c3))
++ {
++ }
++ if (c123456789
++ && (c22345
++ || c3))
++ printf("foo\n");
++
++ c = c1 &&
++ (
++ c2 ||
++ c3
++ ) && c4;
++ }
++
++ STARTTEST
++ :set cino=k2s,(0,W4
++ 2kdd3j=][
++ ENDTEST
++
++ void func(void)
++ {
++ if (condition1
++ && condition2)
++ action();
++ function(argument1
++ && argument2);
++
++ if (c1 && (c2 ||
++ c3))
++ foo;
++ if (c1 &&
++ (c2 || c3))
++ {
++ }
++ if (c123456789
++ && (c22345
++ || c3))
++ printf("foo\n");
++
++ if ( c1
++ && ( c2
++ || c3))
++ foo;
++
++ a_long_line(
++ argument,
++ argument);
++ a_short_line(argument,
++ argument);
++ }
++
++ STARTTEST
++ :set cino=k2s,u2
++ 2kdd3j=][
++ ENDTEST
++
++ void func(void)
++ {
++ if (condition1
++ && condition2)
++ action();
++ function(argument1
++ && argument2);
++
++ if (c1 && (c2 ||
++ c3))
++ foo;
++ if (c1 &&
++ (c2 || c3))
++ {
++ }
++ if (c123456789
++ && (c22345
++ || c3))
++ printf("foo\n");
++ }
++
++ STARTTEST
++ :set cino=k2s,(0,w1
++ 2kdd3j=][
++ ENDTEST
++
++ void func(void)
++ {
++ if (condition1
++ && condition2)
++ action();
++ function(argument1
++ && argument2);
++
++ if (c1 && (c2 ||
++ c3))
++ foo;
++ if (c1 &&
++ (c2 || c3))
++ {
++ }
++ if (c123456789
++ && (c22345
++ || c3))
++ printf("foo\n");
++
++ if ( c1
++ && ( c2
++ || c3))
++ foo;
++ func( c1
++ && ( c2
++ || c3))
++ foo;
++ }
++
++ STARTTEST
++ :set cino=k2,(s
++ 2kdd3j=][
++ ENDTEST
++
++ void func(void)
++ {
++ if (condition1
++ && condition2)
++ action();
++ function(argument1
++ && argument2);
++
++ if (c1 && (c2 ||
++ c3))
++ foo;
++ if (c1 &&
++ (c2 || c3))
++ {
++ }
++ }
++
++ STARTTEST
+ :set cino=N-s
+ /^NAMESPACESTART
+ =/^NAMESPACEEND
+*** ../vim-7.3.491/src/testdir/test3.ok 2011-12-14 20:21:29.000000000 +0100
+--- src/testdir/test3.ok 2012-04-05 17:12:14.000000000 +0200
+***************
+*** 1411,1416 ****
+--- 1411,1602 ----
+ }
+
+
++ void func(void)
++ {
++ if (condition1
++ && condition2)
++ action();
++ function(argument1
++ && argument2);
++
++ if (c1 && (c2 ||
++ c3))
++ foo;
++ if (c1 &&
++ (c2 || c3))
++ {
++ }
++
++ if ( c1
++ && ( c2
++ || c3))
++ foo;
++ func( c1
++ && ( c2
++ || c3))
++ foo;
++ }
++
++
++ void func(void)
++ {
++ if (condition1
++ && condition2)
++ action();
++ function(argument1
++ && argument2);
++
++ if (c1 && (c2 ||
++ c3))
++ foo;
++ if (c1 &&
++ (c2 || c3))
++ {
++ }
++
++ if ( c1
++ && ( c2
++ || c3))
++ foo;
++ func( c1
++ && ( c2
++ || c3))
++ foo;
++ }
++
++
++ void func(void)
++ {
++ if (condition1
++ && condition2)
++ action();
++ function(argument1
++ && argument2);
++
++ if (c1 && (c2 ||
++ c3))
++ foo;
++ if (c1 &&
++ (c2 || c3))
++ {
++ }
++ if (c123456789
++ && (c22345
++ || c3))
++ printf("foo\n");
++
++ c = c1 &&
++ (
++ c2 ||
++ c3
++ ) && c4;
++ }
++
++
++ void func(void)
++ {
++ if (condition1
++ && condition2)
++ action();
++ function(argument1
++ && argument2);
++
++ if (c1 && (c2 ||
++ c3))
++ foo;
++ if (c1 &&
++ (c2 || c3))
++ {
++ }
++ if (c123456789
++ && (c22345
++ || c3))
++ printf("foo\n");
++
++ if ( c1
++ && ( c2
++ || c3))
++ foo;
++
++ a_long_line(
++ argument,
++ argument);
++ a_short_line(argument,
++ argument);
++ }
++
++
++ void func(void)
++ {
++ if (condition1
++ && condition2)
++ action();
++ function(argument1
++ && argument2);
++
++ if (c1 && (c2 ||
++ c3))
++ foo;
++ if (c1 &&
++ (c2 || c3))
++ {
++ }
++ if (c123456789
++ && (c22345
++ || c3))
++ printf("foo\n");
++ }
++
++
++ void func(void)
++ {
++ if (condition1
++ && condition2)
++ action();
++ function(argument1
++ && argument2);
++
++ if (c1 && (c2 ||
++ c3))
++ foo;
++ if (c1 &&
++ (c2 || c3))
++ {
++ }
++ if (c123456789
++ && (c22345
++ || c3))
++ printf("foo\n");
++
++ if ( c1
++ && ( c2
++ || c3))
++ foo;
++ func( c1
++ && ( c2
++ || c3))
++ foo;
++ }
++
++
++ void func(void)
++ {
++ if (condition1
++ && condition2)
++ action();
++ function(argument1
++ && argument2);
++
++ if (c1 && (c2 ||
++ c3))
++ foo;
++ if (c1 &&
++ (c2 || c3))
++ {
++ }
++ }
++
++
+ NAMESPACESTART
+ /* valid namespaces with normal indent */
+ namespace
+*** ../vim-7.3.491/src/version.c 2012-04-05 16:56:38.000000000 +0200
+--- src/version.c 2012-04-05 17:14:18.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 492,
+ /**/
+
+--
+You were lucky to have a LAKE! There were a hundred and sixty of
+us living in a small shoebox in the middle of the road.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.493 b/source/ap/vim/patches/7.3.493
new file mode 100644
index 000000000..ff662b254
--- /dev/null
+++ b/source/ap/vim/patches/7.3.493
@@ -0,0 +1,54 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.493
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.493 (after 7.3.492)
+Problem: Two unused variables.
+Solution: Remove them. (Hong Xu)
+Files: src/misc1.c
+
+
+*** ../vim-7.3.492/src/misc1.c 2012-04-05 17:17:38.000000000 +0200
+--- src/misc1.c 2012-04-06 13:49:39.000000000 +0200
+***************
+*** 6489,6495 ****
+ int cont_amount = 0; /* amount for continuation line */
+ int original_line_islabel;
+ int added_to_amount = 0;
+- int is_if_for_while = 0;
+
+ for (options = curbuf->b_p_cino; *options; )
+ {
+--- 6489,6494 ----
+***************
+*** 6876,6882 ****
+ pos_T cursor_save = curwin->w_cursor;
+ pos_T outermost;
+ char_u *line;
+- int look_col;
+
+ trypos = &our_paren_pos;
+ do {
+--- 6875,6880 ----
+*** ../vim-7.3.492/src/version.c 2012-04-05 17:17:38.000000000 +0200
+--- src/version.c 2012-04-06 13:50:21.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 493,
+ /**/
+
+--
+Not too long ago, compress was something you did to garbage...
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.494 b/source/ap/vim/patches/7.3.494
new file mode 100644
index 000000000..81bd24b7d
--- /dev/null
+++ b/source/ap/vim/patches/7.3.494
@@ -0,0 +1,186 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.494
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.494 (after 7.3.491)
+Problem: Can't compile with Lua 9.1 or dynamic Lua.
+Solution: Fix dll_ methods. Fix luado(). (Muraoka Taro, Luis Carvalho)
+Files: src/if_lua.c
+
+
+*** ../vim-7.3.493/src/if_lua.c 2012-04-05 16:53:56.000000000 +0200
+--- src/if_lua.c 2012-04-06 14:24:06.000000000 +0200
+***************
+*** 95,100 ****
+--- 95,101 ----
+ #define luaL_loadbufferx dll_luaL_loadbufferx
+ #define luaL_argerror dll_luaL_argerror
+ #endif
++ #define luaL_checkany dll_luaL_checkany
+ #define luaL_checklstring dll_luaL_checklstring
+ #define luaL_checkinteger dll_luaL_checkinteger
+ #define luaL_optinteger dll_luaL_optinteger
+***************
+*** 117,124 ****
+ #define lua_pcallk dll_lua_pcallk
+ #define lua_getglobal dll_lua_getglobal
+ #define lua_setglobal dll_lua_setglobal
+- #define lua_typename dll_lua_typename
+ #endif
+ #define lua_close dll_lua_close
+ #define lua_gettop dll_lua_gettop
+ #define lua_settop dll_lua_settop
+--- 118,125 ----
+ #define lua_pcallk dll_lua_pcallk
+ #define lua_getglobal dll_lua_getglobal
+ #define lua_setglobal dll_lua_setglobal
+ #endif
++ #define lua_typename dll_lua_typename
+ #define lua_close dll_lua_close
+ #define lua_gettop dll_lua_gettop
+ #define lua_settop dll_lua_settop
+***************
+*** 151,156 ****
+--- 152,158 ----
+ #define lua_rawset dll_lua_rawset
+ #define lua_rawseti dll_lua_rawseti
+ #define lua_setmetatable dll_lua_setmetatable
++ #define lua_next dll_lua_next
+ /* libs */
+ #define luaopen_base dll_luaopen_base
+ #define luaopen_table dll_luaopen_table
+***************
+*** 177,182 ****
+--- 179,185 ----
+ int (*dll_luaL_loadbufferx) (lua_State *L, const char *buff, size_t sz, const char *name, const char *mode);
+ int (*dll_luaL_argerror) (lua_State *L, int numarg, const char *extramsg);
+ #endif
++ void (*dll_luaL_checkany) (lua_State *L, int narg);
+ const char *(*dll_luaL_checklstring) (lua_State *L, int numArg, size_t *l);
+ lua_Integer (*dll_luaL_checkinteger) (lua_State *L, int numArg);
+ lua_Integer (*dll_luaL_optinteger) (lua_State *L, int nArg, lua_Integer def);
+***************
+*** 201,208 ****
+ int ctx, lua_CFunction k);
+ void (*dll_lua_getglobal) (lua_State *L, const char *var);
+ void (*dll_lua_setglobal) (lua_State *L, const char *var);
+- const char *(*dll_lua_typename) (lua_State *L, int tp);
+ #endif
+ void (*dll_lua_close) (lua_State *L);
+ int (*dll_lua_gettop) (lua_State *L);
+ void (*dll_lua_settop) (lua_State *L, int idx);
+--- 204,211 ----
+ int ctx, lua_CFunction k);
+ void (*dll_lua_getglobal) (lua_State *L, const char *var);
+ void (*dll_lua_setglobal) (lua_State *L, const char *var);
+ #endif
++ const char *(*dll_lua_typename) (lua_State *L, int tp);
+ void (*dll_lua_close) (lua_State *L);
+ int (*dll_lua_gettop) (lua_State *L);
+ void (*dll_lua_settop) (lua_State *L, int idx);
+***************
+*** 235,240 ****
+--- 238,244 ----
+ void (*dll_lua_rawset) (lua_State *L, int idx);
+ void (*dll_lua_rawseti) (lua_State *L, int idx, int n);
+ int (*dll_lua_setmetatable) (lua_State *L, int objindex);
++ int (*dll_lua_next) (lua_State *L, int idx);
+ /* libs */
+ int (*dll_luaopen_base) (lua_State *L);
+ int (*dll_luaopen_table) (lua_State *L);
+***************
+*** 268,273 ****
+--- 272,278 ----
+ {"luaL_loadbufferx", (luaV_function) &dll_luaL_loadbufferx},
+ {"luaL_argerror", (luaV_function) &dll_luaL_argerror},
+ #endif
++ {"luaL_checkany", (luaV_function) &dll_luaL_checkany},
+ {"luaL_checklstring", (luaV_function) &dll_luaL_checklstring},
+ {"luaL_checkinteger", (luaV_function) &dll_luaL_checkinteger},
+ {"luaL_optinteger", (luaV_function) &dll_luaL_optinteger},
+***************
+*** 290,297 ****
+ {"lua_pcallk", (luaV_function) &dll_lua_pcallk},
+ {"lua_getglobal", (luaV_function) &dll_lua_getglobal},
+ {"lua_setglobal", (luaV_function) &dll_lua_setglobal},
+- {"lua_typename", (luaV_function) &dll_lua_typename},
+ #endif
+ {"lua_close", (luaV_function) &dll_lua_close},
+ {"lua_gettop", (luaV_function) &dll_lua_gettop},
+ {"lua_settop", (luaV_function) &dll_lua_settop},
+--- 295,302 ----
+ {"lua_pcallk", (luaV_function) &dll_lua_pcallk},
+ {"lua_getglobal", (luaV_function) &dll_lua_getglobal},
+ {"lua_setglobal", (luaV_function) &dll_lua_setglobal},
+ #endif
++ {"lua_typename", (luaV_function) &dll_lua_typename},
+ {"lua_close", (luaV_function) &dll_lua_close},
+ {"lua_gettop", (luaV_function) &dll_lua_gettop},
+ {"lua_settop", (luaV_function) &dll_lua_settop},
+***************
+*** 324,329 ****
+--- 329,335 ----
+ {"lua_rawset", (luaV_function) &dll_lua_rawset},
+ {"lua_rawseti", (luaV_function) &dll_lua_rawseti},
+ {"lua_setmetatable", (luaV_function) &dll_lua_setmetatable},
++ {"lua_next", (luaV_function) &dll_lua_next},
+ /* libs */
+ {"luaopen_base", (luaV_function) &dll_luaopen_base},
+ {"luaopen_table", (luaV_function) &dll_luaopen_table},
+***************
+*** 1828,1834 ****
+ }
+ luaV_setrange(L, eap->line1, eap->line2);
+ luaL_buffinit(L, &b);
+! luaL_addlstring(&b, "return function(line) ", 22); /* header */
+ luaL_addlstring(&b, s, strlen(s));
+ luaL_addlstring(&b, " end", 4); /* footer */
+ luaL_pushresult(&b);
+--- 1834,1840 ----
+ }
+ luaV_setrange(L, eap->line1, eap->line2);
+ luaL_buffinit(L, &b);
+! luaL_addlstring(&b, "return function(line, linenr) ", 30); /* header */
+ luaL_addlstring(&b, s, strlen(s));
+ luaL_addlstring(&b, " end", 4); /* footer */
+ luaL_pushresult(&b);
+***************
+*** 1845,1851 ****
+ {
+ lua_pushvalue(L, -1); /* function */
+ luaV_pushline(L, curbuf, l); /* current line as arg */
+! if (lua_pcall(L, 1, 1, 0))
+ {
+ luaV_emsg(L);
+ break;
+--- 1851,1858 ----
+ {
+ lua_pushvalue(L, -1); /* function */
+ luaV_pushline(L, curbuf, l); /* current line as arg */
+! lua_pushinteger(L, l); /* current line number as arg */
+! if (lua_pcall(L, 2, 1, 0))
+ {
+ luaV_emsg(L);
+ break;
+*** ../vim-7.3.493/src/version.c 2012-04-06 13:56:00.000000000 +0200
+--- src/version.c 2012-04-06 14:25:11.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 494,
+ /**/
+
+--
+Why doesn't Tarzan have a beard?
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.495 b/source/ap/vim/patches/7.3.495
new file mode 100644
index 000000000..54c230627
--- /dev/null
+++ b/source/ap/vim/patches/7.3.495
@@ -0,0 +1,124 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.4
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.495 (after 7.3.492)
+Problem: Compiler warnings.
+Solution: Add function declaration. Remove "offset" argument.
+Files: src/misc1.c
+
+
+*** ../vim-7.3.494/src/misc1.c 2012-04-06 13:56:00.000000000 +0200
+--- src/misc1.c 2012-04-09 20:25:58.000000000 +0200
+***************
+*** 4972,4977 ****
+--- 4972,4978 ----
+ static int cin_iselse __ARGS((char_u *));
+ static int cin_isdo __ARGS((char_u *));
+ static int cin_iswhileofdo __ARGS((char_u *, linenr_T, int));
++ static int cin_is_if_for_while_before_offset __ARGS((char_u *line, int *poffset));
+ static int cin_iswhileofdo_end __ARGS((int terminated, int ind_maxparen, int ind_maxcomment));
+ static int cin_isbreak __ARGS((char_u *));
+ static int cin_is_cpp_baseclass __ARGS((colnr_T *col));
+***************
+*** 5771,5787 ****
+ }
+
+ /*
+! * Check whether in "p" there is an "if", "for" or "while" before offset.
+ * Return 0 if there is none.
+ * Otherwise return !0 and update "*poffset" to point to the place where the
+ * string was found.
+ */
+ static int
+! cin_is_if_for_while_before_offset(line, offset, poffset)
+ char_u *line;
+- size_t offset;
+ int *poffset;
+ {
+
+ if (offset-- < 2)
+ return 0;
+--- 5772,5788 ----
+ }
+
+ /*
+! * Check whether in "p" there is an "if", "for" or "while" before "*poffset".
+ * Return 0 if there is none.
+ * Otherwise return !0 and update "*poffset" to point to the place where the
+ * string was found.
+ */
+ static int
+! cin_is_if_for_while_before_offset(line, poffset)
+ char_u *line;
+ int *poffset;
+ {
++ int offset = *poffset;
+
+ if (offset-- < 2)
+ return 0;
+***************
+*** 5805,5812 ****
+ goto probablyFound;
+ }
+ }
+-
+ return 0;
+ probablyFound:
+ if (!offset || !vim_isIDc(line[offset - 1]))
+ {
+--- 5806,5813 ----
+ goto probablyFound;
+ }
+ }
+ return 0;
++
+ probablyFound:
+ if (!offset || !vim_isIDc(line[offset - 1]))
+ {
+***************
+*** 6890,6897 ****
+ line = ml_get(outermost.lnum);
+
+ is_if_for_while =
+! cin_is_if_for_while_before_offset(line, outermost.col,
+! &outermost.col);
+ }
+
+ amount = skip_label(our_paren_pos.lnum, &look, ind_maxcomment);
+--- 6891,6897 ----
+ line = ml_get(outermost.lnum);
+
+ is_if_for_while =
+! cin_is_if_for_while_before_offset(line, &outermost.col);
+ }
+
+ amount = skip_label(our_paren_pos.lnum, &look, ind_maxcomment);
+*** ../vim-7.3.494/src/version.c 2012-04-06 14:30:55.000000000 +0200
+--- src/version.c 2012-04-09 20:41:44.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 495,
+ /**/
+
+--
+ [clop clop]
+GUARD #1: Halt! Who goes there?
+ARTHUR: It is I, Arthur, son of Uther Pendragon, from the castle of
+ Camelot. King of the Britons, defeator of the Saxons, sovereign of
+ all England!
+GUARD #1: Pull the other one!
+ The Quest for the Holy Grail (Monty Python)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.496 b/source/ap/vim/patches/7.3.496
new file mode 100644
index 000000000..8b110517c
--- /dev/null
+++ b/source/ap/vim/patches/7.3.496
@@ -0,0 +1,69 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.496
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.496
+Problem: MS-DOS: When "diff" trips over difference in line separators some
+ tests fail.
+Solution: Make some .ok files use unix line separators. (David Pope)
+Files: src/testdir/Make_dos.mak, src/testdir/Make_ming.mak
+
+
+*** ../vim-7.3.495/src/testdir/Make_dos.mak 2012-04-05 16:56:38.000000000 +0200
+--- src/testdir/Make_dos.mak 2012-04-09 21:23:43.000000000 +0200
+***************
+*** 52,58 ****
+
+ fixff:
+ -$(VIMPROG) -u dos.vim --noplugin "+argdo set ff=dos|upd" +q *.in *.ok
+! -$(VIMPROG) -u dos.vim --noplugin "+argdo set ff=unix|upd" +q dotest.in
+
+ clean:
+ -del *.out
+--- 52,59 ----
+
+ fixff:
+ -$(VIMPROG) -u dos.vim --noplugin "+argdo set ff=dos|upd" +q *.in *.ok
+! -$(VIMPROG) -u dos.vim --noplugin "+argdo set ff=unix|upd" +q \
+! dotest.in test60.ok test71.ok test74.ok
+
+ clean:
+ -del *.out
+*** ../vim-7.3.495/src/testdir/Make_ming.mak 2012-04-05 16:56:38.000000000 +0200
+--- src/testdir/Make_ming.mak 2012-04-09 21:25:55.000000000 +0200
+***************
+*** 75,80 ****
+--- 75,82 ----
+
+ fixff:
+ -$(VIMPROG) -u dos.vim --noplugin "+argdo set ff=dos|upd" +q *.in *.ok
++ -$(VIMPROG) -u dos.vim --noplugin "+argdo set ff=unix|upd" +q \
++ dotest.in test60.ok test71.ok test74.ok
+
+ clean:
+ -$(DEL) *.out
+*** ../vim-7.3.495/src/version.c 2012-04-09 20:42:20.000000000 +0200
+--- src/version.c 2012-04-13 19:10:04.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 496,
+ /**/
+
+--
+There are 2 kinds of people in my world: those who know Unix, Perl, Vim, GNU,
+Linux, etc, and those who know COBOL. It gets very difficult for me at
+parties, not knowing which group to socialise with :-)
+ Sitaram Chamarty
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.497 b/source/ap/vim/patches/7.3.497
new file mode 100644
index 000000000..5cbffc4ae
--- /dev/null
+++ b/source/ap/vim/patches/7.3.497
@@ -0,0 +1,50 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.497
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.497
+Problem: Crash when doing ":python print" and compiled with gcc and
+ the optimizer enabled.
+Solution: Avoid the crash, doesn't really fix the problem. (Christian
+ Brabandt)
+Files: src/if_py_both.h
+
+
+*** ../vim-7.3.496/src/if_py_both.h 2012-02-04 20:17:21.000000000 +0100
+--- src/if_py_both.h 2012-04-20 13:24:31.000000000 +0200
+***************
+*** 77,82 ****
+--- 77,87 ----
+ if (!PyArg_ParseTuple(args, "et#", ENC_OPT, &str, &len))
+ return NULL;
+
++ /* TODO: This works around a gcc optimizer problem and avoids Vim
++ * from crashing. Should find a real solution. */
++ if (str == NULL)
++ return NULL;
++
+ Py_BEGIN_ALLOW_THREADS
+ Python_Lock_Vim();
+ writer((writefn)(error ? emsg : msg), (char_u *)str, len);
+*** ../vim-7.3.496/src/version.c 2012-04-13 19:11:16.000000000 +0200
+--- src/version.c 2012-04-20 13:26:22.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 497,
+ /**/
+
+--
+There can't be a crisis today, my schedule is already full.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.498 b/source/ap/vim/patches/7.3.498
new file mode 100644
index 000000000..aa9c621ee
--- /dev/null
+++ b/source/ap/vim/patches/7.3.498
@@ -0,0 +1,63 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.498
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.498
+Problem: The behavior of the "- register changes depending on value of
+ the 'clipboard' option. (Szamotulski)
+Solution: Also set the "- register when the register is "*" or "+".
+ (Christian Brabandt)
+Files: src/ops.c
+
+
+*** ../vim-7.3.497/src/ops.c 2012-03-23 14:16:19.000000000 +0100
+--- src/ops.c 2012-04-20 13:36:32.000000000 +0200
+***************
+*** 1720,1728 ****
+ did_yank = TRUE;
+ }
+
+! /* Yank into small delete register when no register specified and the
+! * delete is within one line. */
+! if (oap->regname == 0 && oap->motion_type != MLINE
+ && oap->line_count == 1)
+ {
+ oap->regname = '-';
+--- 1720,1733 ----
+ did_yank = TRUE;
+ }
+
+! /* Yank into small delete register when no named register specified
+! * and the delete is within one line. */
+! if ((
+! #ifdef FEAT_CLIPBOARD
+! ((clip_unnamed & CLIP_UNNAMED) && oap->regname == '*') ||
+! ((clip_unnamed & CLIP_UNNAMED_PLUS) && oap->regname == '+') ||
+! #endif
+! oap->regname == 0) && oap->motion_type != MLINE
+ && oap->line_count == 1)
+ {
+ oap->regname = '-';
+*** ../vim-7.3.497/src/version.c 2012-04-20 13:31:16.000000000 +0200
+--- src/version.c 2012-04-20 13:45:26.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 498,
+ /**/
+
+--
+Did you ever stop to think... and forget to start again?
+ -- Steven Wright
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.499 b/source/ap/vim/patches/7.3.499
new file mode 100644
index 000000000..4e45e4fb7
--- /dev/null
+++ b/source/ap/vim/patches/7.3.499
@@ -0,0 +1,84 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.499
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.499
+Problem: When using any interface language when Vim is waiting for a child
+ process it gets confused by a child process started through the
+ interface.
+Solution: Always used waitpid() instead of wait(). (Yasuhiro Matsumoto)
+Files: src/os_unix.c
+
+
+*** ../vim-7.3.498/src/os_unix.c 2012-02-05 22:51:27.000000000 +0100
+--- src/os_unix.c 2012-04-20 15:47:17.000000000 +0200
+***************
+*** 3734,3757 ****
+
+ while (wait_pid != child)
+ {
+! # ifdef _THREAD_SAFE
+! /* Ugly hack: when compiled with Python threads are probably
+! * used, in which case wait() sometimes hangs for no obvious
+! * reason. Use waitpid() instead and loop (like the GUI). */
+! # ifdef __NeXT__
+ wait_pid = wait4(child, status, WNOHANG, (struct rusage *)0);
+! # else
+ wait_pid = waitpid(child, status, WNOHANG);
+! # endif
+ if (wait_pid == 0)
+ {
+ /* Wait for 1/100 sec before trying again. */
+ mch_delay(10L, TRUE);
+ continue;
+ }
+- # else
+- wait_pid = wait(status);
+- # endif
+ if (wait_pid <= 0
+ # ifdef ECHILD
+ && errno == ECHILD
+--- 3734,3754 ----
+
+ while (wait_pid != child)
+ {
+! /* When compiled with Python threads are probably used, in which case
+! * wait() sometimes hangs for no obvious reason. Use waitpid()
+! * instead and loop (like the GUI). Also needed for other interfaces,
+! * they might call system(). */
+! # ifdef __NeXT__
+ wait_pid = wait4(child, status, WNOHANG, (struct rusage *)0);
+! # else
+ wait_pid = waitpid(child, status, WNOHANG);
+! # endif
+ if (wait_pid == 0)
+ {
+ /* Wait for 1/100 sec before trying again. */
+ mch_delay(10L, TRUE);
+ continue;
+ }
+ if (wait_pid <= 0
+ # ifdef ECHILD
+ && errno == ECHILD
+*** ../vim-7.3.498/src/version.c 2012-04-20 13:46:02.000000000 +0200
+--- src/version.c 2012-04-20 15:54:05.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 499,
+ /**/
+
+--
+It's not hard to meet expenses, they're everywhere.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.500 b/source/ap/vim/patches/7.3.500
new file mode 100644
index 000000000..b3b6a375e
--- /dev/null
+++ b/source/ap/vim/patches/7.3.500
@@ -0,0 +1,46 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.500
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.500
+Problem: Ming makefile unconditionally sets WINVER.
+Solution: Only defined when not already defined. (Yasuhiro Matsumoto)
+Files: src/Make_ming.mak
+
+
+*** ../vim-7.3.499/src/Make_ming.mak 2012-03-28 17:43:06.000000000 +0200
+--- src/Make_ming.mak 2012-04-20 16:03:50.000000000 +0200
+***************
+*** 51,57 ****
+--- 51,59 ----
+ # set to yes to enable OLE support
+ OLE=no
+ # Set the default $(WINVER) to make it work with pre-Win2k
++ ifndef WINVER
+ WINVER = 0x0400
++ endif
+ # Set to yes to enable Cscope support
+ CSCOPE=yes
+ # Set to yes to enable Netbeans support
+*** ../vim-7.3.499/src/version.c 2012-04-20 15:55:10.000000000 +0200
+--- src/version.c 2012-04-20 16:12:34.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 500,
+ /**/
+
+--
+Life is a gift, living is an art. (Bram Moolenaar)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.501 b/source/ap/vim/patches/7.3.501
new file mode 100644
index 000000000..a74b02888
--- /dev/null
+++ b/source/ap/vim/patches/7.3.501
@@ -0,0 +1,63 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.501
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.501
+Problem: Error for "flush" not being defined when using Ruby command.
+Solution: Defined "flush" as a no-op method. (Kent Sibilev)
+Files: src/if_ruby.c
+
+
+*** ../vim-7.3.500/src/if_ruby.c 2011-08-04 19:34:55.000000000 +0200
+--- src/if_ruby.c 2012-04-20 16:18:56.000000000 +0200
+***************
+*** 1238,1243 ****
+--- 1238,1248 ----
+ return Qnil;
+ }
+
++ static VALUE f_nop(VALUE self)
++ {
++ return Qnil;
++ }
++
+ static VALUE f_p(int argc, VALUE *argv, VALUE self UNUSED)
+ {
+ int i;
+***************
+*** 1259,1264 ****
+--- 1264,1270 ----
+
+ rb_stdout = rb_obj_alloc(rb_cObject);
+ rb_define_singleton_method(rb_stdout, "write", vim_message, 1);
++ rb_define_singleton_method(rb_stdout, "flush", f_nop, 0);
+ rb_define_global_function("p", f_p, -1);
+ }
+
+*** ../vim-7.3.500/src/version.c 2012-04-20 16:13:21.000000000 +0200
+--- src/version.c 2012-04-20 16:19:03.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 501,
+ /**/
+
+--
+Q: What do you call a fish without an eye?
+A: fsh!
+Q: What do you call a deer with no eyes?
+A: no eye deer.
+Q: What do you call a deer with no eyes and no legs?
+A: still no eye deer.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.502 b/source/ap/vim/patches/7.3.502
new file mode 100644
index 000000000..c9710abfb
--- /dev/null
+++ b/source/ap/vim/patches/7.3.502
@@ -0,0 +1,67 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.502
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.502
+Problem: Netbeans insert halfway a line actually appends to the line.
+Solution: Insert halfway the line. (Brian Victor)
+Files: src/netbeans.c
+
+
+*** ../vim-7.3.501/src/netbeans.c 2012-01-10 22:31:26.000000000 +0100
+--- src/netbeans.c 2012-04-20 19:44:31.000000000 +0200
+***************
+*** 1812,1825 ****
+ char_u *oldline = ml_get(lnum);
+ char_u *newline;
+
+! /* Insert halfway a line. For simplicity we assume we
+! * need to append to the line. */
+ newline = alloc_check(
+ (unsigned)(STRLEN(oldline) + len + 1));
+ if (newline != NULL)
+ {
+! STRCPY(newline, oldline);
+ STRCAT(newline, args);
+ ml_replace(lnum, newline, FALSE);
+ }
+ }
+--- 1812,1826 ----
+ char_u *oldline = ml_get(lnum);
+ char_u *newline;
+
+! /* Insert halfway a line. */
+ newline = alloc_check(
+ (unsigned)(STRLEN(oldline) + len + 1));
+ if (newline != NULL)
+ {
+! mch_memmove(newline, oldline, (size_t)pos->col);
+! newline[pos->col] = NUL;
+ STRCAT(newline, args);
++ STRCAT(newline, oldline + pos->col);
+ ml_replace(lnum, newline, FALSE);
+ }
+ }
+*** ../vim-7.3.501/src/version.c 2012-04-20 18:05:42.000000000 +0200
+--- src/version.c 2012-04-20 19:46:48.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 502,
+ /**/
+
+--
+Time flies like an arrow.
+Fruit flies like a banana.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.503 b/source/ap/vim/patches/7.3.503
new file mode 100644
index 000000000..5b776ae0d
--- /dev/null
+++ b/source/ap/vim/patches/7.3.503
@@ -0,0 +1,51 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.503
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.503 (after 7.3.501)
+Problem: Warning for unused argument.
+Solution: Add UNUSED.
+Files: src/if_ruby.c
+
+
+*** ../vim-7.3.502/src/if_ruby.c 2012-04-20 18:05:42.000000000 +0200
+--- src/if_ruby.c 2012-04-25 12:26:38.000000000 +0200
+***************
+*** 1238,1244 ****
+ return Qnil;
+ }
+
+! static VALUE f_nop(VALUE self)
+ {
+ return Qnil;
+ }
+--- 1238,1244 ----
+ return Qnil;
+ }
+
+! static VALUE f_nop(VALUE self UNUSED)
+ {
+ return Qnil;
+ }
+*** ../vim-7.3.502/src/version.c 2012-04-20 19:47:00.000000000 +0200
+--- src/version.c 2012-04-25 12:27:30.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 503,
+ /**/
+
+--
+Why isn't there mouse-flavored cat food?
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.504 b/source/ap/vim/patches/7.3.504
new file mode 100644
index 000000000..752279060
--- /dev/null
+++ b/source/ap/vim/patches/7.3.504
@@ -0,0 +1,87 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.504
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.504
+Problem: Commands in help files are not highlighted.
+Solution: Allow for commands in backticks. Adjust CTRL-] to remove the
+ backticks.
+Files: src/ex_cmds.c
+
+
+*** ../vim-7.3.503/src/ex_cmds.c 2012-04-05 16:04:58.000000000 +0200
+--- src/ex_cmds.c 2012-04-25 12:51:41.000000000 +0200
+***************
+*** 3421,3427 ****
+ * and re-attach to buffer, perhaps.
+ */
+ if (curwin->w_s == &(curwin->w_buffer->b_s))
+! curwin->w_s = &(buf->b_s);
+ #endif
+ curwin->w_buffer = buf;
+ curbuf = buf;
+--- 3421,3427 ----
+ * and re-attach to buffer, perhaps.
+ */
+ if (curwin->w_s == &(curwin->w_buffer->b_s))
+! curwin->w_s = &(buf->b_s);
+ #endif
+ curwin->w_buffer = buf;
+ curbuf = buf;
+***************
+*** 5965,5970 ****
+--- 5965,5993 ----
+ break;
+ }
+ *d = NUL;
++
++ if (*IObuff == '`')
++ {
++ if (d > IObuff + 2 && d[-1] == '`')
++ {
++ /* remove the backticks from `command` */
++ mch_memmove(IObuff, IObuff + 1, STRLEN(IObuff));
++ d[-2] = NUL;
++ }
++ else if (d > IObuff + 3 && d[-2] == '`' && d[-1] == ',')
++ {
++ /* remove the backticks and comma from `command`, */
++ mch_memmove(IObuff, IObuff + 1, STRLEN(IObuff));
++ d[-3] = NUL;
++ }
++ else if (d > IObuff + 4 && d[-3] == '`'
++ && d[-2] == '\\' && d[-1] == '.')
++ {
++ /* remove the backticks and dot from `command`\. */
++ mch_memmove(IObuff, IObuff + 1, STRLEN(IObuff));
++ d[-4] = NUL;
++ }
++ }
+ }
+ }
+
+*** ../vim-7.3.503/src/version.c 2012-04-25 12:28:05.000000000 +0200
+--- src/version.c 2012-04-25 12:46:43.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 504,
+ /**/
+
+--
+TIM: That is not an ordinary rabbit ... 'tis the most foul cruel and
+ bad-tempered thing you ever set eyes on.
+ROBIN: You tit. I soiled my armour I was so scared!
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.505 b/source/ap/vim/patches/7.3.505
new file mode 100644
index 000000000..1a8a7ea37
--- /dev/null
+++ b/source/ap/vim/patches/7.3.505
@@ -0,0 +1,116 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.505
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.505
+Problem: Test 11 fails on MS-Windows in some versions.
+Solution: Fix #ifdefs for whether filtering through a pipe is possible. Move
+ setting b_no_eol_lnum back to where it was before patch 7.3.124.
+ (David Pope)
+Files: src/feature.h, src/eval.c, src/ex_cmds.c, src/fileio.c
+
+
+*** ../vim-7.3.504/src/feature.h 2011-10-20 21:09:25.000000000 +0200
+--- src/feature.h 2012-04-25 16:44:26.000000000 +0200
+***************
+*** 1316,1318 ****
+--- 1316,1326 ----
+ #ifdef FEAT_NORMAL
+ # define FEAT_PERSISTENT_UNDO
+ #endif
++
++ /*
++ * +filterpipe
++ */
++ #if (defined(UNIX) && !defined(USE_SYSTEM)) \
++ || (defined(WIN3264) && defined(FEAT_GUI_W32))
++ # define FEAT_FILTERPIPE
++ #endif
+*** ../vim-7.3.504/src/eval.c 2012-04-05 16:53:55.000000000 +0200
+--- src/eval.c 2012-04-25 16:43:53.000000000 +0200
+***************
+*** 12090,12096 ****
+ #ifdef FEAT_SEARCHPATH
+ "file_in_path",
+ #endif
+! #if (defined(UNIX) && !defined(USE_SYSTEM)) || defined(WIN3264)
+ "filterpipe",
+ #endif
+ #ifdef FEAT_FIND_ID
+--- 12090,12096 ----
+ #ifdef FEAT_SEARCHPATH
+ "file_in_path",
+ #endif
+! #ifdef FEAT_FILTERPIPE
+ "filterpipe",
+ #endif
+ #ifdef FEAT_FIND_ID
+*** ../vim-7.3.504/src/ex_cmds.c 2012-04-25 12:57:23.000000000 +0200
+--- src/ex_cmds.c 2012-04-25 16:46:02.000000000 +0200
+***************
+*** 1113,1119 ****
+ if (do_out)
+ shell_flags |= SHELL_DOOUT;
+
+! #if (!defined(USE_SYSTEM) && defined(UNIX)) || defined(WIN3264)
+ if (!do_in && do_out && !p_stmp)
+ {
+ /* Use a pipe to fetch stdout of the command, do not use a temp file. */
+--- 1113,1119 ----
+ if (do_out)
+ shell_flags |= SHELL_DOOUT;
+
+! #ifdef FEAT_FILTERPIPE
+ if (!do_in && do_out && !p_stmp)
+ {
+ /* Use a pipe to fetch stdout of the command, do not use a temp file. */
+*** ../vim-7.3.504/src/fileio.c 2012-02-29 18:22:03.000000000 +0100
+--- src/fileio.c 2012-04-25 16:40:37.000000000 +0200
+***************
+*** 2655,2664 ****
+ }
+ #endif
+
+- /* Reset now, following writes should not omit the EOL. Also, the line
+- * number will become invalid because of edits. */
+- curbuf->b_no_eol_lnum = 0;
+-
+ if (recoverymode && error)
+ return FAIL;
+ return OK;
+--- 2655,2660 ----
+***************
+*** 5098,5103 ****
+--- 5094,5101 ----
+ {
+ aco_save_T aco;
+
++ curbuf->b_no_eol_lnum = 0; /* in case it was set by the previous read */
++
+ /*
+ * Apply POST autocommands.
+ * Careful: The autocommands may call buf_write() recursively!
+*** ../vim-7.3.504/src/version.c 2012-04-25 12:57:23.000000000 +0200
+--- src/version.c 2012-04-25 16:49:50.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 505,
+ /**/
+
+--
+Lose weight, NEVER Diet again with
+ The "Invisible Weight Loss Patch"
+ (spam e-mail)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.506 b/source/ap/vim/patches/7.3.506
new file mode 100644
index 000000000..32be6fd10
--- /dev/null
+++ b/source/ap/vim/patches/7.3.506
@@ -0,0 +1,100 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.506
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.506
+Problem: GTK gives an error when selecting a non-existent file.
+Solution: Add a handler to avoid the error. (Christian Brabandt)
+Files: src/gui_gtk.c
+
+
+*** ../vim-7.3.505/src/gui_gtk.c 2011-06-26 04:48:56.000000000 +0200
+--- src/gui_gtk.c 2012-04-25 17:08:58.000000000 +0200
+***************
+*** 90,95 ****
+--- 90,100 ----
+ static void entry_activate_cb(GtkWidget *widget, gpointer data);
+ static void entry_changed_cb(GtkWidget *entry, GtkWidget *dialog);
+ static void find_replace_cb(GtkWidget *widget, gpointer data);
++ static void recent_func_log_func(
++ const gchar *log_domain,
++ GLogLevelFlags log_level,
++ const gchar *message,
++ gpointer user_data);
+
+ #if defined(FEAT_TOOLBAR)
+ /*
+***************
+*** 839,844 ****
+--- 844,851 ----
+ GtkWidget *fc;
+ #endif
+ char_u dirbuf[MAXPATHL];
++ guint log_handler;
++ const gchar *domain = "Gtk";
+
+ title = CONVERT_TO_UTF8(title);
+
+***************
+*** 853,858 ****
+--- 860,870 ----
+ /* If our pointer is currently hidden, then we should show it. */
+ gui_mch_mousehide(FALSE);
+
++ /* Hack: The GTK file dialog warns when it can't access a new file, this
++ * makes it shut up. http://bugzilla.gnome.org/show_bug.cgi?id=664587 */
++ log_handler = g_log_set_handler(domain, G_LOG_LEVEL_WARNING,
++ recent_func_log_func, NULL);
++
+ #ifdef USE_FILE_CHOOSER
+ /* We create the dialog each time, so that the button text can be "Open"
+ * or "Save" according to the action. */
+***************
+*** 916,921 ****
+--- 928,934 ----
+ gtk_widget_show(gui.filedlg);
+ gtk_main();
+ #endif
++ g_log_remove_handler(domain, log_handler);
+
+ CONVERT_TO_UTF8_FREE(title);
+ if (gui.browse_fname == NULL)
+***************
+*** 1882,1884 ****
+--- 1895,1908 ----
+ * backwards compatibility anyway. */
+ do_cmdline_cmd((char_u *)"emenu ToolBar.FindHelp");
+ }
++
++ static void
++ recent_func_log_func(const gchar *log_domain UNUSED,
++ GLogLevelFlags log_level UNUSED,
++ const gchar *message UNUSED,
++ gpointer user_data UNUSED)
++ {
++ /* We just want to suppress the warnings. */
++ /* http://bugzilla.gnome.org/show_bug.cgi?id=664587 */
++ }
++
+*** ../vim-7.3.505/src/version.c 2012-04-25 16:50:44.000000000 +0200
+--- src/version.c 2012-04-25 17:08:28.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 506,
+ /**/
+
+--
+Compilation process failed successfully.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.507 b/source/ap/vim/patches/7.3.507
new file mode 100644
index 000000000..c96561c39
--- /dev/null
+++ b/source/ap/vim/patches/7.3.507
@@ -0,0 +1,149 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.507
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.507
+Problem: When exiting with unsaved changes, selecting an existing file in
+ the file dialog, there is no dialog to ask whether the existing
+ file should be overwritten. (Felipe G. Nievinski)
+Solution: Call check_overwrite() before writing. (Christian Brabandt)
+Files: src/ex_cmds.c, src/ex_cmds2.c, src/proto/ex_cmds.pro
+
+
+*** ../vim-7.3.506/src/ex_cmds.c 2012-04-25 16:50:44.000000000 +0200
+--- src/ex_cmds.c 2012-04-25 17:19:53.000000000 +0200
+***************
+*** 25,31 ****
+ static int read_viminfo_up_to_marks __ARGS((vir_T *virp, int forceit, int writing));
+ #endif
+
+- static int check_overwrite __ARGS((exarg_T *eap, buf_T *buf, char_u *fname, char_u *ffname, int other));
+ static int check_readonly __ARGS((int *forceit, buf_T *buf));
+ #ifdef FEAT_AUTOCMD
+ static void delbuf_msg __ARGS((char_u *name));
+--- 25,30 ----
+***************
+*** 2722,2728 ****
+ * May set eap->forceit if a dialog says it's OK to overwrite.
+ * Return OK if it's OK, FAIL if it is not.
+ */
+! static int
+ check_overwrite(eap, buf, fname, ffname, other)
+ exarg_T *eap;
+ buf_T *buf;
+--- 2721,2727 ----
+ * May set eap->forceit if a dialog says it's OK to overwrite.
+ * Return OK if it's OK, FAIL if it is not.
+ */
+! int
+ check_overwrite(eap, buf, fname, ffname, other)
+ exarg_T *eap;
+ buf_T *buf;
+*** ../vim-7.3.506/src/ex_cmds2.c 2012-03-23 18:39:10.000000000 +0100
+--- src/ex_cmds2.c 2012-04-25 17:24:37.000000000 +0200
+***************
+*** 1489,1494 ****
+--- 1489,1495 ----
+ char_u buff[DIALOG_MSG_SIZE];
+ int ret;
+ buf_T *buf2;
++ exarg_T ea;
+
+ dialog_msg(buff, _("Save changes to \"%s\"?"),
+ (buf->b_fname != NULL) ?
+***************
+*** 1498,1510 ****
+ else
+ ret = vim_dialog_yesnocancel(VIM_QUESTION, NULL, buff, 1);
+
+ if (ret == VIM_YES)
+ {
+ #ifdef FEAT_BROWSE
+ /* May get file name, when there is none */
+ browse_save_fname(buf);
+ #endif
+! if (buf->b_fname != NULL) /* didn't hit Cancel */
+ (void)buf_write_all(buf, FALSE);
+ }
+ else if (ret == VIM_NO)
+--- 1499,1517 ----
+ else
+ ret = vim_dialog_yesnocancel(VIM_QUESTION, NULL, buff, 1);
+
++ /* Init ea pseudo-structure, this is needed for the check_overwrite()
++ * function. */
++ ea.append = ea.forceit = FALSE;
++
+ if (ret == VIM_YES)
+ {
+ #ifdef FEAT_BROWSE
+ /* May get file name, when there is none */
+ browse_save_fname(buf);
+ #endif
+! if (buf->b_fname != NULL && check_overwrite(&ea, buf,
+! buf->b_fname, buf->b_ffname, FALSE) == OK)
+! /* didn't hit Cancel */
+ (void)buf_write_all(buf, FALSE);
+ }
+ else if (ret == VIM_NO)
+***************
+*** 1532,1538 ****
+ /* May get file name, when there is none */
+ browse_save_fname(buf2);
+ #endif
+! if (buf2->b_fname != NULL) /* didn't hit Cancel */
+ (void)buf_write_all(buf2, FALSE);
+ #ifdef FEAT_AUTOCMD
+ /* an autocommand may have deleted the buffer */
+--- 1539,1547 ----
+ /* May get file name, when there is none */
+ browse_save_fname(buf2);
+ #endif
+! if (buf2->b_fname != NULL && check_overwrite(&ea, buf2,
+! buf2->b_fname, buf2->b_ffname, FALSE) == OK)
+! /* didn't hit Cancel */
+ (void)buf_write_all(buf2, FALSE);
+ #ifdef FEAT_AUTOCMD
+ /* an autocommand may have deleted the buffer */
+*** ../vim-7.3.506/src/proto/ex_cmds.pro 2010-08-15 21:57:28.000000000 +0200
+--- src/proto/ex_cmds.pro 2012-04-25 17:25:47.000000000 +0200
+***************
+*** 23,28 ****
+--- 23,29 ----
+ void ex_update __ARGS((exarg_T *eap));
+ void ex_write __ARGS((exarg_T *eap));
+ int do_write __ARGS((exarg_T *eap));
++ int check_overwrite __ARGS((exarg_T *eap, buf_T *buf, char_u *fname, char_u *ffname, int other));
+ void ex_wnext __ARGS((exarg_T *eap));
+ void do_wqall __ARGS((exarg_T *eap));
+ int not_writing __ARGS((void));
+*** ../vim-7.3.506/src/version.c 2012-04-25 17:10:12.000000000 +0200
+--- src/version.c 2012-04-25 17:17:30.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 507,
+ /**/
+
+--
+BROTHER MAYNARD: Armaments Chapter Two Verses Nine to Twenty One.
+ANOTHER MONK: And St. Attila raised his hand grenade up on high saying "O
+ Lord bless this thy hand grenade that with it thou mayest
+ blow thine enemies to tiny bits, in thy mercy. "and the Lord
+ did grin and people did feast upon the lambs and sloths and
+ carp and anchovies and orang-utans and breakfast cereals and
+ fruit bats and...
+BROTHER MAYNARD: Skip a bit brother ...
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.508 b/source/ap/vim/patches/7.3.508
new file mode 100644
index 000000000..7b8e7b261
--- /dev/null
+++ b/source/ap/vim/patches/7.3.508
@@ -0,0 +1,85 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.508
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.508
+Problem: Default for v:register is not set.
+Solution: Init v:register in eval_init(). Correct for 'clipboard' before the
+ main loop. (Ingo Karkat)
+Files: src/eval.c, src/main.c
+
+
+*** ../vim-7.3.507/src/eval.c 2012-04-25 16:50:44.000000000 +0200
+--- src/eval.c 2012-04-25 17:56:41.000000000 +0200
+***************
+*** 880,885 ****
+--- 880,886 ----
+ hash_add(&compat_hashtab, p->vv_di.di_key);
+ }
+ set_vim_var_nr(VV_SEARCHFORWARD, 1L);
++ set_reg_var(0); /* default for v:register is not 0 but '"' */
+
+ #ifdef EBCDIC
+ /*
+*** ../vim-7.3.507/src/main.c 2012-03-28 17:10:26.000000000 +0200
+--- src/main.c 2012-04-25 18:01:28.000000000 +0200
+***************
+*** 928,933 ****
+--- 928,945 ----
+ TIME_MSG("VimEnter autocommands");
+ #endif
+
++ #if defined(FEAT_EVAL) && defined(FEAT_CLIPBOARD)
++ /* Adjust default register name for "unnamed" in 'clipboard'. Can only be
++ * done after the clipboard is available and all initial commands that may
++ * modify the 'clipboard' setting have run; i.e. just before entering the
++ * main loop. */
++ {
++ int default_regname = 0;
++ adjust_clip_reg(&default_regname);
++ set_reg_var(default_regname);
++ }
++ #endif
++
+ #if defined(FEAT_DIFF) && defined(FEAT_SCROLLBIND)
+ /* When a startup script or session file setup for diff'ing and
+ * scrollbind, sync the scrollbind now. */
+***************
+*** 1357,1363 ****
+ {
+ apply_autocmds(EVENT_BUFWINLEAVE, buf->b_fname,
+ buf->b_fname, FALSE, buf);
+! buf->b_changedtick = -1; /* note that we did it already */
+ /* start all over, autocommands may mess up the lists */
+ next_tp = first_tabpage;
+ break;
+--- 1369,1375 ----
+ {
+ apply_autocmds(EVENT_BUFWINLEAVE, buf->b_fname,
+ buf->b_fname, FALSE, buf);
+! buf->b_changedtick = -1; /* note that we did it already */
+ /* start all over, autocommands may mess up the lists */
+ next_tp = first_tabpage;
+ break;
+*** ../vim-7.3.507/src/version.c 2012-04-25 17:32:14.000000000 +0200
+--- src/version.c 2012-04-25 18:00:28.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 508,
+ /**/
+
+--
+I wonder, do vegetarians eat fruit bats?
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.509 b/source/ap/vim/patches/7.3.509
new file mode 100644
index 000000000..8dfe9c09d
--- /dev/null
+++ b/source/ap/vim/patches/7.3.509
@@ -0,0 +1,304 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.509
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.509
+Problem: ":vimgrep" fails when 'autochdir' is set.
+Solution: A more generic solution for changing directory. (Ben Fritz)
+Files: src/quickfix.c
+
+
+*** ../vim-7.3.508/src/quickfix.c 2012-03-07 20:13:44.000000000 +0100
+--- src/quickfix.c 2012-04-25 18:52:24.000000000 +0200
+***************
+*** 130,138 ****
+ static void qf_fill_buffer __ARGS((qf_info_T *qi));
+ #endif
+ static char_u *get_mef_name __ARGS((void));
+! static buf_T *load_dummy_buffer __ARGS((char_u *fname));
+! static void wipe_dummy_buffer __ARGS((buf_T *buf));
+! static void unload_dummy_buffer __ARGS((buf_T *buf));
+ static qf_info_T *ll_get_or_alloc_list __ARGS((win_T *));
+
+ /* Quickfix window check helper macro */
+--- 130,139 ----
+ static void qf_fill_buffer __ARGS((qf_info_T *qi));
+ #endif
+ static char_u *get_mef_name __ARGS((void));
+! static void restore_start_dir __ARGS((char_u *dirname_start));
+! static buf_T *load_dummy_buffer __ARGS((char_u *fname, char_u *dirname_start, char_u *resulting_dir));
+! static void wipe_dummy_buffer __ARGS((buf_T *buf, char_u *dirname_start));
+! static void unload_dummy_buffer __ARGS((buf_T *buf, char_u *dirname_start));
+ static qf_info_T *ll_get_or_alloc_list __ARGS((win_T *));
+
+ /* Quickfix window check helper macro */
+***************
+*** 3237,3255 ****
+
+ /* Load file into a buffer, so that 'fileencoding' is detected,
+ * autocommands applied, etc. */
+! buf = load_dummy_buffer(fname);
+!
+! /* When autocommands changed directory: go back. We assume it was
+! * ":lcd %:p:h". */
+! mch_dirname(dirname_now, MAXPATHL);
+! if (STRCMP(dirname_start, dirname_now) != 0)
+! {
+! exarg_T ea;
+!
+! ea.arg = dirname_start;
+! ea.cmdidx = CMD_lcd;
+! ex_cd(&ea);
+! }
+
+ p_mls = save_mls;
+ #if defined(FEAT_AUTOCMD) && defined(FEAT_SYN_HL)
+--- 3238,3244 ----
+
+ /* Load file into a buffer, so that 'fileencoding' is detected,
+ * autocommands applied, etc. */
+! buf = load_dummy_buffer(fname, dirname_start, dirname_now);
+
+ p_mls = save_mls;
+ #if defined(FEAT_AUTOCMD) && defined(FEAT_SYN_HL)
+***************
+*** 3320,3326 ****
+ {
+ /* Never keep a dummy buffer if there is another buffer
+ * with the same name. */
+! wipe_dummy_buffer(buf);
+ buf = NULL;
+ }
+ else if (!cmdmod.hide
+--- 3309,3315 ----
+ {
+ /* Never keep a dummy buffer if there is another buffer
+ * with the same name. */
+! wipe_dummy_buffer(buf, dirname_start);
+ buf = NULL;
+ }
+ else if (!cmdmod.hide
+***************
+*** 3336,3347 ****
+ * many swap files. */
+ if (!found_match)
+ {
+! wipe_dummy_buffer(buf);
+ buf = NULL;
+ }
+ else if (buf != first_match_buf || (flags & VGR_NOJUMP))
+ {
+! unload_dummy_buffer(buf);
+ buf = NULL;
+ }
+ }
+--- 3325,3336 ----
+ * many swap files. */
+ if (!found_match)
+ {
+! wipe_dummy_buffer(buf, dirname_start);
+ buf = NULL;
+ }
+ else if (buf != first_match_buf || (flags & VGR_NOJUMP))
+ {
+! unload_dummy_buffer(buf, dirname_start);
+ buf = NULL;
+ }
+ }
+***************
+*** 3487,3499 ****
+ }
+
+ /*
+! * Load file "fname" into a dummy buffer and return the buffer pointer.
+ * Returns NULL if it fails.
+- * Must call unload_dummy_buffer() or wipe_dummy_buffer() later!
+ */
+ static buf_T *
+! load_dummy_buffer(fname)
+ char_u *fname;
+ {
+ buf_T *newbuf;
+ buf_T *newbuf_to_wipe = NULL;
+--- 3476,3523 ----
+ }
+
+ /*
+! * Restore current working directory to "dirname_start" if they differ, taking
+! * into account whether it is set locally or globally.
+! */
+! static void
+! restore_start_dir(dirname_start)
+! char_u *dirname_start;
+! {
+! char_u *dirname_now = alloc(MAXPATHL);
+!
+! if (NULL != dirname_now)
+! {
+! mch_dirname(dirname_now, MAXPATHL);
+! if (STRCMP(dirname_start, dirname_now) != 0)
+! {
+! /* If the directory has changed, change it back by building up an
+! * appropriate ex command and executing it. */
+! exarg_T ea;
+!
+! ea.arg = dirname_start;
+! ea.cmdidx = (curwin->w_localdir == NULL) ? CMD_cd : CMD_lcd;
+! ex_cd(&ea);
+! }
+! }
+! }
+!
+! /*
+! * Load file "fname" into a dummy buffer and return the buffer pointer,
+! * placing the directory resulting from the buffer load into the
+! * "resulting_dir" pointer. "resulting_dir" must be allocated by the caller
+! * prior to calling this function. Restores directory to "dirname_start" prior
+! * to returning, if autocmds or the 'autochdir' option have changed it.
+! *
+! * If creating the dummy buffer does not fail, must call unload_dummy_buffer()
+! * or wipe_dummy_buffer() later!
+! *
+ * Returns NULL if it fails.
+ */
+ static buf_T *
+! load_dummy_buffer(fname, dirname_start, resulting_dir)
+ char_u *fname;
++ char_u *dirname_start; /* in: old directory */
++ char_u *resulting_dir; /* out: new directory */
+ {
+ buf_T *newbuf;
+ buf_T *newbuf_to_wipe = NULL;
+***************
+*** 3548,3569 ****
+ wipe_buffer(newbuf_to_wipe, FALSE);
+ }
+
+ if (!buf_valid(newbuf))
+ return NULL;
+ if (failed)
+ {
+! wipe_dummy_buffer(newbuf);
+ return NULL;
+ }
+ return newbuf;
+ }
+
+ /*
+! * Wipe out the dummy buffer that load_dummy_buffer() created.
+ */
+ static void
+! wipe_dummy_buffer(buf)
+ buf_T *buf;
+ {
+ if (curbuf != buf) /* safety check */
+ {
+--- 3572,3604 ----
+ wipe_buffer(newbuf_to_wipe, FALSE);
+ }
+
++ /*
++ * When autocommands/'autochdir' option changed directory: go back.
++ * Let the caller know what the resulting dir was first, in case it is
++ * important.
++ */
++ mch_dirname(resulting_dir, MAXPATHL);
++ restore_start_dir(dirname_start);
++
+ if (!buf_valid(newbuf))
+ return NULL;
+ if (failed)
+ {
+! wipe_dummy_buffer(newbuf, dirname_start);
+ return NULL;
+ }
+ return newbuf;
+ }
+
+ /*
+! * Wipe out the dummy buffer that load_dummy_buffer() created. Restores
+! * directory to "dirname_start" prior to returning, if autocmds or the
+! * 'autochdir' option have changed it.
+ */
+ static void
+! wipe_dummy_buffer(buf, dirname_start)
+ buf_T *buf;
++ char_u *dirname_start;
+ {
+ if (curbuf != buf) /* safety check */
+ {
+***************
+*** 3583,3600 ****
+ * new aborting error, interrupt, or uncaught exception. */
+ leave_cleanup(&cs);
+ #endif
+ }
+ }
+
+ /*
+! * Unload the dummy buffer that load_dummy_buffer() created.
+ */
+ static void
+! unload_dummy_buffer(buf)
+ buf_T *buf;
+ {
+ if (curbuf != buf) /* safety check */
+ close_buffer(NULL, buf, DOBUF_UNLOAD, FALSE);
+ }
+
+ #if defined(FEAT_EVAL) || defined(PROTO)
+--- 3618,3645 ----
+ * new aborting error, interrupt, or uncaught exception. */
+ leave_cleanup(&cs);
+ #endif
++ /* When autocommands/'autochdir' option changed directory: go back. */
++ restore_start_dir(dirname_start);
+ }
+ }
+
+ /*
+! * Unload the dummy buffer that load_dummy_buffer() created. Restores
+! * directory to "dirname_start" prior to returning, if autocmds or the
+! * 'autochdir' option have changed it.
+ */
+ static void
+! unload_dummy_buffer(buf, dirname_start)
+ buf_T *buf;
++ char_u *dirname_start;
+ {
+ if (curbuf != buf) /* safety check */
++ {
+ close_buffer(NULL, buf, DOBUF_UNLOAD, FALSE);
++
++ /* When autocommands/'autochdir' option changed directory: go back. */
++ restore_start_dir(dirname_start);
++ }
+ }
+
+ #if defined(FEAT_EVAL) || defined(PROTO)
+*** ../vim-7.3.508/src/version.c 2012-04-25 18:24:24.000000000 +0200
+--- src/version.c 2012-04-25 18:43:10.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 509,
+ /**/
+
+--
+ Arthur pulls Pin out. The MONK blesses the grenade as ...
+ARTHUR: (quietly) One, two, five ...
+GALAHAD: Three, sir!
+ARTHUR: Three.
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.510 b/source/ap/vim/patches/7.3.510
new file mode 100644
index 000000000..afe104144
--- /dev/null
+++ b/source/ap/vim/patches/7.3.510
@@ -0,0 +1,53 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.510
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.510
+Problem: Test 77 fails on Solaris 7. (Michael Soyka)
+Solution: Replace any tabs with spaces.
+Files: src/testdir/test77.in
+
+
+*** ../vim-7.3.509/src/testdir/test77.in 2011-03-22 18:10:34.000000000 +0100
+--- src/testdir/test77.in 2012-04-30 11:30:31.000000000 +0200
+***************
+*** 21,27 ****
+ :while i <= 2000000 | call append(i, range(i, i + 99)) | let i += 100 | endwhile
+ ggdd
+ :w! Xtest
+! :!cksum Xtest > test.out
+ :qa!
+ ENDTEST
+
+--- 21,29 ----
+ :while i <= 2000000 | call append(i, range(i, i + 99)) | let i += 100 | endwhile
+ ggdd
+ :w! Xtest
+! :r !cksum Xtest
+! :s/\s/ /g
+! :.w! test.out
+ :qa!
+ ENDTEST
+
+*** ../vim-7.3.509/src/version.c 2012-04-25 18:57:17.000000000 +0200
+--- src/version.c 2012-04-30 11:33:35.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 510,
+ /**/
+
+--
+SIGFUN -- signature too funny (core dumped)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.511 b/source/ap/vim/patches/7.3.511
new file mode 100644
index 000000000..a2b6dce0f
--- /dev/null
+++ b/source/ap/vim/patches/7.3.511
@@ -0,0 +1,49 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.511
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.511
+Problem: Using a FileReadCmd autocommand that does ":e! {file}" may cause a
+ crash. (Christian Brabandt)
+Solution: Properly restore curwin->w_s.
+Files: src/fileio.c
+
+
+*** ../vim-7.3.510/src/fileio.c 2012-04-25 16:50:44.000000000 +0200
+--- src/fileio.c 2012-04-30 17:04:22.000000000 +0200
+***************
+*** 8982,8987 ****
+--- 8982,8991 ----
+ && buf_valid(aco->new_curbuf)
+ && aco->new_curbuf->b_ml.ml_mfp != NULL)
+ {
++ # if defined(FEAT_SYN_HL) || defined(FEAT_SPELL)
++ if (curwin->w_s == &curbuf->b_s)
++ curwin->w_s = &aco->new_curbuf->b_s;
++ # endif
+ --curbuf->b_nwindows;
+ curbuf = aco->new_curbuf;
+ curwin->w_buffer = curbuf;
+*** ../vim-7.3.510/src/version.c 2012-04-30 11:34:20.000000000 +0200
+--- src/version.c 2012-04-30 17:01:05.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 511,
+ /**/
+
+--
+There is no right or wrong, there is only your personal opinion.
+ (Bram Moolenaar)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.512 b/source/ap/vim/patches/7.3.512
new file mode 100644
index 000000000..838ae3e2f
--- /dev/null
+++ b/source/ap/vim/patches/7.3.512
@@ -0,0 +1,70 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.512
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.512
+Problem: undofile() returns a useless name when passed an empty string.
+Solution: Return an empty string. (Christian Brabandt)
+Files: src/eval.c
+
+
+*** ../vim-7.3.511/src/eval.c 2012-04-25 18:24:24.000000000 +0200
+--- src/eval.c 2012-04-30 17:23:26.000000000 +0200
+***************
+*** 18259,18269 ****
+ rettv->v_type = VAR_STRING;
+ #ifdef FEAT_PERSISTENT_UNDO
+ {
+! char_u *ffname = FullName_save(get_tv_string(&argvars[0]), FALSE);
+
+! if (ffname != NULL)
+! rettv->vval.v_string = u_get_undo_file_name(ffname, FALSE);
+! vim_free(ffname);
+ }
+ #else
+ rettv->vval.v_string = NULL;
+--- 18259,18279 ----
+ rettv->v_type = VAR_STRING;
+ #ifdef FEAT_PERSISTENT_UNDO
+ {
+! char_u *fname = get_tv_string(&argvars[0]);
+
+! if (*fname == NUL)
+! {
+! /* If there is no file name there will be no undo file. */
+! rettv->vval.v_string = NULL;
+! }
+! else
+! {
+! char_u *ffname = FullName_save(fname, FALSE);
+!
+! if (ffname != NULL)
+! rettv->vval.v_string = u_get_undo_file_name(ffname, FALSE);
+! vim_free(ffname);
+! }
+ }
+ #else
+ rettv->vval.v_string = NULL;
+*** ../vim-7.3.511/src/version.c 2012-04-30 17:04:47.000000000 +0200
+--- src/version.c 2012-04-30 17:24:42.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 512,
+ /**/
+
+--
+It is illegal for a driver to be blindfolded while operating a vehicle.
+ [real standing law in Alabama, United States of America]
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.513 b/source/ap/vim/patches/7.3.513
new file mode 100644
index 000000000..396969f50
--- /dev/null
+++ b/source/ap/vim/patches/7.3.513
@@ -0,0 +1,129 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.513
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.513
+Problem: Cannot use CTRL-E and CTRL-Y with "r".
+Solution: Make CTRL-E and CTRL-Y work like in Insert mode. (Christian
+ Brabandt)
+Files: src/edit.c, src/normal.c, src/proto/edit.pro
+
+
+*** ../vim-7.3.512/src/edit.c 2012-04-05 16:07:01.000000000 +0200
+--- src/edit.c 2012-04-30 17:53:47.000000000 +0200
+***************
+*** 253,259 ****
+ #ifdef FEAT_DIGRAPHS
+ static int ins_digraph __ARGS((void));
+ #endif
+- static int ins_copychar __ARGS((linenr_T lnum));
+ static int ins_ctrl_ey __ARGS((int tc));
+ #ifdef FEAT_SMARTINDENT
+ static void ins_try_si __ARGS((int c));
+--- 253,258 ----
+***************
+*** 9899,9905 ****
+ * Handle CTRL-E and CTRL-Y in Insert mode: copy char from other line.
+ * Returns the char to be inserted, or NUL if none found.
+ */
+! static int
+ ins_copychar(lnum)
+ linenr_T lnum;
+ {
+--- 9898,9904 ----
+ * Handle CTRL-E and CTRL-Y in Insert mode: copy char from other line.
+ * Returns the char to be inserted, or NUL if none found.
+ */
+! int
+ ins_copychar(lnum)
+ linenr_T lnum;
+ {
+*** ../vim-7.3.512/src/normal.c 2012-03-28 12:59:53.000000000 +0200
+--- src/normal.c 2012-04-30 18:06:13.000000000 +0200
+***************
+*** 7070,7076 ****
+ for (n = cap->count1; n > 0; --n)
+ {
+ State = REPLACE;
+! ins_char(cap->nchar);
+ State = old_State;
+ if (cap->ncharC1 != 0)
+ ins_char(cap->ncharC1);
+--- 7070,7087 ----
+ for (n = cap->count1; n > 0; --n)
+ {
+ State = REPLACE;
+! if (cap->nchar == Ctrl_E || cap->nchar == Ctrl_Y)
+! {
+! int c = ins_copychar(curwin->w_cursor.lnum
+! + (cap->nchar == Ctrl_Y ? -1 : 1));
+! if (c != NUL)
+! ins_char(c);
+! else
+! /* will be decremented further down */
+! ++curwin->w_cursor.col;
+! }
+! else
+! ins_char(cap->nchar);
+ State = old_State;
+ if (cap->ncharC1 != 0)
+ ins_char(cap->ncharC1);
+***************
+*** 7092,7098 ****
+ * line will be changed.
+ */
+ ptr = ml_get_buf(curbuf, curwin->w_cursor.lnum, TRUE);
+! ptr[curwin->w_cursor.col] = cap->nchar;
+ if (p_sm && msg_silent == 0)
+ showmatch(cap->nchar);
+ ++curwin->w_cursor.col;
+--- 7103,7117 ----
+ * line will be changed.
+ */
+ ptr = ml_get_buf(curbuf, curwin->w_cursor.lnum, TRUE);
+! if (cap->nchar == Ctrl_E || cap->nchar == Ctrl_Y)
+! {
+! int c = ins_copychar(curwin->w_cursor.lnum
+! + (cap->nchar == Ctrl_Y ? -1 : 1));
+! if (c != NUL)
+! ptr[curwin->w_cursor.col] = c;
+! }
+! else
+! ptr[curwin->w_cursor.col] = cap->nchar;
+ if (p_sm && msg_silent == 0)
+ showmatch(cap->nchar);
+ ++curwin->w_cursor.col;
+*** ../vim-7.3.512/src/proto/edit.pro 2010-08-15 21:57:28.000000000 +0200
+--- src/proto/edit.pro 2012-04-30 17:54:41.000000000 +0200
+***************
+*** 39,42 ****
+--- 39,43 ----
+ int hkmap __ARGS((int c));
+ void ins_scroll __ARGS((void));
+ void ins_horscroll __ARGS((void));
++ int ins_copychar __ARGS((linenr_T lnum));
+ /* vim: set ft=c : */
+*** ../vim-7.3.512/src/version.c 2012-04-30 17:35:44.000000000 +0200
+--- src/version.c 2012-04-30 18:17:52.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 513,
+ /**/
+
+--
+It is illegal for anyone to try and stop a child from playfully jumping over
+puddles of water.
+ [real standing law in California, United States of America]
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.514 b/source/ap/vim/patches/7.3.514
new file mode 100644
index 000000000..79620f0e1
--- /dev/null
+++ b/source/ap/vim/patches/7.3.514
@@ -0,0 +1,232 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.514
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.514
+Problem: No completion for :history command.
+Solution: Add the completion and update the docs. Also fix ":behave"
+ completion. (Dominique Pelle)
+Files: runtime/doc/cmdline.txt, runtime/doc/map.txt, src/ex_docmd.c,
+ src/ex_getln.c, src/vim.h
+
+
+*** ../vim-7.3.513/runtime/doc/cmdline.txt 2010-08-15 21:57:17.000000000 +0200
+--- runtime/doc/cmdline.txt 2012-04-30 18:30:00.000000000 +0200
+***************
+*** 330,341 ****
+
+ :his[tory] [{name}] [{first}][, [{last}]]
+ List the contents of history {name} which can be:
+! c[md] or : command-line history
+! s[earch] or / search string history
+! e[xpr] or = expression register history
+! i[nput] or @ input line history
+! d[ebug] or > debug command history
+! a[ll] all of the above
+ {not in Vi}
+
+ If the numbers {first} and/or {last} are given, the respective
+--- 330,341 ----
+
+ :his[tory] [{name}] [{first}][, [{last}]]
+ List the contents of history {name} which can be:
+! c[md] or : command-line history
+! s[earch] or / or ? search string history
+! e[xpr] or = expression register history
+! i[nput] or @ input line history
+! d[ebug] or > debug command history
+! a[ll] all of the above
+ {not in Vi}
+
+ If the numbers {first} and/or {last} are given, the respective
+*** ../vim-7.3.513/runtime/doc/map.txt 2011-07-20 16:36:35.000000000 +0200
+--- runtime/doc/map.txt 2012-04-30 18:30:00.000000000 +0200
+***************
+*** 1202,1207 ****
+--- 1219,1225 ----
+
+ -complete=augroup autocmd groups
+ -complete=buffer buffer names
++ -complete=behave :behave suboptions
+ -complete=color color schemes
+ -complete=command Ex command (and arguments)
+ -complete=compiler compilers
+***************
+*** 1216,1221 ****
+--- 1234,1240 ----
+ -complete=function function name
+ -complete=help help subjects
+ -complete=highlight highlight groups
++ -complete=history :history suboptions
+ -complete=locale locale names (as output of locale -a)
+ -complete=mapping mapping name
+ -complete=menu menus
+*** ../vim-7.3.513/src/ex_docmd.c 2012-02-12 20:13:55.000000000 +0100
+--- src/ex_docmd.c 2012-04-30 18:33:27.000000000 +0200
+***************
+*** 3920,3927 ****
+--- 3920,3935 ----
+ #endif
+ case CMD_behave:
+ xp->xp_context = EXPAND_BEHAVE;
++ xp->xp_pattern = arg;
+ break;
+
++ #if defined(FEAT_CMDHIST)
++ case CMD_history:
++ xp->xp_context = EXPAND_HISTORY;
++ xp->xp_pattern = arg;
++ break;
++ #endif
++
+ #endif /* FEAT_CMDL_COMPL */
+
+ default:
+***************
+*** 5329,5334 ****
+--- 5337,5343 ----
+ } command_complete[] =
+ {
+ {EXPAND_AUGROUP, "augroup"},
++ {EXPAND_BEHAVE, "behave"},
+ {EXPAND_BUFFERS, "buffer"},
+ {EXPAND_COLORS, "color"},
+ {EXPAND_COMMANDS, "command"},
+***************
+*** 5350,5357 ****
+ {EXPAND_FUNCTIONS, "function"},
+ {EXPAND_HELP, "help"},
+ {EXPAND_HIGHLIGHT, "highlight"},
+ #if (defined(HAVE_LOCALE_H) || defined(X_LOCALE)) \
+! && (defined(FEAT_GETTEXT) || defined(FEAT_MBYTE))
+ {EXPAND_LOCALES, "locale"},
+ #endif
+ {EXPAND_MAPPINGS, "mapping"},
+--- 5359,5369 ----
+ {EXPAND_FUNCTIONS, "function"},
+ {EXPAND_HELP, "help"},
+ {EXPAND_HIGHLIGHT, "highlight"},
++ #if defined(FEAT_CMDHIST)
++ {EXPAND_HISTORY, "history"},
++ #endif
+ #if (defined(HAVE_LOCALE_H) || defined(X_LOCALE)) \
+! && (defined(FEAT_GETTEXT) || defined(FEAT_MBYTE))
+ {EXPAND_LOCALES, "locale"},
+ #endif
+ {EXPAND_MAPPINGS, "mapping"},
+*** ../vim-7.3.513/src/ex_getln.c 2012-03-07 19:16:49.000000000 +0100
+--- src/ex_getln.c 2012-04-30 18:36:04.000000000 +0200
+***************
+*** 25,31 ****
+ int cmdlen; /* number of chars in command line */
+ int cmdpos; /* current cursor position */
+ int cmdspos; /* cursor column on screen */
+! int cmdfirstc; /* ':', '/', '?', '=' or NUL */
+ int cmdindent; /* number of spaces before cmdline */
+ char_u *cmdprompt; /* message in front of cmdline */
+ int cmdattr; /* attributes for prompt */
+--- 25,31 ----
+ int cmdlen; /* number of chars in command line */
+ int cmdpos; /* current cursor position */
+ int cmdspos; /* cursor column on screen */
+! int cmdfirstc; /* ':', '/', '?', '=', '>' or NUL */
+ int cmdindent; /* number of spaces before cmdline */
+ char_u *cmdprompt; /* message in front of cmdline */
+ int cmdattr; /* attributes for prompt */
+***************
+*** 111,116 ****
+--- 111,119 ----
+ #ifdef FEAT_CMDL_COMPL
+ static int expand_shellcmd __ARGS((char_u *filepat, int *num_file, char_u ***file, int flagsarg));
+ static int ExpandRTDir __ARGS((char_u *pat, int *num_file, char_u ***file, char *dirname[]));
++ # ifdef FEAT_CMDHIST
++ static char_u *get_history_arg __ARGS((expand_T *xp, int idx));
++ # endif
+ # if defined(FEAT_USR_CMDS) && defined(FEAT_EVAL)
+ static int ExpandUserDefined __ARGS((expand_T *xp, regmatch_T *regmatch, int *num_file, char_u ***file));
+ static int ExpandUserList __ARGS((expand_T *xp, int *num_file, char_u ***file));
+***************
+*** 4628,4633 ****
+--- 4631,4639 ----
+ {
+ {EXPAND_COMMANDS, get_command_name, FALSE, TRUE},
+ {EXPAND_BEHAVE, get_behave_arg, TRUE, TRUE},
++ #ifdef FEAT_CMDHIST
++ {EXPAND_HISTORY, get_history_arg, TRUE, TRUE},
++ #endif
+ #ifdef FEAT_USR_CMDS
+ {EXPAND_USER_COMMANDS, get_user_commands, FALSE, TRUE},
+ {EXPAND_USER_CMD_FLAGS, get_user_cmd_flags, FALSE, TRUE},
+***************
+*** 5245,5250 ****
+--- 5251,5284 ----
+ NULL
+ };
+
++ #if defined(FEAT_CMDL_COMPL) || defined(PROTO)
++ /*
++ * Function given to ExpandGeneric() to obtain the possible first
++ * arguments of the ":history command.
++ */
++ static char_u *
++ get_history_arg(xp, idx)
++ expand_T *xp UNUSED;
++ int idx;
++ {
++ static char_u compl[2] = { NUL, NUL };
++ char *short_names = ":=@>?/";
++ int short_names_count = STRLEN(short_names);
++ int history_name_count = sizeof(history_names) / sizeof(char *) - 1;
++
++ if (idx < short_names_count)
++ {
++ compl[0] = (char_u)short_names[idx];
++ return compl;
++ }
++ if (idx < short_names_count + history_name_count)
++ return (char_u *)history_names[idx - short_names_count];
++ if (idx == short_names_count + history_name_count)
++ return (char_u *)"all";
++ return NULL;
++ }
++ #endif
++
+ /*
+ * init_history() - Initialize the command line history.
+ * Also used to re-allocate the history when the size changes.
+*** ../vim-7.3.513/src/vim.h 2012-03-23 16:25:13.000000000 +0100
+--- src/vim.h 2012-04-30 18:30:00.000000000 +0200
+***************
+*** 781,786 ****
+--- 781,787 ----
+ #define EXPAND_FILES_IN_PATH 38
+ #define EXPAND_OWNSYNTAX 39
+ #define EXPAND_LOCALES 40
++ #define EXPAND_HISTORY 41
+
+ /* Values for exmode_active (0 is no exmode) */
+ #define EXMODE_NORMAL 1
+*** ../vim-7.3.513/src/version.c 2012-04-30 18:18:43.000000000 +0200
+--- src/version.c 2012-04-30 18:36:19.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 514,
+ /**/
+
+--
+You can be stopped by the police for biking over 65 miles per hour.
+You are not allowed to walk across a street on your hands.
+ [real standing laws in Connecticut, United States of America]
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.515 b/source/ap/vim/patches/7.3.515
new file mode 100644
index 000000000..dad6f617f
--- /dev/null
+++ b/source/ap/vim/patches/7.3.515
@@ -0,0 +1,68 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.515
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.515
+Problem: 'wildignorecase' only applies to the last part of the path.
+Solution: Also ignore case for letters earlier in the path.
+Files: src/misc1.c
+
+
+*** ../vim-7.3.514/src/misc1.c 2012-04-09 20:42:20.000000000 +0200
+--- src/misc1.c 2012-04-30 21:00:18.000000000 +0200
+***************
+*** 9461,9466 ****
+--- 9461,9467 ----
+
+ /*
+ * Find the first part in the path name that contains a wildcard.
++ * When EW_ICASE is set every letter is considered to be a wildcard.
+ * Copy it into "buf", including the preceding characters.
+ */
+ p = buf;
+***************
+*** 9480,9486 ****
+ s = p + 1;
+ }
+ else if (path_end >= path + wildoff
+! && vim_strchr((char_u *)"*?[{~$", *path_end) != NULL)
+ e = p;
+ #ifdef FEAT_MBYTE
+ if (has_mbyte)
+--- 9481,9492 ----
+ s = p + 1;
+ }
+ else if (path_end >= path + wildoff
+! && (vim_strchr((char_u *)"*?[{~$", *path_end) != NULL
+! #ifndef CASE_INSENSITIVE_FILENAME
+! || ((flags & EW_ICASE)
+! && isalpha(PTR2CHAR(path_end)))
+! #endif
+! ))
+ e = p;
+ #ifdef FEAT_MBYTE
+ if (has_mbyte)
+*** ../vim-7.3.514/src/version.c 2012-04-30 18:48:38.000000000 +0200
+--- src/version.c 2012-04-30 21:05:10.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 515,
+ /**/
+
+--
+If an elephant is left tied to a parking meter, the parking fee has to be paid
+just as it would for a vehicle.
+ [real standing law in Florida, United States of America]
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.516 b/source/ap/vim/patches/7.3.516
new file mode 100644
index 000000000..d43be5a09
--- /dev/null
+++ b/source/ap/vim/patches/7.3.516
@@ -0,0 +1,94 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.516
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.516
+Problem: extend(o, o) may crash Vim.
+Solution: Fix crash and add test. (Thinca and Hirohito Higashi)
+Files: src/eval.c, src/testdir/test55.in, src/testdir/test55.ok
+
+
+*** ../vim-7.3.515/src/eval.c 2012-04-30 17:35:44.000000000 +0200
+--- src/eval.c 2012-05-18 12:02:44.000000000 +0200
+***************
+*** 10191,10197 ****
+ EMSG2(_("E737: Key already exists: %s"), hi2->hi_key);
+ break;
+ }
+! else if (*action == 'f')
+ {
+ clear_tv(&di1->di_tv);
+ copy_tv(&HI2DI(hi2)->di_tv, &di1->di_tv);
+--- 10191,10197 ----
+ EMSG2(_("E737: Key already exists: %s"), hi2->hi_key);
+ break;
+ }
+! else if (*action == 'f' && HI2DI(hi2) != di1)
+ {
+ clear_tv(&di1->di_tv);
+ copy_tv(&HI2DI(hi2)->di_tv, &di1->di_tv);
+*** ../vim-7.3.515/src/testdir/test55.in 2010-11-10 20:31:24.000000000 +0100
+--- src/testdir/test55.in 2012-05-18 11:57:23.000000000 +0200
+***************
+*** 352,357 ****
+--- 352,375 ----
+ :let dict4copy = deepcopy(dict4)
+ :$put =(l == lcopy)
+ :$put =(dict4 == dict4copy)
++ :"
++ :" Pass the same List to extend()
++ :let l = [1, 2, 3, 4, 5]
++ :call extend(l, l)
++ :$put =string(l)
++ :"
++ :" Pass the same Dict to extend()
++ :let d = { 'a': {'b': 'B'}}
++ :call extend(d, d)
++ :$put =string(d)
++ :"
++ :" Pass the same Dict to extend() with "error"
++ :try
++ : call extend(d, d, "error")
++ :catch
++ : $put =v:exception[:15] . v:exception[-1:-1]
++ :endtry
++ :$put =string(d)
+ :endfun
+ :"
+ :call Test(1, 2, [3, 4], {5: 6}) " This may take a while
+*** ../vim-7.3.515/src/testdir/test55.ok 2010-11-10 20:31:24.000000000 +0100
+--- src/testdir/test55.ok 2012-05-18 11:57:01.000000000 +0200
+***************
+*** 111,113 ****
+--- 111,117 ----
+ 0
+ 1
+ 1
++ [1, 2, 3, 4, 5, 1, 2, 3, 4, 5]
++ {'a': {'b': 'B'}}
++ Vim(call):E737: a
++ {'a': {'b': 'B'}}
+*** ../vim-7.3.515/src/version.c 2012-04-30 21:09:38.000000000 +0200
+--- src/version.c 2012-05-18 12:04:54.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 516,
+ /**/
+
+--
+I used to wonder about the meaning of life. But I looked it
+up in the dictionary under "L" and there it was - the meaning
+of life. It was less than I expected. - Dogbert
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.517 b/source/ap/vim/patches/7.3.517
new file mode 100644
index 000000000..343693ba3
--- /dev/null
+++ b/source/ap/vim/patches/7.3.517
@@ -0,0 +1,60 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.517
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.517
+Problem: Crash when using "vipvv". (Alexandre Provencio)
+Solution: Don't let the text length become negative.
+Files: src/ops.c
+
+
+*** ../vim-7.3.516/src/ops.c 2012-04-20 13:46:02.000000000 +0200
+--- src/ops.c 2012-05-18 12:28:09.000000000 +0200
+***************
+*** 3042,3047 ****
+--- 3042,3049 ----
+ }
+ #endif
+ }
++ if (endcol == MAXCOL)
++ endcol = (colnr_T)STRLEN(p);
+ if (startcol > endcol
+ #ifdef FEAT_VIRTUALEDIT
+ || is_oneChar
+***************
+*** 3050,3057 ****
+ bd.textlen = 0;
+ else
+ {
+- if (endcol == MAXCOL)
+- endcol = (colnr_T)STRLEN(p);
+ bd.textlen = endcol - startcol + oap->inclusive;
+ }
+ bd.textstart = p + startcol;
+--- 3052,3057 ----
+*** ../vim-7.3.516/src/version.c 2012-05-18 12:06:58.000000000 +0200
+--- src/version.c 2012-05-18 12:48:51.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 517,
+ /**/
+
+--
+BODY: I'm not dead!
+CART DRIVER: 'Ere. He says he's not dead.
+LARGE MAN: Yes he is.
+BODY: I'm not!
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.518 b/source/ap/vim/patches/7.3.518
new file mode 100644
index 000000000..89429f0c6
--- /dev/null
+++ b/source/ap/vim/patches/7.3.518
@@ -0,0 +1,57 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.518
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.518
+Problem: When 'encoding' is a double-byte encoding ":helptags" may not find
+ tags correctly.
+Solution: Use vim_strbyte() instead of vim_strchr(). (Yasuhiro Matsumoto)
+Files: src/ex_cmds.c
+
+
+*** ../vim-7.3.517/src/ex_cmds.c 2012-04-25 17:32:14.000000000 +0200
+--- src/ex_cmds.c 2012-05-18 16:20:20.000000000 +0200
+***************
+*** 6535,6541 ****
+ p1 = vim_strchr(IObuff, '*'); /* find first '*' */
+ while (p1 != NULL)
+ {
+! p2 = vim_strchr(p1 + 1, '*'); /* find second '*' */
+ if (p2 != NULL && p2 > p1 + 1) /* skip "*" and "**" */
+ {
+ for (s = p1 + 1; s < p2; ++s)
+--- 6535,6544 ----
+ p1 = vim_strchr(IObuff, '*'); /* find first '*' */
+ while (p1 != NULL)
+ {
+! /* Use vim_strbyte() instead of vim_strchr() so that when
+! * 'encoding' is dbcs it still works, don't find '*' in the
+! * second byte. */
+! p2 = vim_strbyte(p1 + 1, '*'); /* find second '*' */
+ if (p2 != NULL && p2 > p1 + 1) /* skip "*" and "**" */
+ {
+ for (s = p1 + 1; s < p2; ++s)
+*** ../vim-7.3.517/src/version.c 2012-05-18 12:49:33.000000000 +0200
+--- src/version.c 2012-05-18 16:23:50.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 518,
+ /**/
+
+--
+If all you have is a hammer, everything looks like a nail.
+When your hammer is C++, everything begins to look like a thumb.
+ -- Steve Hoflich, comp.lang.c++
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.519 b/source/ap/vim/patches/7.3.519
new file mode 100644
index 000000000..846cea6b5
--- /dev/null
+++ b/source/ap/vim/patches/7.3.519
@@ -0,0 +1,64 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.519
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.519
+Problem: When completefunction returns it cannot indicate end of completion
+ mode.
+Solution: Recognize completefunction returning -3. (Mtsushita Shougo)
+Files: src/edit.c
+
+
+*** ../vim-7.3.518/src/edit.c 2012-04-30 18:18:43.000000000 +0200
+--- src/edit.c 2012-05-18 16:35:06.000000000 +0200
+***************
+*** 5205,5213 ****
+ }
+
+ /* Return value -2 means the user complete function wants to
+! * cancel the complete without an error. */
+ if (col == -2)
+ return FAIL;
+
+ /*
+ * Reset extended parameters of completion, when start new
+--- 5205,5221 ----
+ }
+
+ /* Return value -2 means the user complete function wants to
+! * cancel the complete without an error.
+! * Return value -3 does the same as -2 and leaves CTRL-X mode.*/
+ if (col == -2)
+ return FAIL;
++ if (col == -3)
++ {
++ ctrl_x_mode = 0;
++ edit_submode = NULL;
++ msg_clr_cmdline();
++ return FAIL;
++ }
+
+ /*
+ * Reset extended parameters of completion, when start new
+*** ../vim-7.3.518/src/version.c 2012-05-18 16:24:06.000000000 +0200
+--- src/version.c 2012-05-18 16:34:27.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 519,
+ /**/
+
+--
+Looking at Perl through Lisp glasses, Perl looks atrocious.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.520 b/source/ap/vim/patches/7.3.520
new file mode 100644
index 000000000..9e2da8d7b
--- /dev/null
+++ b/source/ap/vim/patches/7.3.520
@@ -0,0 +1,140 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.520
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.520
+Problem: Gvim starts up slow on Unbuntu 12.04.
+Solution: Move the call to gui_mch_init_check() to after fork(). (Yasuhiro
+ Matsumoto) Do check $DISPLAY being set.
+Files: src/gui.c, src/gui_gtk_x11.c, src/proto/gui_gtk_x11.pro
+
+
+*** ../vim-7.3.519/src/gui.c 2011-10-20 21:27:57.000000000 +0200
+--- src/gui.c 2012-05-18 16:53:14.000000000 +0200
+***************
+*** 270,275 ****
+--- 270,281 ----
+ }
+ /* Child */
+
++ #ifdef FEAT_GUI_GTK
++ /* Call gtk_init_check() here after fork(). See gui_init_check(). */
++ if (gui_mch_init_check() != OK)
++ exit(1);
++ #endif
++
+ # if defined(HAVE_SETSID) || defined(HAVE_SETPGID)
+ /*
+ * Change our process group. On some systems/shells a CTRL-C in the
+***************
+*** 430,436 ****
+--- 436,452 ----
+ #ifdef ALWAYS_USE_GUI
+ result = OK;
+ #else
++ # ifdef FEAT_GUI_GTK
++ /*
++ * Note: Don't call gtk_init_check() before fork, it will be called after
++ * the fork. When calling it before fork, it make vim hang for a while.
++ * See gui_do_fork().
++ * Use a simpler check if the GUI window can probably be opened.
++ */
++ result = gui.dofork ? gui_mch_early_init_check() : gui_mch_init_check();
++ # else
+ result = gui_mch_init_check();
++ # endif
+ #endif
+ return result;
+ }
+*** ../vim-7.3.519/src/gui_gtk_x11.c 2011-10-26 11:36:21.000000000 +0200
+--- src/gui_gtk_x11.c 2012-05-18 17:00:45.000000000 +0200
+***************
+*** 1414,1420 ****
+ }
+
+ /*
+! * Check if the GUI can be started. Called before gvimrc is sourced.
+ * Return OK or FAIL.
+ */
+ int
+--- 1414,1442 ----
+ }
+
+ /*
+! * Check if the GUI can be started. Called before gvimrc is sourced and
+! * before fork().
+! * Return OK or FAIL.
+! */
+! int
+! gui_mch_early_init_check(void)
+! {
+! char_u *p;
+!
+! /* Guess that when $DISPLAY isn't set the GUI can't start. */
+! p = mch_getenv((char_u *)"DISPLAY");
+! if (p == NULL || *p == NUL)
+! {
+! gui.dying = TRUE;
+! EMSG(_((char *)e_opendisp));
+! return FAIL;
+! }
+! return OK;
+! }
+!
+! /*
+! * Check if the GUI can be started. Called before gvimrc is sourced but after
+! * fork().
+ * Return OK or FAIL.
+ */
+ int
+***************
+*** 3050,3056 ****
+
+ for (i = 0; i < (int)N_SELECTION_TARGETS; ++i)
+ {
+! /* OpenOffice tries to use TARGET_HTML and fails when it doesn't
+ * return something, instead of trying another target. Therefore only
+ * offer TARGET_HTML when it works. */
+ if (!clip_html && selection_targets[i].info == TARGET_HTML)
+--- 3072,3078 ----
+
+ for (i = 0; i < (int)N_SELECTION_TARGETS; ++i)
+ {
+! /* OpenOffice tries to use TARGET_HTML and fails when we don't
+ * return something, instead of trying another target. Therefore only
+ * offer TARGET_HTML when it works. */
+ if (!clip_html && selection_targets[i].info == TARGET_HTML)
+*** ../vim-7.3.519/src/proto/gui_gtk_x11.pro 2011-08-10 17:44:41.000000000 +0200
+--- src/proto/gui_gtk_x11.pro 2012-05-18 16:54:28.000000000 +0200
+***************
+*** 4,9 ****
+--- 4,10 ----
+ void gui_mch_set_blinking __ARGS((long waittime, long on, long off));
+ void gui_mch_stop_blink __ARGS((void));
+ void gui_mch_start_blink __ARGS((void));
++ int gui_mch_early_init_check __ARGS((void));
+ int gui_mch_init_check __ARGS((void));
+ void gui_mch_show_tabline __ARGS((int showit));
+ int gui_mch_showing_tabline __ARGS((void));
+*** ../vim-7.3.519/src/version.c 2012-05-18 16:35:17.000000000 +0200
+--- src/version.c 2012-05-18 16:45:30.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 520,
+ /**/
+
+--
+Bad programs can be written in any language.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.521 b/source/ap/vim/patches/7.3.521
new file mode 100644
index 000000000..efe7122b9
--- /dev/null
+++ b/source/ap/vim/patches/7.3.521
@@ -0,0 +1,129 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.521
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.521
+Problem: Using "z=" on a multi-byte character may cause a crash.
+Solution: Don't use strlen() on an int pointer.
+Files: src/spell.c
+
+
+*** ../vim-7.3.520/src/spell.c 2012-01-10 22:26:12.000000000 +0100
+--- src/spell.c 2012-05-18 18:01:58.000000000 +0200
+***************
+*** 14494,14506 ****
+ int p0 = -333;
+ int c0;
+ int did_white = FALSE;
+
+ /*
+ * Convert the multi-byte string to a wide-character string.
+ * Remove accents, if wanted. We actually remove all non-word characters.
+ * But keep white space.
+ */
+! n = 0;
+ for (s = inword; *s != NUL; )
+ {
+ t = s;
+--- 14494,14508 ----
+ int p0 = -333;
+ int c0;
+ int did_white = FALSE;
++ int wordlen;
++
+
+ /*
+ * Convert the multi-byte string to a wide-character string.
+ * Remove accents, if wanted. We actually remove all non-word characters.
+ * But keep white space.
+ */
+! wordlen = 0;
+ for (s = inword; *s != NUL; )
+ {
+ t = s;
+***************
+*** 14521,14532 ****
+ continue;
+ }
+ }
+! word[n++] = c;
+ }
+! word[n] = NUL;
+
+ /*
+! * This comes from Aspell phonet.cpp.
+ * Converted from C++ to C. Added support for multi-byte chars.
+ * Changed to keep spaces.
+ */
+--- 14523,14534 ----
+ continue;
+ }
+ }
+! word[wordlen++] = c;
+ }
+! word[wordlen] = NUL;
+
+ /*
+! * This algorithm comes from Aspell phonet.cpp.
+ * Converted from C++ to C. Added support for multi-byte chars.
+ * Changed to keep spaces.
+ */
+***************
+*** 14711,14717 ****
+ }
+ if (k > k0)
+ mch_memmove(word + i + k0, word + i + k,
+! sizeof(int) * (STRLEN(word + i + k) + 1));
+
+ /* new "actual letter" */
+ c = word[i];
+--- 14713,14719 ----
+ }
+ if (k > k0)
+ mch_memmove(word + i + k0, word + i + k,
+! sizeof(int) * (wordlen - (i + k) + 1));
+
+ /* new "actual letter" */
+ c = word[i];
+***************
+*** 14739,14745 ****
+ if (c != NUL)
+ wres[reslen++] = c;
+ mch_memmove(word, word + i + 1,
+! sizeof(int) * (STRLEN(word + i + 1) + 1));
+ i = 0;
+ z0 = 1;
+ }
+--- 14741,14747 ----
+ if (c != NUL)
+ wres[reslen++] = c;
+ mch_memmove(word, word + i + 1,
+! sizeof(int) * (wordlen - (i + 1) + 1));
+ i = 0;
+ z0 = 1;
+ }
+*** ../vim-7.3.520/src/version.c 2012-05-18 17:03:14.000000000 +0200
+--- src/version.c 2012-05-18 18:06:29.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 521,
+ /**/
+
+--
+OLD WOMAN: King of the WHO?
+ARTHUR: The Britons.
+OLD WOMAN: Who are the Britons?
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.522 b/source/ap/vim/patches/7.3.522
new file mode 100644
index 000000000..2f4d17ce7
--- /dev/null
+++ b/source/ap/vim/patches/7.3.522
@@ -0,0 +1,56 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.522
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.522
+Problem: Crash in vim_realloc() when using MEM_PROFILE.
+Solution: Avoid using a NULL argument. (Dominique Pelle)
+Files: src/eval.c
+
+
+*** ../vim-7.3.521/src/eval.c 2012-05-18 12:06:58.000000000 +0200
+--- src/eval.c 2012-05-18 18:19:25.000000000 +0200
+***************
+*** 14643,14649 ****
+ long growmin = (long)((p - start) * 2 + prevlen);
+ prevsize = grow50pc > growmin ? grow50pc : growmin;
+ }
+! if ((newprev = vim_realloc(prev, prevsize)) == NULL)
+ {
+ do_outofmem_msg((long_u)prevsize);
+ failed = TRUE;
+--- 14643,14651 ----
+ long growmin = (long)((p - start) * 2 + prevlen);
+ prevsize = grow50pc > growmin ? grow50pc : growmin;
+ }
+! newprev = prev == NULL ? alloc(prevsize)
+! : vim_realloc(prev, prevsize);
+! if (newprev == NULL)
+ {
+ do_outofmem_msg((long_u)prevsize);
+ failed = TRUE;
+*** ../vim-7.3.521/src/version.c 2012-05-18 18:07:57.000000000 +0200
+--- src/version.c 2012-05-18 18:33:36.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 522,
+ /**/
+
+--
+ARTHUR: ... and I am your king ....
+OLD WOMAN: Ooooh! I didn't know we had a king. I thought we were an
+ autonomous collective ...
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.523 b/source/ap/vim/patches/7.3.523
new file mode 100644
index 000000000..7eec3ea2f
--- /dev/null
+++ b/source/ap/vim/patches/7.3.523
@@ -0,0 +1,103 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.523
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.523
+Problem: ":diffupdate" doesn't check for files changed elsewhere.
+Solution: Add the ! flag. (Christian Brabandt)
+Files: runtime/doc/diff.txt, src/diff.c, src/ex_cmds.h
+
+
+*** ../vim-7.3.522/runtime/doc/diff.txt 2010-08-15 21:57:16.000000000 +0200
+--- runtime/doc/diff.txt 2012-05-18 18:41:49.000000000 +0200
+***************
+*** 178,184 ****
+ nodiff" before hiding it.
+
+ *:diffu* *:diffupdate*
+! :diffu[pdate] Update the diff highlighting and folds.
+
+ Vim attempts to keep the differences updated when you make changes to the
+ text. This mostly takes care of inserted and deleted lines. Changes within a
+--- 178,184 ----
+ nodiff" before hiding it.
+
+ *:diffu* *:diffupdate*
+! :diffu[pdate][!] Update the diff highlighting and folds.
+
+ Vim attempts to keep the differences updated when you make changes to the
+ text. This mostly takes care of inserted and deleted lines. Changes within a
+***************
+*** 187,192 ****
+--- 187,195 ----
+
+ :diffupdate
+
++ If the ! is included Vim will check if the file was changed externally and
++ needs to be reloaded. It will prompt for each changed file, like `:checktime`
++ was used.
+
+ Vim will show filler lines for lines that are missing in one window but are
+ present in another. These lines were inserted in another file or deleted in
+*** ../vim-7.3.522/src/diff.c 2010-09-21 16:56:29.000000000 +0200
+--- src/diff.c 2012-05-18 18:45:09.000000000 +0200
+***************
+*** 783,788 ****
+--- 783,797 ----
+ goto theend;
+ }
+
++ /* :diffupdate! */
++ if (eap != NULL && eap->forceit)
++ for (idx_new = idx_orig; idx_new < DB_COUNT; ++idx_new)
++ {
++ buf = curtab->tp_diffbuf[idx_new];
++ if (buf_valid(buf))
++ buf_check_timestamp(buf, FALSE);
++ }
++
+ /* Write the first buffer to a tempfile. */
+ buf = curtab->tp_diffbuf[idx_orig];
+ if (diff_write(buf, tmp_orig) == FAIL)
+*** ../vim-7.3.522/src/ex_cmds.h 2012-02-13 00:01:38.000000000 +0100
+--- src/ex_cmds.h 2012-05-18 18:37:56.000000000 +0200
+***************
+*** 304,310 ****
+ EX(CMD_display, "display", ex_display,
+ EXTRA|NOTRLCOM|TRLBAR|SBOXOK|CMDWIN),
+ EX(CMD_diffupdate, "diffupdate", ex_diffupdate,
+! TRLBAR),
+ EX(CMD_diffget, "diffget", ex_diffgetput,
+ RANGE|EXTRA|TRLBAR|MODIFY),
+ EX(CMD_diffoff, "diffoff", ex_diffoff,
+--- 304,310 ----
+ EX(CMD_display, "display", ex_display,
+ EXTRA|NOTRLCOM|TRLBAR|SBOXOK|CMDWIN),
+ EX(CMD_diffupdate, "diffupdate", ex_diffupdate,
+! BANG|TRLBAR),
+ EX(CMD_diffget, "diffget", ex_diffgetput,
+ RANGE|EXTRA|TRLBAR|MODIFY),
+ EX(CMD_diffoff, "diffoff", ex_diffoff,
+*** ../vim-7.3.522/src/version.c 2012-05-18 18:34:15.000000000 +0200
+--- src/version.c 2012-05-18 18:39:13.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 523
+ /**/
+
+--
+"The future's already arrived - it's just not evenly distributed yet."
+ -- William Gibson
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.524 b/source/ap/vim/patches/7.3.524
new file mode 100644
index 000000000..80d7baf66
--- /dev/null
+++ b/source/ap/vim/patches/7.3.524
@@ -0,0 +1,46 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.524
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.524 (after 7.3.523)
+Problem: Missing comma.
+Solution: Add the comma.
+Files: src/version.c
+
+
+*** ../vim-7.3.523/src/version.c 2012-05-18 18:47:11.000000000 +0200
+--- src/version.c 2012-05-18 21:52:26.000000000 +0200
+***************
+*** 715,721 ****
+ static int included_patches[] =
+ { /* Add new patch number below this line */
+ /**/
+! 523
+ /**/
+ 522,
+ /**/
+--- 715,723 ----
+ static int included_patches[] =
+ { /* Add new patch number below this line */
+ /**/
+! 524,
+! /**/
+! 523,
+ /**/
+ 522,
+ /**/
+
+--
+DENNIS: You can't expect to wield supreme executive power just 'cause some
+ watery tart threw a sword at you!
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.525 b/source/ap/vim/patches/7.3.525
new file mode 100644
index 000000000..c9741cbfc
--- /dev/null
+++ b/source/ap/vim/patches/7.3.525
@@ -0,0 +1,55 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.525
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.525
+Problem: Compiler warning on 64 bit MS-Windows.
+Solution: Add type cast. (Mike Williams)
+Files: src/ex_getln.c
+
+
+*** ../vim-7.3.524/src/ex_getln.c 2012-04-30 18:48:38.000000000 +0200
+--- src/ex_getln.c 2012-05-23 20:33:16.000000000 +0200
+***************
+*** 5263,5269 ****
+ {
+ static char_u compl[2] = { NUL, NUL };
+ char *short_names = ":=@>?/";
+! int short_names_count = STRLEN(short_names);
+ int history_name_count = sizeof(history_names) / sizeof(char *) - 1;
+
+ if (idx < short_names_count)
+--- 5263,5269 ----
+ {
+ static char_u compl[2] = { NUL, NUL };
+ char *short_names = ":=@>?/";
+! int short_names_count = (int)STRLEN(short_names);
+ int history_name_count = sizeof(history_names) / sizeof(char *) - 1;
+
+ if (idx < short_names_count)
+*** ../vim-7.3.524/src/version.c 2012-05-18 21:53:29.000000000 +0200
+--- src/version.c 2012-05-25 11:01:51.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 525,
+ /**/
+
+--
+For humans, honesty is a matter of degree. Engineers are always honest in
+matters of technology and human relationships. That's why it's a good idea
+to keep engineers away from customers, romantic interests, and other people
+who can't handle the truth.
+ (Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.526 b/source/ap/vim/patches/7.3.526
new file mode 100644
index 000000000..036d401fd
--- /dev/null
+++ b/source/ap/vim/patches/7.3.526
@@ -0,0 +1,59 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.526
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.526
+Problem: Confusing indenting for #ifdef.
+Solution: Remove and add indent. (Elias Diem)
+Files: src/normal.c
+
+
+*** ../vim-7.3.525/src/normal.c 2012-04-30 18:18:43.000000000 +0200
+--- src/normal.c 2012-05-23 20:35:13.000000000 +0200
+***************
+*** 29,37 ****
+ static void set_vcount_ca __ARGS((cmdarg_T *cap, int *set_prevcount));
+ #endif
+ static int
+! # ifdef __BORLANDC__
+! _RTLENTRYF
+! # endif
+ nv_compare __ARGS((const void *s1, const void *s2));
+ static int find_command __ARGS((int cmdchar));
+ static void op_colon __ARGS((oparg_T *oap));
+--- 29,37 ----
+ static void set_vcount_ca __ARGS((cmdarg_T *cap, int *set_prevcount));
+ #endif
+ static int
+! #ifdef __BORLANDC__
+! _RTLENTRYF
+! #endif
+ nv_compare __ARGS((const void *s1, const void *s2));
+ static int find_command __ARGS((int cmdchar));
+ static void op_colon __ARGS((oparg_T *oap));
+*** ../vim-7.3.525/src/version.c 2012-05-25 11:02:34.000000000 +0200
+--- src/version.c 2012-05-25 11:03:37.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 526,
+ /**/
+
+--
+While it's true that many normal people whould prefer not to _date_ an
+engineer, most normal people harbor an intense desire to _mate_ with them,
+thus producing engineerlike children who will have high-paying jobs long
+before losing their virginity.
+ (Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.527 b/source/ap/vim/patches/7.3.527
new file mode 100644
index 000000000..0c6af2b0d
--- /dev/null
+++ b/source/ap/vim/patches/7.3.527
@@ -0,0 +1,59 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.527
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=latin1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.527
+Problem: Clang complains about non-ASCII characters in a string.
+Solution: Change to \x88 form. (Dominique Pelle)
+Files: src/charset.c
+
+
+*** ../vim-7.3.526/src/charset.c 2012-01-26 13:40:04.000000000 +0100
+--- src/charset.c 2012-05-25 11:49:58.000000000 +0200
+***************
+*** 1602,1611 ****
+ #define LATIN1LOWER 'l'
+ #define LATIN1UPPER 'U'
+
+- /* !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]%_'abcdefghijklmnopqrstuvwxyz{|}~ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ */
+ static char_u latin1flags[257] = " UUUUUUUUUUUUUUUUUUUUUUUUUU llllllllllllllllllllllllll UUUUUUUUUUUUUUUUUUUUUUU UUUUUUUllllllllllllllllllllllll llllllll";
+! static char_u latin1upper[257] = " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`ABCDEFGHIJKLMNOPQRSTUVWXYZ{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ÷ØÙÚÛÜÝÞÿ";
+! static char_u latin1lower[257] = " !\"#$%&'()*+,-./0123456789:;<=>?@abcdefghijklmnopqrstuvwxyz[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿àáâãäåæçèéêëìíîïðñòóôõö×øùúûüýþßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ";
+
+ int
+ vim_islower(c)
+--- 1602,1610 ----
+ #define LATIN1LOWER 'l'
+ #define LATIN1UPPER 'U'
+
+ static char_u latin1flags[257] = " UUUUUUUUUUUUUUUUUUUUUUUUUU llllllllllllllllllllllllll UUUUUUUUUUUUUUUUUUUUUUU UUUUUUUllllllllllllllllllllllll llllllll";
+! static char_u latin1upper[257] = " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`ABCDEFGHIJKLMNOPQRSTUVWXYZ{|}~\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xf7\xd8\xd9\xda\xdb\xdc\xdd\xde\xff";
+! static char_u latin1lower[257] = " !\"#$%&'()*+,-./0123456789:;<=>?@abcdefghijklmnopqrstuvwxyz[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xd7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff";
+
+ int
+ vim_islower(c)
+*** ../vim-7.3.526/src/version.c 2012-05-25 11:04:34.000000000 +0200
+--- src/version.c 2012-05-25 11:52:06.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 527,
+ /**/
+
+--
+An alien life briefly visits earth. Just before departing it leaves a
+message in the dust on the back of a white van. The world is shocked
+and wants to know what it means. After months of studies the worlds
+best linguistic scientists are able to decipher the message: "Wash me!".
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.528 b/source/ap/vim/patches/7.3.528
new file mode 100644
index 000000000..41084ad4f
--- /dev/null
+++ b/source/ap/vim/patches/7.3.528
@@ -0,0 +1,171 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.528
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.528
+Problem: Crash when closing last window in a tab. (Alex Efros)
+Solution: Use common code in close_last_window_tabpage(). (Christian
+ Brabandt)
+Files: src/window.c
+
+
+*** ../vim-7.3.527/src/window.c 2012-03-16 19:07:54.000000000 +0100
+--- src/window.c 2012-05-25 12:25:16.000000000 +0200
+***************
+*** 23,28 ****
+--- 23,29 ----
+ static void win_totop __ARGS((int size, int flags));
+ static void win_equal_rec __ARGS((win_T *next_curwin, int current, frame_T *topfr, int dir, int col, int row, int width, int height));
+ static int last_window __ARGS((void));
++ static int close_last_window_tabpage __ARGS((win_T *win, int free_buf, tabpage_T *prev_curtab));
+ static win_T *win_free_mem __ARGS((win_T *win, int *dirp, tabpage_T *tp));
+ static frame_T *win_altframe __ARGS((win_T *win, tabpage_T *tp));
+ static tabpage_T *alt_tabpage __ARGS((void));
+***************
+*** 2105,2110 ****
+--- 2106,2147 ----
+ }
+
+ /*
++ * Close the possibly last window in a tab page.
++ * Returns TRUE when the window was closed already.
++ */
++ static int
++ close_last_window_tabpage(win, free_buf, prev_curtab)
++ win_T *win;
++ int free_buf;
++ tabpage_T *prev_curtab;
++ {
++ if (firstwin == lastwin)
++ {
++ /*
++ * Closing the last window in a tab page. First go to another tab
++ * page and then close the window and the tab page. This avoids that
++ * curwin and curtab are invalid while we are freeing memory, they may
++ * be used in GUI events.
++ */
++ goto_tabpage_tp(alt_tabpage());
++ redraw_tabline = TRUE;
++
++ /* Safety check: Autocommands may have closed the window when jumping
++ * to the other tab page. */
++ if (valid_tabpage(prev_curtab) && prev_curtab->tp_firstwin == win)
++ {
++ int h = tabline_height();
++
++ win_close_othertab(win, free_buf, prev_curtab);
++ if (h != tabline_height())
++ shell_new_rows();
++ }
++ return TRUE;
++ }
++ return FALSE;
++ }
++
++ /*
+ * Close window "win". Only works for the current tab page.
+ * If "free_buf" is TRUE related buffer may be unloaded.
+ *
+***************
+*** 2143,2171 ****
+ }
+ #endif
+
+! /*
+! * When closing the last window in a tab page first go to another tab
+! * page and then close the window and the tab page. This avoids that
+! * curwin and curtab are not invalid while we are freeing memory, they may
+! * be used in GUI events.
+! */
+! if (firstwin == lastwin)
+! {
+! goto_tabpage_tp(alt_tabpage());
+! redraw_tabline = TRUE;
+!
+! /* Safety check: Autocommands may have closed the window when jumping
+! * to the other tab page. */
+! if (valid_tabpage(prev_curtab) && prev_curtab->tp_firstwin == win)
+! {
+! int h = tabline_height();
+!
+! win_close_othertab(win, free_buf, prev_curtab);
+! if (h != tabline_height())
+! shell_new_rows();
+! }
+! return;
+! }
+
+ /* When closing the help window, try restoring a snapshot after closing
+ * the window. Otherwise clear the snapshot, it's now invalid. */
+--- 2180,2190 ----
+ }
+ #endif
+
+! /* When closing the last window in a tab page first go to another tab page
+! * and then close the window and the tab page to avoid that curwin and
+! * curtab are invalid while we are freeing memory. */
+! if (close_last_window_tabpage(win, free_buf, prev_curtab))
+! return;
+
+ /* When closing the help window, try restoring a snapshot after closing
+ * the window. Otherwise clear the snapshot, it's now invalid. */
+***************
+*** 2225,2231 ****
+
+ /* Autocommands may have closed the window already, or closed the only
+ * other window or moved to another tab page. */
+! if (!win_valid(win) || last_window() || curtab != prev_curtab)
+ return;
+
+ /* Free the memory used for the window and get the window that received
+--- 2244,2251 ----
+
+ /* Autocommands may have closed the window already, or closed the only
+ * other window or moved to another tab page. */
+! if (!win_valid(win) || last_window() || curtab != prev_curtab
+! || close_last_window_tabpage(win, free_buf, prev_curtab))
+ return;
+
+ /* Free the memory used for the window and get the window that received
+***************
+*** 2310,2316 ****
+
+ /*
+ * Close window "win" in tab page "tp", which is not the current tab page.
+! * This may be the last window ih that tab page and result in closing the tab,
+ * thus "tp" may become invalid!
+ * Caller must check if buffer is hidden and whether the tabline needs to be
+ * updated.
+--- 2330,2336 ----
+
+ /*
+ * Close window "win" in tab page "tp", which is not the current tab page.
+! * This may be the last window in that tab page and result in closing the tab,
+ * thus "tp" may become invalid!
+ * Caller must check if buffer is hidden and whether the tabline needs to be
+ * updated.
+*** ../vim-7.3.527/src/version.c 2012-05-25 11:56:06.000000000 +0200
+--- src/version.c 2012-05-25 12:38:25.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 528,
+ /**/
+
+--
+For society, it's probably a good thing that engineers value function over
+appearance. For example, you wouldn't want engineers to build nuclear power
+plants that only _look_ like they would keep all the radiation inside.
+ (Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.529 b/source/ap/vim/patches/7.3.529
new file mode 100644
index 000000000..386baf1fe
--- /dev/null
+++ b/source/ap/vim/patches/7.3.529
@@ -0,0 +1,81 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.529
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.529
+Problem: Using a count before "v" and "V" does not work (Kikyous)
+Solution: Make the count select that many characters or lines. (Christian
+ Brabandt)
+Files: src/normal.c
+
+
+*** ../vim-7.3.528/src/normal.c 2012-05-25 11:04:34.000000000 +0200
+--- src/normal.c 2012-05-25 13:12:06.000000000 +0200
+***************
+*** 7660,7672 ****
+ else /* start Visual mode */
+ {
+ check_visual_highlight();
+! if (cap->count0) /* use previously selected part */
+ {
+! if (resel_VIsual_mode == NUL) /* there is none */
+! {
+! beep_flush();
+! return;
+! }
+ VIsual = curwin->w_cursor;
+
+ VIsual_active = TRUE;
+--- 7660,7668 ----
+ else /* start Visual mode */
+ {
+ check_visual_highlight();
+! if (cap->count0 > 0 && resel_VIsual_mode != NUL)
+ {
+! /* use previously selected part */
+ VIsual = curwin->w_cursor;
+
+ VIsual_active = TRUE;
+***************
+*** 7725,7730 ****
+--- 7721,7736 ----
+ /* start Select mode when 'selectmode' contains "cmd" */
+ may_start_select('c');
+ n_start_visual_mode(cap->cmdchar);
++ if (VIsual_mode != 'V' && *p_sel == 'e')
++ ++cap->count1; /* include one more char */
++ if (cap->count0 > 0 && --cap->count1 > 0)
++ {
++ /* With a count select that many characters or lines. */
++ if (VIsual_mode == 'v' || VIsual_mode == Ctrl_V)
++ nv_right(cap);
++ else if (VIsual_mode == 'V')
++ nv_down(cap);
++ }
+ }
+ }
+ }
+*** ../vim-7.3.528/src/version.c 2012-05-25 12:38:57.000000000 +0200
+--- src/version.c 2012-05-25 12:59:58.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 529,
+ /**/
+
+--
+Normal people believe that if it ain't broke, don't fix it. Engineers believe
+that if it ain't broke, it doesn't have enough features yet.
+ (Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.530 b/source/ap/vim/patches/7.3.530
new file mode 100644
index 000000000..216117ca2
--- /dev/null
+++ b/source/ap/vim/patches/7.3.530
@@ -0,0 +1,50 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.530
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.530 (after 7.3.520)
+Problem: Gvim does not work when 'guioptions' includes "f". (Davido)
+Solution: Call gui_mch_init_check() when running GUI in the foreground.
+ (Yasuhiro Matsumoto)
+Files: src/gui.c
+
+
+*** ../vim-7.3.529/src/gui.c 2012-05-18 17:03:13.000000000 +0200
+--- src/gui.c 2012-05-25 14:01:26.000000000 +0200
+***************
+*** 102,107 ****
+--- 102,111 ----
+ else
+ #endif
+ {
++ /* If there is 'f' in 'guioptions' and specify -g argument,
++ * gui_mch_init_check() was not called yet. */
++ if (gui_mch_init_check() != OK)
++ exit(1);
+ gui_attempt_start();
+ }
+
+*** ../vim-7.3.529/src/version.c 2012-05-25 13:12:33.000000000 +0200
+--- src/version.c 2012-05-25 14:05:46.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 530,
+ /**/
+
+--
+I think that you'll agree that engineers are very effective in their social
+interactions. It's the "normal" people who are nuts.
+ (Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.531 b/source/ap/vim/patches/7.3.531
new file mode 100644
index 000000000..652bdb739
--- /dev/null
+++ b/source/ap/vim/patches/7.3.531
@@ -0,0 +1,52 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.531
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.531 (after 7.3.530)
+Problem: GUI does not work on MS-Windows.
+Solution: Add the missing #ifdef. (Patrick Avery)
+Files: src/gui.c
+
+
+*** ../vim-7.3.530/src/gui.c 2012-05-25 14:06:18.000000000 +0200
+--- src/gui.c 2012-05-27 00:34:51.000000000 +0200
+***************
+*** 102,111 ****
+--- 102,113 ----
+ else
+ #endif
+ {
++ #ifdef FEAT_GUI_GTK
+ /* If there is 'f' in 'guioptions' and specify -g argument,
+ * gui_mch_init_check() was not called yet. */
+ if (gui_mch_init_check() != OK)
+ exit(1);
++ #endif
+ gui_attempt_start();
+ }
+
+*** ../vim-7.3.530/src/version.c 2012-05-25 14:06:18.000000000 +0200
+--- src/version.c 2012-05-27 00:37:33.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 531,
+ /**/
+
+--
+I learned the customs and mannerisms of engineers by observing them, much the
+way Jane Goodall learned about the great apes, but without the hassle of
+grooming.
+ (Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.532 b/source/ap/vim/patches/7.3.532
new file mode 100644
index 000000000..071cab345
--- /dev/null
+++ b/source/ap/vim/patches/7.3.532
@@ -0,0 +1,53 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.532
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.532
+Problem: Compiler warning from Clang.
+Solution: Use a different way to point inside a string. (Dominique Pelle)
+Files: src/syntax.c
+
+
+*** ../vim-7.3.531/src/syntax.c 2012-03-23 16:25:13.000000000 +0100
+--- src/syntax.c 2012-06-01 13:13:58.000000000 +0200
+***************
+*** 9476,9482 ****
+ int cnt;
+ int attr;
+ {
+! msg_puts_attr((char_u *)("N \bI \b! \b" + cnt / 11), attr);
+ msg_clr_eos();
+ out_flush();
+ ui_delay(cnt == 99 ? 40L : (long)cnt * 50L, FALSE);
+--- 9476,9482 ----
+ int cnt;
+ int attr;
+ {
+! msg_puts_attr((char_u *)&("N \bI \b! \b"[cnt / 11]), attr);
+ msg_clr_eos();
+ out_flush();
+ ui_delay(cnt == 99 ? 40L : (long)cnt * 50L, FALSE);
+*** ../vim-7.3.531/src/version.c 2012-05-27 00:37:45.000000000 +0200
+--- src/version.c 2012-06-01 13:14:51.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 532,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+8. You spend half of the plane trip with your laptop on your lap...and your
+ child in the overhead compartment.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.533 b/source/ap/vim/patches/7.3.533
new file mode 100644
index 000000000..1d71c8d18
--- /dev/null
+++ b/source/ap/vim/patches/7.3.533
@@ -0,0 +1,46 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.533
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.533
+Problem: Memory leak when writing undo file.
+Solution: Free the ACL. (Dominique Pelle)
+Files: src/undo.c
+
+
+*** ../vim-7.3.532/src/undo.c 2011-12-08 15:14:04.000000000 +0100
+--- src/undo.c 2012-06-01 13:38:42.000000000 +0200
+***************
+*** 1535,1540 ****
+--- 1535,1541 ----
+ /* For systems that support ACL: get the ACL from the original file. */
+ acl = mch_get_acl(buf->b_ffname);
+ mch_set_acl(file_name, acl);
++ mch_free_acl(acl);
+ }
+ #endif
+
+*** ../vim-7.3.532/src/version.c 2012-06-01 13:18:48.000000000 +0200
+--- src/version.c 2012-06-01 13:39:16.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 533,
+ /**/
+
+--
+"How is your new girlfriend?"
+"90-60-90 man!"
+"What, pale purple?"
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.534 b/source/ap/vim/patches/7.3.534
new file mode 100644
index 000000000..618d6e4e1
--- /dev/null
+++ b/source/ap/vim/patches/7.3.534
@@ -0,0 +1,101 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.534
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.534 (after 7.3.461)
+Problem: When using an InsertCharPre autocommand autoindent fails.
+Solution: Proper handling of v:char. (Alexey Radkov)
+Files: src/edit.c
+
+
+*** ../vim-7.3.533/src/edit.c 2012-05-18 16:35:17.000000000 +0200
+--- src/edit.c 2012-06-01 14:41:06.000000000 +0200
+***************
+*** 10108,10129 ****
+ do_insert_char_pre(c)
+ int c;
+ {
+! char_u *res;
+
+ /* Return quickly when there is nothing to do. */
+ if (!has_insertcharpre())
+ return NULL;
+
+ /* Lock the text to avoid weird things from happening. */
+ ++textlock;
+! set_vim_var_char(c); /* set v:char */
+
+ if (apply_autocmds(EVENT_INSERTCHARPRE, NULL, NULL, FALSE, curbuf))
+! /* Get the new value of v:char. It may be empty or more than one
+! * character. */
+! res = vim_strsave(get_vim_var_str(VV_CHAR));
+! else
+! res = NULL;
+
+ set_vim_var_string(VV_CHAR, NULL, -1); /* clear v:char */
+ --textlock;
+--- 10108,10147 ----
+ do_insert_char_pre(c)
+ int c;
+ {
+! char_u *res;
+! #ifdef FEAT_MBYTE
+! char_u buf[MB_MAXBYTES + 1];
+! #else
+! char_u buf[2];
+! #endif
+
+ /* Return quickly when there is nothing to do. */
+ if (!has_insertcharpre())
+ return NULL;
+
++ #ifdef FEAT_MBYTE
++ if (has_mbyte)
++ buf[(*mb_char2bytes)(c, buf)] = NUL;
++ else
++ #endif
++ {
++ buf[0] = c;
++ buf[1] = NUL;
++ }
++
+ /* Lock the text to avoid weird things from happening. */
+ ++textlock;
+! set_vim_var_string(VV_CHAR, buf, -1); /* set v:char */
+
++ res = NULL;
+ if (apply_autocmds(EVENT_INSERTCHARPRE, NULL, NULL, FALSE, curbuf))
+! {
+! /* Get the value of v:char. It may be empty or more than one
+! * character. Only use it when changed, otherwise continue with the
+! * original character to avoid breaking autoindent. */
+! if (STRCMP(buf, get_vim_var_str(VV_CHAR)) != 0)
+! res = vim_strsave(get_vim_var_str(VV_CHAR));
+! }
+
+ set_vim_var_string(VV_CHAR, NULL, -1); /* clear v:char */
+ --textlock;
+*** ../vim-7.3.533/src/version.c 2012-06-01 13:46:06.000000000 +0200
+--- src/version.c 2012-06-01 14:42:19.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 534,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+11. You find yourself typing "com" after every period when using a word
+ processor.com
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.535 b/source/ap/vim/patches/7.3.535
new file mode 100644
index 000000000..e7f0f8a9c
--- /dev/null
+++ b/source/ap/vim/patches/7.3.535
@@ -0,0 +1,356 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.535
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.535
+Problem: Many #ifdefs for MB_MAXBYTES.
+Solution: Also define MB_MAXBYTES without the +multi_byte feature. Fix
+ places where the buffer didn't include space for a NUL byte.
+Files: src/arabic.c, src/edit.c, src/eval.c, src/getchar.c, src/mbyte.c,
+ src/misc1.c, src/screen.c, src/spell.c, src/vim.h
+
+
+*** ../vim-7.3.534/src/arabic.c 2010-08-15 21:57:28.000000000 +0200
+--- src/arabic.c 2012-06-01 14:59:37.000000000 +0200
+***************
+*** 1066,1072 ****
+
+ if (curr_c != c && ccp != NULL)
+ {
+! char_u buf[MB_MAXBYTES];
+
+ /* Update the first byte of the character. */
+ (*mb_char2bytes)(curr_c, buf);
+--- 1066,1072 ----
+
+ if (curr_c != c && ccp != NULL)
+ {
+! char_u buf[MB_MAXBYTES + 1];
+
+ /* Update the first byte of the character. */
+ (*mb_char2bytes)(curr_c, buf);
+*** ../vim-7.3.534/src/edit.c 2012-06-01 14:57:47.000000000 +0200
+--- src/edit.c 2012-06-01 15:01:49.000000000 +0200
+***************
+*** 1648,1658 ****
+ #define PC_STATUS_RIGHT 1 /* right halve of double-wide char */
+ #define PC_STATUS_LEFT 2 /* left halve of double-wide char */
+ #define PC_STATUS_SET 3 /* pc_bytes was filled */
+- #ifdef FEAT_MBYTE
+ static char_u pc_bytes[MB_MAXBYTES + 1]; /* saved bytes */
+- #else
+- static char_u pc_bytes[2]; /* saved bytes */
+- #endif
+ static int pc_attr;
+ static int pc_row;
+ static int pc_col;
+--- 1648,1654 ----
+***************
+*** 6819,6829 ****
+ char_u *s;
+
+ vim_free(last_insert);
+- #ifdef FEAT_MBYTE
+ last_insert = alloc(MB_MAXBYTES * 3 + 5);
+- #else
+- last_insert = alloc(6);
+- #endif
+ if (last_insert != NULL)
+ {
+ s = last_insert;
+--- 6815,6821 ----
+***************
+*** 6861,6867 ****
+ char_u *s;
+ {
+ #ifdef FEAT_MBYTE
+! char_u temp[MB_MAXBYTES];
+ int i;
+ int len;
+
+--- 6853,6859 ----
+ char_u *s;
+ {
+ #ifdef FEAT_MBYTE
+! char_u temp[MB_MAXBYTES + 1];
+ int i;
+ int len;
+
+***************
+*** 7423,7429 ****
+ int cc;
+ {
+ int n;
+! char_u buf[MB_MAXBYTES];
+ int i;
+ int c;
+
+--- 7415,7421 ----
+ int cc;
+ {
+ int n;
+! char_u buf[MB_MAXBYTES + 1];
+ int i;
+ int c;
+
+***************
+*** 10109,10119 ****
+ int c;
+ {
+ char_u *res;
+- #ifdef FEAT_MBYTE
+ char_u buf[MB_MAXBYTES + 1];
+- #else
+- char_u buf[2];
+- #endif
+
+ /* Return quickly when there is nothing to do. */
+ if (!has_insertcharpre())
+--- 10101,10107 ----
+*** ../vim-7.3.534/src/eval.c 2012-05-18 18:34:15.000000000 +0200
+--- src/eval.c 2012-06-01 15:02:08.000000000 +0200
+***************
+*** 19170,19180 ****
+ set_vim_var_char(c)
+ int c;
+ {
+! #ifdef FEAT_MBYTE
+! char_u buf[MB_MAXBYTES];
+! #else
+! char_u buf[2];
+! #endif
+
+ #ifdef FEAT_MBYTE
+ if (has_mbyte)
+--- 19170,19176 ----
+ set_vim_var_char(c)
+ int c;
+ {
+! char_u buf[MB_MAXBYTES + 1];
+
+ #ifdef FEAT_MBYTE
+ if (has_mbyte)
+*** ../vim-7.3.534/src/getchar.c 2012-04-05 16:07:01.000000000 +0200
+--- src/getchar.c 2012-06-01 15:03:51.000000000 +0200
+***************
+*** 723,729 ****
+ int c;
+ #ifdef FEAT_MBYTE
+ int n;
+! char_u buf[MB_MAXBYTES];
+ int i;
+ #endif
+
+--- 723,729 ----
+ int c;
+ #ifdef FEAT_MBYTE
+ int n;
+! char_u buf[MB_MAXBYTES + 1];
+ int i;
+ #endif
+
+***************
+*** 1072,1078 ****
+ int c;
+ {
+ #ifdef FEAT_MBYTE
+! char_u buf[MB_MAXBYTES];
+ #else
+ char_u buf[4];
+ #endif
+--- 1072,1078 ----
+ int c;
+ {
+ #ifdef FEAT_MBYTE
+! char_u buf[MB_MAXBYTES + 1];
+ #else
+ char_u buf[4];
+ #endif
+***************
+*** 1547,1553 ****
+ int c, c2;
+ #ifdef FEAT_MBYTE
+ int n;
+! char_u buf[MB_MAXBYTES];
+ int i;
+ #endif
+
+--- 1547,1553 ----
+ int c, c2;
+ #ifdef FEAT_MBYTE
+ int n;
+! char_u buf[MB_MAXBYTES + 1];
+ int i;
+ #endif
+
+***************
+*** 4335,4345 ****
+ int scol; /* starting column of the abbr. */
+ int j;
+ char_u *s;
+- #ifdef FEAT_MBYTE
+ char_u tb[MB_MAXBYTES + 4];
+- #else
+- char_u tb[4];
+- #endif
+ mapblock_T *mp;
+ #ifdef FEAT_LOCALMAP
+ mapblock_T *mp2;
+--- 4335,4341 ----
+*** ../vim-7.3.534/src/mbyte.c 2012-03-07 19:38:52.000000000 +0100
+--- src/mbyte.c 2012-06-01 15:04:27.000000000 +0200
+***************
+*** 708,714 ****
+ */
+ n = (i & 0x80) ? 2 : 1;
+ # else
+! char buf[MB_MAXBYTES];
+ # ifdef X_LOCALE
+ # ifndef mblen
+ # define mblen _Xmblen
+--- 708,714 ----
+ */
+ n = (i & 0x80) ? 2 : 1;
+ # else
+! char buf[MB_MAXBYTES + 1];
+ # ifdef X_LOCALE
+ # ifndef mblen
+ # define mblen _Xmblen
+***************
+*** 1953,1959 ****
+ /*
+ * Convert the character at screen position "off" to a sequence of bytes.
+ * Includes the composing characters.
+! * "buf" must at least have the length MB_MAXBYTES.
+ * Only to be used when ScreenLinesUC[off] != 0.
+ * Returns the produced number of bytes.
+ */
+--- 1953,1959 ----
+ /*
+ * Convert the character at screen position "off" to a sequence of bytes.
+ * Includes the composing characters.
+! * "buf" must at least have the length MB_MAXBYTES + 1.
+ * Only to be used when ScreenLinesUC[off] != 0.
+ * Returns the produced number of bytes.
+ */
+*** ../vim-7.3.534/src/misc1.c 2012-04-30 21:09:38.000000000 +0200
+--- src/misc1.c 2012-06-01 15:04:56.000000000 +0200
+***************
+*** 1932,1938 ****
+ int c;
+ {
+ #if defined(FEAT_MBYTE) || defined(PROTO)
+! char_u buf[MB_MAXBYTES];
+ int n;
+
+ n = (*mb_char2bytes)(c, buf);
+--- 1932,1938 ----
+ int c;
+ {
+ #if defined(FEAT_MBYTE) || defined(PROTO)
+! char_u buf[MB_MAXBYTES + 1];
+ int n;
+
+ n = (*mb_char2bytes)(c, buf);
+*** ../vim-7.3.534/src/screen.c 2012-03-23 16:25:13.000000000 +0100
+--- src/screen.c 2012-06-01 15:06:03.000000000 +0200
+***************
+*** 6621,6636 ****
+ int row, col;
+ int attr;
+ {
+- #ifdef FEAT_MBYTE
+ char_u buf[MB_MAXBYTES + 1];
+
+! buf[(*mb_char2bytes)(c, buf)] = NUL;
+! #else
+! char_u buf[2];
+!
+! buf[0] = c;
+! buf[1] = NUL;
+ #endif
+ screen_puts(buf, row, col, attr);
+ }
+
+--- 6621,6637 ----
+ int row, col;
+ int attr;
+ {
+ char_u buf[MB_MAXBYTES + 1];
+
+! #ifdef FEAT_MBYTE
+! if (has_mbyte)
+! buf[(*mb_char2bytes)(c, buf)] = NUL;
+! else
+ #endif
++ {
++ buf[0] = c;
++ buf[1] = NUL;
++ }
+ screen_puts(buf, row, col, attr);
+ }
+
+*** ../vim-7.3.534/src/spell.c 2012-05-18 18:07:57.000000000 +0200
+--- src/spell.c 2012-06-01 15:06:30.000000000 +0200
+***************
+*** 13694,13700 ****
+ {
+ int m1, m2;
+ #ifdef FEAT_MBYTE
+! char_u buf[MB_MAXBYTES];
+ hashitem_T *hi;
+
+ if (c1 >= 256)
+--- 13694,13700 ----
+ {
+ int m1, m2;
+ #ifdef FEAT_MBYTE
+! char_u buf[MB_MAXBYTES + 1];
+ hashitem_T *hi;
+
+ if (c1 >= 256)
+*** ../vim-7.3.534/src/vim.h 2012-04-30 18:48:38.000000000 +0200
+--- src/vim.h 2012-06-01 14:59:28.000000000 +0200
+***************
+*** 1703,1708 ****
+--- 1703,1710 ----
+ * character of up to 6 bytes, or one 16-bit character of up to three bytes
+ * plus six following composing characters of three bytes each. */
+ # define MB_MAXBYTES 21
++ #else
++ # define MB_MAXBYTES 1
+ #endif
+
+ #if (defined(FEAT_PROFILE) || defined(FEAT_RELTIME)) && !defined(PROTO)
+***************
+*** 2017,2022 ****
+--- 2019,2025 ----
+ #pragma warning(disable : 4312)
+ #endif
+
++ /* Note: a NULL argument for vim_realloc() is not portable, don't use it. */
+ #if defined(MEM_PROFILE)
+ # define vim_realloc(ptr, size) mem_realloc((ptr), (size))
+ #else
+*** ../vim-7.3.534/src/version.c 2012-06-01 14:57:47.000000000 +0200
+--- src/version.c 2012-06-01 15:08:20.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 535,
+ /**/
+
+--
+Me? A skeptic? I trust you have proof.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.536 b/source/ap/vim/patches/7.3.536
new file mode 100644
index 000000000..e0c3f760f
--- /dev/null
+++ b/source/ap/vim/patches/7.3.536
@@ -0,0 +1,73 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.536
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.536
+Problem: When spell checking the German sharp s is not seen as a word
+ character. (Aexl Bender)
+Solution: In utf_islower() return true for the sharp s. Note: also need
+ updated spell file for this to take effect.
+Files: src/mbyte.c
+
+
+*** ../vim-7.3.535/src/mbyte.c 2012-06-01 15:20:49.000000000 +0200
+--- src/mbyte.c 2012-06-01 16:50:41.000000000 +0200
+***************
+*** 2949,2955 ****
+ {
+ {0x61,0x7a,1,-32},
+ {0xb5,0xb5,-1,743},
+! {0xe0,0xf6,1,-32},
+ {0xf8,0xfe,1,-32},
+ {0xff,0xff,-1,121},
+ {0x101,0x12f,2,-1},
+--- 2949,2955 ----
+ {
+ {0x61,0x7a,1,-32},
+ {0xb5,0xb5,-1,743},
+! {0xe0,0xf6,1,-32}, /* 0xdf (German sharp s) is not upper-cased */
+ {0xf8,0xfe,1,-32},
+ {0xff,0xff,-1,121},
+ {0x101,0x12f,2,-1},
+***************
+*** 3129,3135 ****
+ utf_islower(a)
+ int a;
+ {
+! return (utf_toupper(a) != a);
+ }
+
+ /*
+--- 3129,3136 ----
+ utf_islower(a)
+ int a;
+ {
+! /* German sharp s is lower case but has no upper case equivalent. */
+! return (utf_toupper(a) != a) || a == 0xdf;
+ }
+
+ /*
+*** ../vim-7.3.535/src/version.c 2012-06-01 15:20:49.000000000 +0200
+--- src/version.c 2012-06-01 17:45:17.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 536,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+16. You step out of your room and realize that your parents have moved and
+ you don't have a clue when it happened.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.537 b/source/ap/vim/patches/7.3.537
new file mode 100644
index 000000000..76b41c8ad
--- /dev/null
+++ b/source/ap/vim/patches/7.3.537
@@ -0,0 +1,47 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.537
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.537
+Problem: Unecessary call to init_spell_chartab().
+Solution: Delete the call.
+Files: src/spell.c
+
+
+*** ../vim-7.3.536/src/spell.c 2012-06-01 15:20:49.000000000 +0200
+--- src/spell.c 2012-06-01 17:49:44.000000000 +0200
+***************
+*** 4721,4728 ****
+ int_wordlist = NULL;
+ }
+
+- init_spell_chartab();
+-
+ vim_free(repl_to);
+ repl_to = NULL;
+ vim_free(repl_from);
+--- 4721,4726 ----
+*** ../vim-7.3.536/src/version.c 2012-06-01 17:46:52.000000000 +0200
+--- src/version.c 2012-06-01 17:49:08.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 537,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+17. You turn on your intercom when leaving the room so you can hear if new
+ e-mail arrives.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.538 b/source/ap/vim/patches/7.3.538
new file mode 100644
index 000000000..947fa65bc
--- /dev/null
+++ b/source/ap/vim/patches/7.3.538
@@ -0,0 +1,321 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.538
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.538
+Problem: 'efm' does not handle Tabs in pointer lines.
+Solution: Add Tab support. Improve tests. (Lech Lorens)
+Files: src/quickfix.c, src/testdir/test10.in, src/testdir/test10.ok
+
+
+*** ../vim-7.3.537/src/quickfix.c 2012-04-25 18:57:17.000000000 +0200
+--- src/quickfix.c 2012-06-01 18:24:07.000000000 +0200
+***************
+*** 247,253 ****
+ {'t', "."},
+ {'m', ".\\+"},
+ {'r', ".*"},
+! {'p', "[- .]*"},
+ {'v', "\\d\\+"},
+ {'s', ".\\+"}
+ };
+--- 247,253 ----
+ {'t', "."},
+ {'m', ".\\+"},
+ {'r', ".*"},
+! {'p', "[- .]*"},
+ {'v', "\\d\\+"},
+ {'s', ".\\+"}
+ };
+***************
+*** 677,687 ****
+ }
+ if ((i = (int)fmt_ptr->addr[7]) > 0) /* %p */
+ {
+ if (regmatch.startp[i] == NULL || regmatch.endp[i] == NULL)
+ continue;
+! col = (int)(regmatch.endp[i] - regmatch.startp[i] + 1);
+! if (*((char_u *)regmatch.startp[i]) != TAB)
+! use_viscol = TRUE;
+ }
+ if ((i = (int)fmt_ptr->addr[8]) > 0) /* %v */
+ {
+--- 677,699 ----
+ }
+ if ((i = (int)fmt_ptr->addr[7]) > 0) /* %p */
+ {
++ char_u *match_ptr;
++
+ if (regmatch.startp[i] == NULL || regmatch.endp[i] == NULL)
+ continue;
+! col = 0;
+! for (match_ptr = regmatch.startp[i];
+! match_ptr != regmatch.endp[i]; ++match_ptr)
+! {
+! ++col;
+! if (*match_ptr == TAB)
+! {
+! col += 7;
+! col -= col % 8;
+! }
+! }
+! ++col;
+! use_viscol = TRUE;
+ }
+ if ((i = (int)fmt_ptr->addr[8]) > 0) /* %v */
+ {
+*** ../vim-7.3.537/src/testdir/test10.in 2011-08-10 18:36:49.000000000 +0200
+--- src/testdir/test10.in 2012-06-01 18:22:40.000000000 +0200
+***************
+*** 8,48 ****
+ :7/start of errorfile/,/end of errorfile/w! Xerrorfile1
+ :7/start of errorfile/,/end of errorfile/-1w! Xerrorfile2
+ :/start of testfile/,/end of testfile/w! Xtestfile
+ :cf Xerrorfile2
+ :clast
+ :copen
+ :let a=w:quickfix_title
+ :wincmd p
+! gR=a 
+ :cf Xerrorfile1
+! rA
+ :cn
+! rB
+ :cn
+! rC
+ :cn
+! rD
+ :cn
+! rE
+ :cn
+ :wincmd w
+ :let a=w:quickfix_title
+ :wincmd p
+! gR=a 
+ :w! test.out " Write contents of this file
+ :qa!
+ ENDTEST
+
+ start of errorfile
+ "Xtestfile", line 4.12: 1506-045 (S) Undeclared identifier fd_set.
+! "Xtestfile", line 7 col 19; this is an error
+ gcc -c -DHAVE_CONFIsing-prototypes -I/usr/X11R6/include version.c
+! Xtestfile:13: parse error before `asd'
+ make: *** [vim] Error 1
+! in file "Xtestfile" linenr 16: there is an error
+
+ 2 returned
+! "Xtestfile", linenr 19: yet another problem
+
+ Does anyone know what is the problem and how to correction it?
+ "Xtestfile", line 21 col 9: What is the title of the quickfix window?
+--- 8,88 ----
+ :7/start of errorfile/,/end of errorfile/w! Xerrorfile1
+ :7/start of errorfile/,/end of errorfile/-1w! Xerrorfile2
+ :/start of testfile/,/end of testfile/w! Xtestfile
++ :set efm+==%f=\\,\ line\ %l%*\\D%v%*[^\ ]\ %m
++ :set efm^=%AError\ in\ \"%f\"\ at\ line\ %l:,%Z%p^,%C%m
+ :cf Xerrorfile2
+ :clast
+ :copen
+ :let a=w:quickfix_title
+ :wincmd p
+! lgR=a 
+ :cf Xerrorfile1
+! grA
+ :cn
+! gRLINE 6, COL 19
+ :cn
+! gRNO COLUMN SPECIFIED
+ :cn
+! gRAGAIN NO COLUMN
+ :cn
+! gRCOL 1
+ :cn
++ gRCOL 2
++ :cn
++ gRCOL 10
++ :cn
++ gRVCOL 10
++ :cn
++ grI
++ :cn
++ gR. SPACE POINTER
++ :cn
++ gR. DOT POINTER
++ :cn
++ gR. DASH POINTER
++ :cn
++ gR. TAB-SPACE POINTER
++ :clast
++ :cprev
++ :cprev
+ :wincmd w
+ :let a=w:quickfix_title
+ :wincmd p
+! lgR=a 
+ :w! test.out " Write contents of this file
+ :qa!
+ ENDTEST
+
+ start of errorfile
+ "Xtestfile", line 4.12: 1506-045 (S) Undeclared identifier fd_set.
+! "Xtestfile", line 6 col 19; this is an error
+ gcc -c -DHAVE_CONFIsing-prototypes -I/usr/X11R6/include version.c
+! Xtestfile:9: parse error before `asd'
+ make: *** [vim] Error 1
+! in file "Xtestfile" linenr 10: there is an error
+
+ 2 returned
+! "Xtestfile", line 11 col 1; this is an error
+! "Xtestfile", line 12 col 2; this is another error
+! "Xtestfile", line 14:10; this is an error in column 10
+! =Xtestfile=, line 15:10; this is another error, but in vcol 10 this time
+! "Xtestfile", linenr 16: yet another problem
+! Error in "Xtestfile" at line 17:
+! x should be a dot
+! xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 17
+! ^
+! Error in "Xtestfile" at line 18:
+! x should be a dot
+! xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 18
+! .............^
+! Error in "Xtestfile" at line 19:
+! x should be a dot
+! xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 19
+! --------------^
+! Error in "Xtestfile" at line 20:
+! x should be a dot
+! xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 20
+! ^
+
+ Does anyone know what is the problem and how to correction it?
+ "Xtestfile", line 21 col 9: What is the title of the quickfix window?
+***************
+*** 50,74 ****
+ end of errorfile
+
+ start of testfile
+! line 2 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+! line 3 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+! line 4 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+! line 5 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+! line 6 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+! line 7 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+! line 8 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+! line 9 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+! line 10 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+! line 11 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+! line 12 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+! line 13 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+! line 14 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+! line 15 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+! line 16 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+! line 17 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+! line 18 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+! line 19 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+! line 20 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+! line 21 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+! line 22 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+ end of testfile
+--- 90,114 ----
+ end of errorfile
+
+ start of testfile
+! xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 2
+! xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 3
+! xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 4
+! xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 5
+! xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 6
+! xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 7
+! xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 8
+! xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 9
+! xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 10
+! xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 11
+! xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 12
+! xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 13
+! xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 14
+! xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 15
+! xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 16
+! xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 17
+! xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 18
+! xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 19
+! xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 20
+! xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 21
+! xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 22
+ end of testfile
+*** ../vim-7.3.537/src/testdir/test10.ok 2011-08-10 18:36:49.000000000 +0200
+--- src/testdir/test10.ok 2012-06-01 18:22:40.000000000 +0200
+***************
+*** 1,23 ****
+ start of testfile
+! line 2 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+! line 3 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+! line 4 xxxAxxxxxxxxxxxxxxxxxxxxxxxxxx
+! line 5 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+! line 6 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+! line 7 xxxxxxxxxxBxxxxxxxxxxxxxxxxxxx
+! line 8 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+! line 9 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+! line 10 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+! line 11 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+! line 12 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+! Cine 13 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+! line 14 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+! line 15 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+! Dine 16 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+! line 17 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+! line 18 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+! Eine 19 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+! line 20 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+! line 21 :cf Xerrorfile1xxxxxxxxxxxxxxx
+! line 22 :cf Xerrorfile2xxxxxxxxxxxxxxx
+ end of testfile
+--- 1,23 ----
+ start of testfile
+! xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 2
+! xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 3
+! xxxxxxxxxxAxxxxxxxxxxxxxxxxxxx line 4
+! xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 5
+! xxxxxxxxxxxxxxxxxLINE 6, COL 19 line 6
+! xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 7
+! xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 8
+! NO COLUMN SPECIFIEDxxxxxxxxxxx line 9
+! AGAIN NO COLUMNxxxxxxxxxxxxxxx line 10
+! COL 1 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 11
+! COL 2xxxxxxxxxxxxxxxxxxxxxxxxx line 12
+! xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 13
+! xxxxxxxxCOL 10xxxxxxxxxxxxxxxx line 14
+! xVCOL 10xxxxxxxxxxxxxxxxxxxxxx line 15
+! Ixxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 16
+! xxxx. SPACE POINTERxxxxxxxxxxx line 17
+! xxxxx. DOT POINTERxxxxxxxxxxxx line 18
+! xxxxxx. DASH POINTERxxxxxxxxxx line 19
+! xxxxxxx. TAB-SPACE POINTERxxxx line 20
+! xxxxxxxx:cf Xerrorfile1xxxxxxx line 21
+! xxxxxxxx:cf Xerrorfile2xxxxxxx line 22
+ end of testfile
+*** ../vim-7.3.537/src/version.c 2012-06-01 17:49:51.000000000 +0200
+--- src/version.c 2012-06-01 18:22:27.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 538,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+18. Your wife drapes a blond wig over your monitor to remind you of what she
+ looks like.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.539 b/source/ap/vim/patches/7.3.539
new file mode 100644
index 000000000..267c076d6
--- /dev/null
+++ b/source/ap/vim/patches/7.3.539
@@ -0,0 +1,51 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.539
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.539
+Problem: Redrawing a character on the command line does not work properly
+ for multi-byte charactes.
+Solution: Count the number of bytes in a character. (Yukihiro Nakadaira)
+Files: src/ex_getln.c
+
+
+*** ../vim-7.3.538/src/ex_getln.c 2012-05-25 11:02:34.000000000 +0200
+--- src/ex_getln.c 2012-06-06 11:50:37.000000000 +0200
+***************
+*** 2764,2769 ****
+--- 2764,2774 ----
+ msg_no_more = TRUE;
+ if (ccline.cmdlen == ccline.cmdpos)
+ msg_putchar(' ');
++ #ifdef FEAT_MBYTE
++ else if (has_mbyte)
++ draw_cmdline(ccline.cmdpos,
++ (*mb_ptr2len)(ccline.cmdbuff + ccline.cmdpos));
++ #endif
+ else
+ draw_cmdline(ccline.cmdpos, 1);
+ msg_no_more = FALSE;
+*** ../vim-7.3.538/src/version.c 2012-06-01 18:34:37.000000000 +0200
+--- src/version.c 2012-06-06 12:02:45.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 539,
+ /**/
+
+--
+If they don't keep on exercising their lips, he thought, their brains
+start working.
+ -- Douglas Adams, "The Hitchhiker's Guide to the Galaxy"
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.540 b/source/ap/vim/patches/7.3.540
new file mode 100644
index 000000000..6793eb43a
--- /dev/null
+++ b/source/ap/vim/patches/7.3.540
@@ -0,0 +1,55 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.540
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.540
+Problem: Cursor is left on the text instead of the command line.
+Solution: Don't call setcursor() in command line mode.
+Files: src/getchar.c
+
+
+*** ../vim-7.3.539/src/getchar.c 2012-06-01 15:20:49.000000000 +0200
+--- src/getchar.c 2012-06-06 11:58:05.000000000 +0200
+***************
+*** 2819,2825 ****
+ edit_unputchar();
+ if (State & CMDLINE)
+ unputcmdline();
+! setcursor(); /* put cursor back where it belongs */
+ }
+
+ if (c < 0)
+--- 2819,2826 ----
+ edit_unputchar();
+ if (State & CMDLINE)
+ unputcmdline();
+! else
+! setcursor(); /* put cursor back where it belongs */
+ }
+
+ if (c < 0)
+*** ../vim-7.3.539/src/version.c 2012-06-06 12:02:57.000000000 +0200
+--- src/version.c 2012-06-06 12:05:22.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 540,
+ /**/
+
+--
+"Making it up? Why should I want to make anything up? Life's bad enough
+as it is without wanting to invent any more of it."
+ -- Marvin, the Paranoid Android in Douglas Adams'
+ "The Hitchhiker's Guide to the Galaxy"
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.541 b/source/ap/vim/patches/7.3.541
new file mode 100644
index 000000000..133b82dad
--- /dev/null
+++ b/source/ap/vim/patches/7.3.541
@@ -0,0 +1,1090 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.541
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.541
+Problem: When joining lines comment leaders need to be removed manually.
+Solution: Add the 'j' flag to 'formatoptions'. (Lech Lorens)
+Files: runtime/doc/change.txt, src/edit.c, src/ex_docmd.c, src/misc1.c,
+ src/normal.c, src/ops.c, src/option.h, src/proto/misc1.pro,
+ src/proto/ops.pro, src/search.c, src/testdir/test29.in,
+ src/testdir/test29.ok
+
+
+*** ../vim-7.3.540/runtime/doc/change.txt 2011-05-05 14:26:37.000000000 +0200
+--- runtime/doc/change.txt 2012-06-06 13:05:04.000000000 +0200
+***************
+*** 1495,1500 ****
+--- 1522,1533 ----
+ characters. Overruled by the 'M' flag.
+ 1 Don't break a line after a one-letter word. It's broken before it
+ instead (if possible).
++ j Where it makes sense, remove a comment leader when joining lines. For
++ example, joining:
++ int i; // the index ~
++ // in the list ~
++ Becomes:
++ int i; // the index in the list ~
+
+
+ With 't' and 'c' you can specify when Vim performs auto-wrapping:
+*** ../vim-7.3.540/src/edit.c 2012-06-01 15:20:49.000000000 +0200
+--- src/edit.c 2012-06-06 13:00:29.000000000 +0200
+***************
+*** 5847,5853 ****
+ * Need to remove existing (middle) comment leader and insert end
+ * comment leader. First, check what comment leader we can find.
+ */
+! i = get_leader_len(line = ml_get_curline(), &p, FALSE);
+ if (i > 0 && vim_strchr(p, COM_MIDDLE) != NULL) /* Just checking */
+ {
+ /* Skip middle-comment string */
+--- 5847,5853 ----
+ * Need to remove existing (middle) comment leader and insert end
+ * comment leader. First, check what comment leader we can find.
+ */
+! i = get_leader_len(line = ml_get_curline(), &p, FALSE, TRUE);
+ if (i > 0 && vim_strchr(p, COM_MIDDLE) != NULL) /* Just checking */
+ {
+ /* Skip middle-comment string */
+***************
+*** 6085,6091 ****
+
+ /* Don't break until after the comment leader */
+ if (do_comments)
+! leader_len = get_leader_len(ml_get_curline(), NULL, FALSE);
+ else
+ leader_len = 0;
+
+--- 6085,6091 ----
+
+ /* Don't break until after the comment leader */
+ if (do_comments)
+! leader_len = get_leader_len(ml_get_curline(), NULL, FALSE, TRUE);
+ else
+ leader_len = 0;
+
+***************
+*** 6411,6417 ****
+ /* With the 'c' flag in 'formatoptions' and 't' missing: only format
+ * comments. */
+ if (has_format_option(FO_WRAP_COMS) && !has_format_option(FO_WRAP)
+! && get_leader_len(old, NULL, FALSE) == 0)
+ return;
+ #endif
+
+--- 6411,6417 ----
+ /* With the 'c' flag in 'formatoptions' and 't' missing: only format
+ * comments. */
+ if (has_format_option(FO_WRAP_COMS) && !has_format_option(FO_WRAP)
+! && get_leader_len(old, NULL, FALSE, TRUE) == 0)
+ return;
+ #endif
+
+***************
+*** 8565,8571 ****
+ {
+ temp = curwin->w_cursor.col;
+ if (!can_bs(BS_EOL) /* only if "eol" included */
+! || do_join(2, FALSE, TRUE) == FAIL)
+ vim_beep();
+ else
+ curwin->w_cursor.col = temp;
+--- 8565,8571 ----
+ {
+ temp = curwin->w_cursor.col;
+ if (!can_bs(BS_EOL) /* only if "eol" included */
+! || do_join(2, FALSE, TRUE, FALSE) == FAIL)
+ vim_beep();
+ else
+ curwin->w_cursor.col = temp;
+***************
+*** 8746,8752 ****
+ ptr[len - 1] = NUL;
+ }
+
+! (void)do_join(2, FALSE, FALSE);
+ if (temp == NUL && gchar_cursor() != NUL)
+ inc_cursor();
+ }
+--- 8746,8752 ----
+ ptr[len - 1] = NUL;
+ }
+
+! (void)do_join(2, FALSE, FALSE, FALSE);
+ if (temp == NUL && gchar_cursor() != NUL)
+ inc_cursor();
+ }
+*** ../vim-7.3.540/src/ex_docmd.c 2012-04-30 18:48:38.000000000 +0200
+--- src/ex_docmd.c 2012-06-06 13:00:29.000000000 +0200
+***************
+*** 8545,8551 ****
+ }
+ ++eap->line2;
+ }
+! (void)do_join(eap->line2 - eap->line1 + 1, !eap->forceit, TRUE);
+ beginline(BL_WHITE | BL_FIX);
+ ex_may_print(eap);
+ }
+--- 8545,8551 ----
+ }
+ ++eap->line2;
+ }
+! (void)do_join(eap->line2 - eap->line1 + 1, !eap->forceit, TRUE, TRUE);
+ beginline(BL_WHITE | BL_FIX);
+ ex_may_print(eap);
+ }
+*** ../vim-7.3.540/src/misc1.c 2012-06-01 15:20:49.000000000 +0200
+--- src/misc1.c 2012-06-06 13:27:32.000000000 +0200
+***************
+*** 671,677 ****
+ ptr = saved_line;
+ # ifdef FEAT_COMMENTS
+ if (flags & OPENLINE_DO_COM)
+! lead_len = get_leader_len(ptr, NULL, FALSE);
+ else
+ lead_len = 0;
+ # endif
+--- 671,677 ----
+ ptr = saved_line;
+ # ifdef FEAT_COMMENTS
+ if (flags & OPENLINE_DO_COM)
+! lead_len = get_leader_len(ptr, NULL, FALSE, TRUE);
+ else
+ lead_len = 0;
+ # endif
+***************
+*** 693,699 ****
+ }
+ # ifdef FEAT_COMMENTS
+ if (flags & OPENLINE_DO_COM)
+! lead_len = get_leader_len(ptr, NULL, FALSE);
+ else
+ lead_len = 0;
+ if (lead_len > 0)
+--- 693,699 ----
+ }
+ # ifdef FEAT_COMMENTS
+ if (flags & OPENLINE_DO_COM)
+! lead_len = get_leader_len(ptr, NULL, FALSE, TRUE);
+ else
+ lead_len = 0;
+ if (lead_len > 0)
+***************
+*** 836,842 ****
+ */
+ end_comment_pending = NUL;
+ if (flags & OPENLINE_DO_COM)
+! lead_len = get_leader_len(saved_line, &lead_flags, dir == BACKWARD);
+ else
+ lead_len = 0;
+ if (lead_len > 0)
+--- 836,842 ----
+ */
+ end_comment_pending = NUL;
+ if (flags & OPENLINE_DO_COM)
+! lead_len = get_leader_len(saved_line, &lead_flags, dir == BACKWARD, TRUE);
+ else
+ lead_len = 0;
+ if (lead_len > 0)
+***************
+*** 1548,1561 ****
+ * When "flags" is not NULL, it is set to point to the flags of the recognized
+ * comment leader.
+ * "backward" must be true for the "O" command.
+ */
+ int
+! get_leader_len(line, flags, backward)
+ char_u *line;
+ char_u **flags;
+ int backward;
+ {
+ int i, j;
+ int got_com = FALSE;
+ int found_one;
+ char_u part_buf[COM_MAX_LEN]; /* buffer for one option part */
+--- 1548,1565 ----
+ * When "flags" is not NULL, it is set to point to the flags of the recognized
+ * comment leader.
+ * "backward" must be true for the "O" command.
++ * If "include_space" is set, include trailing whitespace while calculating the
++ * length.
+ */
+ int
+! get_leader_len(line, flags, backward, include_space)
+ char_u *line;
+ char_u **flags;
+ int backward;
++ int include_space;
+ {
+ int i, j;
++ int result;
+ int got_com = FALSE;
+ int found_one;
+ char_u part_buf[COM_MAX_LEN]; /* buffer for one option part */
+***************
+*** 1565,1571 ****
+ char_u *prev_list;
+ char_u *saved_flags = NULL;
+
+! i = 0;
+ while (vim_iswhite(line[i])) /* leading white space is ignored */
+ ++i;
+
+--- 1569,1575 ----
+ char_u *prev_list;
+ char_u *saved_flags = NULL;
+
+! result = i = 0;
+ while (vim_iswhite(line[i])) /* leading white space is ignored */
+ ++i;
+
+***************
+*** 1668,1684 ****
+ if (!found_one)
+ break;
+
+ /* Include any trailing white space. */
+ while (vim_iswhite(line[i]))
+ ++i;
+
+ /* If this comment doesn't nest, stop here. */
+ got_com = TRUE;
+ if (vim_strchr(part_buf, COM_NEST) == NULL)
+ break;
+ }
+
+! return (got_com ? i : 0);
+ }
+ #endif
+
+--- 1672,1838 ----
+ if (!found_one)
+ break;
+
++ result = i;
++
+ /* Include any trailing white space. */
+ while (vim_iswhite(line[i]))
+ ++i;
+
++ if (include_space)
++ result = i;
++
+ /* If this comment doesn't nest, stop here. */
+ got_com = TRUE;
+ if (vim_strchr(part_buf, COM_NEST) == NULL)
+ break;
+ }
++ return result;
++ }
++
++ /*
++ * Return the offset at which the last comment in line starts. If there is no
++ * comment in the whole line, -1 is returned.
++ *
++ * When "flags" is not null, it is set to point to the flags describing the
++ * recognized comment leader.
++ */
++ int
++ get_last_leader_offset(line, flags)
++ char_u *line;
++ char_u **flags;
++ {
++ int result = -1;
++ int i, j;
++ int lower_check_bound = 0;
++ char_u *string;
++ char_u *com_leader;
++ char_u *com_flags;
++ char_u *list;
++ int found_one;
++ char_u part_buf[COM_MAX_LEN]; /* buffer for one option part */
++
++ /*
++ * Repeat to match several nested comment strings.
++ */
++ i = (int)STRLEN(line);
++ while (--i >= lower_check_bound)
++ {
++ /*
++ * scan through the 'comments' option for a match
++ */
++ found_one = FALSE;
++ for (list = curbuf->b_p_com; *list; )
++ {
++ char_u *flags_save = list;
++
++ /*
++ * Get one option part into part_buf[]. Advance list to next one.
++ * put string at start of string.
++ */
++ (void)copy_option_part(&list, part_buf, COM_MAX_LEN, ",");
++ string = vim_strchr(part_buf, ':');
++ if (string == NULL) /* If everything is fine, this cannot actually
++ * happen. */
++ {
++ continue;
++ }
++ *string++ = NUL; /* Isolate flags from string. */
++ com_leader = string;
++
++ /*
++ * Line contents and string must match.
++ * When string starts with white space, must have some white space
++ * (but the amount does not need to match, there might be a mix of
++ * TABs and spaces).
++ */
++ if (vim_iswhite(string[0]))
++ {
++ if (i == 0 || !vim_iswhite(line[i - 1]))
++ continue;
++ while (vim_iswhite(string[0]))
++ ++string;
++ }
++ for (j = 0; string[j] != NUL && string[j] == line[i + j]; ++j)
++ /* do nothing */;
++ if (string[j] != NUL)
++ continue;
++
++ /*
++ * When 'b' flag used, there must be white space or an
++ * end-of-line after the string in the line.
++ */
++ if (vim_strchr(part_buf, COM_BLANK) != NULL
++ && !vim_iswhite(line[i + j]) && line[i + j] != NUL)
++ {
++ continue;
++ }
++
++ /*
++ * We have found a match, stop searching.
++ */
++ found_one = TRUE;
++
++ if (flags)
++ *flags = flags_save;
++ com_flags = flags_save;
++
++ break;
++ }
+
+! if (found_one)
+! {
+! char_u part_buf2[COM_MAX_LEN]; /* buffer for one option part */
+! int len1, len2, off;
+!
+! result = i;
+! /*
+! * If this comment nests, continue searching.
+! */
+! if (vim_strchr(part_buf, COM_NEST) != NULL)
+! continue;
+!
+! lower_check_bound = i;
+!
+! /* Let's verify whether the comment leader found is a substring
+! * of other comment leaders. If it is, let's adjust the
+! * lower_check_bound so that we make sure that we have determined
+! * the comment leader correctly.
+! */
+!
+! while (vim_iswhite(*com_leader))
+! ++com_leader;
+! len1 = (int)STRLEN(com_leader);
+!
+! for (list = curbuf->b_p_com; *list; )
+! {
+! char_u *flags_save = list;
+!
+! (void)copy_option_part(&list, part_buf2, COM_MAX_LEN, ",");
+! if (flags_save == com_flags)
+! continue;
+! string = vim_strchr(part_buf2, ':');
+! ++string;
+! while (vim_iswhite(*string))
+! ++string;
+! len2 = (int)STRLEN(string);
+! if (len2 == 0)
+! continue;
+!
+! /* Now we have to verify whether string ends with a substring
+! * beginning the com_leader. */
+! for (off = (len2 > i ? i : len2); off > 0 && off + len1 > len2;)
+! {
+! --off;
+! if (!STRNCMP(string + off, com_leader, len2 - off))
+! {
+! if (i - off < lower_check_bound)
+! lower_check_bound = i - off;
+! }
+! }
+! }
+! }
+! }
+! return result;
+ }
+ #endif
+
+*** ../vim-7.3.540/src/normal.c 2012-05-25 13:12:33.000000000 +0200
+--- src/normal.c 2012-06-06 13:00:29.000000000 +0200
+***************
+*** 1968,1974 ****
+ beep_flush();
+ else
+ {
+! (void)do_join(oap->line_count, oap->op_type == OP_JOIN, TRUE);
+ auto_format(FALSE, TRUE);
+ }
+ break;
+--- 1968,1974 ----
+ beep_flush();
+ else
+ {
+! (void)do_join(oap->line_count, oap->op_type == OP_JOIN, TRUE, TRUE);
+ auto_format(FALSE, TRUE);
+ }
+ break;
+***************
+*** 4426,4432 ****
+ break;
+ }
+ #ifdef FEAT_COMMENTS
+! if (get_leader_len(ml_get_curline(), NULL, FALSE) > 0)
+ {
+ /* Ignore this line, continue at start of next line. */
+ ++curwin->w_cursor.lnum;
+--- 4426,4432 ----
+ break;
+ }
+ #ifdef FEAT_COMMENTS
+! if (get_leader_len(ml_get_curline(), NULL, FALSE, TRUE) > 0)
+ {
+ /* Ignore this line, continue at start of next line. */
+ ++curwin->w_cursor.lnum;
+***************
+*** 9324,9330 ****
+ {
+ prep_redo(cap->oap->regname, cap->count0,
+ NUL, cap->cmdchar, NUL, NUL, cap->nchar);
+! (void)do_join(cap->count0, cap->nchar == NUL, TRUE);
+ }
+ }
+ }
+--- 9324,9330 ----
+ {
+ prep_redo(cap->oap->regname, cap->count0,
+ NUL, cap->cmdchar, NUL, NUL, cap->nchar);
+! (void)do_join(cap->count0, cap->nchar == NUL, TRUE, TRUE);
+ }
+ }
+ }
+*** ../vim-7.3.540/src/ops.c 2012-05-18 12:49:33.000000000 +0200
+--- src/ops.c 2012-06-06 15:43:31.000000000 +0200
+***************
+*** 112,117 ****
+--- 112,120 ----
+ # endif
+ #endif
+ static void dis_msg __ARGS((char_u *p, int skip_esc));
++ #if defined(FEAT_COMMENTS) || defined(PROTO)
++ static char_u *skip_comment __ARGS((char_u *line, int process, int include_space, int *is_comment));
++ #endif
+ #ifdef FEAT_VISUAL
+ static void block_prep __ARGS((oparg_T *oap, struct block_def *, linenr_T, int));
+ #endif
+***************
+*** 1987,1993 ****
+ curwin->w_cursor = curpos; /* restore curwin->w_cursor */
+ }
+ if (curwin->w_cursor.lnum < curbuf->b_ml.ml_line_count)
+! (void)do_join(2, FALSE, FALSE);
+ }
+ }
+
+--- 1990,1996 ----
+ curwin->w_cursor = curpos; /* restore curwin->w_cursor */
+ }
+ if (curwin->w_cursor.lnum < curbuf->b_ml.ml_line_count)
+! (void)do_join(2, FALSE, FALSE, FALSE);
+ }
+ }
+
+***************
+*** 4197,4213 ****
+ ui_breakcheck();
+ }
+
+ /*
+ * Join 'count' lines (minimal 2) at cursor position.
+ * When "save_undo" is TRUE save lines for undo first.
+ *
+ * return FAIL for failure, OK otherwise
+ */
+ int
+! do_join(count, insert_space, save_undo)
+ long count;
+ int insert_space;
+ int save_undo;
+ {
+ char_u *curr = NULL;
+ char_u *curr_start = NULL;
+--- 4200,4297 ----
+ ui_breakcheck();
+ }
+
++ #if defined(FEAT_COMMENTS) || defined(PROTO)
++ /*
++ * If "process" is TRUE and the line begins with a comment leader (possibly
++ * after some white space), return a pointer to the text after it. Put a boolean
++ * value indicating whether the line ends with an unclosed comment in
++ * "is_comment".
++ * line - line to be processed,
++ * process - if FALSE, will only check whether the line ends with an unclosed
++ * comment,
++ * include_space - whether to also skip space following the comment leader,
++ * is_comment - will indicate whether the current line ends with an unclosed
++ * comment.
++ */
++ static char_u *
++ skip_comment(line, process, include_space, is_comment)
++ char_u *line;
++ int process;
++ int include_space;
++ int *is_comment;
++ {
++ char_u *comment_flags = NULL;
++ int lead_len;
++ int leader_offset = get_last_leader_offset(line, &comment_flags);
++
++ *is_comment = FALSE;
++ if (leader_offset != -1)
++ {
++ /* Let's check whether the line ends with an unclosed comment.
++ * If the last comment leader has COM_END in flags, there's no comment.
++ */
++ while (*comment_flags)
++ {
++ if (*comment_flags == COM_END
++ || *comment_flags == ':')
++ break;
++ ++comment_flags;
++ }
++ if (*comment_flags != COM_END)
++ *is_comment = TRUE;
++ }
++
++ if (process == FALSE)
++ return line;
++
++ lead_len = get_leader_len(line, &comment_flags, FALSE, include_space);
++
++ if (lead_len == 0)
++ return line;
++
++ /* Find:
++ * - COM_START,
++ * - COM_END,
++ * - colon,
++ * whichever comes first.
++ */
++ while (*comment_flags)
++ {
++ if (*comment_flags == COM_START
++ || *comment_flags == COM_END
++ || *comment_flags == ':')
++ {
++ break;
++ }
++ ++comment_flags;
++ }
++
++ /* If we found a colon, it means that we are not processing a line
++ * starting with an opening or a closing part of a three-part
++ * comment. That's good, because we don't want to remove those as
++ * this would be annoying.
++ */
++ if (*comment_flags == ':' || *comment_flags == NUL)
++ line += lead_len;
++
++ return line;
++ }
++ #endif
++
+ /*
+ * Join 'count' lines (minimal 2) at cursor position.
+ * When "save_undo" is TRUE save lines for undo first.
++ * Set "use_formatoptions" to FALSE when e.g. processing
++ * backspace and comment leaders should not be removed.
+ *
+ * return FAIL for failure, OK otherwise
+ */
+ int
+! do_join(count, insert_space, save_undo, use_formatoptions)
+ long count;
+ int insert_space;
+ int save_undo;
++ int use_formatoptions UNUSED;
+ {
+ char_u *curr = NULL;
+ char_u *curr_start = NULL;
+***************
+*** 4221,4226 ****
+--- 4305,4317 ----
+ linenr_T t;
+ colnr_T col = 0;
+ int ret = OK;
++ #if defined(FEAT_COMMENTS) || defined(PROTO)
++ int *comments;
++ int remove_comments = (use_formatoptions == TRUE)
++ && has_format_option(FO_REMOVE_COMS);
++ int prev_was_comment;
++ #endif
++
+
+ if (save_undo && u_save((linenr_T)(curwin->w_cursor.lnum - 1),
+ (linenr_T)(curwin->w_cursor.lnum + count)) == FAIL)
+***************
+*** 4232,4237 ****
+--- 4323,4339 ----
+ spaces = lalloc_clear((long_u)count, TRUE);
+ if (spaces == NULL)
+ return FAIL;
++ #if defined(FEAT_COMMENTS) || defined(PROTO)
++ if (remove_comments)
++ {
++ comments = (int *)lalloc_clear((long_u)count * sizeof(int), TRUE);
++ if (comments == NULL)
++ {
++ vim_free(spaces);
++ return FAIL;
++ }
++ }
++ #endif
+
+ /*
+ * Don't move anything, just compute the final line length
+***************
+*** 4240,4245 ****
+--- 4342,4366 ----
+ for (t = 0; t < count; ++t)
+ {
+ curr = curr_start = ml_get((linenr_T)(curwin->w_cursor.lnum + t));
++ #if defined(FEAT_COMMENTS) || defined(PROTO)
++ if (remove_comments)
++ {
++ /* We don't want to remove the comment leader if the
++ * previous line is not a comment. */
++ if (t > 0 && prev_was_comment)
++ {
++
++ char_u *new_curr = skip_comment(curr, TRUE, insert_space,
++ &prev_was_comment);
++ comments[t] = new_curr - curr;
++ curr = new_curr;
++ }
++ else
++ curr = skip_comment(curr, FALSE, insert_space,
++ &prev_was_comment);
++ }
++ #endif
++
+ if (insert_space && t > 0)
+ {
+ curr = skipwhite(curr);
+***************
+*** 4327,4332 ****
+--- 4448,4457 ----
+ if (t == 0)
+ break;
+ curr = curr_start = ml_get((linenr_T)(curwin->w_cursor.lnum + t - 1));
++ #if defined(FEAT_COMMENTS) || defined(PROTO)
++ if (remove_comments)
++ curr += comments[t - 1];
++ #endif
+ if (insert_space && t > 1)
+ curr = skipwhite(curr);
+ currsize = (int)STRLEN(curr);
+***************
+*** 4364,4369 ****
+--- 4489,4498 ----
+
+ theend:
+ vim_free(spaces);
++ #if defined(FEAT_COMMENTS) || defined(PROTO)
++ if (remove_comments)
++ vim_free(comments);
++ #endif
+ return ret;
+ }
+
+***************
+*** 4788,4794 ****
+ (long)-next_leader_len);
+ #endif
+ curwin->w_cursor.lnum--;
+! if (do_join(2, TRUE, FALSE) == FAIL)
+ {
+ beep_flush();
+ break;
+--- 4917,4923 ----
+ (long)-next_leader_len);
+ #endif
+ curwin->w_cursor.lnum--;
+! if (do_join(2, TRUE, FALSE, FALSE) == FAIL)
+ {
+ beep_flush();
+ break;
+***************
+*** 4844,4850 ****
+
+ ptr = ml_get(lnum);
+ if (do_comments)
+! *leader_len = get_leader_len(ptr, leader_flags, FALSE);
+ else
+ *leader_len = 0;
+
+--- 4973,4979 ----
+
+ ptr = ml_get(lnum);
+ if (do_comments)
+! *leader_len = get_leader_len(ptr, leader_flags, FALSE, TRUE);
+ else
+ *leader_len = 0;
+
+*** ../vim-7.3.540/src/option.h 2012-02-20 22:18:22.000000000 +0100
+--- src/option.h 2012-06-06 13:00:29.000000000 +0200
+***************
+*** 104,113 ****
+ #define FO_ONE_LETTER '1'
+ #define FO_WHITE_PAR 'w' /* trailing white space continues paragr. */
+ #define FO_AUTO 'a' /* automatic formatting */
+
+ #define DFLT_FO_VI "vt"
+ #define DFLT_FO_VIM "tcq"
+! #define FO_ALL "tcroq2vlb1mMBn,aw" /* for do_set() */
+
+ /* characters for the p_cpo option: */
+ #define CPO_ALTREAD 'a' /* ":read" sets alternate file name */
+--- 104,114 ----
+ #define FO_ONE_LETTER '1'
+ #define FO_WHITE_PAR 'w' /* trailing white space continues paragr. */
+ #define FO_AUTO 'a' /* automatic formatting */
++ #define FO_REMOVE_COMS 'j' /* remove comment leaders when joining lines */
+
+ #define DFLT_FO_VI "vt"
+ #define DFLT_FO_VIM "tcq"
+! #define FO_ALL "tcroq2vlb1mMBn,awj" /* for do_set() */
+
+ /* characters for the p_cpo option: */
+ #define CPO_ALTREAD 'a' /* ":read" sets alternate file name */
+*** ../vim-7.3.540/src/proto/misc1.pro 2010-08-15 21:57:28.000000000 +0200
+--- src/proto/misc1.pro 2012-06-06 13:00:29.000000000 +0200
+***************
+*** 6,12 ****
+ int set_indent __ARGS((int size, int flags));
+ int get_number_indent __ARGS((linenr_T lnum));
+ int open_line __ARGS((int dir, int flags, int old_indent));
+! int get_leader_len __ARGS((char_u *line, char_u **flags, int backward));
+ int plines __ARGS((linenr_T lnum));
+ int plines_win __ARGS((win_T *wp, linenr_T lnum, int winheight));
+ int plines_nofill __ARGS((linenr_T lnum));
+--- 6,13 ----
+ int set_indent __ARGS((int size, int flags));
+ int get_number_indent __ARGS((linenr_T lnum));
+ int open_line __ARGS((int dir, int flags, int old_indent));
+! int get_leader_len __ARGS((char_u *line, char_u **flags, int backward, int do_skip_space));
+! int get_last_leader_offset __ARGS((char_u *line, char_u **flags));
+ int plines __ARGS((linenr_T lnum));
+ int plines_win __ARGS((win_T *wp, linenr_T lnum, int winheight));
+ int plines_nofill __ARGS((linenr_T lnum));
+*** ../vim-7.3.540/src/proto/ops.pro 2010-08-15 21:57:28.000000000 +0200
+--- src/proto/ops.pro 2012-06-06 13:00:29.000000000 +0200
+***************
+*** 36,42 ****
+ int preprocs_left __ARGS((void));
+ int get_register_name __ARGS((int num));
+ void ex_display __ARGS((exarg_T *eap));
+! int do_join __ARGS((long count, int insert_space, int save_undo));
+ void op_format __ARGS((oparg_T *oap, int keep_cursor));
+ void op_formatexpr __ARGS((oparg_T *oap));
+ int fex_format __ARGS((linenr_T lnum, long count, int c));
+--- 36,42 ----
+ int preprocs_left __ARGS((void));
+ int get_register_name __ARGS((int num));
+ void ex_display __ARGS((exarg_T *eap));
+! int do_join __ARGS((long count, int insert_space, int save_undo, int use_formatoptions));
+ void op_format __ARGS((oparg_T *oap, int keep_cursor));
+ void op_formatexpr __ARGS((oparg_T *oap));
+ int fex_format __ARGS((linenr_T lnum, long count, int c));
+*** ../vim-7.3.540/src/search.c 2012-02-04 23:34:57.000000000 +0100
+--- src/search.c 2012-06-06 13:00:29.000000000 +0200
+***************
+*** 1548,1554 ****
+ int len;
+ int stop = TRUE;
+ #ifdef FEAT_MBYTE
+! static char_u bytes[MB_MAXBYTES];
+ static int bytelen = 1; /* >1 for multi-byte char */
+ #endif
+
+--- 1548,1554 ----
+ int len;
+ int stop = TRUE;
+ #ifdef FEAT_MBYTE
+! static char_u bytes[MB_MAXBYTES + 1];
+ static int bytelen = 1; /* >1 for multi-byte char */
+ #endif
+
+***************
+*** 4901,4907 ****
+ #ifdef FEAT_COMMENTS
+ if ((*line != '#' ||
+ STRNCMP(skipwhite(line + 1), "define", 6) != 0)
+! && get_leader_len(line, NULL, FALSE))
+ matched = FALSE;
+
+ /*
+--- 4901,4907 ----
+ #ifdef FEAT_COMMENTS
+ if ((*line != '#' ||
+ STRNCMP(skipwhite(line + 1), "define", 6) != 0)
+! && get_leader_len(line, NULL, FALSE, TRUE))
+ matched = FALSE;
+
+ /*
+*** ../vim-7.3.540/src/testdir/test29.in 2010-08-15 21:57:29.000000000 +0200
+--- src/testdir/test29.in 2012-06-06 15:44:38.000000000 +0200
+***************
+*** 4,19 ****
+ and with 'cpoptions' flag 'j' set or not
+
+ STARTTEST
+ :set nocompatible viminfo+=nviminfo
+ :set nojoinspaces
+ :set cpoptions-=j
+ /firstline/
+! j"tdGpJjJjJjJjJjJjJjJjJjJjJjJjJjJj05lmx2j06lmy2k4Jy3l$p`xyl$p`yy2l$p:set cpoptions+=j
+ j05lmx2j06lmy2k4Jy3l$p`xyl$p`yy2l$p:set cpoptions-=j joinspaces
+ j"tpJjJjJjJjJjJjJjJjJjJjJjJjJjJj05lmx2j06lmy2k4Jy3l$p`xyl$p`yy2l$p:set cpoptions+=j
+ j05lmx2j06lmy2k4Jy3l$p`xyl$p`yy2l$p:set cpoptions-=j nojoinspaces compatible
+! j"tpJjJjJjJjJjJjJjJjJjJjJjJjJjJj4Jy3l$pjdG:?firstline?+1,$w! test.out
+! :qa!
+ ENDTEST
+
+ firstline
+--- 4,20 ----
+ and with 'cpoptions' flag 'j' set or not
+
+ STARTTEST
++ :so small.vim
+ :set nocompatible viminfo+=nviminfo
+ :set nojoinspaces
+ :set cpoptions-=j
+ /firstline/
+! j"td/^STARTTEST/-1
+! PJjJjJjJjJjJjJjJjJjJjJjJjJjJj05lmx2j06lmy2k4Jy3l$p`xyl$p`yy2l$p:set cpoptions+=j
+ j05lmx2j06lmy2k4Jy3l$p`xyl$p`yy2l$p:set cpoptions-=j joinspaces
+ j"tpJjJjJjJjJjJjJjJjJjJjJjJjJjJj05lmx2j06lmy2k4Jy3l$p`xyl$p`yy2l$p:set cpoptions+=j
+ j05lmx2j06lmy2k4Jy3l$p`xyl$p`yy2l$p:set cpoptions-=j nojoinspaces compatible
+! j"tpJjJjJjJjJjJjJjJjJjJjJjJjJjJj4Jy3l$pjd/STARTTEST/-2
+ ENDTEST
+
+ firstline
+***************
+*** 54,56 ****
+--- 55,181 ----
+ hjkl iop!
+ ert
+
++ STARTTEST
++ /^{/+1
++ :set comments=s1:/*,mb:*,ex:*/,://
++ :set nojoinspaces fo=j
++ :set backspace=eol,start
++ :.,+3join
++ j4J
++ :.,+2join
++ j3J
++ :.,+2join
++ j3J
++ :.,+2join
++ jj3J
++ ENDTEST
++
++ {
++
++ /*
++ * Make sure the previous comment leader is not removed.
++ */
++
++ /*
++ * Make sure the previous comment leader is not removed.
++ */
++
++ // Should the next comment leader be left alone?
++ // Yes.
++
++ // Should the next comment leader be left alone?
++ // Yes.
++
++ /* Here the comment leader should be left intact. */
++ // And so should this one.
++
++ /* Here the comment leader should be left intact. */
++ // And so should this one.
++
++ if (condition) // Remove the next comment leader!
++ // OK, I will.
++ action();
++
++ if (condition) // Remove the next comment leader!
++ // OK, I will.
++ action();
++ }
++
++ STARTTEST
++ /^{/+1
++ :set comments=s1:/*,mb:*,ex:*/,://
++ :set comments+=s1:>#,mb:#,ex:#<,:<
++ :set cpoptions-=j joinspaces fo=j
++ :set backspace=eol,start
++ :.,+3join
++ j4J
++ :.,+2join
++ j3J
++ :.,+2join
++ j3J
++ :.,+2join
++ jj3J
++ j:.,+2join
++ jj3J
++ j:.,+5join
++ j6J
++ oSome code! // Make sure backspacing does not remove this comment leader.0i
++ ENDTEST
++
++ {
++
++ /*
++ * Make sure the previous comment leader is not removed.
++ */
++
++ /*
++ * Make sure the previous comment leader is not removed.
++ */
++
++ // Should the next comment leader be left alone?
++ // Yes.
++
++ // Should the next comment leader be left alone?
++ // Yes.
++
++ /* Here the comment leader should be left intact. */
++ // And so should this one.
++
++ /* Here the comment leader should be left intact. */
++ // And so should this one.
++
++ if (condition) // Remove the next comment leader!
++ // OK, I will.
++ action();
++
++ if (condition) // Remove the next comment leader!
++ // OK, I will.
++ action();
++
++ int i = 7 /* foo *// 3
++ // comment
++ ;
++
++ int i = 7 /* foo *// 3
++ // comment
++ ;
++
++ ># Note that the last character of the ending comment leader (left angle
++ # bracket) is a comment leader itself. Make sure that this comment leader is
++ # not removed from the next line #<
++ < On this line a new comment is opened which spans 2 lines. This comment should
++ < retain its comment leader.
++
++ ># Note that the last character of the ending comment leader (left angle
++ # bracket) is a comment leader itself. Make sure that this comment leader is
++ # not removed from the next line #<
++ < On this line a new comment is opened which spans 2 lines. This comment should
++ < retain its comment leader.
++
++ }
++
++ STARTTEST
++ :g/^STARTTEST/.,/^ENDTEST/d
++ :?firstline?+1,$w! test.out
++ :qa!
++ ENDTEST
+*** ../vim-7.3.540/src/testdir/test29.ok 2010-08-15 21:57:29.000000000 +0200
+--- src/testdir/test29.ok 2012-06-06 13:00:29.000000000 +0200
+***************
+*** 47,49 ****
+--- 47,86 ----
+ asdfasdf asdf
+ asdfasdf asdf
+ zx cvn. as dfg? hjkl iop! ert a
++
++
++ {
++ /* Make sure the previous comment leader is not removed. */
++ /* Make sure the previous comment leader is not removed. */
++ // Should the next comment leader be left alone? Yes.
++ // Should the next comment leader be left alone? Yes.
++ /* Here the comment leader should be left intact. */ // And so should this one.
++ /* Here the comment leader should be left intact. */ // And so should this one.
++ if (condition) // Remove the next comment leader! OK, I will.
++ action();
++ if (condition) // Remove the next comment leader! OK, I will.
++ action();
++ }
++
++
++ {
++ /* Make sure the previous comment leader is not removed. */
++ /* Make sure the previous comment leader is not removed. */
++ // Should the next comment leader be left alone? Yes.
++ // Should the next comment leader be left alone? Yes.
++ /* Here the comment leader should be left intact. */ // And so should this one.
++ /* Here the comment leader should be left intact. */ // And so should this one.
++ if (condition) // Remove the next comment leader! OK, I will.
++ action();
++ if (condition) // Remove the next comment leader! OK, I will.
++ action();
++ int i = 7 /* foo *// 3 // comment
++ ;
++ int i = 7 /* foo *// 3 // comment
++ ;
++ ># Note that the last character of the ending comment leader (left angle bracket) is a comment leader itself. Make sure that this comment leader is not removed from the next line #< < On this line a new comment is opened which spans 2 lines. This comment should retain its comment leader.
++ ># Note that the last character of the ending comment leader (left angle bracket) is a comment leader itself. Make sure that this comment leader is not removed from the next line #< < On this line a new comment is opened which spans 2 lines. This comment should retain its comment leader.
++
++ Some code!// Make sure backspacing does not remove this comment leader.
++ }
++
+*** ../vim-7.3.540/src/version.c 2012-06-06 12:06:10.000000000 +0200
+--- src/version.c 2012-06-06 16:10:03.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 541,
+ /**/
+
+--
+I have a drinking problem -- I don't have a drink!
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.542 b/source/ap/vim/patches/7.3.542
new file mode 100644
index 000000000..81086126f
--- /dev/null
+++ b/source/ap/vim/patches/7.3.542
@@ -0,0 +1,73 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.542
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.542 (after 7.3.506)
+Problem: Function is sometimes unused.
+Solution: Add #ifdef.
+Files: src/gui_gtk.c
+
+
+*** ../vim-7.3.541/src/gui_gtk.c 2012-04-25 17:10:12.000000000 +0200
+--- src/gui_gtk.c 2012-06-06 15:25:12.000000000 +0200
+***************
+*** 90,100 ****
+--- 90,102 ----
+ static void entry_activate_cb(GtkWidget *widget, gpointer data);
+ static void entry_changed_cb(GtkWidget *entry, GtkWidget *dialog);
+ static void find_replace_cb(GtkWidget *widget, gpointer data);
++ #if defined(FEAT_BROWSE) || defined(PROTO)
+ static void recent_func_log_func(
+ const gchar *log_domain,
+ GLogLevelFlags log_level,
+ const gchar *message,
+ gpointer user_data);
++ #endif
+
+ #if defined(FEAT_TOOLBAR)
+ /*
+***************
+*** 1896,1901 ****
+--- 1898,1904 ----
+ do_cmdline_cmd((char_u *)"emenu ToolBar.FindHelp");
+ }
+
++ #if defined(FEAT_BROWSE) || defined(PROTO)
+ static void
+ recent_func_log_func(const gchar *log_domain UNUSED,
+ GLogLevelFlags log_level UNUSED,
+***************
+*** 1905,1908 ****
+ /* We just want to suppress the warnings. */
+ /* http://bugzilla.gnome.org/show_bug.cgi?id=664587 */
+ }
+!
+--- 1908,1911 ----
+ /* We just want to suppress the warnings. */
+ /* http://bugzilla.gnome.org/show_bug.cgi?id=664587 */
+ }
+! #endif
+*** ../vim-7.3.541/src/version.c 2012-06-06 16:12:54.000000000 +0200
+--- src/version.c 2012-06-06 16:14:17.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 542,
+ /**/
+
+--
+How To Keep A Healthy Level Of Insanity:
+1. At lunch time, sit in your parked car with sunglasses on and point
+ a hair dryer at passing cars. See if they slow down.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.543 b/source/ap/vim/patches/7.3.543
new file mode 100644
index 000000000..3fa569cc9
--- /dev/null
+++ b/source/ap/vim/patches/7.3.543
@@ -0,0 +1,55 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.543
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.543
+Problem: The cursor is in the wrong line after using ":copen". (John
+ Beckett)
+Solution: Invoke more drastic redraw method.
+Files: src/eval.c
+
+
+*** ../vim-7.3.542/src/eval.c 2012-06-01 15:20:49.000000000 +0200
+--- src/eval.c 2012-06-06 16:28:11.000000000 +0200
+***************
+*** 18507,18515 ****
+ curwin->w_skipcol = get_dict_number(dict, (char_u *)"skipcol");
+
+ check_cursor();
+! changed_cline_bef_curs();
+! invalidate_botline();
+! redraw_later(VALID);
+
+ if (curwin->w_topline == 0)
+ curwin->w_topline = 1;
+--- 18507,18513 ----
+ curwin->w_skipcol = get_dict_number(dict, (char_u *)"skipcol");
+
+ check_cursor();
+! changed_window_setting();
+
+ if (curwin->w_topline == 0)
+ curwin->w_topline = 1;
+*** ../vim-7.3.542/src/version.c 2012-06-06 16:14:36.000000000 +0200
+--- src/version.c 2012-06-06 16:28:16.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 543,
+ /**/
+
+--
+How To Keep A Healthy Level Of Insanity:
+2. Page yourself over the intercom. Don't disguise your voice.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.544 b/source/ap/vim/patches/7.3.544
new file mode 100644
index 000000000..198a6cb1f
--- /dev/null
+++ b/source/ap/vim/patches/7.3.544
@@ -0,0 +1,81 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.544
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.544
+Problem: There is no good way to close a quickfix window when closing the
+ last ordinary window.
+Solution: Add the QuitPre autocommand.
+Files: src/ex_docmd.c, src/fileio.c, src/vim.h
+
+
+*** ../vim-7.3.543/src/ex_docmd.c 2012-06-06 16:12:54.000000000 +0200
+--- src/ex_docmd.c 2012-06-06 17:58:41.000000000 +0200
+***************
+*** 6458,6463 ****
+--- 6458,6464 ----
+ return;
+ }
+ #ifdef FEAT_AUTOCMD
++ apply_autocmds(EVENT_QUITPRE, NULL, NULL, FALSE, curbuf);
+ if (curbuf_locked())
+ return;
+ #endif
+*** ../vim-7.3.543/src/fileio.c 2012-04-30 17:04:47.000000000 +0200
+--- src/fileio.c 2012-06-06 17:32:12.000000000 +0200
+***************
+*** 7678,7683 ****
+--- 7678,7684 ----
+ {"MenuPopup", EVENT_MENUPOPUP},
+ {"QuickFixCmdPost", EVENT_QUICKFIXCMDPOST},
+ {"QuickFixCmdPre", EVENT_QUICKFIXCMDPRE},
++ {"QuitPre", EVENT_QUITPRE},
+ {"RemoteReply", EVENT_REMOTEREPLY},
+ {"SessionLoadPost", EVENT_SESSIONLOADPOST},
+ {"ShellCmdPost", EVENT_SHELLCMDPOST},
+*** ../vim-7.3.543/src/vim.h 2012-06-01 15:20:49.000000000 +0200
+--- src/vim.h 2012-06-06 17:30:01.000000000 +0200
+***************
+*** 1264,1271 ****
+ EVENT_INSERTENTER, /* when entering Insert mode */
+ EVENT_INSERTLEAVE, /* when leaving Insert mode */
+ EVENT_MENUPOPUP, /* just before popup menu is displayed */
+! EVENT_QUICKFIXCMDPOST, /* after :make, :grep etc */
+! EVENT_QUICKFIXCMDPRE, /* before :make, :grep etc */
+ EVENT_SESSIONLOADPOST, /* after loading a session file */
+ EVENT_STDINREADPOST, /* after reading from stdin */
+ EVENT_STDINREADPRE, /* before reading from stdin */
+--- 1264,1272 ----
+ EVENT_INSERTENTER, /* when entering Insert mode */
+ EVENT_INSERTLEAVE, /* when leaving Insert mode */
+ EVENT_MENUPOPUP, /* just before popup menu is displayed */
+! EVENT_QUICKFIXCMDPOST, /* after :make, :grep etc. */
+! EVENT_QUICKFIXCMDPRE, /* before :make, :grep etc. */
+! EVENT_QUITPRE, /* before :quit */
+ EVENT_SESSIONLOADPOST, /* after loading a session file */
+ EVENT_STDINREADPOST, /* after reading from stdin */
+ EVENT_STDINREADPRE, /* before reading from stdin */
+*** ../vim-7.3.543/src/version.c 2012-06-06 16:29:06.000000000 +0200
+--- src/version.c 2012-06-06 18:02:09.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 544,
+ /**/
+
+--
+How To Keep A Healthy Level Of Insanity:
+3. Every time someone asks you to do something, ask if they want fries
+ with that.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.545 b/source/ap/vim/patches/7.3.545
new file mode 100644
index 000000000..1bd76ebee
--- /dev/null
+++ b/source/ap/vim/patches/7.3.545
@@ -0,0 +1,359 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.545
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.545
+Problem: When closing a window or buffer autocommands may close it too,
+ causing problems for where the autocommand was invoked from.
+Solution: Add the w_closing and b_closing flags. When set disallow ":q" and
+ ":close" to prevent recursive closing.
+Files: src/structs.h, src/buffer.c, src/ex_docmd.c, src/window.c
+
+
+*** ../vim-7.3.544/src/structs.h 2012-02-04 21:57:44.000000000 +0100
+--- src/structs.h 2012-06-06 16:43:34.000000000 +0200
+***************
+*** 1201,1206 ****
+--- 1201,1210 ----
+ typedef struct qf_info_S qf_info_T;
+ #endif
+
++ /*
++ * These are items normally related to a buffer. But when using ":ownsyntax"
++ * a window may have its own instance.
++ */
+ typedef struct {
+ #ifdef FEAT_SYN_HL
+ hashtab_T b_keywtab; /* syntax keywords hash table */
+***************
+*** 1290,1295 ****
+--- 1294,1303 ----
+ int b_nwindows; /* nr of windows open on this buffer */
+
+ int b_flags; /* various BF_ flags */
++ #ifdef FEAT_AUTOCMD
++ int b_closing; /* buffer is being closed, don't let
++ autocommands close it too. */
++ #endif
+
+ /*
+ * b_ffname has the full path of the file (NULL for no name).
+***************
+*** 1853,1858 ****
+--- 1861,1870 ----
+ win_T *w_prev; /* link to previous window */
+ win_T *w_next; /* link to next window */
+ #endif
++ #ifdef FEAT_AUTOCMD
++ int w_closing; /* window is being closed, don't let
++ autocommands close it too. */
++ #endif
+
+ frame_T *w_frame; /* frame containing this window */
+
+*** ../vim-7.3.544/src/buffer.c 2012-03-16 14:32:10.000000000 +0100
+--- src/buffer.c 2012-06-06 18:57:27.000000000 +0200
+***************
+*** 377,404 ****
+ /* When the buffer is no longer in a window, trigger BufWinLeave */
+ if (buf->b_nwindows == 1)
+ {
+ apply_autocmds(EVENT_BUFWINLEAVE, buf->b_fname, buf->b_fname,
+ FALSE, buf);
+! /* Return if autocommands deleted the buffer or made it the only one. */
+! if (!buf_valid(buf) || (abort_if_last && one_window()))
+ {
+ EMSG(_(e_auabort));
+ return;
+ }
+
+ /* When the buffer becomes hidden, but is not unloaded, trigger
+ * BufHidden */
+ if (!unload_buf)
+ {
+ apply_autocmds(EVENT_BUFHIDDEN, buf->b_fname, buf->b_fname,
+ FALSE, buf);
+! /* Return if autocommands deleted the buffer or made it the only
+! * one. */
+! if (!buf_valid(buf) || (abort_if_last && one_window()))
+! {
+! EMSG(_(e_auabort));
+! return;
+! }
+ }
+ # ifdef FEAT_EVAL
+ if (aborting()) /* autocmds may abort script processing */
+--- 377,411 ----
+ /* When the buffer is no longer in a window, trigger BufWinLeave */
+ if (buf->b_nwindows == 1)
+ {
++ buf->b_closing = TRUE;
+ apply_autocmds(EVENT_BUFWINLEAVE, buf->b_fname, buf->b_fname,
+ FALSE, buf);
+! if (!buf_valid(buf))
+ {
++ /* Autocommands deleted the buffer. */
++ aucmd_abort:
+ EMSG(_(e_auabort));
+ return;
+ }
++ buf->b_closing = FALSE;
++ if (abort_if_last && one_window())
++ /* Autocommands made this the only window. */
++ goto aucmd_abort;
+
+ /* When the buffer becomes hidden, but is not unloaded, trigger
+ * BufHidden */
+ if (!unload_buf)
+ {
++ buf->b_closing = TRUE;
+ apply_autocmds(EVENT_BUFHIDDEN, buf->b_fname, buf->b_fname,
+ FALSE, buf);
+! if (!buf_valid(buf))
+! /* Autocommands deleted the buffer. */
+! goto aucmd_abort;
+! buf->b_closing = FALSE;
+! if (abort_if_last && one_window())
+! /* Autocommands made this the only window. */
+! goto aucmd_abort;
+ }
+ # ifdef FEAT_EVAL
+ if (aborting()) /* autocmds may abort script processing */
+***************
+*** 552,557 ****
+--- 559,565 ----
+ #ifdef FEAT_AUTOCMD
+ int is_curbuf = (buf == curbuf);
+
++ buf->b_closing = TRUE;
+ apply_autocmds(EVENT_BUFUNLOAD, buf->b_fname, buf->b_fname, FALSE, buf);
+ if (!buf_valid(buf)) /* autocommands may delete the buffer */
+ return;
+***************
+*** 568,573 ****
+--- 576,582 ----
+ if (!buf_valid(buf)) /* autocommands may delete the buffer */
+ return;
+ }
++ buf->b_closing = FALSE;
+ # ifdef FEAT_EVAL
+ if (aborting()) /* autocmds may abort script processing */
+ return;
+***************
+*** 1150,1155 ****
+--- 1159,1167 ----
+ * a window with this buffer.
+ */
+ while (buf == curbuf
++ # ifdef FEAT_AUTOCMD
++ && !(curwin->w_closing || curwin->w_buffer->b_closing)
++ # endif
+ && (firstwin != lastwin || first_tabpage->tp_next != NULL))
+ win_close(curwin, FALSE);
+ #endif
+***************
+*** 4750,4756 ****
+ #ifdef FEAT_WINDOWS
+ || (had_tab > 0 && wp != firstwin)
+ #endif
+! ) && firstwin != lastwin)
+ {
+ win_close(wp, FALSE);
+ #ifdef FEAT_AUTOCMD
+--- 4762,4772 ----
+ #ifdef FEAT_WINDOWS
+ || (had_tab > 0 && wp != firstwin)
+ #endif
+! ) && firstwin != lastwin
+! #ifdef FEAT_AUTOCMD
+! && !(wp->w_closing || wp->w_buffer->b_closing)
+! #endif
+! )
+ {
+ win_close(wp, FALSE);
+ #ifdef FEAT_AUTOCMD
+*** ../vim-7.3.544/src/ex_docmd.c 2012-06-06 18:03:01.000000000 +0200
+--- src/ex_docmd.c 2012-06-06 18:06:46.000000000 +0200
+***************
+*** 6459,6465 ****
+ }
+ #ifdef FEAT_AUTOCMD
+ apply_autocmds(EVENT_QUITPRE, NULL, NULL, FALSE, curbuf);
+! if (curbuf_locked())
+ return;
+ #endif
+
+--- 6459,6467 ----
+ }
+ #ifdef FEAT_AUTOCMD
+ apply_autocmds(EVENT_QUITPRE, NULL, NULL, FALSE, curbuf);
+! /* Refuse to quick when locked or when the buffer in the last window is
+! * being closed (can only happen in autocommands). */
+! if (curbuf_locked() || (curbuf->b_nwindows == 1 && curbuf->b_closing))
+ return;
+ #endif
+
+*** ../vim-7.3.544/src/window.c 2012-05-25 12:38:57.000000000 +0200
+--- src/window.c 2012-06-06 18:47:19.000000000 +0200
+***************
+*** 2034,2040 ****
+
+ for (wp = firstwin; wp != NULL && lastwin != firstwin; )
+ {
+! if (wp->w_buffer == buf && (!keep_curwin || wp != curwin))
+ {
+ win_close(wp, FALSE);
+
+--- 2034,2044 ----
+
+ for (wp = firstwin; wp != NULL && lastwin != firstwin; )
+ {
+! if (wp->w_buffer == buf && (!keep_curwin || wp != curwin)
+! #ifdef FEAT_AUTOCMD
+! && !(wp->w_closing || wp->w_buffer->b_closing)
+! #endif
+! )
+ {
+ win_close(wp, FALSE);
+
+***************
+*** 2051,2057 ****
+ nexttp = tp->tp_next;
+ if (tp != curtab)
+ for (wp = tp->tp_firstwin; wp != NULL; wp = wp->w_next)
+! if (wp->w_buffer == buf)
+ {
+ win_close_othertab(wp, FALSE, tp);
+
+--- 2055,2065 ----
+ nexttp = tp->tp_next;
+ if (tp != curtab)
+ for (wp = tp->tp_firstwin; wp != NULL; wp = wp->w_next)
+! if (wp->w_buffer == buf
+! #ifdef FEAT_AUTOCMD
+! && !(wp->w_closing || wp->w_buffer->b_closing)
+! #endif
+! )
+ {
+ win_close_othertab(wp, FALSE, tp);
+
+***************
+*** 2168,2173 ****
+--- 2176,2183 ----
+ }
+
+ #ifdef FEAT_AUTOCMD
++ if (win->w_closing || win->w_buffer->b_closing)
++ return; /* window is already being closed */
+ if (win == aucmd_win)
+ {
+ EMSG(_("E813: Cannot close autocmd window"));
+***************
+*** 2203,2219 ****
+ wp = frame2win(win_altframe(win, NULL));
+
+ /*
+! * Be careful: If autocommands delete the window, return now.
+ */
+ if (wp->w_buffer != curbuf)
+ {
+ other_buffer = TRUE;
+ apply_autocmds(EVENT_BUFLEAVE, NULL, NULL, FALSE, curbuf);
+! if (!win_valid(win) || last_window())
+ return;
+ }
+ apply_autocmds(EVENT_WINLEAVE, NULL, NULL, FALSE, curbuf);
+! if (!win_valid(win) || last_window())
+ return;
+ # ifdef FEAT_EVAL
+ /* autocmds may abort script processing */
+--- 2213,2238 ----
+ wp = frame2win(win_altframe(win, NULL));
+
+ /*
+! * Be careful: If autocommands delete the window or cause this window
+! * to be the last one left, return now.
+ */
+ if (wp->w_buffer != curbuf)
+ {
+ other_buffer = TRUE;
++ win->w_closing = TRUE;
+ apply_autocmds(EVENT_BUFLEAVE, NULL, NULL, FALSE, curbuf);
+! if (!win_valid(win))
+! return;
+! win->w_closing = FALSE;
+! if (last_window())
+ return;
+ }
++ win->w_closing = TRUE;
+ apply_autocmds(EVENT_WINLEAVE, NULL, NULL, FALSE, curbuf);
+! if (!win_valid(win))
+! return;
+! win->w_closing = FALSE;
+! if (last_window())
+ return;
+ # ifdef FEAT_EVAL
+ /* autocmds may abort script processing */
+***************
+*** 2240,2246 ****
+ * Close the link to the buffer.
+ */
+ if (win->w_buffer != NULL)
+! close_buffer(win, win->w_buffer, free_buf ? DOBUF_UNLOAD : 0, TRUE);
+
+ /* Autocommands may have closed the window already, or closed the only
+ * other window or moved to another tab page. */
+--- 2259,2274 ----
+ * Close the link to the buffer.
+ */
+ if (win->w_buffer != NULL)
+! {
+! #ifdef FEAT_AUTOCMD
+! win->w_closing = TRUE;
+! #endif
+! close_buffer(win, win->w_buffer, free_buf ? DOBUF_UNLOAD : 0, FALSE);
+! #ifdef FEAT_AUTOCMD
+! if (win_valid(win))
+! win->w_closing = FALSE;
+! #endif
+! }
+
+ /* Autocommands may have closed the window already, or closed the only
+ * other window or moved to another tab page. */
+***************
+*** 2346,2351 ****
+--- 2374,2384 ----
+ tabpage_T *ptp = NULL;
+ int free_tp = FALSE;
+
++ #ifdef FEAT_AUTOCMD
++ if (win->w_closing || win->w_buffer->b_closing)
++ return; /* window is already being closed */
++ #endif
++
+ /* Close the link to the buffer. */
+ close_buffer(win, win->w_buffer, free_buf ? DOBUF_UNLOAD : 0, FALSE);
+
+*** ../vim-7.3.544/src/version.c 2012-06-06 18:03:01.000000000 +0200
+--- src/version.c 2012-06-06 18:53:06.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 545,
+ /**/
+
+--
+How To Keep A Healthy Level Of Insanity:
+4. Put your garbage can on your desk and label it "in".
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.546 b/source/ap/vim/patches/7.3.546
new file mode 100644
index 000000000..c883d2d62
--- /dev/null
+++ b/source/ap/vim/patches/7.3.546
@@ -0,0 +1,54 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.546
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.546
+Problem: Bogus line break.
+Solution: Remove the line break.
+Files: src/screen.c
+
+
+*** ../vim-7.3.545/src/screen.c 2012-06-01 15:20:49.000000000 +0200
+--- src/screen.c 2012-06-01 16:31:30.000000000 +0200
+***************
+*** 3228,3235 ****
+ /* no bad word found at line start, don't check until end of a
+ * word */
+ spell_hlf = HLF_COUNT;
+! word_end = (int)(spell_to_word_end(ptr, wp)
+! - line + 1);
+ }
+ else
+ {
+--- 3228,3234 ----
+ /* no bad word found at line start, don't check until end of a
+ * word */
+ spell_hlf = HLF_COUNT;
+! word_end = (int)(spell_to_word_end(ptr, wp) - line + 1);
+ }
+ else
+ {
+*** ../vim-7.3.545/src/version.c 2012-06-06 19:02:40.000000000 +0200
+--- src/version.c 2012-06-06 19:05:11.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 546,
+ /**/
+
+--
+How To Keep A Healthy Level Of Insanity:
+5. Put decaf in the coffee maker for 3 weeks. Once everyone has gotten
+ over their caffeine addictions, switch to espresso.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.547 b/source/ap/vim/patches/7.3.547
new file mode 100644
index 000000000..5533144a2
--- /dev/null
+++ b/source/ap/vim/patches/7.3.547
@@ -0,0 +1,52 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.547
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.547 (after 7.3.541)
+Problem: Compiler warning for uninitialized variable.
+Solution: Initialize it.
+Files: src/ops.c
+
+
+*** ../vim-7.3.546/src/ops.c 2012-06-06 16:12:54.000000000 +0200
+--- src/ops.c 2012-06-06 23:06:45.000000000 +0200
+***************
+*** 4306,4312 ****
+ colnr_T col = 0;
+ int ret = OK;
+ #if defined(FEAT_COMMENTS) || defined(PROTO)
+! int *comments;
+ int remove_comments = (use_formatoptions == TRUE)
+ && has_format_option(FO_REMOVE_COMS);
+ int prev_was_comment;
+--- 4306,4312 ----
+ colnr_T col = 0;
+ int ret = OK;
+ #if defined(FEAT_COMMENTS) || defined(PROTO)
+! int *comments = NULL;
+ int remove_comments = (use_formatoptions == TRUE)
+ && has_format_option(FO_REMOVE_COMS);
+ int prev_was_comment;
+*** ../vim-7.3.546/src/version.c 2012-06-06 19:05:45.000000000 +0200
+--- src/version.c 2012-06-06 23:07:26.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 547,
+ /**/
+
+--
+How To Keep A Healthy Level Of Insanity:
+9. As often as possible, skip rather than walk.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.548 b/source/ap/vim/patches/7.3.548
new file mode 100644
index 000000000..3692a9a90
--- /dev/null
+++ b/source/ap/vim/patches/7.3.548
@@ -0,0 +1,53 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.548
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.548
+Problem: Compiler warning on 64 bit Windows.
+Solution: Add type cast. (Mike Williams)
+Files: src/ops.c
+
+
+*** ../vim-7.3.547/src/ops.c 2012-06-06 23:08:33.000000000 +0200
+--- src/ops.c 2012-06-07 21:07:57.000000000 +0200
+***************
+*** 4352,4358 ****
+
+ char_u *new_curr = skip_comment(curr, TRUE, insert_space,
+ &prev_was_comment);
+! comments[t] = new_curr - curr;
+ curr = new_curr;
+ }
+ else
+--- 4352,4358 ----
+
+ char_u *new_curr = skip_comment(curr, TRUE, insert_space,
+ &prev_was_comment);
+! comments[t] = (int)(new_curr - curr);
+ curr = new_curr;
+ }
+ else
+*** ../vim-7.3.547/src/version.c 2012-06-06 23:08:33.000000000 +0200
+--- src/version.c 2012-06-07 21:08:35.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 548,
+ /**/
+
+--
+How To Keep A Healthy Level Of Insanity:
+17. When the money comes out the ATM, scream "I won!, I won! 3rd
+ time this week!!!!!"
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.549 b/source/ap/vim/patches/7.3.549
new file mode 100644
index 000000000..6d27fc3fd
--- /dev/null
+++ b/source/ap/vim/patches/7.3.549
@@ -0,0 +1,125 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.549
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.549
+Problem: In 'cinoptions' "0s" is interpreted as one shiftwidth. (David
+ Pineau)
+Solution: Use the zero as zero. (Lech Lorens)
+Files: src/misc1.c, src/testdir/test3.in, src/testdir/test3.ok
+
+
+*** ../vim-7.3.548/src/misc1.c 2012-06-06 16:12:54.000000000 +0200
+--- src/misc1.c 2012-06-13 13:17:11.000000000 +0200
+***************
+*** 6635,6640 ****
+--- 6635,6641 ----
+ int whilelevel;
+ linenr_T lnum;
+ char_u *options;
++ char_u *digits;
+ int fraction = 0; /* init for GCC */
+ int divider;
+ int n;
+***************
+*** 6650,6655 ****
+--- 6651,6657 ----
+ l = options++;
+ if (*options == '-')
+ ++options;
++ digits = options; /* remember where the digits start */
+ n = getdigits(&options);
+ divider = 0;
+ if (*options == '.') /* ".5s" means a fraction */
+***************
+*** 6666,6672 ****
+ }
+ if (*options == 's') /* "2s" means two times 'shiftwidth' */
+ {
+! if (n == 0 && fraction == 0)
+ n = curbuf->b_p_sw; /* just "s" is one 'shiftwidth' */
+ else
+ {
+--- 6668,6674 ----
+ }
+ if (*options == 's') /* "2s" means two times 'shiftwidth' */
+ {
+! if (options == digits)
+ n = curbuf->b_p_sw; /* just "s" is one 'shiftwidth' */
+ else
+ {
+*** ../vim-7.3.548/src/testdir/test3.in 2012-04-05 17:17:38.000000000 +0200
+--- src/testdir/test3.in 2012-06-13 13:17:31.000000000 +0200
+***************
+*** 977,982 ****
+--- 977,1000 ----
+
+ STARTTEST
+ :set cin
++ :set cino=es,n0s
++ /main
++ =][
++ ENDTEST
++
++ main(void)
++ {
++ /* Make sure that cino=X0s is not parsed like cino=Xs. */
++ if (cond)
++ foo();
++ else
++ {
++ bar();
++ }
++ }
++
++ STARTTEST
++ :set cin
+ :set cino=
+ ]]=][
+ ENDTEST
+*** ../vim-7.3.548/src/testdir/test3.ok 2012-04-05 17:17:38.000000000 +0200
+--- src/testdir/test3.ok 2012-06-13 13:17:31.000000000 +0200
+***************
+*** 940,945 ****
+--- 940,957 ----
+ }
+
+
++ main(void)
++ {
++ /* Make sure that cino=X0s is not parsed like cino=Xs. */
++ if (cond)
++ foo();
++ else
++ {
++ bar();
++ }
++ }
++
++
+ {
+ do
+ {
+*** ../vim-7.3.548/src/version.c 2012-06-07 21:09:35.000000000 +0200
+--- src/version.c 2012-06-13 13:37:18.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 549,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+29. Your phone bill comes to your doorstep in a box.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.550 b/source/ap/vim/patches/7.3.550
new file mode 100644
index 000000000..6fba66cd5
--- /dev/null
+++ b/source/ap/vim/patches/7.3.550
@@ -0,0 +1,160 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.550
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.550 (after 7.3.541)
+Problem: With "j" in 'formatoptions' a list leader is not removed. (Gary
+ Johnson)
+Solution: Don't ignore the start of a three part comment. (Lech Lorens)
+Files: src/ops.c, src/testdir/test29.in, src/testdir/test29.ok
+
+
+*** ../vim-7.3.549/src/ops.c 2012-06-07 21:09:35.000000000 +0200
+--- src/ops.c 2012-06-13 13:48:26.000000000 +0200
+***************
+*** 4250,4264 ****
+ return line;
+
+ /* Find:
+- * - COM_START,
+ * - COM_END,
+ * - colon,
+ * whichever comes first.
+ */
+ while (*comment_flags)
+ {
+! if (*comment_flags == COM_START
+! || *comment_flags == COM_END
+ || *comment_flags == ':')
+ {
+ break;
+--- 4250,4262 ----
+ return line;
+
+ /* Find:
+ * - COM_END,
+ * - colon,
+ * whichever comes first.
+ */
+ while (*comment_flags)
+ {
+! if (*comment_flags == COM_END
+ || *comment_flags == ':')
+ {
+ break;
+***************
+*** 4267,4275 ****
+ }
+
+ /* If we found a colon, it means that we are not processing a line
+! * starting with an opening or a closing part of a three-part
+! * comment. That's good, because we don't want to remove those as
+! * this would be annoying.
+ */
+ if (*comment_flags == ':' || *comment_flags == NUL)
+ line += lead_len;
+--- 4265,4272 ----
+ }
+
+ /* If we found a colon, it means that we are not processing a line
+! * starting with a closing part of a three-part comment. That's good,
+! * because we don't want to remove those as this would be annoying.
+ */
+ if (*comment_flags == ':' || *comment_flags == NUL)
+ line += lead_len;
+*** ../vim-7.3.549/src/testdir/test29.in 2012-06-06 16:12:54.000000000 +0200
+--- src/testdir/test29.in 2012-06-13 13:48:26.000000000 +0200
+***************
+*** 103,114 ****
+
+ STARTTEST
+ /^{/+1
+! :set comments=s1:/*,mb:*,ex:*/,://
+ :set comments+=s1:>#,mb:#,ex:#<,:<
+ :set cpoptions-=j joinspaces fo=j
+ :set backspace=eol,start
+ :.,+3join
+ j4J
+ :.,+2join
+ j3J
+ :.,+2join
+--- 103,117 ----
+
+ STARTTEST
+ /^{/+1
+! :set comments=sO:*\ -,mO:*\ \ ,exO:*/
+! :set comments+=s1:/*,mb:*,ex:*/,://
+ :set comments+=s1:>#,mb:#,ex:#<,:<
+ :set cpoptions-=j joinspaces fo=j
+ :set backspace=eol,start
+ :.,+3join
+ j4J
++ :.,+8join
++ j9J
+ :.,+2join
+ j3J
+ :.,+2join
+***************
+*** 132,137 ****
+--- 135,158 ----
+ * Make sure the previous comment leader is not removed.
+ */
+
++ /* List:
++ * - item1
++ * foo bar baz
++ * foo bar baz
++ * - item2
++ * foo bar baz
++ * foo bar baz
++ */
++
++ /* List:
++ * - item1
++ * foo bar baz
++ * foo bar baz
++ * - item2
++ * foo bar baz
++ * foo bar baz
++ */
++
+ // Should the next comment leader be left alone?
+ // Yes.
+
+*** ../vim-7.3.549/src/testdir/test29.ok 2012-06-06 16:12:54.000000000 +0200
+--- src/testdir/test29.ok 2012-06-13 13:48:26.000000000 +0200
+***************
+*** 66,71 ****
+--- 66,73 ----
+ {
+ /* Make sure the previous comment leader is not removed. */
+ /* Make sure the previous comment leader is not removed. */
++ /* List: item1 foo bar baz foo bar baz item2 foo bar baz foo bar baz */
++ /* List: item1 foo bar baz foo bar baz item2 foo bar baz foo bar baz */
+ // Should the next comment leader be left alone? Yes.
+ // Should the next comment leader be left alone? Yes.
+ /* Here the comment leader should be left intact. */ // And so should this one.
+*** ../vim-7.3.549/src/version.c 2012-06-13 13:40:45.000000000 +0200
+--- src/version.c 2012-06-13 13:50:23.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 550,
+ /**/
+
+--
+If you put 7 of the most talented OSS developers in a room for a week
+and asked them to fix a bug in a spreadsheet program, in 1 week
+you'd have 2 new mail readers and a text-based web browser.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.551 b/source/ap/vim/patches/7.3.551
new file mode 100644
index 000000000..db8dbac78
--- /dev/null
+++ b/source/ap/vim/patches/7.3.551
@@ -0,0 +1,494 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.551
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.551
+Problem: When using :tablose a TabEnter autocommand is triggered too early.
+ (Karthick)
+Solution: Don't trigger *Enter autocommands before closing the tab.
+ (Christian Brabandt)
+Files: src/buffer.c, src/eval.c, src/ex_cmds2.c, src/fileio.c,
+ src/proto/window.pro, src/window.c
+
+
+*** ../vim-7.3.550/src/buffer.c 2012-06-06 19:02:40.000000000 +0200
+--- src/buffer.c 2012-06-13 14:18:58.000000000 +0200
+***************
+*** 4470,4476 ****
+ * When the ":tab" modifier was used do this for all tab pages.
+ */
+ if (had_tab > 0)
+! goto_tabpage_tp(first_tabpage);
+ for (;;)
+ {
+ tpnext = curtab->tp_next;
+--- 4470,4476 ----
+ * When the ":tab" modifier was used do this for all tab pages.
+ */
+ if (had_tab > 0)
+! goto_tabpage_tp(first_tabpage, TRUE);
+ for (;;)
+ {
+ tpnext = curtab->tp_next;
+***************
+*** 4582,4588 ****
+ if (!valid_tabpage(tpnext))
+ tpnext = first_tabpage; /* start all over...*/
+ # endif
+! goto_tabpage_tp(tpnext);
+ }
+
+ /*
+--- 4582,4588 ----
+ if (!valid_tabpage(tpnext))
+ tpnext = first_tabpage; /* start all over...*/
+ # endif
+! goto_tabpage_tp(tpnext, TRUE);
+ }
+
+ /*
+***************
+*** 4686,4698 ****
+ if (last_curtab != new_curtab)
+ {
+ if (valid_tabpage(last_curtab))
+! goto_tabpage_tp(last_curtab);
+ if (win_valid(last_curwin))
+ win_enter(last_curwin, FALSE);
+ }
+ /* to window with first arg */
+ if (valid_tabpage(new_curtab))
+! goto_tabpage_tp(new_curtab);
+ if (win_valid(new_curwin))
+ win_enter(new_curwin, FALSE);
+
+--- 4686,4698 ----
+ if (last_curtab != new_curtab)
+ {
+ if (valid_tabpage(last_curtab))
+! goto_tabpage_tp(last_curtab, TRUE);
+ if (win_valid(last_curwin))
+ win_enter(last_curwin, FALSE);
+ }
+ /* to window with first arg */
+ if (valid_tabpage(new_curtab))
+! goto_tabpage_tp(new_curtab, TRUE);
+ if (win_valid(new_curwin))
+ win_enter(new_curwin, FALSE);
+
+***************
+*** 4744,4750 ****
+ */
+ #ifdef FEAT_WINDOWS
+ if (had_tab > 0)
+! goto_tabpage_tp(first_tabpage);
+ for (;;)
+ {
+ #endif
+--- 4744,4750 ----
+ */
+ #ifdef FEAT_WINDOWS
+ if (had_tab > 0)
+! goto_tabpage_tp(first_tabpage, TRUE);
+ for (;;)
+ {
+ #endif
+***************
+*** 4784,4790 ****
+ /* Without the ":tab" modifier only do the current tab page. */
+ if (had_tab == 0 || tpnext == NULL)
+ break;
+! goto_tabpage_tp(tpnext);
+ }
+ #endif
+
+--- 4784,4790 ----
+ /* Without the ":tab" modifier only do the current tab page. */
+ if (had_tab == 0 || tpnext == NULL)
+ break;
+! goto_tabpage_tp(tpnext, TRUE);
+ }
+ #endif
+
+*** ../vim-7.3.550/src/eval.c 2012-06-06 16:29:06.000000000 +0200
+--- src/eval.c 2012-06-13 14:18:58.000000000 +0200
+***************
+*** 16415,16421 ****
+ if (tp != NULL && varname != NULL && varp != NULL)
+ {
+ save_curtab = curtab;
+! goto_tabpage_tp(tp);
+
+ tabvarname = alloc((unsigned)STRLEN(varname) + 3);
+ if (tabvarname != NULL)
+--- 16415,16421 ----
+ if (tp != NULL && varname != NULL && varp != NULL)
+ {
+ save_curtab = curtab;
+! goto_tabpage_tp(tp, TRUE);
+
+ tabvarname = alloc((unsigned)STRLEN(varname) + 3);
+ if (tabvarname != NULL)
+***************
+*** 16428,16434 ****
+
+ /* Restore current tabpage */
+ if (valid_tabpage(save_curtab))
+! goto_tabpage_tp(save_curtab);
+ }
+ }
+
+--- 16428,16434 ----
+
+ /* Restore current tabpage */
+ if (valid_tabpage(save_curtab))
+! goto_tabpage_tp(save_curtab, TRUE);
+ }
+ }
+
+***************
+*** 16492,16498 ****
+ /* set curwin to be our win, temporarily */
+ save_curwin = curwin;
+ save_curtab = curtab;
+! goto_tabpage_tp(tp);
+ if (!win_valid(win))
+ return;
+ curwin = win;
+--- 16492,16498 ----
+ /* set curwin to be our win, temporarily */
+ save_curwin = curwin;
+ save_curtab = curtab;
+! goto_tabpage_tp(tp, TRUE);
+ if (!win_valid(win))
+ return;
+ curwin = win;
+***************
+*** 16527,16533 ****
+ /* Restore current tabpage and window, if still valid (autocomands can
+ * make them invalid). */
+ if (valid_tabpage(save_curtab))
+! goto_tabpage_tp(save_curtab);
+ if (win_valid(save_curwin))
+ {
+ curwin = save_curwin;
+--- 16527,16533 ----
+ /* Restore current tabpage and window, if still valid (autocomands can
+ * make them invalid). */
+ if (valid_tabpage(save_curtab))
+! goto_tabpage_tp(save_curtab, TRUE);
+ if (win_valid(save_curwin))
+ {
+ curwin = save_curwin;
+*** ../vim-7.3.550/src/ex_cmds2.c 2012-04-25 17:32:14.000000000 +0200
+--- src/ex_cmds2.c 2012-06-13 14:18:58.000000000 +0200
+***************
+*** 2476,2482 ****
+ /* go to window "tp" */
+ if (!valid_tabpage(tp))
+ break;
+! goto_tabpage_tp(tp);
+ tp = tp->tp_next;
+ }
+ #endif
+--- 2476,2482 ----
+ /* go to window "tp" */
+ if (!valid_tabpage(tp))
+ break;
+! goto_tabpage_tp(tp, TRUE);
+ tp = tp->tp_next;
+ }
+ #endif
+*** ../vim-7.3.550/src/fileio.c 2012-06-06 18:03:01.000000000 +0200
+--- src/fileio.c 2012-06-13 14:18:58.000000000 +0200
+***************
+*** 8918,8924 ****
+ if (wp == aucmd_win)
+ {
+ if (tp != curtab)
+! goto_tabpage_tp(tp);
+ win_goto(aucmd_win);
+ goto win_found;
+ }
+--- 8918,8924 ----
+ if (wp == aucmd_win)
+ {
+ if (tp != curtab)
+! goto_tabpage_tp(tp, TRUE);
+ win_goto(aucmd_win);
+ goto win_found;
+ }
+*** ../vim-7.3.550/src/proto/window.pro 2012-02-22 14:58:24.000000000 +0100
+--- src/proto/window.pro 2012-06-13 14:23:06.000000000 +0200
+***************
+*** 27,33 ****
+ tabpage_T *find_tabpage __ARGS((int n));
+ int tabpage_index __ARGS((tabpage_T *ftp));
+ void goto_tabpage __ARGS((int n));
+! void goto_tabpage_tp __ARGS((tabpage_T *tp));
+ void goto_tabpage_win __ARGS((tabpage_T *tp, win_T *wp));
+ void tabpage_move __ARGS((int nr));
+ void win_goto __ARGS((win_T *wp));
+--- 27,33 ----
+ tabpage_T *find_tabpage __ARGS((int n));
+ int tabpage_index __ARGS((tabpage_T *ftp));
+ void goto_tabpage __ARGS((int n));
+! void goto_tabpage_tp __ARGS((tabpage_T *tp, int trigger_autocmds));
+ void goto_tabpage_win __ARGS((tabpage_T *tp, win_T *wp));
+ void tabpage_move __ARGS((int nr));
+ void win_goto __ARGS((win_T *wp));
+*** ../vim-7.3.550/src/window.c 2012-06-06 19:02:40.000000000 +0200
+--- src/window.c 2012-06-13 14:24:38.000000000 +0200
+***************
+*** 45,51 ****
+ #if defined(FEAT_WINDOWS) || defined(PROTO)
+ static tabpage_T *alloc_tabpage __ARGS((void));
+ static int leave_tabpage __ARGS((buf_T *new_curbuf));
+! static void enter_tabpage __ARGS((tabpage_T *tp, buf_T *old_curbuf));
+ static void frame_fix_height __ARGS((win_T *wp));
+ static int frame_minheight __ARGS((frame_T *topfrp, win_T *next_curwin));
+ static void win_enter_ext __ARGS((win_T *wp, int undo_sync, int no_curwin));
+--- 45,51 ----
+ #if defined(FEAT_WINDOWS) || defined(PROTO)
+ static tabpage_T *alloc_tabpage __ARGS((void));
+ static int leave_tabpage __ARGS((buf_T *new_curbuf));
+! static void enter_tabpage __ARGS((tabpage_T *tp, buf_T *old_curbuf, int trigger_autocmds));
+ static void frame_fix_height __ARGS((win_T *wp));
+ static int frame_minheight __ARGS((frame_T *topfrp, win_T *next_curwin));
+ static void win_enter_ext __ARGS((win_T *wp, int undo_sync, int no_curwin));
+***************
+*** 355,365 ****
+ && valid_tabpage(oldtab))
+ {
+ newtab = curtab;
+! goto_tabpage_tp(oldtab);
+ if (curwin == wp)
+ win_close(curwin, FALSE);
+ if (valid_tabpage(newtab))
+! goto_tabpage_tp(newtab);
+ }
+ }
+ break;
+--- 355,365 ----
+ && valid_tabpage(oldtab))
+ {
+ newtab = curtab;
+! goto_tabpage_tp(oldtab, TRUE);
+ if (curwin == wp)
+ win_close(curwin, FALSE);
+ if (valid_tabpage(newtab))
+! goto_tabpage_tp(newtab, TRUE);
+ }
+ }
+ break;
+***************
+*** 2130,2137 ****
+ * page and then close the window and the tab page. This avoids that
+ * curwin and curtab are invalid while we are freeing memory, they may
+ * be used in GUI events.
+ */
+! goto_tabpage_tp(alt_tabpage());
+ redraw_tabline = TRUE;
+
+ /* Safety check: Autocommands may have closed the window when jumping
+--- 2130,2139 ----
+ * page and then close the window and the tab page. This avoids that
+ * curwin and curtab are invalid while we are freeing memory, they may
+ * be used in GUI events.
++ * Don't trigger autocommands yet, they may use wrong values, so do
++ * that below.
+ */
+! goto_tabpage_tp(alt_tabpage(), FALSE);
+ redraw_tabline = TRUE;
+
+ /* Safety check: Autocommands may have closed the window when jumping
+***************
+*** 2144,2149 ****
+--- 2146,2157 ----
+ if (h != tabline_height())
+ shell_new_rows();
+ }
++ /* Since goto_tabpage_tp above did not trigger *Enter autocommands, do
++ * that now. */
++ #ifdef FEAT_AUTOCMD
++ apply_autocmds(EVENT_TABENTER, NULL, NULL, FALSE, curbuf);
++ apply_autocmds(EVENT_WINENTER, NULL, NULL, FALSE, curbuf);
++ #endif
+ return TRUE;
+ }
+ return FALSE;
+***************
+*** 3556,3562 ****
+ }
+
+ /* Failed, get back the previous Tab page */
+! enter_tabpage(curtab, curbuf);
+ return FAIL;
+ }
+
+--- 3564,3570 ----
+ }
+
+ /* Failed, get back the previous Tab page */
+! enter_tabpage(curtab, curbuf, TRUE);
+ return FAIL;
+ }
+
+***************
+*** 3709,3719 ****
+ /*
+ * Start using tab page "tp".
+ * Only to be used after leave_tabpage() or freeing the current tab page.
+ */
+ static void
+! enter_tabpage(tp, old_curbuf)
+ tabpage_T *tp;
+ buf_T *old_curbuf UNUSED;
+ {
+ int old_off = tp->tp_firstwin->w_winrow;
+ win_T *next_prevwin = tp->tp_prevwin;
+--- 3717,3729 ----
+ /*
+ * Start using tab page "tp".
+ * Only to be used after leave_tabpage() or freeing the current tab page.
++ * Only trigger *Enter autocommands when trigger_autocmds is TRUE.
+ */
+ static void
+! enter_tabpage(tp, old_curbuf, trigger_autocmds)
+ tabpage_T *tp;
+ buf_T *old_curbuf UNUSED;
++ int trigger_autocmds;
+ {
+ int old_off = tp->tp_firstwin->w_winrow;
+ win_T *next_prevwin = tp->tp_prevwin;
+***************
+*** 3761,3769 ****
+ #ifdef FEAT_AUTOCMD
+ /* Apply autocommands after updating the display, when 'rows' and
+ * 'columns' have been set correctly. */
+! apply_autocmds(EVENT_TABENTER, NULL, NULL, FALSE, curbuf);
+! if (old_curbuf != curbuf)
+! apply_autocmds(EVENT_BUFENTER, NULL, NULL, FALSE, curbuf);
+ #endif
+
+ redraw_all_later(CLEAR);
+--- 3771,3782 ----
+ #ifdef FEAT_AUTOCMD
+ /* Apply autocommands after updating the display, when 'rows' and
+ * 'columns' have been set correctly. */
+! if (trigger_autocmds)
+! {
+! apply_autocmds(EVENT_TABENTER, NULL, NULL, FALSE, curbuf);
+! if (old_curbuf != curbuf)
+! apply_autocmds(EVENT_BUFENTER, NULL, NULL, FALSE, curbuf);
+! }
+ #endif
+
+ redraw_all_later(CLEAR);
+***************
+*** 3839,3845 ****
+ }
+ }
+
+! goto_tabpage_tp(tp);
+
+ #ifdef FEAT_GUI_TABLINE
+ if (gui_use_tabline())
+--- 3852,3858 ----
+ }
+ }
+
+! goto_tabpage_tp(tp, TRUE);
+
+ #ifdef FEAT_GUI_TABLINE
+ if (gui_use_tabline())
+***************
+*** 3849,3859 ****
+
+ /*
+ * Go to tabpage "tp".
+ * Note: doesn't update the GUI tab.
+ */
+ void
+! goto_tabpage_tp(tp)
+ tabpage_T *tp;
+ {
+ /* Don't repeat a message in another tab page. */
+ set_keep_msg(NULL, 0);
+--- 3862,3874 ----
+
+ /*
+ * Go to tabpage "tp".
++ * Only trigger *Enter autocommands when trigger_autocmds is TRUE.
+ * Note: doesn't update the GUI tab.
+ */
+ void
+! goto_tabpage_tp(tp, trigger_autocmds)
+ tabpage_T *tp;
++ int trigger_autocmds;
+ {
+ /* Don't repeat a message in another tab page. */
+ set_keep_msg(NULL, 0);
+***************
+*** 3861,3869 ****
+ if (tp != curtab && leave_tabpage(tp->tp_curwin->w_buffer) == OK)
+ {
+ if (valid_tabpage(tp))
+! enter_tabpage(tp, curbuf);
+ else
+! enter_tabpage(curtab, curbuf);
+ }
+ }
+
+--- 3876,3884 ----
+ if (tp != curtab && leave_tabpage(tp->tp_curwin->w_buffer) == OK)
+ {
+ if (valid_tabpage(tp))
+! enter_tabpage(tp, curbuf, trigger_autocmds);
+ else
+! enter_tabpage(curtab, curbuf, trigger_autocmds);
+ }
+ }
+
+***************
+*** 3876,3882 ****
+ tabpage_T *tp;
+ win_T *wp;
+ {
+! goto_tabpage_tp(tp);
+ if (curtab == tp && win_valid(wp))
+ {
+ win_enter(wp, TRUE);
+--- 3891,3897 ----
+ tabpage_T *tp;
+ win_T *wp;
+ {
+! goto_tabpage_tp(tp, TRUE);
+ if (curtab == tp && win_valid(wp))
+ {
+ win_enter(wp, TRUE);
+*** ../vim-7.3.550/src/version.c 2012-06-13 14:01:36.000000000 +0200
+--- src/version.c 2012-06-13 14:28:00.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 551,
+ /**/
+
+--
+Give a man a computer program and you give him a headache,
+but teach him to program computers and you give him the power
+to create headaches for others for the rest of his life...
+ R. B. Forest
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.552 b/source/ap/vim/patches/7.3.552
new file mode 100644
index 000000000..e9a560ec5
--- /dev/null
+++ b/source/ap/vim/patches/7.3.552
@@ -0,0 +1,582 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.552
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.552
+Problem: Formatting inside comments does not use the "2" flag in
+ 'formatoptions'.
+Solution: Support the "2" flag. (Tor Perkins)
+Files: src/vim.h, src/ops.c, src/edit.c, src/misc1.c,
+ src/testdir/test68.in, src/testdir/test68.ok
+
+
+*** ../vim-7.3.551/src/vim.h 2012-06-06 18:03:01.000000000 +0200
+--- src/vim.h 2012-06-13 16:07:27.000000000 +0200
+***************
+*** 1072,1083 ****
+--- 1072,1085 ----
+ #define INSCHAR_DO_COM 2 /* format comments */
+ #define INSCHAR_CTRLV 4 /* char typed just after CTRL-V */
+ #define INSCHAR_NO_FEX 8 /* don't use 'formatexpr' */
++ #define INSCHAR_COM_LIST 16 /* format comments with list/2nd line indent */
+
+ /* flags for open_line() */
+ #define OPENLINE_DELSPACES 1 /* delete spaces after cursor */
+ #define OPENLINE_DO_COM 2 /* format comments */
+ #define OPENLINE_KEEPTRAIL 4 /* keep trailing spaces */
+ #define OPENLINE_MARKFIX 8 /* fix mark positions */
++ #define OPENLINE_COM_LIST 16 /* format comments with list/2nd line indent */
+
+ /*
+ * There are four history tables:
+*** ../vim-7.3.551/src/ops.c 2012-06-13 14:01:36.000000000 +0200
+--- src/ops.c 2012-06-13 16:53:44.000000000 +0200
+***************
+*** 1727,1734 ****
+ * and the delete is within one line. */
+ if ((
+ #ifdef FEAT_CLIPBOARD
+! ((clip_unnamed & CLIP_UNNAMED) && oap->regname == '*') ||
+! ((clip_unnamed & CLIP_UNNAMED_PLUS) && oap->regname == '+') ||
+ #endif
+ oap->regname == 0) && oap->motion_type != MLINE
+ && oap->line_count == 1)
+--- 1727,1734 ----
+ * and the delete is within one line. */
+ if ((
+ #ifdef FEAT_CLIPBOARD
+! ((clip_unnamed & CLIP_UNNAMED) && oap->regname == '*') ||
+! ((clip_unnamed & CLIP_UNNAMED_PLUS) && oap->regname == '+') ||
+ #endif
+ oap->regname == 0) && oap->motion_type != MLINE
+ && oap->line_count == 1)
+***************
+*** 4208,4217 ****
+ * "is_comment".
+ * line - line to be processed,
+ * process - if FALSE, will only check whether the line ends with an unclosed
+! * comment,
+ * include_space - whether to also skip space following the comment leader,
+ * is_comment - will indicate whether the current line ends with an unclosed
+! * comment.
+ */
+ static char_u *
+ skip_comment(line, process, include_space, is_comment)
+--- 4208,4217 ----
+ * "is_comment".
+ * line - line to be processed,
+ * process - if FALSE, will only check whether the line ends with an unclosed
+! * comment,
+ * include_space - whether to also skip space following the comment leader,
+ * is_comment - will indicate whether the current line ends with an unclosed
+! * comment.
+ */
+ static char_u *
+ skip_comment(line, process, include_space, is_comment)
+***************
+*** 4723,4731 ****
+ char_u *leader_flags = NULL; /* flags for leader of current line */
+ char_u *next_leader_flags; /* flags for leader of next line */
+ int do_comments; /* format comments */
+ #endif
+ int advance = TRUE;
+! int second_indent = -1;
+ int do_second_indent;
+ int do_number_indent;
+ int do_trail_white;
+--- 4723,4733 ----
+ char_u *leader_flags = NULL; /* flags for leader of current line */
+ char_u *next_leader_flags; /* flags for leader of next line */
+ int do_comments; /* format comments */
++ int do_comments_list = 0; /* format comments with 'n' or '2' */
+ #endif
+ int advance = TRUE;
+! int second_indent = -1; /* indent for second line (comment
+! * aware) */
+ int do_second_indent;
+ int do_number_indent;
+ int do_trail_white;
+***************
+*** 4828,4845 ****
+ if (first_par_line
+ && (do_second_indent || do_number_indent)
+ && prev_is_end_par
+! && curwin->w_cursor.lnum < curbuf->b_ml.ml_line_count
+ #ifdef FEAT_COMMENTS
+! && leader_len == 0
+! && next_leader_len == 0
+ #endif
+! )
+! {
+! if (do_second_indent
+! && !lineempty(curwin->w_cursor.lnum + 1))
+! second_indent = get_indent_lnum(curwin->w_cursor.lnum + 1);
+ else if (do_number_indent)
+! second_indent = get_number_indent(curwin->w_cursor.lnum);
+ }
+
+ /*
+--- 4830,4875 ----
+ if (first_par_line
+ && (do_second_indent || do_number_indent)
+ && prev_is_end_par
+! && curwin->w_cursor.lnum < curbuf->b_ml.ml_line_count)
+! {
+! if (do_second_indent && !lineempty(curwin->w_cursor.lnum + 1))
+! {
+ #ifdef FEAT_COMMENTS
+! if (leader_len == 0 && next_leader_len == 0)
+! {
+! /* no comment found */
+ #endif
+! second_indent =
+! get_indent_lnum(curwin->w_cursor.lnum + 1);
+! #ifdef FEAT_COMMENTS
+! }
+! else
+! {
+! second_indent = next_leader_len;
+! do_comments_list = 1;
+! }
+! #endif
+! }
+ else if (do_number_indent)
+! {
+! #ifdef FEAT_COMMENTS
+! if (leader_len == 0 && next_leader_len == 0)
+! {
+! /* no comment found */
+! #endif
+! second_indent =
+! get_number_indent(curwin->w_cursor.lnum);
+! #ifdef FEAT_COMMENTS
+! }
+! else
+! {
+! /* get_number_indent() is now "comment aware"... */
+! second_indent =
+! get_number_indent(curwin->w_cursor.lnum);
+! do_comments_list = 1;
+! }
+! #endif
+! }
+ }
+
+ /*
+***************
+*** 4878,4883 ****
+--- 4908,4915 ----
+ insertchar(NUL, INSCHAR_FORMAT
+ #ifdef FEAT_COMMENTS
+ + (do_comments ? INSCHAR_DO_COM : 0)
++ + (do_comments && do_comments_list
++ ? INSCHAR_COM_LIST : 0)
+ #endif
+ + (avoid_fex ? INSCHAR_NO_FEX : 0), second_indent);
+ State = old_State;
+*** ../vim-7.3.551/src/edit.c 2012-06-06 16:12:54.000000000 +0200
+--- src/edit.c 2012-06-13 16:54:10.000000000 +0200
+***************
+*** 1463,1469 ****
+ * what check_abbr() expects. */
+ (has_mbyte && c >= 0x100) ? (c + ABBR_OFF) :
+ #endif
+! c) && c != Ctrl_RSB))
+ {
+ insert_special(c, FALSE, FALSE);
+ #ifdef FEAT_RIGHTLEFT
+--- 1463,1469 ----
+ * what check_abbr() expects. */
+ (has_mbyte && c >= 0x100) ? (c + ABBR_OFF) :
+ #endif
+! c) && c != Ctrl_RSB))
+ {
+ insert_special(c, FALSE, FALSE);
+ #ifdef FEAT_RIGHTLEFT
+***************
+*** 5769,5774 ****
+--- 5769,5784 ----
+ # define WHITECHAR(cc) vim_iswhite(cc)
+ #endif
+
++ /*
++ * "flags": INSCHAR_FORMAT - force formatting
++ * INSCHAR_CTRLV - char typed just after CTRL-V
++ * INSCHAR_NO_FEX - don't use 'formatexpr'
++ *
++ * NOTE: passes the flags value straight through to internal_format() which,
++ * beside INSCHAR_FORMAT (above), is also looking for these:
++ * INSCHAR_DO_COM - format comments
++ * INSCHAR_COM_LIST - format comments with num list or 2nd line indent
++ */
+ void
+ insertchar(c, flags, second_indent)
+ int c; /* character to insert or NUL */
+***************
+*** 6011,6016 ****
+--- 6021,6029 ----
+
+ /*
+ * Format text at the current insert position.
++ *
++ * If the INSCHAR_COM_LIST flag is present, then the value of second_indent
++ * will be the comment leader length sent to open_line().
+ */
+ static void
+ internal_format(textwidth, second_indent, flags, format_only, c)
+***************
+*** 6289,6311 ****
+ + (fo_white_par ? OPENLINE_KEEPTRAIL : 0)
+ #ifdef FEAT_COMMENTS
+ + (do_comments ? OPENLINE_DO_COM : 0)
+ #endif
+! , old_indent);
+! old_indent = 0;
+
+ replace_offset = 0;
+ if (first_line)
+ {
+! if (second_indent < 0 && has_format_option(FO_Q_NUMBER))
+! second_indent = get_number_indent(curwin->w_cursor.lnum -1);
+! if (second_indent >= 0)
+ {
+ #ifdef FEAT_VREPLACE
+! if (State & VREPLACE_FLAG)
+! change_indent(INDENT_SET, second_indent, FALSE, NUL, TRUE);
+! else
+ #endif
+! (void)set_indent(second_indent, SIN_CHANGED);
+ }
+ first_line = FALSE;
+ }
+--- 6302,6337 ----
+ + (fo_white_par ? OPENLINE_KEEPTRAIL : 0)
+ #ifdef FEAT_COMMENTS
+ + (do_comments ? OPENLINE_DO_COM : 0)
++ + ((flags & INSCHAR_COM_LIST) ? OPENLINE_COM_LIST : 0)
+ #endif
+! , ((flags & INSCHAR_COM_LIST) ? second_indent : old_indent));
+! if (!(flags & INSCHAR_COM_LIST))
+! old_indent = 0;
+
+ replace_offset = 0;
+ if (first_line)
+ {
+! if (!(flags & INSCHAR_COM_LIST))
+ {
++ /*
++ * This section is for numeric lists w/o comments. If comment
++ * indents are needed with numeric lists (formatoptions=nq),
++ * then the INSCHAR_COM_LIST flag will cause the corresponding
++ * OPENLINE_COM_LIST flag to be passed through to open_line()
++ * (as seen above)...
++ */
++ if (second_indent < 0 && has_format_option(FO_Q_NUMBER))
++ second_indent = get_number_indent(curwin->w_cursor.lnum -1);
++ if (second_indent >= 0)
++ {
+ #ifdef FEAT_VREPLACE
+! if (State & VREPLACE_FLAG)
+! change_indent(INDENT_SET, second_indent,
+! FALSE, NUL, TRUE);
+! else
+ #endif
+! (void)set_indent(second_indent, SIN_CHANGED);
+! }
+ }
+ first_line = FALSE;
+ }
+*** ../vim-7.3.551/src/misc1.c 2012-06-13 13:40:45.000000000 +0200
+--- src/misc1.c 2012-06-13 16:54:59.000000000 +0200
+***************
+*** 423,449 ****
+ {
+ colnr_T col;
+ pos_T pos;
+- regmmatch_T regmatch;
+
+ if (lnum > curbuf->b_ml.ml_line_count)
+ return -1;
+ pos.lnum = 0;
+! regmatch.regprog = vim_regcomp(curbuf->b_p_flp, RE_MAGIC);
+! if (regmatch.regprog != NULL)
+ {
+! regmatch.rmm_ic = FALSE;
+! regmatch.rmm_maxcol = 0;
+! if (vim_regexec_multi(&regmatch, curwin, curbuf, lnum,
+! (colnr_T)0, NULL))
+ {
+! pos.lnum = regmatch.endpos[0].lnum + lnum;
+! pos.col = regmatch.endpos[0].col;
+ #ifdef FEAT_VIRTUALEDIT
+! pos.coladd = 0;
+ #endif
+ }
+ vim_free(regmatch.regprog);
+ }
+
+ if (pos.lnum == 0 || *ml_get_pos(&pos) == NUL)
+ return -1;
+--- 423,492 ----
+ {
+ colnr_T col;
+ pos_T pos;
+
+ if (lnum > curbuf->b_ml.ml_line_count)
+ return -1;
+ pos.lnum = 0;
+!
+! #ifdef FEAT_COMMENTS
+! if (has_format_option(FO_Q_COMS) && has_format_option(FO_Q_NUMBER))
+ {
+! regmatch_T regmatch;
+! int lead_len; /* length of comment leader */
+!
+! lead_len = get_leader_len(ml_get(lnum), NULL, FALSE, TRUE);
+! regmatch.regprog = vim_regcomp(curbuf->b_p_flp, RE_MAGIC);
+! if (regmatch.regprog != NULL)
+ {
+! regmatch.rm_ic = FALSE;
+!
+! /* vim_regexec() expects a pointer to a line. This lets us
+! * start matching for the flp beyond any comment leader... */
+! if (vim_regexec(&regmatch, ml_get(lnum) + lead_len, (colnr_T)0))
+! {
+! pos.lnum = lnum;
+! pos.col = *regmatch.endp - (ml_get(lnum) + lead_len);
+! pos.col += lead_len;
+ #ifdef FEAT_VIRTUALEDIT
+! pos.coladd = 0;
+ #endif
++ }
+ }
+ vim_free(regmatch.regprog);
+ }
++ else
++ {
++ /*
++ * What follows is the orig code that is not "comment aware"...
++ *
++ * I'm not sure if regmmatch_T (multi-match) is needed in this case.
++ * It may be true that this section would work properly using the
++ * regmatch_T code above, in which case, these two seperate sections
++ * should be consolidated w/ FEAT_COMMENTS making lead_len > 0...
++ */
++ #endif
++ regmmatch_T regmatch;
++
++ regmatch.regprog = vim_regcomp(curbuf->b_p_flp, RE_MAGIC);
++
++ if (regmatch.regprog != NULL)
++ {
++ regmatch.rmm_ic = FALSE;
++ regmatch.rmm_maxcol = 0;
++ if (vim_regexec_multi(&regmatch, curwin, curbuf,
++ lnum, (colnr_T)0, NULL))
++ {
++ pos.lnum = regmatch.endpos[0].lnum + lnum;
++ pos.col = regmatch.endpos[0].col;
++ #ifdef FEAT_VIRTUALEDIT
++ pos.coladd = 0;
++ #endif
++ }
++ vim_free(regmatch.regprog);
++ }
++ #ifdef FEAT_COMMENTS
++ }
++ #endif
+
+ if (pos.lnum == 0 || *ml_get_pos(&pos) == NUL)
+ return -1;
+***************
+*** 502,515 ****
+ * OPENLINE_DO_COM format comments
+ * OPENLINE_KEEPTRAIL keep trailing spaces
+ * OPENLINE_MARKFIX adjust mark positions after the line break
+ *
+ * Return TRUE for success, FALSE for failure
+ */
+ int
+! open_line(dir, flags, old_indent)
+ int dir; /* FORWARD or BACKWARD */
+ int flags;
+! int old_indent; /* indent for after ^^D in Insert mode */
+ {
+ char_u *saved_line; /* copy of the original line */
+ char_u *next_line = NULL; /* copy of the next line */
+--- 545,562 ----
+ * OPENLINE_DO_COM format comments
+ * OPENLINE_KEEPTRAIL keep trailing spaces
+ * OPENLINE_MARKFIX adjust mark positions after the line break
++ * OPENLINE_COM_LIST format comments with list or 2nd line indent
++ *
++ * "second_line_indent": indent for after ^^D in Insert mode or if flag
++ * OPENLINE_COM_LIST
+ *
+ * Return TRUE for success, FALSE for failure
+ */
+ int
+! open_line(dir, flags, second_line_indent)
+ int dir; /* FORWARD or BACKWARD */
+ int flags;
+! int second_line_indent;
+ {
+ char_u *saved_line; /* copy of the original line */
+ char_u *next_line = NULL; /* copy of the next line */
+***************
+*** 650,657 ****
+ * count white space on current line
+ */
+ newindent = get_indent_str(saved_line, (int)curbuf->b_p_ts);
+! if (newindent == 0)
+! newindent = old_indent; /* for ^^D command in insert mode */
+
+ #ifdef FEAT_SMARTINDENT
+ /*
+--- 697,704 ----
+ * count white space on current line
+ */
+ newindent = get_indent_str(saved_line, (int)curbuf->b_p_ts);
+! if (newindent == 0 && !(flags & OPENLINE_COM_LIST))
+! newindent = second_line_indent; /* for ^^D command in insert mode */
+
+ #ifdef FEAT_SMARTINDENT
+ /*
+***************
+*** 1008,1015 ****
+ if (lead_len)
+ {
+ /* allocate buffer (may concatenate p_exta later) */
+! leader = alloc(lead_len + lead_repl_len + extra_space +
+! extra_len + 1);
+ allocated = leader; /* remember to free it later */
+
+ if (leader == NULL)
+--- 1055,1062 ----
+ if (lead_len)
+ {
+ /* allocate buffer (may concatenate p_exta later) */
+! leader = alloc(lead_len + lead_repl_len + extra_space + extra_len
+! + (second_line_indent > 0 ? second_line_indent : 0));
+ allocated = leader; /* remember to free it later */
+
+ if (leader == NULL)
+***************
+*** 1304,1309 ****
+--- 1351,1370 ----
+ /* concatenate leader and p_extra, if there is a leader */
+ if (lead_len)
+ {
++ if (flags & OPENLINE_COM_LIST && second_line_indent > 0)
++ {
++ int i;
++ int padding = second_line_indent - (newindent + STRLEN(leader));
++
++ /* Here whitespace is inserted after the comment char.
++ * Below, set_indent(newindent, SIN_INSERT) will insert the
++ * whitespace needed before the comment char. */
++ for (i = 0; i < padding; i++)
++ {
++ STRCAT(leader, " ");
++ newcol++;
++ }
++ }
+ STRCAT(leader, p_extra);
+ p_extra = leader;
+ did_ai = TRUE; /* So truncating blanks works with comments */
+***************
+*** 4966,4973 ****
+ char_u *
+ FullName_save(fname, force)
+ char_u *fname;
+! int force; /* force expansion, even when it already looks
+! like a full path name */
+ {
+ char_u *buf;
+ char_u *new_fname = NULL;
+--- 5027,5034 ----
+ char_u *
+ FullName_save(fname, force)
+ char_u *fname;
+! int force; /* force expansion, even when it already looks
+! * like a full path name */
+ {
+ char_u *buf;
+ char_u *new_fname = NULL;
+*** ../vim-7.3.551/src/testdir/test68.in 2010-10-09 17:21:42.000000000 +0200
+--- src/testdir/test68.in 2012-06-13 15:49:38.000000000 +0200
+***************
+*** 51,56 ****
+--- 51,77 ----
+ }
+
+ STARTTEST
++ /^{/+1
++ :set tw=5 fo=qn comments=:#
++ gwap
++ ENDTEST
++
++ {
++ # 1 a b
++ }
++
++ STARTTEST
++ /^{/+1
++ :set tw=5 fo=q2 comments=:#
++ gwap
++ ENDTEST
++
++ {
++ # x
++ # a b
++ }
++
++ STARTTEST
+ /^{/+2
+ :set tw& fo=a
+ I^^
+*** ../vim-7.3.551/src/testdir/test68.ok 2010-10-09 17:21:42.000000000 +0200
+--- src/testdir/test68.ok 2012-06-13 15:49:38.000000000 +0200
+***************
+*** 34,38 ****
+--- 34,50 ----
+ }
+
+
++ {
++ # 1 a
++ # b
++ }
++
++
++ {
++ # x a
++ # b
++ }
++
++
+ { 1aa ^^2bb }
+
+*** ../vim-7.3.551/src/version.c 2012-06-13 14:28:16.000000000 +0200
+--- src/version.c 2012-06-13 16:36:14.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 552,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+31. You code your homework in HTML and give your instructor the URL.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.553 b/source/ap/vim/patches/7.3.553
new file mode 100644
index 000000000..82c757e10
--- /dev/null
+++ b/source/ap/vim/patches/7.3.553
@@ -0,0 +1,85 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.553
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.553
+Problem: With double-width characters and 'listchars' containing "precedes"
+ the text is displayed one cell off.
+Solution: Check for double-width character being overwritten by the
+ "precedes" character. (Yasuhiro Matsumoto)
+Files: src/screen.c
+
+
+*** ../vim-7.3.552/src/screen.c 2012-06-06 19:05:45.000000000 +0200
+--- src/screen.c 2012-06-13 17:55:10.000000000 +0200
+***************
+*** 89,94 ****
+--- 89,97 ----
+
+ #include "vim.h"
+
++ #define MB_FILLER_CHAR '<' /* character used when a double-width character
++ * doesn't fit. */
++
+ /*
+ * The attributes that are actually active for writing to the screen.
+ */
+***************
+*** 4016,4022 ****
+ if (n_skip > 0 && mb_l > 1 && n_extra == 0)
+ {
+ n_extra = 1;
+! c_extra = '<';
+ c = ' ';
+ if (area_attr == 0 && search_attr == 0)
+ {
+--- 4019,4025 ----
+ if (n_skip > 0 && mb_l > 1 && n_extra == 0)
+ {
+ n_extra = 1;
+! c_extra = MB_FILLER_CHAR;
+ c = ' ';
+ if (area_attr == 0 && search_attr == 0)
+ {
+***************
+*** 4576,4581 ****
+--- 4579,4593 ----
+ c = lcs_prec;
+ lcs_prec_todo = NUL;
+ #ifdef FEAT_MBYTE
++ if (has_mbyte && (*mb_char2cells)(mb_c) > 1)
++ {
++ /* Double-width character being overwritten by the "precedes"
++ * character, need to fill up half the character. */
++ c_extra = MB_FILLER_CHAR;
++ n_extra = 1;
++ n_attr = 2;
++ extra_attr = hl_attr(HLF_AT);
++ }
+ mb_c = c;
+ if (enc_utf8 && (*mb_char2len)(c) > 1)
+ {
+*** ../vim-7.3.552/src/version.c 2012-06-13 17:28:51.000000000 +0200
+--- src/version.c 2012-06-13 17:48:45.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 553,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+32. You don't know what sex three of your closest friends are, because they
+ have neutral nicknames and you never bothered to ask.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.554 b/source/ap/vim/patches/7.3.554
new file mode 100644
index 000000000..e8d4d37a9
--- /dev/null
+++ b/source/ap/vim/patches/7.3.554
@@ -0,0 +1,52 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.554
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.554 (after 7.3.551)
+Problem: Compiler warning for unused argument.
+Solution: Add UNUSED.
+Files: src/window.c
+
+
+*** ../vim-7.3.553/src/window.c 2012-06-13 14:28:16.000000000 +0200
+--- src/window.c 2012-06-13 17:46:49.000000000 +0200
+***************
+*** 3723,3729 ****
+ enter_tabpage(tp, old_curbuf, trigger_autocmds)
+ tabpage_T *tp;
+ buf_T *old_curbuf UNUSED;
+! int trigger_autocmds;
+ {
+ int old_off = tp->tp_firstwin->w_winrow;
+ win_T *next_prevwin = tp->tp_prevwin;
+--- 3723,3729 ----
+ enter_tabpage(tp, old_curbuf, trigger_autocmds)
+ tabpage_T *tp;
+ buf_T *old_curbuf UNUSED;
+! int trigger_autocmds UNUSED;
+ {
+ int old_off = tp->tp_firstwin->w_winrow;
+ win_T *next_prevwin = tp->tp_prevwin;
+*** ../vim-7.3.553/src/version.c 2012-06-13 18:06:32.000000000 +0200
+--- src/version.c 2012-06-13 18:15:08.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 554,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+33. You name your children Eudora, Mozilla and Dotcom.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.555 b/source/ap/vim/patches/7.3.555
new file mode 100644
index 000000000..acb684522
--- /dev/null
+++ b/source/ap/vim/patches/7.3.555
@@ -0,0 +1,232 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.555
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.555
+Problem: Building on IBM z/OS fails.
+Solution: Adjust configure. Use the QUOTESED value from config.mk instead of
+ the hard coded one in Makefile. (Stephen Bovy)
+Files: src/configure.in, src/auto/configure, src/Makefile
+
+
+*** ../vim-7.3.554/src/configure.in 2012-02-05 22:51:27.000000000 +0100
+--- src/configure.in 2012-06-13 18:52:11.000000000 +0200
+***************
+*** 329,343 ****
+ echo ""
+ echo "------------------------------------------"
+ echo " On z/OS Unix, the environment variable"
+! echo " __CC_${ccn}MODE must be set to \"1\"!"
+ echo " Do:"
+ echo " export _CC_${ccn}MODE=1"
+ echo " and then call configure again."
+ echo "------------------------------------------"
+ exit 1
+ fi
+! CFLAGS="$CFLAGS -D_ALL_SOURCE -Wc,float\\(IEEE\\)";
+! LDFLAGS="$LDFLAGS -Wl,EDIT=NO"
+ AC_MSG_RESULT(yes)
+ ;;
+ *) zOSUnix="no";
+--- 329,346 ----
+ echo ""
+ echo "------------------------------------------"
+ echo " On z/OS Unix, the environment variable"
+! echo " _CC_${ccn}MODE must be set to \"1\"!"
+ echo " Do:"
+ echo " export _CC_${ccn}MODE=1"
+ echo " and then call configure again."
+ echo "------------------------------------------"
+ exit 1
+ fi
+! # Set CFLAGS for configure process.
+! # This will be reset later for config.mk.
+! # Use haltonmsg to force error for missing H files.
+! CFLAGS="$CFLAGS -D_ALL_SOURCE -Wc,float(ieee),haltonmsg(3296)";
+! LDFLAGS="$LDFLAGS -Wl,EDIT=NO"
+ AC_MSG_RESULT(yes)
+ ;;
+ *) zOSUnix="no";
+***************
+*** 2378,2387 ****
+ if test -z "$SKIP_MOTIF"; then
+ cppflags_save=$CPPFLAGS
+ CPPFLAGS="$CPPFLAGS $X_CFLAGS"
+! AC_CHECK_HEADERS(Xm/Xm.h Xm/XpmP.h Xm/JoinSideT.h Xm/TraitP.h Xm/Manager.h \
+! Xm/UnhighlightT.h Xm/Notebook.h)
+
+! if test $ac_cv_header_Xm_XpmP_h = yes; then
+ dnl Solaris uses XpmAttributes_21, very annoying.
+ AC_MSG_CHECKING([for XpmAttributes_21 in Xm/XpmP.h])
+ AC_TRY_COMPILE([#include <Xm/XpmP.h>], [XpmAttributes_21 attr;],
+--- 2381,2395 ----
+ if test -z "$SKIP_MOTIF"; then
+ cppflags_save=$CPPFLAGS
+ CPPFLAGS="$CPPFLAGS $X_CFLAGS"
+! if test "$zOSUnix" = "yes"; then
+! xmheader="Xm/Xm.h"
+! else
+! xmheader="Xm/Xm.h Xm/XpmP.h Xm/JoinSideT.h Xm/TraitP.h Xm/Manager.h
+! Xm/UnhighlightT.h Xm/Notebook.h"
+! fi
+! AC_CHECK_HEADERS($xmheader)
+
+! if test "x$ac_cv_header_Xm_XpmP_h" = "xyes"; then
+ dnl Solaris uses XpmAttributes_21, very annoying.
+ AC_MSG_CHECKING([for XpmAttributes_21 in Xm/XpmP.h])
+ AC_TRY_COMPILE([#include <Xm/XpmP.h>], [XpmAttributes_21 attr;],
+***************
+*** 3642,3647 ****
+--- 3650,3660 ----
+ fi
+ AC_SUBST(LINK_AS_NEEDED)
+
++ # IBM z/OS reset CFLAGS for config.mk
++ if test "$zOSUnix" = "yes"; then
++ CFLAGS="-D_ALL_SOURCE -Wc,float\(ieee\),dll"
++ fi
++
+ dnl write output files
+ AC_OUTPUT(auto/config.mk:config.mk.in)
+
+*** ../vim-7.3.554/src/auto/configure 2012-02-05 22:51:27.000000000 +0100
+--- src/auto/configure 2012-06-13 18:53:04.000000000 +0200
+***************
+*** 4426,4440 ****
+ echo ""
+ echo "------------------------------------------"
+ echo " On z/OS Unix, the environment variable"
+! echo " __CC_${ccn}MODE must be set to \"1\"!"
+ echo " Do:"
+ echo " export _CC_${ccn}MODE=1"
+ echo " and then call configure again."
+ echo "------------------------------------------"
+ exit 1
+ fi
+! CFLAGS="$CFLAGS -D_ALL_SOURCE -Wc,float\\(IEEE\\)";
+! LDFLAGS="$LDFLAGS -Wl,EDIT=NO"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+ $as_echo "yes" >&6; }
+ ;;
+--- 4426,4443 ----
+ echo ""
+ echo "------------------------------------------"
+ echo " On z/OS Unix, the environment variable"
+! echo " _CC_${ccn}MODE must be set to \"1\"!"
+ echo " Do:"
+ echo " export _CC_${ccn}MODE=1"
+ echo " and then call configure again."
+ echo "------------------------------------------"
+ exit 1
+ fi
+! # Set CFLAGS for configure process.
+! # This will be reset later for config.mk.
+! # Use haltonmsg to force error for missing H files.
+! CFLAGS="$CFLAGS -D_ALL_SOURCE -Wc,float(ieee),haltonmsg(3296)";
+! LDFLAGS="$LDFLAGS -Wl,EDIT=NO"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+ $as_echo "yes" >&6; }
+ ;;
+***************
+*** 8697,8704 ****
+ if test -z "$SKIP_MOTIF"; then
+ cppflags_save=$CPPFLAGS
+ CPPFLAGS="$CPPFLAGS $X_CFLAGS"
+! for ac_header in Xm/Xm.h Xm/XpmP.h Xm/JoinSideT.h Xm/TraitP.h Xm/Manager.h \
+! Xm/UnhighlightT.h Xm/Notebook.h
+ do :
+ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
+--- 8700,8712 ----
+ if test -z "$SKIP_MOTIF"; then
+ cppflags_save=$CPPFLAGS
+ CPPFLAGS="$CPPFLAGS $X_CFLAGS"
+! if test "$zOSUnix" = "yes"; then
+! xmheader="Xm/Xm.h"
+! else
+! xmheader="Xm/Xm.h Xm/XpmP.h Xm/JoinSideT.h Xm/TraitP.h Xm/Manager.h
+! Xm/UnhighlightT.h Xm/Notebook.h"
+! fi
+! for ac_header in $xmheader
+ do :
+ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
+***************
+*** 8713,8719 ****
+ done
+
+
+! if test $ac_cv_header_Xm_XpmP_h = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XpmAttributes_21 in Xm/XpmP.h" >&5
+ $as_echo_n "checking for XpmAttributes_21 in Xm/XpmP.h... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+--- 8721,8727 ----
+ done
+
+
+! if test "x$ac_cv_header_Xm_XpmP_h" = "xyes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XpmAttributes_21 in Xm/XpmP.h" >&5
+ $as_echo_n "checking for XpmAttributes_21 in Xm/XpmP.h... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+***************
+*** 12590,12595 ****
+--- 12598,12608 ----
+ fi
+
+
++ # IBM z/OS reset CFLAGS for config.mk
++ if test "$zOSUnix" = "yes"; then
++ CFLAGS="-D_ALL_SOURCE -Wc,float\(ieee\),dll"
++ fi
++
+ ac_config_files="$ac_config_files auto/config.mk:config.mk.in"
+
+ cat >confcache <<\_ACEOF
+*** ../vim-7.3.554/src/Makefile 2012-03-28 17:17:45.000000000 +0200
+--- src/Makefile 2012-06-13 18:48:13.000000000 +0200
+***************
+*** 875,880 ****
+--- 875,884 ----
+ #CFLAGS = -O -Qtarget=m88110compat
+ #EXTRA_LIBS = -lgen
+
++ # The value of QUOTESED comes from auto/config.mk.
++ # Uncomment the next line to use the default value.
++ # QUOTESED = sed -e 's/[\\"]/\\&/g' -e 's/\\"/"/' -e 's/\\";$$/";/'
++
+ ##################### end of system specific lines ################### }}}
+
+ ### Names of the programs and targets {{{1
+***************
+*** 2411,2417 ****
+ auto/osdef.h: auto/config.h osdef.sh osdef1.h.in osdef2.h.in
+ CC="$(CC) $(OSDEF_CFLAGS)" srcdir=$(srcdir) sh $(srcdir)/osdef.sh
+
+- QUOTESED = sed -e 's/[\\"]/\\&/g' -e 's/\\"/"/' -e 's/\\";$$/";/'
+ auto/pathdef.c: Makefile auto/config.mk
+ -@echo creating $@
+ -@echo '/* pathdef.c */' > $@
+--- 2415,2420 ----
+*** ../vim-7.3.554/src/version.c 2012-06-13 18:15:13.000000000 +0200
+--- src/version.c 2012-06-13 19:13:54.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 555,
+ /**/
+
+--
+My sister Cecilia opened a computer store in Hawaii.
+She sells C shells by the seashore.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.556 b/source/ap/vim/patches/7.3.556
new file mode 100644
index 000000000..068b8d1f8
--- /dev/null
+++ b/source/ap/vim/patches/7.3.556
@@ -0,0 +1,70 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.556
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.556
+Problem: Compiler warnings on 64 bit Windows.
+Solution: Add type casts. (Mike Williams)
+Files: src/misc1.c
+
+
+*** ../vim-7.3.555/src/misc1.c 2012-06-13 17:28:51.000000000 +0200
+--- src/misc1.c 2012-06-14 20:55:47.000000000 +0200
+***************
+*** 445,452 ****
+ if (vim_regexec(&regmatch, ml_get(lnum) + lead_len, (colnr_T)0))
+ {
+ pos.lnum = lnum;
+! pos.col = *regmatch.endp - (ml_get(lnum) + lead_len);
+! pos.col += lead_len;
+ #ifdef FEAT_VIRTUALEDIT
+ pos.coladd = 0;
+ #endif
+--- 445,451 ----
+ if (vim_regexec(&regmatch, ml_get(lnum) + lead_len, (colnr_T)0))
+ {
+ pos.lnum = lnum;
+! pos.col = (colnr_T)(*regmatch.endp - ml_get(lnum));
+ #ifdef FEAT_VIRTUALEDIT
+ pos.coladd = 0;
+ #endif
+***************
+*** 1354,1360 ****
+ if (flags & OPENLINE_COM_LIST && second_line_indent > 0)
+ {
+ int i;
+! int padding = second_line_indent - (newindent + STRLEN(leader));
+
+ /* Here whitespace is inserted after the comment char.
+ * Below, set_indent(newindent, SIN_INSERT) will insert the
+--- 1353,1360 ----
+ if (flags & OPENLINE_COM_LIST && second_line_indent > 0)
+ {
+ int i;
+! int padding = second_line_indent
+! - (newindent + (int)STRLEN(leader));
+
+ /* Here whitespace is inserted after the comment char.
+ * Below, set_indent(newindent, SIN_INSERT) will insert the
+*** ../vim-7.3.555/src/version.c 2012-06-13 19:19:36.000000000 +0200
+--- src/version.c 2012-06-14 20:54:59.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 556,
+ /**/
+
+--
+He who laughs last, thinks slowest.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.557 b/source/ap/vim/patches/7.3.557
new file mode 100644
index 000000000..663c0720e
--- /dev/null
+++ b/source/ap/vim/patches/7.3.557
@@ -0,0 +1,99 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.557
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.557
+Problem: Crash when an autocommand wipes out a buffer when it is hidden.
+Solution: Restore the current window when needed. (Christian Brabandt)
+Files: src/buffer.c
+
+
+*** ../vim-7.3.556/src/buffer.c 2012-06-13 14:28:16.000000000 +0200
+--- src/buffer.c 2012-06-20 11:49:54.000000000 +0200
+***************
+*** 1363,1368 ****
+--- 1363,1369 ----
+ int action;
+ {
+ buf_T *prevbuf;
++ win_T *prevwin;
+ int unload = (action == DOBUF_UNLOAD || action == DOBUF_DEL
+ || action == DOBUF_WIPE);
+
+***************
+*** 1402,1423 ****
+ if (buf_valid(prevbuf))
+ #endif
+ {
+ if (prevbuf == curbuf)
+ u_sync(FALSE);
+ close_buffer(prevbuf == curwin->w_buffer ? curwin : NULL, prevbuf,
+ unload ? action : (action == DOBUF_GOTO
+ && !P_HID(prevbuf)
+ && !bufIsChanged(prevbuf)) ? DOBUF_UNLOAD : 0, FALSE);
+ }
+ }
+ #ifdef FEAT_AUTOCMD
+ /* An autocommand may have deleted "buf", already entered it (e.g., when
+! * it did ":bunload") or aborted the script processing! */
+! # ifdef FEAT_EVAL
+! if (buf_valid(buf) && buf != curbuf && !aborting())
+! # else
+! if (buf_valid(buf) && buf != curbuf)
+! # endif
+ #endif
+ enter_buffer(buf);
+ }
+--- 1403,1432 ----
+ if (buf_valid(prevbuf))
+ #endif
+ {
++ prevwin = curwin;
+ if (prevbuf == curbuf)
+ u_sync(FALSE);
+ close_buffer(prevbuf == curwin->w_buffer ? curwin : NULL, prevbuf,
+ unload ? action : (action == DOBUF_GOTO
+ && !P_HID(prevbuf)
+ && !bufIsChanged(prevbuf)) ? DOBUF_UNLOAD : 0, FALSE);
++ if (curwin != prevwin && win_valid(prevwin))
++ /* autocommands changed curwin, Grr! */
++ curwin = prevwin;
+ }
+ }
+ #ifdef FEAT_AUTOCMD
+ /* An autocommand may have deleted "buf", already entered it (e.g., when
+! * it did ":bunload") or aborted the script processing!
+! * If curwin->w_buffer is null, enter_buffer() will make it valid again */
+! if ((buf_valid(buf) && buf != curbuf
+! #ifdef FEAT_EVAL
+! && !aborting()
+! #endif
+! #ifdef FEAT_WINDOWS
+! ) || curwin->w_buffer == NULL
+! #endif
+! )
+ #endif
+ enter_buffer(buf);
+ }
+*** ../vim-7.3.556/src/version.c 2012-06-14 20:59:20.000000000 +0200
+--- src/version.c 2012-06-20 11:53:56.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 557,
+ /**/
+
+--
+Don't read everything you believe.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.558 b/source/ap/vim/patches/7.3.558
new file mode 100644
index 000000000..015bc37da
--- /dev/null
+++ b/source/ap/vim/patches/7.3.558
@@ -0,0 +1,90 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.558
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.558
+Problem: Memory access error. (Gary Johnson)
+Solution: Allocate one more byte. (Dominique Pelle)
+Files: src/misc1.c
+
+
+*** ../vim-7.3.557/src/misc1.c 2012-06-14 20:59:20.000000000 +0200
+--- src/misc1.c 2012-06-20 12:34:57.000000000 +0200
+***************
+*** 460,466 ****
+ *
+ * I'm not sure if regmmatch_T (multi-match) is needed in this case.
+ * It may be true that this section would work properly using the
+! * regmatch_T code above, in which case, these two seperate sections
+ * should be consolidated w/ FEAT_COMMENTS making lead_len > 0...
+ */
+ #endif
+--- 460,466 ----
+ *
+ * I'm not sure if regmmatch_T (multi-match) is needed in this case.
+ * It may be true that this section would work properly using the
+! * regmatch_T code above, in which case, these two separate sections
+ * should be consolidated w/ FEAT_COMMENTS making lead_len > 0...
+ */
+ #endif
+***************
+*** 1053,1061 ****
+ }
+ if (lead_len)
+ {
+! /* allocate buffer (may concatenate p_exta later) */
+ leader = alloc(lead_len + lead_repl_len + extra_space + extra_len
+! + (second_line_indent > 0 ? second_line_indent : 0));
+ allocated = leader; /* remember to free it later */
+
+ if (leader == NULL)
+--- 1053,1061 ----
+ }
+ if (lead_len)
+ {
+! /* allocate buffer (may concatenate p_extra later) */
+ leader = alloc(lead_len + lead_repl_len + extra_space + extra_len
+! + (second_line_indent > 0 ? second_line_indent : 0) + 1);
+ allocated = leader; /* remember to free it later */
+
+ if (leader == NULL)
+***************
+*** 3342,3348 ****
+ buf = alloc(buflen);
+ else if (maxlen < 10)
+ {
+! /* Need some more space. This migth happen when receiving a long
+ * escape sequence. */
+ buflen += 100;
+ buf = vim_realloc(buf, buflen);
+--- 3342,3348 ----
+ buf = alloc(buflen);
+ else if (maxlen < 10)
+ {
+! /* Need some more space. This might happen when receiving a long
+ * escape sequence. */
+ buflen += 100;
+ buf = vim_realloc(buf, buflen);
+*** ../vim-7.3.557/src/version.c 2012-06-20 11:54:55.000000000 +0200
+--- src/version.c 2012-06-20 12:36:29.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 558,
+ /**/
+
+--
+George: "I just got a new set of golf clubs for my wife!"
+ John: "Great trade!"
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.559 b/source/ap/vim/patches/7.3.559
new file mode 100644
index 000000000..df7673723
--- /dev/null
+++ b/source/ap/vim/patches/7.3.559
@@ -0,0 +1,131 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.559
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.559
+Problem: home_replace() does not work with 8.3 filename.
+Solution: Make ":p" expand 8.3 name to full path. (Yasuhiro Matsumoto)
+Files: src/eval.c, src/misc1.c
+
+
+*** ../vim-7.3.558/src/eval.c 2012-06-13 14:28:16.000000000 +0200
+--- src/eval.c 2012-06-20 13:52:47.000000000 +0200
+***************
+*** 23554,23559 ****
+--- 23554,23580 ----
+ return -1;
+ }
+
++ #ifdef WIN3264
++ # if _WIN32_WINNT >= 0x0500
++ if (vim_strchr(*fnamep, '~') != NULL)
++ {
++ /* Expand 8.3 filename to full path. Needed to make sure the same
++ * file does not have two different names.
++ * Note: problem does not occur if _WIN32_WINNT < 0x0500. */
++ p = alloc(_MAX_PATH + 1);
++ if (p != NULL)
++ {
++ if (GetLongPathName(*fnamep, p, MAXPATHL))
++ {
++ vim_free(*bufp);
++ *bufp = *fnamep = p;
++ }
++ else
++ vim_free(p);
++ }
++ }
++ # endif
++ #endif
+ /* Append a path separator to a directory. */
+ if (mch_isdir(*fnamep))
+ {
+*** ../vim-7.3.558/src/misc1.c 2012-06-20 12:40:01.000000000 +0200
+--- src/misc1.c 2012-06-20 13:57:22.000000000 +0200
+***************
+*** 4499,4505 ****
+ {
+ size_t dirlen = 0, envlen = 0;
+ size_t len;
+! char_u *homedir_env;
+ char_u *p;
+
+ if (src == NULL)
+--- 4499,4505 ----
+ {
+ size_t dirlen = 0, envlen = 0;
+ size_t len;
+! char_u *homedir_env, *homedir_env_orig;
+ char_u *p;
+
+ if (src == NULL)
+***************
+*** 4525,4533 ****
+ dirlen = STRLEN(homedir);
+
+ #ifdef VMS
+! homedir_env = mch_getenv((char_u *)"SYS$LOGIN");
+ #else
+! homedir_env = mch_getenv((char_u *)"HOME");
+ #endif
+
+ if (homedir_env != NULL && *homedir_env == NUL)
+--- 4525,4548 ----
+ dirlen = STRLEN(homedir);
+
+ #ifdef VMS
+! homedir_env_orig = homedir_env = mch_getenv((char_u *)"SYS$LOGIN");
+ #else
+! homedir_env_orig = homedir_env = mch_getenv((char_u *)"HOME");
+! #endif
+! #if defined(FEAT_MODIFY_FNAME) || defined(WIN3264)
+! if (vim_strchr(homedir_env, '~') != NULL)
+! {
+! int usedlen = 0;
+! int flen;
+! char_u *fbuf = NULL;
+!
+! flen = (int)STRLEN(homedir_env);
+! (void)modify_fname(":p", &usedlen, &homedir_env, &fbuf, &flen);
+! flen = (int)STRLEN(homedir_env);
+! if (flen > 0 && vim_ispathsep(homedir_env[flen - 1]))
+! /* Remove the trailing / that is added to a directory. */
+! homedir_env[flen - 1] = NUL;
+! }
+ #endif
+
+ if (homedir_env != NULL && *homedir_env == NUL)
+***************
+*** 4585,4590 ****
+--- 4600,4608 ----
+ /* if (dstlen == 0) out of space, what to do??? */
+
+ *dst = NUL;
++
++ if (homedir_env != homedir_env_orig)
++ vim_free(homedir_env);
+ }
+
+ /*
+*** ../vim-7.3.558/src/version.c 2012-06-20 12:40:01.000000000 +0200
+--- src/version.c 2012-06-20 14:02:11.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 559,
+ /**/
+
+--
+The future isn't what it used to be.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.560 b/source/ap/vim/patches/7.3.560
new file mode 100644
index 000000000..7f4641118
--- /dev/null
+++ b/source/ap/vim/patches/7.3.560
@@ -0,0 +1,49 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.560
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.560
+Problem: Get an error for a locked argument in extend().
+Solution: Initialize the lock flag for a dictionary. (Yukihiro Nakadaira)
+Files: src/eval.c
+
+
+*** ../vim-7.3.559/src/eval.c 2012-06-20 14:02:23.000000000 +0200
+--- src/eval.c 2012-06-20 14:08:34.000000000 +0200
+***************
+*** 19981,19986 ****
+--- 19981,19987 ----
+ dictitem_T *dict_var;
+ {
+ hash_init(&dict->dv_hashtab);
++ dict->dv_lock = 0;
+ dict->dv_refcount = DO_NOT_FREE_CNT;
+ dict->dv_copyID = 0;
+ dict_var->di_tv.vval.v_dict = dict;
+*** ../vim-7.3.559/src/version.c 2012-06-20 14:02:23.000000000 +0200
+--- src/version.c 2012-06-20 14:09:34.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 560,
+ /**/
+
+--
+"Oh, no! NOT the Spanish Inquisition!"
+"NOBODY expects the Spanish Inquisition!!!"
+ -- Monty Python sketch --
+"Oh, no! NOT another option!"
+"EVERYBODY expects another option!!!"
+ -- Discussion in vim-dev mailing list --
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.561 b/source/ap/vim/patches/7.3.561
new file mode 100644
index 000000000..d51030c4e
--- /dev/null
+++ b/source/ap/vim/patches/7.3.561
@@ -0,0 +1,52 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.561
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.561
+Problem: Using refresh: always in a complete function breaks the "."
+ command. (Val Markovic)
+Solution: Add match leader to the redo buffer. (Yasuhiro Matsumoto)
+Files: src/edit.c
+
+
+*** ../vim-7.3.560/src/edit.c 2012-06-13 17:28:51.000000000 +0200
+--- src/edit.c 2012-06-20 14:22:23.000000000 +0200
+***************
+*** 3467,3476 ****
+--- 3467,3480 ----
+ (*mb_char2bytes)(c, buf);
+ buf[cc] = NUL;
+ ins_char_bytes(buf, cc);
++ AppendToRedobuff(buf);
+ }
+ else
+ #endif
++ {
+ ins_char(c);
++ AppendCharToRedobuff(c);
++ }
+
+ /* If we didn't complete finding matches we must search again. */
+ if (ins_compl_need_restart())
+*** ../vim-7.3.560/src/version.c 2012-06-20 14:13:02.000000000 +0200
+--- src/version.c 2012-06-20 14:20:13.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 561,
+ /**/
+
+--
+Microsoft is to software what McDonalds is to gourmet cooking
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.562 b/source/ap/vim/patches/7.3.562
new file mode 100644
index 000000000..626de4950
--- /dev/null
+++ b/source/ap/vim/patches/7.3.562
@@ -0,0 +1,63 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.562
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.562
+Problem: ":profdel" should not work when the +profile feature is disabled.
+Solution: Call ex_ni(). (Yasuhiro Matsumoto)
+Files: src/ex_cmds2.c
+
+
+*** ../vim-7.3.561/src/ex_cmds2.c 2012-06-13 14:28:16.000000000 +0200
+--- src/ex_cmds2.c 2012-06-20 15:43:44.000000000 +0200
+***************
+*** 596,605 ****
+ garray_T *gap;
+
+ gap = &dbg_breakp;
+- #ifdef FEAT_PROFILE
+ if (eap->cmdidx == CMD_profdel)
+ gap = &prof_ga;
+ #endif
+
+ if (vim_isdigit(*eap->arg))
+ {
+--- 596,610 ----
+ garray_T *gap;
+
+ gap = &dbg_breakp;
+ if (eap->cmdidx == CMD_profdel)
++ {
++ #ifdef FEAT_PROFILE
+ gap = &prof_ga;
++ #else
++ ex_ni(eap);
++ return;
+ #endif
++ }
+
+ if (vim_isdigit(*eap->arg))
+ {
+*** ../vim-7.3.561/src/version.c 2012-06-20 14:26:30.000000000 +0200
+--- src/version.c 2012-06-20 15:44:00.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 562,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+42. Your virtual girlfriend finds a new net sweetheart with a larger bandwidth.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.563 b/source/ap/vim/patches/7.3.563
new file mode 100644
index 000000000..c2ebf4105
--- /dev/null
+++ b/source/ap/vim/patches/7.3.563
@@ -0,0 +1,97 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.563
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.563 (after 7.3.557)
+Problem: Can't build with tiny features.
+Solution: Add #ifdef.
+Files: src/buffer.c
+
+
+*** ../vim-7.3.562/src/buffer.c 2012-06-20 11:54:55.000000000 +0200
+--- src/buffer.c 2012-06-20 17:40:59.000000000 +0200
+***************
+*** 1363,1369 ****
+--- 1363,1371 ----
+ int action;
+ {
+ buf_T *prevbuf;
++ #ifdef FEAT_WINDOWS
+ win_T *prevwin;
++ #endif
+ int unload = (action == DOBUF_UNLOAD || action == DOBUF_DEL
+ || action == DOBUF_WIPE);
+
+***************
+*** 1403,1418 ****
+--- 1405,1424 ----
+ if (buf_valid(prevbuf))
+ #endif
+ {
++ #ifdef FEAT_WINDOWS
+ prevwin = curwin;
++ #endif
+ if (prevbuf == curbuf)
+ u_sync(FALSE);
+ close_buffer(prevbuf == curwin->w_buffer ? curwin : NULL, prevbuf,
+ unload ? action : (action == DOBUF_GOTO
+ && !P_HID(prevbuf)
+ && !bufIsChanged(prevbuf)) ? DOBUF_UNLOAD : 0, FALSE);
++ #ifdef FEAT_WINDOWS
+ if (curwin != prevwin && win_valid(prevwin))
+ /* autocommands changed curwin, Grr! */
+ curwin = prevwin;
++ #endif
+ }
+ }
+ #ifdef FEAT_AUTOCMD
+***************
+*** 1420,1431 ****
+ * it did ":bunload") or aborted the script processing!
+ * If curwin->w_buffer is null, enter_buffer() will make it valid again */
+ if ((buf_valid(buf) && buf != curbuf
+! #ifdef FEAT_EVAL
+ && !aborting()
+! #endif
+! #ifdef FEAT_WINDOWS
+ ) || curwin->w_buffer == NULL
+! #endif
+ )
+ #endif
+ enter_buffer(buf);
+--- 1426,1437 ----
+ * it did ":bunload") or aborted the script processing!
+ * If curwin->w_buffer is null, enter_buffer() will make it valid again */
+ if ((buf_valid(buf) && buf != curbuf
+! # ifdef FEAT_EVAL
+ && !aborting()
+! # endif
+! # ifdef FEAT_WINDOWS
+ ) || curwin->w_buffer == NULL
+! # endif
+ )
+ #endif
+ enter_buffer(buf);
+*** ../vim-7.3.562/src/version.c 2012-06-20 15:48:53.000000000 +0200
+--- src/version.c 2012-06-20 17:54:01.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 563,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+45. You buy a Captain Kirk chair with a built-in keyboard and mouse.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.564 b/source/ap/vim/patches/7.3.564
new file mode 100644
index 000000000..e806b8e46
--- /dev/null
+++ b/source/ap/vim/patches/7.3.564
@@ -0,0 +1,53 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.564
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.564 (after 7.3.559)
+Problem: Warning for pointer conversion.
+Solution: Add type cast.
+Files: src/misc1.c
+
+
+*** ../vim-7.3.563/src/misc1.c 2012-06-20 14:02:23.000000000 +0200
+--- src/misc1.c 2012-06-20 17:41:22.000000000 +0200
+***************
+*** 4537,4543 ****
+ char_u *fbuf = NULL;
+
+ flen = (int)STRLEN(homedir_env);
+! (void)modify_fname(":p", &usedlen, &homedir_env, &fbuf, &flen);
+ flen = (int)STRLEN(homedir_env);
+ if (flen > 0 && vim_ispathsep(homedir_env[flen - 1]))
+ /* Remove the trailing / that is added to a directory. */
+--- 4537,4544 ----
+ char_u *fbuf = NULL;
+
+ flen = (int)STRLEN(homedir_env);
+! (void)modify_fname((char_u *)":p", &usedlen,
+! &homedir_env, &fbuf, &flen);
+ flen = (int)STRLEN(homedir_env);
+ if (flen > 0 && vim_ispathsep(homedir_env[flen - 1]))
+ /* Remove the trailing / that is added to a directory. */
+*** ../vim-7.3.563/src/version.c 2012-06-20 17:54:34.000000000 +0200
+--- src/version.c 2012-06-20 17:55:26.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 564,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+46. Your wife makes a new rule: "The computer cannot come to bed."
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.565 b/source/ap/vim/patches/7.3.565
new file mode 100644
index 000000000..171520b36
--- /dev/null
+++ b/source/ap/vim/patches/7.3.565
@@ -0,0 +1,52 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.566
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.566
+Problem: Can't generate proto file for Python 3.
+Solution: Add PYTHON3_CFLAGS to LINT_CFLAGS.
+Files: src/Makefile
+
+
+*** ../vim-7.3.564/src/Makefile 2012-06-13 19:19:36.000000000 +0200
+--- src/Makefile 2012-06-20 18:36:14.000000000 +0200
+***************
+*** 1339,1345 ****
+ # with "-E".
+ OSDEF_CFLAGS = $(PRE_DEFS) $(POST_DEFS)
+
+! LINT_CFLAGS = -DLINT -I. $(PRE_DEFS) $(POST_DEFS) $(RUBY_CFLAGS) $(LUA_CFLAGS) $(PERL_CFLAGS) $(PYTHON_CFLAGS) -Dinline= -D__extension__= -Dalloca=alloca
+
+ LINT_EXTRA = -DUSE_SNIFF -DHANGUL_INPUT -D"__attribute__(x)="
+
+--- 1339,1345 ----
+ # with "-E".
+ OSDEF_CFLAGS = $(PRE_DEFS) $(POST_DEFS)
+
+! LINT_CFLAGS = -DLINT -I. $(PRE_DEFS) $(POST_DEFS) $(RUBY_CFLAGS) $(LUA_CFLAGS) $(PERL_CFLAGS) $(PYTHON_CFLAGS) $(PYTHON3_CFLAGS) -Dinline= -D__extension__= -Dalloca=alloca
+
+ LINT_EXTRA = -DUSE_SNIFF -DHANGUL_INPUT -D"__attribute__(x)="
+
+*** ../vim-7.3.564/src/version.c 2012-06-20 17:56:06.000000000 +0200
+--- src/version.c 2012-06-20 18:39:04.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 565,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+47. You are so familiar with the WWW that you find the search engines useless.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.566 b/source/ap/vim/patches/7.3.566
new file mode 100644
index 000000000..a0600e812
--- /dev/null
+++ b/source/ap/vim/patches/7.3.566
@@ -0,0 +1,83 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.566
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.566 (after 7.3.561)
+Problem: Redo after completion does not work correctly when refresh: always
+ is not used. (Raymond Ko)
+Solution: Check the compl_opt_refresh_always flag. (Christian Brabandt)
+Files: src/edit.c
+
+
+*** ../vim-7.3.565/src/edit.c 2012-06-20 14:26:30.000000000 +0200
+--- src/edit.c 2012-06-20 22:52:03.000000000 +0200
+***************
+*** 3467,3479 ****
+ (*mb_char2bytes)(c, buf);
+ buf[cc] = NUL;
+ ins_char_bytes(buf, cc);
+! AppendToRedobuff(buf);
+ }
+ else
+ #endif
+ {
+ ins_char(c);
+! AppendCharToRedobuff(c);
+ }
+
+ /* If we didn't complete finding matches we must search again. */
+--- 3467,3481 ----
+ (*mb_char2bytes)(c, buf);
+ buf[cc] = NUL;
+ ins_char_bytes(buf, cc);
+! if (compl_opt_refresh_always)
+! AppendToRedobuff(buf);
+ }
+ else
+ #endif
+ {
+ ins_char(c);
+! if (compl_opt_refresh_always)
+! AppendCharToRedobuff(c);
+ }
+
+ /* If we didn't complete finding matches we must search again. */
+***************
+*** 3481,3487 ****
+ ins_compl_restart();
+
+ /* When 'always' is set, don't reset compl_leader. While completing,
+! * cursor don't point original position, changing compl_leader would
+ * break redo. */
+ if (!compl_opt_refresh_always)
+ {
+--- 3483,3489 ----
+ ins_compl_restart();
+
+ /* When 'always' is set, don't reset compl_leader. While completing,
+! * cursor doesn't point original position, changing compl_leader would
+ * break redo. */
+ if (!compl_opt_refresh_always)
+ {
+*** ../vim-7.3.565/src/version.c 2012-06-20 18:39:12.000000000 +0200
+--- src/version.c 2012-06-20 22:54:27.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 566,
+ /**/
+
+--
+CVS sux, men don't like commitment
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.567 b/source/ap/vim/patches/7.3.567
new file mode 100644
index 000000000..62399f18a
--- /dev/null
+++ b/source/ap/vim/patches/7.3.567
@@ -0,0 +1,56 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.567
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.567
+Problem: Missing copyright notice.
+Solution: Add Vim copyright notice. (Taro Muraoka)
+Files: src/dehqx.py
+
+
+*** ../vim-7.3.566/src/dehqx.py 2010-08-15 21:57:32.000000000 +0200
+--- src/dehqx.py 2012-06-29 11:27:41.000000000 +0200
+***************
+*** 1,7 ****
+ # Python script to get both the data and resource fork from a BinHex encoded
+ # file.
+! # Author: Taro Muraoka
+! # Last Change: 2003 Oct 25
+
+ import sys
+ import binhex
+--- 1,10 ----
+ # Python script to get both the data and resource fork from a BinHex encoded
+ # file.
+! # Author: MURAOKA Taro <koron.kaoriya@gmail.com>
+! # Last Change: 2012 Jun 29
+! #
+! # Copyright (C) 2003,12 MURAOKA Taro <koron.kaoriya@gmail.com>
+! # THIS FILE IS DISTRIBUTED UNDER THE VIM LICENSE.
+
+ import sys
+ import binhex
+*** ../vim-7.3.566/src/version.c 2012-06-20 22:55:56.000000000 +0200
+--- src/version.c 2012-06-29 11:45:36.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 567,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+66. You create a homepage with the impression to cure the afflicted...but
+ your hidden agenda is to receive more e-mail.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.568 b/source/ap/vim/patches/7.3.568
new file mode 100644
index 000000000..ef4fcfe51
--- /dev/null
+++ b/source/ap/vim/patches/7.3.568
@@ -0,0 +1,138 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.568
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.568
+Problem: Bad indents for #ifdefs.
+Solution: Add and remove spaces. (Elias Diem)
+Files: src/globals.h
+
+
+*** ../vim-7.3.567/src/globals.h 2012-02-11 23:45:30.000000000 +0100
+--- src/globals.h 2012-06-29 12:32:14.000000000 +0200
+***************
+*** 513,520 ****
+ # define ONE_CLIPBOARD
+ # endif
+
+! #define CLIP_UNNAMED 1
+! #define CLIP_UNNAMED_PLUS 2
+ EXTERN int clip_unnamed INIT(= 0); /* above two values or'ed */
+
+ EXTERN int clip_autoselect INIT(= FALSE);
+--- 513,520 ----
+ # define ONE_CLIPBOARD
+ # endif
+
+! # define CLIP_UNNAMED 1
+! # define CLIP_UNNAMED_PLUS 2
+ EXTERN int clip_unnamed INIT(= 0); /* above two values or'ed */
+
+ EXTERN int clip_autoselect INIT(= FALSE);
+***************
+*** 737,745 ****
+ #endif
+
+ EXTERN pos_T saved_cursor /* w_cursor before formatting text. */
+! # ifdef DO_INIT
+ = INIT_POS_T(0, 0, 0)
+! # endif
+ ;
+
+ /*
+--- 737,745 ----
+ #endif
+
+ EXTERN pos_T saved_cursor /* w_cursor before formatting text. */
+! #ifdef DO_INIT
+ = INIT_POS_T(0, 0, 0)
+! #endif
+ ;
+
+ /*
+***************
+*** 807,815 ****
+ # endif
+ EXTERN int has_mbyte INIT(= 0); /* any multi-byte encoding */
+
+! #if defined(WIN3264) && defined(FEAT_MBYTE)
+ EXTERN int wide_WindowProc INIT(= FALSE); /* use wide WindowProc() */
+! #endif
+
+ /*
+ * To speed up BYTELEN() we fill a table with the byte lengths whenever
+--- 807,815 ----
+ # endif
+ EXTERN int has_mbyte INIT(= 0); /* any multi-byte encoding */
+
+! # if defined(WIN3264) && defined(FEAT_MBYTE)
+ EXTERN int wide_WindowProc INIT(= FALSE); /* use wide WindowProc() */
+! # endif
+
+ /*
+ * To speed up BYTELEN() we fill a table with the byte lengths whenever
+***************
+*** 1099,1106 ****
+ EXTERN int save_p_ls INIT(= -1); /* Save 'laststatus' setting */
+ EXTERN int save_p_wmh INIT(= -1); /* Save 'winminheight' setting */
+ EXTERN int wild_menu_showing INIT(= 0);
+! #define WM_SHOWN 1 /* wildmenu showing */
+! #define WM_SCROLLED 2 /* wildmenu showing with scroll */
+ #endif
+
+ #ifdef MSWIN
+--- 1099,1106 ----
+ EXTERN int save_p_ls INIT(= -1); /* Save 'laststatus' setting */
+ EXTERN int save_p_wmh INIT(= -1); /* Save 'winminheight' setting */
+ EXTERN int wild_menu_showing INIT(= 0);
+! # define WM_SHOWN 1 /* wildmenu showing */
+! # define WM_SCROLLED 2 /* wildmenu showing with scroll */
+ #endif
+
+ #ifdef MSWIN
+***************
+*** 1310,1318 ****
+ EXTERN Atom commProperty INIT(= None);
+ EXTERN char_u *serverDelayedStartName INIT(= NULL);
+ # else
+! # ifdef PROTO
+ typedef int HWND;
+! # endif
+ EXTERN HWND clientWindow INIT(= 0);
+ # endif
+ #endif
+--- 1310,1318 ----
+ EXTERN Atom commProperty INIT(= None);
+ EXTERN char_u *serverDelayedStartName INIT(= NULL);
+ # else
+! # ifdef PROTO
+ typedef int HWND;
+! # endif
+ EXTERN HWND clientWindow INIT(= 0);
+ # endif
+ #endif
+*** ../vim-7.3.567/src/version.c 2012-06-29 11:46:28.000000000 +0200
+--- src/version.c 2012-06-29 12:34:21.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 568,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+67. Your hard drive crashes. You haven't logged in for two hours. You start
+ to twitch. You pick up the phone and manually dial your ISP's access
+ number. You try to hum to communicate with the modem. You succeed.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.569 b/source/ap/vim/patches/7.3.569
new file mode 100644
index 000000000..435733fee
--- /dev/null
+++ b/source/ap/vim/patches/7.3.569
@@ -0,0 +1,4762 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.569
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.569
+Problem: Evaluating Vim expression in Python is insufficient.
+Solution: Add vim.bindeval(). Also add pyeval() and py3eval(). (ZyX)
+Files: runtime/doc/eval.txt, runtime/doc/if_pyth.txt, src/eval.c,
+ src/if_lua.c, src/if_py_both.h, src/if_python.c, src/if_python3.c,
+ src/proto/eval.pro, src/proto/if_python.pro,
+ src/proto/if_python3.pro, src/testdir/Make_amiga.mak,
+ src/testdir/Make_dos.mak, src/testdir/Make_ming.mak,
+ src/testdir/Make_os2.mak, src/testdir/Makefile,
+ src/testdir/test86.in, src/testdir/test86.ok,
+ src/testdir/test87.in, src/testdir/test87.ok
+
+
+*** ../vim-7.3.568/runtime/doc/eval.txt 2012-03-07 19:16:49.000000000 +0100
+--- runtime/doc/eval.txt 2012-06-20 18:01:02.000000000 +0200
+***************
+*** 1836,1844 ****
+ localtime() Number current time
+ log( {expr}) Float natural logarithm (base e) of {expr}
+ log10( {expr}) Float logarithm of Float {expr} to base 10
+ map( {expr}, {string}) List/Dict change each item in {expr} to {expr}
+ maparg( {name}[, {mode} [, {abbr} [, {dict}]]])
+! String rhs of mapping {name} in mode {mode}
+ mapcheck( {name}[, {mode} [, {abbr}]])
+ String check for mappings matching {name}
+ match( {expr}, {pat}[, {start}[, {count}]])
+--- 1847,1857 ----
+ localtime() Number current time
+ log( {expr}) Float natural logarithm (base e) of {expr}
+ log10( {expr}) Float logarithm of Float {expr} to base 10
++ luaeval( {expr}[, {expr}]) any evaluate |Lua| expression
+ map( {expr}, {string}) List/Dict change each item in {expr} to {expr}
+ maparg( {name}[, {mode} [, {abbr} [, {dict}]]])
+! String or Dict
+! rhs of mapping {name} in mode {mode}
+ mapcheck( {name}[, {mode} [, {abbr}]])
+ String check for mappings matching {name}
+ match( {expr}, {pat}[, {start}[, {count}]])
+***************
+*** 1867,1872 ****
+--- 1880,1887 ----
+ prevnonblank( {lnum}) Number line nr of non-blank line <= {lnum}
+ printf( {fmt}, {expr1}...) String format text
+ pumvisible() Number whether popup menu is visible
++ pyeval( {expr}) any evaluate |Python| expression
++ py3eval( {expr}) any evaluate |python3| expression
+ range( {expr} [, {max} [, {stride}]])
+ List items from {expr} to {max}
+ readfile( {fname} [, {binary} [, {max}]])
+***************
+*** 3980,3985 ****
+--- 4003,4022 ----
+ < -2.0
+ {only available when compiled with the |+float| feature}
+
++ luaeval({expr}[, {expr}]) *luaeval()*
++ Evaluate Lua expression {expr} and return its result converted
++ to Vim data structures. Second {expr} may hold additional
++ argument accessible as _A inside first {expr}.
++ Strings are returned as they are.
++ Boolean objects are converted to numbers.
++ Numbers are converted to |Float| values if vim was compiled
++ with |+float| and to numbers otherwise.
++ Dictionaries and lists obtained by vim.eval() are returned
++ as-is.
++ Other objects are returned as zero without any errors.
++ See |lua-luaeval| for more details.
++ {only available when compiled with the |+lua| feature}
++
+ map({expr}, {string}) *map()*
+ {expr} must be a |List| or a |Dictionary|.
+ Replace each item in {expr} with the result of evaluating
+***************
+*** 4574,4579 ****
+--- 4612,4640 ----
+ This can be used to avoid some things that would remove the
+ popup menu.
+
++ *E860* *E861*
++ py3eval({expr}) *py3eval()*
++ Evaluate Python expression {expr} and return its result
++ converted to Vim data structures.
++ Numbers and strings are returned as they are (strings are
++ copied though, unicode strings are additionally converted to
++ 'encoding').
++ Lists are represented as Vim |List| type.
++ Dictionaries are represented as Vim |Dictionary| type with
++ keys converted to strings.
++ {only available when compiled with the |+python3| feature}
++
++ *E858* *E859*
++ pyeval({expr}) *pyeval()*
++ Evaluate Python expression {expr} and return its result
++ converted to Vim data structures.
++ Numbers and strings are returned as they are (strings are
++ copied though).
++ Lists are represented as Vim |List| type.
++ Dictionaries are represented as Vim |Dictionary| type with
++ keys converted to strings.
++ {only available when compiled with the |+python| feature}
++
+ *E726* *E727*
+ range({expr} [, {max} [, {stride}]]) *range()*
+ Returns a |List| with Numbers:
+***************
+*** 4807,4812 ****
+--- 4868,4877 ----
+ Search for regexp pattern {pattern}. The search starts at the
+ cursor position (you can use |cursor()| to set it).
+
++ If there is no match a 0 is returned and the cursor doesn't
++ move. No error message is given.
++ When a match has been found its line number is returned.
++
+ {flags} is a String, which can contain these character flags:
+ 'b' search backward instead of forward
+ 'c' accept a match at the cursor position
+*** ../vim-7.3.568/runtime/doc/if_pyth.txt 2010-08-15 21:57:12.000000000 +0200
+--- runtime/doc/if_pyth.txt 2012-06-20 18:01:02.000000000 +0200
+***************
+*** 1,4 ****
+! *if_pyth.txt* For Vim version 7.3. Last change: 2010 Aug 13
+
+
+ VIM REFERENCE MANUAL by Paul Moore
+--- 1,4 ----
+! *if_pyth.txt* For Vim version 7.3. Last change: 2012 Feb 04
+
+
+ VIM REFERENCE MANUAL by Paul Moore
+***************
+*** 6,18 ****
+
+ The Python Interface to Vim *python* *Python*
+
+! 1. Commands |python-commands|
+! 2. The vim module |python-vim|
+! 3. Buffer objects |python-buffer|
+! 4. Range objects |python-range|
+! 5. Window objects |python-window|
+! 6. Dynamic loading |python-dynamic|
+! 7. Python 3 |python3|
+
+ {Vi does not have any of these commands}
+
+--- 6,19 ----
+
+ The Python Interface to Vim *python* *Python*
+
+! 1. Commands |python-commands|
+! 2. The vim module |python-vim|
+! 3. Buffer objects |python-buffer|
+! 4. Range objects |python-range|
+! 5. Window objects |python-window|
+! 6. pyeval(), py3eval() Vim functions |python-pyeval|
+! 7. Dynamic loading |python-dynamic|
+! 8. Python 3 |python3|
+
+ {Vi does not have any of these commands}
+
+***************
+*** 150,155 ****
+--- 151,172 ----
+ [{'cmd': '/^eval_expr(arg, nextcmd)$/', 'static': 0, 'name':
+ 'eval_expr', 'kind': 'f', 'filename': './src/eval.c'}]
+
++ vim.bindeval(str) *python-bindeval*
++ Like |python-eval|, but
++ 1. if expression evaluates to |List| or |Dictionary| it is returned as
++ vimlist or vimdictionary python type that are connected to original
++ list or dictionary. Thus modifications to these objects imply
++ modifications of the original.
++ 2. if expression evaluates to a function reference, then it returns
++ callable vimfunction object. Use self keyword argument to assign
++ |self| object for dictionary functions.
++
++ Note: this function has the same behavior as |lua-eval| (except that
++ lua does not support running vim functions), |python-eval| is
++ kept for backwards compatibility in order not to make scripts
++ relying on outputs of vim.eval() being a copy of original or
++ vim.eval("1") returning a string.
++
+
+
+ Error object of the "vim" module
+***************
+*** 222,229 ****
+ - from indexing vim.buffers (|python-buffers|)
+ - from the "buffer" attribute of a window (|python-window|)
+
+! Buffer objects have one read-only attribute - name - the full file name for
+! the buffer. They also have three methods (append, mark, and range; see below).
+
+ You can also treat buffer objects as sequence objects. In this context, they
+ act as if they were lists (yes, they are mutable) of strings, with each
+--- 239,247 ----
+ - from indexing vim.buffers (|python-buffers|)
+ - from the "buffer" attribute of a window (|python-window|)
+
+! Buffer objects have two read-only attributes - name - the full file name for
+! the buffer, and number - the buffer number. They also have three methods
+! (append, mark, and range; see below).
+
+ You can also treat buffer objects as sequence objects. In this context, they
+ act as if they were lists (yes, they are mutable) of strings, with each
+***************
+*** 318,324 ****
+ The width attribute is writable only if the screen is split vertically.
+
+ ==============================================================================
+! 6. Dynamic loading *python-dynamic*
+
+ On MS-Windows the Python library can be loaded dynamically. The |:version|
+ output then includes |+python/dyn|.
+--- 336,348 ----
+ The width attribute is writable only if the screen is split vertically.
+
+ ==============================================================================
+! 6. pyeval() and py3eval() Vim functions *python-pyeval*
+!
+! To facilitate bi-directional interface, you can use |pyeval()| and |py3eval()|
+! functions to evaluate Python expressions and pass their values to VimL.
+!
+! ==============================================================================
+! 7. Dynamic loading *python-dynamic*
+
+ On MS-Windows the Python library can be loaded dynamically. The |:version|
+ output then includes |+python/dyn|.
+***************
+*** 335,347 ****
+ sure edit "gvim.exe" and search for "python\d*.dll\c".
+
+ ==============================================================================
+! 7. Python 3 *python3*
+
+ *:py3* *:python3*
+ The |:py3| and |:python3| commands work similar to |:python|.
+ *:py3file*
+ The |:py3file| command works similar to |:pyfile|.
+
+ Vim can be built in four ways (:version output):
+ 1. No Python support (-python, -python3)
+ 2. Python 2 support only (+python or +python/dyn, -python3)
+--- 359,372 ----
+ sure edit "gvim.exe" and search for "python\d*.dll\c".
+
+ ==============================================================================
+! 8. Python 3 *python3*
+
+ *:py3* *:python3*
+ The |:py3| and |:python3| commands work similar to |:python|.
+ *:py3file*
+ The |:py3file| command works similar to |:pyfile|.
+
++
+ Vim can be built in four ways (:version output):
+ 1. No Python support (-python, -python3)
+ 2. Python 2 support only (+python or +python/dyn, -python3)
+***************
+*** 355,361 ****
+ When doing this on Linux/Unix systems and importing global symbols, this leads
+ to a crash when the second Python version is used. So either global symbols
+ are loaded but only one Python version is activated, or no global symbols are
+! loaded. The latter makes Python's "import" fail on libaries that expect the
+ symbols to be provided by Vim.
+ *E836* *E837*
+ Vim's configuration script makes a guess for all libraries based on one
+--- 380,386 ----
+ When doing this on Linux/Unix systems and importing global symbols, this leads
+ to a crash when the second Python version is used. So either global symbols
+ are loaded but only one Python version is activated, or no global symbols are
+! loaded. The latter makes Python's "import" fail on libraries that expect the
+ symbols to be provided by Vim.
+ *E836* *E837*
+ Vim's configuration script makes a guess for all libraries based on one
+***************
+*** 377,382 ****
+--- 402,419 ----
+ 3. You undefine PY_NO_RTLD_GLOBAL in auto/config.h after configuration. This
+ may crash Vim though.
+
++ *has-python*
++ You can test what Python version is available with: >
++ if has('python')
++ echo 'there is Python 2.x'
++ elseif has('python3')
++ echo 'there is Python 3.x'
++ endif
++
++ Note however, that when Python 2 and 3 are both available and loaded
++ dynamically, these has() calls will try to load them. If only one can be
++ loaded at a time, just checking if Python 2 or 3 are available will prevent
++ the other one from being available.
+
+ ==============================================================================
+ vim:tw=78:ts=8:ft=help:norl:
+*** ../vim-7.3.568/src/eval.c 2012-06-20 14:13:02.000000000 +0200
+--- src/eval.c 2012-06-20 18:29:15.000000000 +0200
+***************
+*** 424,453 ****
+ static int get_lit_string_tv __ARGS((char_u **arg, typval_T *rettv, int evaluate));
+ static int get_list_tv __ARGS((char_u **arg, typval_T *rettv, int evaluate));
+ static int rettv_list_alloc __ARGS((typval_T *rettv));
+- static listitem_T *listitem_alloc __ARGS((void));
+ static void listitem_free __ARGS((listitem_T *item));
+- static void listitem_remove __ARGS((list_T *l, listitem_T *item));
+ static long list_len __ARGS((list_T *l));
+ static int list_equal __ARGS((list_T *l1, list_T *l2, int ic, int recursive));
+ static int dict_equal __ARGS((dict_T *d1, dict_T *d2, int ic, int recursive));
+ static int tv_equal __ARGS((typval_T *tv1, typval_T *tv2, int ic, int recursive));
+- static listitem_T *list_find __ARGS((list_T *l, long n));
+ static long list_find_nr __ARGS((list_T *l, long idx, int *errorp));
+ static long list_idx_of_item __ARGS((list_T *l, listitem_T *item));
+- static void list_append __ARGS((list_T *l, listitem_T *item));
+ static int list_append_number __ARGS((list_T *l, varnumber_T n));
+- static int list_insert_tv __ARGS((list_T *l, typval_T *tv, listitem_T *item));
+ static int list_extend __ARGS((list_T *l1, list_T *l2, listitem_T *bef));
+ static int list_concat __ARGS((list_T *l1, list_T *l2, typval_T *tv));
+ static list_T *list_copy __ARGS((list_T *orig, int deep, int copyID));
+- static void list_remove __ARGS((list_T *l, listitem_T *item, listitem_T *item2));
+ static char_u *list2string __ARGS((typval_T *tv, int copyID));
+ static int list_join_inner __ARGS((garray_T *gap, list_T *l, char_u *sep, int echo_style, int copyID, garray_T *join_gap));
+ static int list_join __ARGS((garray_T *gap, list_T *l, char_u *sep, int echo, int copyID));
+ static int free_unref_items __ARGS((int copyID));
+- static void set_ref_in_ht __ARGS((hashtab_T *ht, int copyID));
+- static void set_ref_in_list __ARGS((list_T *l, int copyID));
+- static void set_ref_in_item __ARGS((typval_T *tv, int copyID));
+ static int rettv_dict_alloc __ARGS((typval_T *rettv));
+ static void dict_free __ARGS((dict_T *d, int recurse));
+ static dictitem_T *dictitem_copy __ARGS((dictitem_T *org));
+--- 424,444 ----
+***************
+*** 654,659 ****
+--- 645,656 ----
+ static void f_prevnonblank __ARGS((typval_T *argvars, typval_T *rettv));
+ static void f_printf __ARGS((typval_T *argvars, typval_T *rettv));
+ static void f_pumvisible __ARGS((typval_T *argvars, typval_T *rettv));
++ #ifdef FEAT_PYTHON3
++ static void f_py3eval __ARGS((typval_T *argvars, typval_T *rettv));
++ #endif
++ #ifdef FEAT_PYTHON
++ static void f_pyeval __ARGS((typval_T *argvars, typval_T *rettv));
++ #endif
+ static void f_range __ARGS((typval_T *argvars, typval_T *rettv));
+ static void f_readfile __ARGS((typval_T *argvars, typval_T *rettv));
+ static void f_reltime __ARGS((typval_T *argvars, typval_T *rettv));
+***************
+*** 824,831 ****
+ static char_u *autoload_name __ARGS((char_u *name));
+ static void cat_func_name __ARGS((char_u *buf, ufunc_T *fp));
+ static void func_free __ARGS((ufunc_T *fp));
+- static void func_unref __ARGS((char_u *name));
+- static void func_ref __ARGS((char_u *name));
+ 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));
+ static int can_free_funccal __ARGS((funccall_T *fc, int copyID)) ;
+ static void free_funccal __ARGS((funccall_T *fc, int free_val));
+--- 821,826 ----
+***************
+*** 5927,5933 ****
+ /*
+ * Allocate a list item.
+ */
+! static listitem_T *
+ listitem_alloc()
+ {
+ return (listitem_T *)alloc(sizeof(listitem_T));
+--- 5922,5928 ----
+ /*
+ * Allocate a list item.
+ */
+! listitem_T *
+ listitem_alloc()
+ {
+ return (listitem_T *)alloc(sizeof(listitem_T));
+***************
+*** 5947,5953 ****
+ /*
+ * Remove a list item from a List and free it. Also clears the value.
+ */
+! static void
+ listitem_remove(l, item)
+ list_T *l;
+ listitem_T *item;
+--- 5942,5948 ----
+ /*
+ * Remove a list item from a List and free it. Also clears the value.
+ */
+! void
+ listitem_remove(l, item)
+ list_T *l;
+ listitem_T *item;
+***************
+*** 6123,6129 ****
+ * A negative index is counted from the end; -1 is the last item.
+ * Returns NULL when "n" is out of range.
+ */
+! static listitem_T *
+ list_find(l, n)
+ list_T *l;
+ long n;
+--- 6118,6124 ----
+ * A negative index is counted from the end; -1 is the last item.
+ * Returns NULL when "n" is out of range.
+ */
+! listitem_T *
+ list_find(l, n)
+ list_T *l;
+ long n;
+***************
+*** 6265,6271 ****
+ /*
+ * Append item "item" to the end of list "l".
+ */
+! static void
+ list_append(l, item)
+ list_T *l;
+ listitem_T *item;
+--- 6260,6266 ----
+ /*
+ * Append item "item" to the end of list "l".
+ */
+! void
+ list_append(l, item)
+ list_T *l;
+ listitem_T *item;
+***************
+*** 6378,6384 ****
+ * If "item" is NULL append at the end.
+ * Return FAIL when out of memory.
+ */
+! static int
+ list_insert_tv(l, tv, item)
+ list_T *l;
+ typval_T *tv;
+--- 6373,6379 ----
+ * If "item" is NULL append at the end.
+ * Return FAIL when out of memory.
+ */
+! int
+ list_insert_tv(l, tv, item)
+ list_T *l;
+ typval_T *tv;
+***************
+*** 6523,6529 ****
+ * Remove items "item" to "item2" from list "l".
+ * Does not free the listitem or the value!
+ */
+! static void
+ list_remove(l, item, item2)
+ list_T *l;
+ listitem_T *item;
+--- 6518,6524 ----
+ * Remove items "item" to "item2" from list "l".
+ * Does not free the listitem or the value!
+ */
+! void
+ list_remove(l, item, item2)
+ list_T *l;
+ listitem_T *item;
+***************
+*** 6785,6790 ****
+--- 6780,6793 ----
+ set_ref_in_lua(copyID);
+ #endif
+
++ #ifdef FEAT_PYTHON
++ set_ref_in_python(copyID);
++ #endif
++
++ #ifdef FEAT_PYTHON3
++ set_ref_in_python3(copyID);
++ #endif
++
+ /*
+ * 2. Free lists and dictionaries that are not referenced.
+ */
+***************
+*** 6870,6876 ****
+ /*
+ * Mark all lists and dicts referenced through hashtab "ht" with "copyID".
+ */
+! static void
+ set_ref_in_ht(ht, copyID)
+ hashtab_T *ht;
+ int copyID;
+--- 6873,6879 ----
+ /*
+ * Mark all lists and dicts referenced through hashtab "ht" with "copyID".
+ */
+! void
+ set_ref_in_ht(ht, copyID)
+ hashtab_T *ht;
+ int copyID;
+***************
+*** 6890,6896 ****
+ /*
+ * Mark all lists and dicts referenced through list "l" with "copyID".
+ */
+! static void
+ set_ref_in_list(l, copyID)
+ list_T *l;
+ int copyID;
+--- 6893,6899 ----
+ /*
+ * Mark all lists and dicts referenced through list "l" with "copyID".
+ */
+! void
+ set_ref_in_list(l, copyID)
+ list_T *l;
+ int copyID;
+***************
+*** 6904,6910 ****
+ /*
+ * Mark all lists and dicts referenced through typval "tv" with "copyID".
+ */
+! static void
+ set_ref_in_item(tv, copyID)
+ typval_T *tv;
+ int copyID;
+--- 6907,6913 ----
+ /*
+ * Mark all lists and dicts referenced through typval "tv" with "copyID".
+ */
+! void
+ set_ref_in_item(tv, copyID)
+ typval_T *tv;
+ int copyID;
+***************
+*** 7986,7991 ****
+--- 7989,8000 ----
+ {"prevnonblank", 1, 1, f_prevnonblank},
+ {"printf", 2, 19, f_printf},
+ {"pumvisible", 0, 0, f_pumvisible},
++ #ifdef FEAT_PYTHON3
++ {"py3eval", 1, 1, f_py3eval},
++ #endif
++ #ifdef FEAT_PYTHON
++ {"pyeval", 1, 1, f_pyeval},
++ #endif
+ {"range", 1, 3, f_range},
+ {"readfile", 1, 3, f_readfile},
+ {"reltime", 0, 2, f_reltime},
+***************
+*** 9150,9155 ****
+--- 9159,9203 ----
+ #endif
+ }
+
++ int
++ func_call(name, args, selfdict, rettv)
++ char_u *name;
++ typval_T *args;
++ dict_T *selfdict;
++ typval_T *rettv;
++ {
++ listitem_T *item;
++ typval_T argv[MAX_FUNC_ARGS + 1];
++ int argc = 0;
++ int dummy;
++ int r = 0;
++
++ for (item = args->vval.v_list->lv_first; item != NULL;
++ item = item->li_next)
++ {
++ if (argc == MAX_FUNC_ARGS)
++ {
++ EMSG(_("E699: Too many arguments"));
++ break;
++ }
++ /* Make a copy of each argument. This is needed to be able to set
++ * v_lock to VAR_FIXED in the copy without changing the original list.
++ */
++ copy_tv(&item->li_tv, &argv[argc++]);
++ }
++
++ if (item == NULL)
++ r = call_func(name, (int)STRLEN(name), rettv, argc, argv,
++ curwin->w_cursor.lnum, curwin->w_cursor.lnum,
++ &dummy, TRUE, selfdict);
++
++ /* Free the arguments. */
++ while (argc > 0)
++ clear_tv(&argv[--argc]);
++
++ return r;
++ }
++
+ /*
+ * "call(func, arglist)" function
+ */
+***************
+*** 9159,9168 ****
+ typval_T *rettv;
+ {
+ char_u *func;
+- typval_T argv[MAX_FUNC_ARGS + 1];
+- int argc = 0;
+- listitem_T *item;
+- int dummy;
+ dict_T *selfdict = NULL;
+
+ if (argvars[1].v_type != VAR_LIST)
+--- 9207,9212 ----
+***************
+*** 9190,9217 ****
+ selfdict = argvars[2].vval.v_dict;
+ }
+
+! for (item = argvars[1].vval.v_list->lv_first; item != NULL;
+! item = item->li_next)
+! {
+! if (argc == MAX_FUNC_ARGS)
+! {
+! EMSG(_("E699: Too many arguments"));
+! break;
+! }
+! /* Make a copy of each argument. This is needed to be able to set
+! * v_lock to VAR_FIXED in the copy without changing the original list.
+! */
+! copy_tv(&item->li_tv, &argv[argc++]);
+! }
+!
+! if (item == NULL)
+! (void)call_func(func, (int)STRLEN(func), rettv, argc, argv,
+! curwin->w_cursor.lnum, curwin->w_cursor.lnum,
+! &dummy, TRUE, selfdict);
+!
+! /* Free the arguments. */
+! while (argc > 0)
+! clear_tv(&argv[--argc]);
+ }
+
+ #ifdef FEAT_FLOAT
+--- 9234,9240 ----
+ selfdict = argvars[2].vval.v_dict;
+ }
+
+! (void)func_call(func, &argvars[1], selfdict, rettv);
+ }
+
+ #ifdef FEAT_FLOAT
+***************
+*** 14424,14429 ****
+--- 14447,14486 ----
+ #endif
+ }
+
++ #ifdef FEAT_PYTHON3
++ /*
++ * "py3eval()" function
++ */
++ static void
++ f_py3eval(argvars, rettv)
++ typval_T *argvars;
++ typval_T *rettv;
++ {
++ char_u *str;
++ char_u buf[NUMBUFLEN];
++
++ str = get_tv_string_buf(&argvars[0], buf);
++ do_py3eval(str, rettv);
++ }
++ #endif
++
++ #ifdef FEAT_PYTHON
++ /*
++ * "pyeval()" function
++ */
++ static void
++ f_pyeval(argvars, rettv)
++ typval_T *argvars;
++ typval_T *rettv;
++ {
++ char_u *str;
++ char_u buf[NUMBUFLEN];
++
++ str = get_tv_string_buf(&argvars[0], buf);
++ do_pyeval(str, rettv);
++ }
++ #endif
++
+ /*
+ * "range()" function
+ */
+***************
+*** 22139,22145 ****
+ * Unreference a Function: decrement the reference count and free it when it
+ * becomes zero. Only for numbered functions.
+ */
+! static void
+ func_unref(name)
+ char_u *name;
+ {
+--- 22196,22202 ----
+ * Unreference a Function: decrement the reference count and free it when it
+ * becomes zero. Only for numbered functions.
+ */
+! void
+ func_unref(name)
+ char_u *name;
+ {
+***************
+*** 22163,22169 ****
+ /*
+ * Count a reference to a Function.
+ */
+! static void
+ func_ref(name)
+ char_u *name;
+ {
+--- 22220,22226 ----
+ /*
+ * Count a reference to a Function.
+ */
+! void
+ func_ref(name)
+ char_u *name;
+ {
+*** ../vim-7.3.568/src/if_lua.c 2012-04-06 14:30:55.000000000 +0200
+--- src/if_lua.c 2012-06-20 18:16:33.000000000 +0200
+***************
+*** 199,207 ****
+ lua_Number (*dll_lua_tonumberx) (lua_State *L, int idx, int *isnum);
+ lua_Integer (*dll_lua_tointegerx) (lua_State *L, int idx, int *isnum);
+ void (*dll_lua_callk) (lua_State *L, int nargs, int nresults, int ctx,
+! lua_CFunction k);
+ int (*dll_lua_pcallk) (lua_State *L, int nargs, int nresults, int errfunc,
+! int ctx, lua_CFunction k);
+ void (*dll_lua_getglobal) (lua_State *L, const char *var);
+ void (*dll_lua_setglobal) (lua_State *L, const char *var);
+ #endif
+--- 199,207 ----
+ lua_Number (*dll_lua_tonumberx) (lua_State *L, int idx, int *isnum);
+ lua_Integer (*dll_lua_tointegerx) (lua_State *L, int idx, int *isnum);
+ void (*dll_lua_callk) (lua_State *L, int nargs, int nresults, int ctx,
+! lua_CFunction k);
+ int (*dll_lua_pcallk) (lua_State *L, int nargs, int nresults, int errfunc,
+! int ctx, lua_CFunction k);
+ void (*dll_lua_getglobal) (lua_State *L, const char *var);
+ void (*dll_lua_setglobal) (lua_State *L, const char *var);
+ #endif
+***************
+*** 394,400 ****
+ luaL_typeerror (lua_State *L, int narg, const char *tname)
+ {
+ const char *msg = lua_pushfstring(L, "%s expected, got %s",
+! tname, luaL_typename(L, narg));
+ return luaL_argerror(L, narg, msg);
+ }
+ #endif
+--- 394,400 ----
+ luaL_typeerror (lua_State *L, int narg, const char *tname)
+ {
+ const char *msg = lua_pushfstring(L, "%s expected, got %s",
+! tname, luaL_typename(L, narg));
+ return luaL_argerror(L, narg, msg);
+ }
+ #endif
+***************
+*** 646,786 ****
+ return 1; \
+ }
+
+-
+- /* adapted from eval.c */
+-
+- #define listitem_alloc() (listitem_T *)alloc(sizeof(listitem_T))
+-
+- static listitem_T *
+- list_find (list_T *l, long n)
+- {
+- listitem_T *li;
+- if (l == NULL || n < -l->lv_len || n >= l->lv_len)
+- return NULL;
+- if (n < 0) /* search backward? */
+- for (li = l->lv_last; n < -1; li = li->li_prev)
+- n++;
+- else /* search forward */
+- for (li = l->lv_first; n > 0; li = li->li_next)
+- n--;
+- return li;
+- }
+-
+- static void
+- list_remove (list_T *l, listitem_T *li)
+- {
+- listwatch_T *lw;
+- --l->lv_len;
+- /* fix watchers */
+- for (lw = l->lv_watch; lw != NULL; lw = lw->lw_next)
+- if (lw->lw_item == li)
+- lw->lw_item = li->li_next;
+- /* fix list pointers */
+- if (li->li_next == NULL) /* last? */
+- l->lv_last = li->li_prev;
+- else
+- li->li_next->li_prev = li->li_prev;
+- if (li->li_prev == NULL) /* first? */
+- l->lv_first = li->li_next;
+- else
+- li->li_prev->li_next = li->li_next;
+- l->lv_idx_item = NULL;
+- }
+-
+- static void
+- list_append(list_T *l, listitem_T *item)
+- {
+- if (l->lv_last == NULL) /* empty list? */
+- l->lv_first = item;
+- else
+- l->lv_last->li_next = item;
+- item->li_prev = l->lv_last;
+- item->li_next = NULL;
+- l->lv_last = item;
+- ++l->lv_len;
+- }
+-
+- static int
+- list_insert_tv(list_T *l, typval_T *tv, listitem_T *item)
+- {
+- listitem_T *ni = listitem_alloc();
+-
+- if (ni == NULL)
+- return FAIL;
+- copy_tv(tv, &ni->li_tv);
+- if (item == NULL)
+- list_append(l, ni);
+- else
+- {
+- ni->li_prev = item->li_prev;
+- ni->li_next = item;
+- if (item->li_prev == NULL)
+- {
+- l->lv_first = ni;
+- ++l->lv_idx;
+- }
+- else
+- {
+- item->li_prev->li_next = ni;
+- l->lv_idx_item = NULL;
+- }
+- item->li_prev = ni;
+- ++l->lv_len;
+- }
+- return OK;
+- }
+-
+- /* set references */
+-
+- static void set_ref_in_tv (typval_T *tv, int copyID);
+-
+- static void
+- set_ref_in_dict(dict_T *d, int copyID)
+- {
+- hashtab_T *ht = &d->dv_hashtab;
+- int n = ht->ht_used;
+- hashitem_T *hi;
+- for (hi = ht->ht_array; n > 0; ++hi)
+- if (!HASHITEM_EMPTY(hi))
+- {
+- dictitem_T *di = dict_lookup(hi);
+- set_ref_in_tv(&di->di_tv, copyID);
+- --n;
+- }
+- }
+-
+- static void
+- set_ref_in_list(list_T *l, int copyID)
+- {
+- listitem_T *li;
+- for (li = l->lv_first; li != NULL; li = li->li_next)
+- set_ref_in_tv(&li->li_tv, copyID);
+- }
+-
+- static void
+- set_ref_in_tv(typval_T *tv, int copyID)
+- {
+- if (tv->v_type == VAR_LIST)
+- {
+- list_T *l = tv->vval.v_list;
+- if (l != NULL && l->lv_copyID != copyID)
+- {
+- l->lv_copyID = copyID;
+- set_ref_in_list(l, copyID);
+- }
+- }
+- else if (tv->v_type == VAR_DICT)
+- {
+- dict_T *d = tv->vval.v_dict;
+- if (d != NULL && d->dv_copyID != copyID)
+- {
+- d->dv_copyID = copyID;
+- set_ref_in_dict(d, copyID);
+- }
+- }
+- }
+-
+-
+ /* ======= List type ======= */
+
+ static luaV_List *
+--- 646,651 ----
+***************
+*** 876,882 ****
+ if (li == NULL) return 0;
+ if (lua_isnil(L, 3)) /* remove? */
+ {
+! list_remove(l, li);
+ clear_tv(&li->li_tv);
+ vim_free(li);
+ }
+--- 741,747 ----
+ if (li == NULL) return 0;
+ if (lua_isnil(L, 3)) /* remove? */
+ {
+! list_remove(l, li, li);
+ clear_tv(&li->li_tv);
+ vim_free(li);
+ }
+***************
+*** 904,911 ****
+ typval_T v;
+ lua_settop(L, 2);
+ luaV_totypval(L, 2, &v);
+! copy_tv(&v, &li->li_tv);
+! list_append(l, li);
+ }
+ lua_settop(L, 1);
+ return 1;
+--- 769,775 ----
+ typval_T v;
+ lua_settop(L, 2);
+ luaV_totypval(L, 2, &v);
+! list_append_tv(l, &v);
+ }
+ lua_settop(L, 1);
+ return 1;
+***************
+*** 1682,1688 ****
+ tv.vval.v_dict = (dict_T *) lua_touserdata(L, 4); /* key */
+ }
+ lua_pop(L, 2); /* metatable and value */
+! set_ref_in_tv(&tv, copyID);
+ }
+ return 0;
+ }
+--- 1546,1552 ----
+ tv.vval.v_dict = (dict_T *) lua_touserdata(L, 4); /* key */
+ }
+ lua_pop(L, 2); /* metatable and value */
+! set_ref_in_item(&tv, copyID);
+ }
+ return 0;
+ }
+*** ../vim-7.3.568/src/if_py_both.h 2012-04-20 13:31:16.000000000 +0200
+--- src/if_py_both.h 2012-06-29 12:03:52.000000000 +0200
+***************
+*** 1,4 ****
+! /* vi:set ts=8 sts=4 sw=4:
+ *
+ * VIM - Vi IMproved by Bram Moolenaar
+ *
+--- 1,4 ----
+! /* vi:set ts=8 sts=4 sw=4 noet:
+ *
+ * VIM - Vi IMproved by Bram Moolenaar
+ *
+***************
+*** 105,111 ****
+ return NULL;
+ Py_INCREF(list);
+
+! if (!PyList_Check(list)) {
+ PyErr_SetString(PyExc_TypeError, _("writelines() requires list of strings"));
+ Py_DECREF(list);
+ return NULL;
+--- 105,112 ----
+ return NULL;
+ Py_INCREF(list);
+
+! if (!PyList_Check(list))
+! {
+ PyErr_SetString(PyExc_TypeError, _("writelines() requires list of strings"));
+ Py_DECREF(list);
+ return NULL;
+***************
+*** 119,125 ****
+ char *str = NULL;
+ PyInt len;
+
+! if (!PyArg_Parse(line, "et#", ENC_OPT, &str, &len)) {
+ PyErr_SetString(PyExc_TypeError, _("writelines() requires list of strings"));
+ Py_DECREF(list);
+ return NULL;
+--- 120,127 ----
+ char *str = NULL;
+ PyInt len;
+
+! if (!PyArg_Parse(line, "et#", ENC_OPT, &str, &len))
+! {
+ PyErr_SetString(PyExc_TypeError, _("writelines() requires list of strings"));
+ Py_DECREF(list);
+ return NULL;
+***************
+*** 297,303 ****
+ {
+ PyObject *result;
+ PyObject *newObj;
+! char ptrBuf[NUMBUFLEN];
+
+ /* Avoid infinite recursion */
+ if (depth > 100)
+--- 299,305 ----
+ {
+ PyObject *result;
+ PyObject *newObj;
+! char ptrBuf[sizeof(void *) * 2 + 3];
+
+ /* Avoid infinite recursion */
+ if (depth > 100)
+***************
+*** 312,320 ****
+ if ((our_tv->v_type == VAR_LIST && our_tv->vval.v_list != NULL)
+ || (our_tv->v_type == VAR_DICT && our_tv->vval.v_dict != NULL))
+ {
+! sprintf(ptrBuf, PRINTF_DECIMAL_LONG_U,
+! our_tv->v_type == VAR_LIST ? (long_u)our_tv->vval.v_list
+! : (long_u)our_tv->vval.v_dict);
+ result = PyDict_GetItemString(lookupDict, ptrBuf);
+ if (result != NULL)
+ {
+--- 314,322 ----
+ if ((our_tv->v_type == VAR_LIST && our_tv->vval.v_list != NULL)
+ || (our_tv->v_type == VAR_DICT && our_tv->vval.v_dict != NULL))
+ {
+! sprintf(ptrBuf, "%p",
+! our_tv->v_type == VAR_LIST ? (void *)our_tv->vval.v_list
+! : (void *)our_tv->vval.v_dict);
+ result = PyDict_GetItemString(lookupDict, ptrBuf);
+ if (result != NULL)
+ {
+***************
+*** 374,509 ****
+ hashitem_T *hi;
+ dictitem_T *di;
+
+! PyDict_SetItemString(lookupDict, ptrBuf, result);
+
+! for (hi = ht->ht_array; todo > 0; ++hi)
+ {
+! if (!HASHITEM_EMPTY(hi))
+! {
+! --todo;
+!
+! di = dict_lookup(hi);
+! newObj = VimToPython(&di->di_tv, depth + 1, lookupDict);
+! PyDict_SetItemString(result, (char *)hi->hi_key, newObj);
+! Py_DECREF(newObj);
+! }
+ }
+ }
+ }
+! else
+ {
+! Py_INCREF(Py_None);
+! result = Py_None;
+ }
+
+! return result;
+ }
+- #endif
+
+ static PyObject *
+! VimEval(PyObject *self UNUSED, PyObject *args UNUSED)
+ {
+! #ifdef FEAT_EVAL
+! char *expr;
+! typval_T *our_tv;
+! PyObject *result;
+! PyObject *lookup_dict;
+
+! if (!PyArg_ParseTuple(args, "s", &expr))
+ return NULL;
+
+! Py_BEGIN_ALLOW_THREADS
+! Python_Lock_Vim();
+! our_tv = eval_expr((char_u *)expr, NULL);
+!
+! Python_Release_Vim();
+! Py_END_ALLOW_THREADS
+!
+! if (our_tv == NULL)
+ {
+! PyErr_SetVim(_("invalid expression"));
+ return NULL;
+ }
+
+- /* Convert the Vim type into a Python type. Create a dictionary that's
+- * used to check for recursive loops. */
+ lookup_dict = PyDict_New();
+! result = VimToPython(our_tv, 1, lookup_dict);
+ Py_DECREF(lookup_dict);
+
+!
+! Py_BEGIN_ALLOW_THREADS
+! Python_Lock_Vim();
+! free_tv(our_tv);
+! Python_Release_Vim();
+! Py_END_ALLOW_THREADS
+!
+! return result;
+! #else
+! PyErr_SetVim(_("expressions disabled at compile time"));
+! return NULL;
+! #endif
+ }
+
+! /*
+! * Vim module - Definitions
+! */
+!
+! static struct PyMethodDef VimMethods[] = {
+! /* name, function, calling, documentation */
+! {"command", VimCommand, 1, "Execute a Vim ex-mode command" },
+! {"eval", VimEval, 1, "Evaluate an expression using Vim evaluator" },
+! { NULL, NULL, 0, NULL }
+ };
+
+ typedef struct
+ {
+ PyObject_HEAD
+! buf_T *buf;
+! }
+! BufferObject;
+
+! #define INVALID_BUFFER_VALUE ((buf_T *)(-1))
+!
+! /*
+! * Buffer list object - Implementation
+! */
+
+! static PyInt
+! BufListLength(PyObject *self UNUSED)
+ {
+! buf_T *b = firstbuf;
+! PyInt n = 0;
+
+! while (b)
+ {
+! ++n;
+! b = b->b_next;
+ }
+!
+! return n;
+ }
+
+ static PyObject *
+! BufListItem(PyObject *self UNUSED, PyInt n)
+ {
+! buf_T *b;
+
+! for (b = firstbuf; b; b = b->b_next, --n)
+ {
+! if (n == 0)
+! return BufferNew(b);
+ }
+
+! PyErr_SetString(PyExc_IndexError, _("no such buffer"));
+! return NULL;
+ }
+
+! typedef struct
+! {
+! PyObject_HEAD
+! win_T *win;
+! } WindowObject;
+
+ #define INVALID_WINDOW_VALUE ((win_T *)(-1))
+
+--- 376,1325 ----
+ hashitem_T *hi;
+ dictitem_T *di;
+
+! PyDict_SetItemString(lookupDict, ptrBuf, result);
+!
+! for (hi = ht->ht_array; todo > 0; ++hi)
+! {
+! if (!HASHITEM_EMPTY(hi))
+! {
+! --todo;
+!
+! di = dict_lookup(hi);
+! newObj = VimToPython(&di->di_tv, depth + 1, lookupDict);
+! PyDict_SetItemString(result, (char *)hi->hi_key, newObj);
+! Py_DECREF(newObj);
+! }
+! }
+! }
+! }
+! else
+! {
+! Py_INCREF(Py_None);
+! result = Py_None;
+! }
+!
+! return result;
+! }
+! #endif
+!
+! static PyObject *
+! VimEval(PyObject *self UNUSED, PyObject *args UNUSED)
+! {
+! #ifdef FEAT_EVAL
+! char *expr;
+! typval_T *our_tv;
+! PyObject *result;
+! PyObject *lookup_dict;
+!
+! if (!PyArg_ParseTuple(args, "s", &expr))
+! return NULL;
+!
+! Py_BEGIN_ALLOW_THREADS
+! Python_Lock_Vim();
+! our_tv = eval_expr((char_u *)expr, NULL);
+!
+! Python_Release_Vim();
+! Py_END_ALLOW_THREADS
+!
+! if (our_tv == NULL)
+! {
+! PyErr_SetVim(_("invalid expression"));
+! return NULL;
+! }
+!
+! /* Convert the Vim type into a Python type. Create a dictionary that's
+! * used to check for recursive loops. */
+! lookup_dict = PyDict_New();
+! result = VimToPython(our_tv, 1, lookup_dict);
+! Py_DECREF(lookup_dict);
+!
+!
+! Py_BEGIN_ALLOW_THREADS
+! Python_Lock_Vim();
+! free_tv(our_tv);
+! Python_Release_Vim();
+! Py_END_ALLOW_THREADS
+!
+! return result;
+! #else
+! PyErr_SetVim(_("expressions disabled at compile time"));
+! return NULL;
+! #endif
+! }
+!
+! static PyObject *ConvertToPyObject(typval_T *);
+!
+! static PyObject *
+! VimEvalPy(PyObject *self UNUSED, PyObject *args UNUSED)
+! {
+! #ifdef FEAT_EVAL
+! char *expr;
+! typval_T *our_tv;
+! PyObject *result;
+!
+! if (!PyArg_ParseTuple(args, "s", &expr))
+! return NULL;
+!
+! Py_BEGIN_ALLOW_THREADS
+! Python_Lock_Vim();
+! our_tv = eval_expr((char_u *)expr, NULL);
+!
+! Python_Release_Vim();
+! Py_END_ALLOW_THREADS
+!
+! if (our_tv == NULL)
+! {
+! PyErr_SetVim(_("invalid expression"));
+! return NULL;
+! }
+!
+! result = ConvertToPyObject(our_tv);
+! Py_BEGIN_ALLOW_THREADS
+! Python_Lock_Vim();
+! free_tv(our_tv);
+! Python_Release_Vim();
+! Py_END_ALLOW_THREADS
+!
+! return result;
+! #else
+! PyErr_SetVim(_("expressions disabled at compile time"));
+! return NULL;
+! #endif
+! }
+!
+! static PyObject *
+! VimStrwidth(PyObject *self UNUSED, PyObject *args)
+! {
+! char *expr;
+!
+! if (!PyArg_ParseTuple(args, "s", &expr))
+! return NULL;
+!
+! return PyLong_FromLong(mb_string2cells((char_u *)expr, STRLEN(expr)));
+! }
+!
+! /*
+! * Vim module - Definitions
+! */
+!
+! static struct PyMethodDef VimMethods[] = {
+! /* name, function, calling, documentation */
+! {"command", VimCommand, 1, "Execute a Vim ex-mode command" },
+! {"eval", VimEval, 1, "Evaluate an expression using Vim evaluator" },
+! {"bindeval", VimEvalPy, 1, "Like eval(), but returns objects attached to vim ones"},
+! {"strwidth", VimStrwidth, 1, "Screen string width, counts <Tab> as having width 1"},
+! { NULL, NULL, 0, NULL }
+! };
+!
+! typedef struct
+! {
+! PyObject_HEAD
+! buf_T *buf;
+! } BufferObject;
+!
+! #define INVALID_BUFFER_VALUE ((buf_T *)(-1))
+!
+! /*
+! * Buffer list object - Implementation
+! */
+!
+! static PyInt
+! BufListLength(PyObject *self UNUSED)
+! {
+! buf_T *b = firstbuf;
+! PyInt n = 0;
+!
+! while (b)
+! {
+! ++n;
+! b = b->b_next;
+! }
+!
+! return n;
+! }
+!
+! static PyObject *
+! BufListItem(PyObject *self UNUSED, PyInt n)
+! {
+! buf_T *b;
+!
+! for (b = firstbuf; b; b = b->b_next, --n)
+! {
+! if (n == 0)
+! return BufferNew(b);
+! }
+!
+! PyErr_SetString(PyExc_IndexError, _("no such buffer"));
+! return NULL;
+! }
+!
+! typedef struct
+! {
+! PyObject_HEAD
+! win_T *win;
+! } WindowObject;
+!
+! static int ConvertFromPyObject(PyObject *, typval_T *);
+! static int _ConvertFromPyObject(PyObject *, typval_T *, PyObject *);
+!
+! typedef struct pylinkedlist_S {
+! struct pylinkedlist_S *pll_next;
+! struct pylinkedlist_S *pll_prev;
+! PyObject *pll_obj;
+! } pylinkedlist_T;
+!
+! static pylinkedlist_T *lastdict = NULL;
+! static pylinkedlist_T *lastlist = NULL;
+!
+! static void
+! pyll_remove(pylinkedlist_T *ref, pylinkedlist_T **last)
+! {
+! if (ref->pll_prev == NULL)
+! {
+! if (ref->pll_next == NULL)
+! {
+! *last = NULL;
+! return;
+! }
+! }
+! else
+! ref->pll_prev->pll_next = ref->pll_next;
+!
+! if (ref->pll_next == NULL)
+! *last = ref->pll_prev;
+! else
+! ref->pll_next->pll_prev = ref->pll_prev;
+! }
+!
+! static void
+! pyll_add(PyObject *self, pylinkedlist_T *ref, pylinkedlist_T **last)
+! {
+! if (*last == NULL)
+! ref->pll_prev = NULL;
+! else
+! {
+! (*last)->pll_next = ref;
+! ref->pll_prev = *last;
+! }
+! ref->pll_next = NULL;
+! ref->pll_obj = self;
+! *last = ref;
+! }
+!
+! static PyTypeObject DictionaryType;
+!
+! typedef struct
+! {
+! PyObject_HEAD
+! dict_T *dict;
+! pylinkedlist_T ref;
+! } DictionaryObject;
+!
+! static PyObject *
+! DictionaryNew(dict_T *dict)
+! {
+! DictionaryObject *self;
+!
+! self = PyObject_NEW(DictionaryObject, &DictionaryType);
+! if (self == NULL)
+! return NULL;
+! self->dict = dict;
+! ++dict->dv_refcount;
+!
+! pyll_add((PyObject *)(self), &self->ref, &lastdict);
+!
+! return (PyObject *)(self);
+! }
+!
+! static int
+! pydict_to_tv(PyObject *obj, typval_T *tv, PyObject *lookupDict)
+! {
+! dict_T *d;
+! char_u *key;
+! dictitem_T *di;
+! PyObject *keyObject;
+! PyObject *valObject;
+! Py_ssize_t iter = 0;
+!
+! d = dict_alloc();
+! if (d == NULL)
+! {
+! PyErr_NoMemory();
+! return -1;
+! }
+!
+! tv->v_type = VAR_DICT;
+! tv->vval.v_dict = d;
+!
+! while (PyDict_Next(obj, &iter, &keyObject, &valObject))
+! {
+! DICTKEY_DECL
+!
+! if (keyObject == NULL)
+! return -1;
+! if (valObject == NULL)
+! return -1;
+!
+! DICTKEY_GET(-1)
+!
+! di = dictitem_alloc(key);
+!
+! DICTKEY_UNREF
+!
+! if (di == NULL)
+! {
+! PyErr_NoMemory();
+! return -1;
+! }
+! di->di_tv.v_lock = 0;
+!
+! if (_ConvertFromPyObject(valObject, &di->di_tv, lookupDict) == -1)
+! {
+! vim_free(di);
+! return -1;
+! }
+! if (dict_add(d, di) == FAIL)
+! {
+! vim_free(di);
+! PyErr_SetVim(_("failed to add key to dictionary"));
+! return -1;
+! }
+! }
+! return 0;
+! }
+!
+! static int
+! pymap_to_tv(PyObject *obj, typval_T *tv, PyObject *lookupDict)
+! {
+! dict_T *d;
+! char_u *key;
+! dictitem_T *di;
+! PyObject *list;
+! PyObject *litem;
+! PyObject *keyObject;
+! PyObject *valObject;
+! Py_ssize_t lsize;
+!
+! d = dict_alloc();
+! if (d == NULL)
+! {
+! PyErr_NoMemory();
+! return -1;
+! }
+!
+! tv->v_type = VAR_DICT;
+! tv->vval.v_dict = d;
+!
+! list = PyMapping_Items(obj);
+! lsize = PyList_Size(list);
+! while (lsize--)
+! {
+! DICTKEY_DECL
+!
+! litem = PyList_GetItem(list, lsize);
+! if (litem == NULL)
+! {
+! Py_DECREF(list);
+! return -1;
+! }
+!
+! keyObject = PyTuple_GetItem(litem, 0);
+! if (keyObject == NULL)
+! {
+! Py_DECREF(list);
+! Py_DECREF(litem);
+! return -1;
+! }
+!
+! DICTKEY_GET(-1)
+!
+! valObject = PyTuple_GetItem(litem, 1);
+! if (valObject == NULL)
+! {
+! Py_DECREF(list);
+! Py_DECREF(litem);
+! return -1;
+! }
+!
+! di = dictitem_alloc(key);
+!
+! DICTKEY_UNREF
+!
+! if (di == NULL)
+! {
+! Py_DECREF(list);
+! Py_DECREF(litem);
+! PyErr_NoMemory();
+! return -1;
+! }
+! di->di_tv.v_lock = 0;
+!
+! if (_ConvertFromPyObject(valObject, &di->di_tv, lookupDict) == -1)
+! {
+! vim_free(di);
+! Py_DECREF(list);
+! Py_DECREF(litem);
+! return -1;
+! }
+! if (dict_add(d, di) == FAIL)
+! {
+! vim_free(di);
+! Py_DECREF(list);
+! Py_DECREF(litem);
+! PyErr_SetVim(_("failed to add key to dictionary"));
+! return -1;
+! }
+! Py_DECREF(litem);
+! }
+! Py_DECREF(list);
+! return 0;
+! }
+!
+! static PyInt
+! DictionaryLength(PyObject *self)
+! {
+! return ((PyInt) ((((DictionaryObject *)(self))->dict->dv_hashtab.ht_used)));
+! }
+!
+! static PyObject *
+! DictionaryItem(PyObject *self, PyObject *keyObject)
+! {
+! char_u *key;
+! dictitem_T *val;
+! DICTKEY_DECL
+!
+! DICTKEY_GET(NULL)
+!
+! val = dict_find(((DictionaryObject *) (self))->dict, key, -1);
+!
+! DICTKEY_UNREF
+!
+! return ConvertToPyObject(&val->di_tv);
+! }
+!
+! static PyInt
+! DictionaryAssItem(PyObject *self, PyObject *keyObject, PyObject *valObject)
+! {
+! char_u *key;
+! typval_T tv;
+! dict_T *d = ((DictionaryObject *)(self))->dict;
+! dictitem_T *di;
+! DICTKEY_DECL
+!
+! if (d->dv_lock)
+! {
+! PyErr_SetVim(_("dict is locked"));
+! return -1;
+! }
+!
+! DICTKEY_GET(-1)
+!
+! di = dict_find(d, key, -1);
+!
+! if (valObject == NULL)
+! {
+! if (di == NULL)
+! {
+! PyErr_SetString(PyExc_IndexError, _("no such key in dictionary"));
+! return -1;
+! }
+! hashitem_T *hi = hash_find(&d->dv_hashtab, di->di_key);
+! hash_remove(&d->dv_hashtab, hi);
+! dictitem_free(di);
+! return 0;
+! }
+!
+! if (ConvertFromPyObject(valObject, &tv) == -1)
+! {
+! return -1;
+! }
+!
+! if (di == NULL)
+! {
+! di = dictitem_alloc(key);
+! if (di == NULL)
+! {
+! PyErr_NoMemory();
+! return -1;
+! }
+! di->di_tv.v_lock = 0;
+!
+! if (dict_add(d, di) == FAIL)
+! {
+! vim_free(di);
+! PyErr_SetVim(_("failed to add key to dictionary"));
+! return -1;
+! }
+! }
+! else
+! clear_tv(&di->di_tv);
+!
+! DICTKEY_UNREF
+!
+! copy_tv(&tv, &di->di_tv);
+! return 0;
+! }
+!
+! static PyObject *
+! DictionaryListKeys(PyObject *self)
+! {
+! dict_T *dict = ((DictionaryObject *)(self))->dict;
+! long_u todo = dict->dv_hashtab.ht_used;
+! Py_ssize_t i = 0;
+! PyObject *r;
+! hashitem_T *hi;
+!
+! r = PyList_New(todo);
+! for (hi = dict->dv_hashtab.ht_array; todo > 0; ++hi)
+! {
+! if (!HASHITEM_EMPTY(hi))
+! {
+! PyList_SetItem(r, i, PyBytes_FromString((char *)(hi->hi_key)));
+! --todo;
+! ++i;
+! }
+! }
+! return r;
+! }
+!
+! static struct PyMethodDef DictionaryMethods[] = {
+! {"keys", (PyCFunction)DictionaryListKeys, METH_NOARGS, ""},
+! { NULL, NULL, 0, NULL }
+! };
+!
+! static PyTypeObject ListType;
+!
+! typedef struct
+! {
+! PyObject_HEAD
+! list_T *list;
+! pylinkedlist_T ref;
+! } ListObject;
+!
+! static PyObject *
+! ListNew(list_T *list)
+! {
+! ListObject *self;
+!
+! self = PyObject_NEW(ListObject, &ListType);
+! if (self == NULL)
+! return NULL;
+! self->list = list;
+! ++list->lv_refcount;
+!
+! pyll_add((PyObject *)(self), &self->ref, &lastlist);
+!
+! return (PyObject *)(self);
+! }
+!
+! static int
+! list_py_concat(list_T *l, PyObject *obj, PyObject *lookupDict)
+! {
+! Py_ssize_t i;
+! Py_ssize_t lsize = PySequence_Size(obj);
+! PyObject *litem;
+! listitem_T *li;
+!
+! for(i=0; i<lsize; i++)
+! {
+! li = listitem_alloc();
+! if (li == NULL)
+! {
+! PyErr_NoMemory();
+! return -1;
+! }
+! li->li_tv.v_lock = 0;
+!
+! litem = PySequence_GetItem(obj, i);
+! if (litem == NULL)
+! return -1;
+! if (_ConvertFromPyObject(litem, &li->li_tv, lookupDict) == -1)
+! return -1;
+!
+! list_append(l, li);
+! }
+! return 0;
+! }
+!
+! static int
+! pyseq_to_tv(PyObject *obj, typval_T *tv, PyObject *lookupDict)
+! {
+! list_T *l;
+!
+! l = list_alloc();
+! if (l == NULL)
+! {
+! PyErr_NoMemory();
+! return -1;
+! }
+!
+! tv->v_type = VAR_LIST;
+! tv->vval.v_list = l;
+!
+! if (list_py_concat(l, obj, lookupDict) == -1)
+! return -1;
+!
+! return 0;
+! }
+!
+! static int
+! pyiter_to_tv(PyObject *obj, typval_T *tv, PyObject *lookupDict)
+! {
+! PyObject *iterator = PyObject_GetIter(obj);
+! PyObject *item;
+! list_T *l;
+! listitem_T *li;
+!
+! l = list_alloc();
+!
+! if (l == NULL)
+! {
+! PyErr_NoMemory();
+! return -1;
+! }
+!
+! tv->vval.v_list = l;
+! tv->v_type = VAR_LIST;
+!
+!
+! if (iterator == NULL)
+! return -1;
+!
+! while ((item = PyIter_Next(obj)))
+! {
+! li = listitem_alloc();
+! if (li == NULL)
+! {
+! PyErr_NoMemory();
+! return -1;
+! }
+! li->li_tv.v_lock = 0;
+!
+! if (_ConvertFromPyObject(item, &li->li_tv, lookupDict) == -1)
+! return -1;
+!
+! list_append(l, li);
+!
+! Py_DECREF(item);
+! }
+!
+! Py_DECREF(iterator);
+! return 0;
+! }
+!
+! static PyInt
+! ListLength(PyObject *self)
+! {
+! return ((PyInt) (((ListObject *) (self))->list->lv_len));
+! }
+!
+! static PyObject *
+! ListItem(PyObject *self, Py_ssize_t index)
+! {
+! listitem_T *li;
+!
+! if (index>=ListLength(self))
+! {
+! PyErr_SetString(PyExc_IndexError, "list index out of range");
+! return NULL;
+! }
+! li = list_find(((ListObject *) (self))->list, (long) index);
+! if (li == NULL)
+! {
+! PyErr_SetVim(_("internal error: failed to get vim list item"));
+! return NULL;
+! }
+! return ConvertToPyObject(&li->li_tv);
+! }
+!
+! #define PROC_RANGE \
+! if (last < 0) {\
+! if (last < -size) \
+! last = 0; \
+! else \
+! last += size; \
+! } \
+! if (first < 0) \
+! first = 0; \
+! if (first > size) \
+! first = size; \
+! if (last > size) \
+! last = size;
+!
+! static PyObject *
+! ListSlice(PyObject *self, Py_ssize_t first, Py_ssize_t last)
+! {
+! PyInt i;
+! PyInt size = ListLength(self);
+! PyInt n;
+! PyObject *list;
+! int reversed = 0;
+!
+! PROC_RANGE
+! if (first >= last)
+! first = last;
+!
+! n = last-first;
+! list = PyList_New(n);
+! if (list == NULL)
+! return NULL;
+!
+! for (i = 0; i < n; ++i)
+! {
+! PyObject *item = ListItem(self, i);
+! if (item == NULL)
+! {
+! Py_DECREF(list);
+! return NULL;
+! }
+!
+! if ((PyList_SetItem(list, ((reversed)?(n-i-1):(i)), item)))
+! {
+! Py_DECREF(item);
+! Py_DECREF(list);
+! return NULL;
+! }
+! }
+!
+! return list;
+! }
+!
+! static int
+! ListAssItem(PyObject *self, Py_ssize_t index, PyObject *obj)
+! {
+! typval_T tv;
+! list_T *l = ((ListObject *) (self))->list;
+! listitem_T *li;
+! Py_ssize_t length = ListLength(self);
+!
+! if (l->lv_lock)
+! {
+! PyErr_SetVim(_("list is locked"));
+! return -1;
+! }
+! if (index>length || (index==length && obj==NULL))
+! {
+! PyErr_SetString(PyExc_IndexError, "list index out of range");
+! return -1;
+! }
+!
+! if (obj == NULL)
+! {
+! li = list_find(l, (long) index);
+! list_remove(l, li, li);
+! clear_tv(&li->li_tv);
+! vim_free(li);
+! return 0;
+! }
+!
+! if (ConvertFromPyObject(obj, &tv) == -1)
+! return -1;
+!
+! if (index == length)
+! {
+! if (list_append_tv(l, &tv) == FAIL)
+! {
+! PyErr_SetVim(_("Failed to add item to list"));
+! return -1;
+! }
+! }
+! else
+! {
+! li = list_find(l, (long) index);
+! clear_tv(&li->li_tv);
+! copy_tv(&tv, &li->li_tv);
+! }
+! return 0;
+! }
+!
+! static int
+! ListAssSlice(PyObject *self, Py_ssize_t first, Py_ssize_t last, PyObject *obj)
+! {
+! PyInt size = ListLength(self);
+! Py_ssize_t i;
+! Py_ssize_t lsize;
+! PyObject *litem;
+! listitem_T *li;
+! listitem_T *next;
+! typval_T v;
+! list_T *l = ((ListObject *) (self))->list;
+!
+! if (l->lv_lock)
+! {
+! PyErr_SetVim(_("list is locked"));
+! return -1;
+! }
+!
+! PROC_RANGE
+
+! if (first == size)
+! li = NULL;
+! else
+! {
+! li = list_find(l, (long) first);
+! if (li == NULL)
+! {
+! PyErr_SetVim(_("internal error: no vim list item"));
+! return -1;
+! }
+! if (last > first)
+! {
+! i = last - first;
+! while (i-- && li != NULL)
+ {
+! next = li->li_next;
+! listitem_remove(l, li);
+! li = next;
+ }
+ }
+ }
+!
+! if (obj == NULL)
+! return 0;
+!
+! if (!PyList_Check(obj))
+ {
+! PyErr_SetString(PyExc_TypeError, _("can only assign lists to slice"));
+! return -1;
+ }
+
+! lsize = PyList_Size(obj);
+!
+! for(i=0; i<lsize; i++)
+! {
+! litem = PyList_GetItem(obj, i);
+! if (litem == NULL)
+! return -1;
+! if (ConvertFromPyObject(litem, &v) == -1)
+! return -1;
+! if (list_insert_tv(l, &v, li) == FAIL)
+! {
+! PyErr_SetVim(_("internal error: failed to add item to list"));
+! return -1;
+! }
+! }
+! return 0;
+ }
+
+ static PyObject *
+! ListConcatInPlace(PyObject *self, PyObject *obj)
+ {
+! list_T *l = ((ListObject *) (self))->list;
+! PyObject *lookup_dict;
+
+! if (l->lv_lock)
+! {
+! PyErr_SetVim(_("list is locked"));
+ return NULL;
++ }
+
+! if (!PySequence_Check(obj))
+ {
+! PyErr_SetString(PyExc_TypeError, _("can only concatenate with lists"));
+ return NULL;
+ }
+
+ lookup_dict = PyDict_New();
+! if (list_py_concat(l, obj, lookup_dict) == -1)
+! {
+! Py_DECREF(lookup_dict);
+! return NULL;
+! }
+ Py_DECREF(lookup_dict);
+
+! Py_INCREF(self);
+! return self;
+ }
+
+! static struct PyMethodDef ListMethods[] = {
+! {"extend", (PyCFunction)ListConcatInPlace, METH_O, ""},
+! { NULL, NULL, 0, NULL }
+ };
+
+ typedef struct
+ {
+ PyObject_HEAD
+! char_u *name;
+! } FunctionObject;
+
+! static PyTypeObject FunctionType;
+
+! static PyObject *
+! FunctionNew(char_u *name)
+ {
+! FunctionObject *self;
+
+! self = PyObject_NEW(FunctionObject, &FunctionType);
+! if (self == NULL)
+! return NULL;
+! self->name = PyMem_New(char_u, STRLEN(name) + 1);
+! if (self->name == NULL)
+ {
+! PyErr_NoMemory();
+! return NULL;
+ }
+! STRCPY(self->name, name);
+! func_ref(name);
+! return (PyObject *)(self);
+ }
+
+ static PyObject *
+! FunctionCall(PyObject *self, PyObject *argsObject, PyObject *kwargs)
+ {
+! FunctionObject *this = (FunctionObject *)(self);
+! char_u *name = this->name;
+! typval_T args;
+! typval_T selfdicttv;
+! typval_T rettv;
+! dict_T *selfdict = NULL;
+! PyObject *selfdictObject;
+! PyObject *result;
+! int error;
+
+! if (ConvertFromPyObject(argsObject, &args) == -1)
+! return NULL;
+!
+! if (kwargs != NULL)
+ {
+! selfdictObject = PyDict_GetItemString(kwargs, "self");
+! if (selfdictObject != NULL)
+! {
+! if (!PyDict_Check(selfdictObject))
+! {
+! PyErr_SetString(PyExc_TypeError, _("'self' argument must be a dictionary"));
+! clear_tv(&args);
+! return NULL;
+! }
+! if (ConvertFromPyObject(selfdictObject, &selfdicttv) == -1)
+! return NULL;
+! selfdict = selfdicttv.vval.v_dict;
+! }
+ }
+
+! error = func_call(name, &args, selfdict, &rettv);
+! if (error != OK)
+! {
+! result = NULL;
+! PyErr_SetVim(_("failed to run function"));
+! }
+! else
+! result = ConvertToPyObject(&rettv);
+!
+! /* FIXME Check what should really be cleared. */
+! clear_tv(&args);
+! clear_tv(&rettv);
+! /*
+! * if (selfdict!=NULL)
+! * clear_tv(selfdicttv);
+! */
+!
+! return result;
+ }
+
+! static struct PyMethodDef FunctionMethods[] = {
+! {"__call__", (PyCFunction)FunctionCall, METH_VARARGS|METH_KEYWORDS, ""},
+! { NULL, NULL, 0, NULL }
+! };
+
+ #define INVALID_WINDOW_VALUE ((win_T *)(-1))
+
+***************
+*** 1567,1569 ****
+--- 2383,2638 ----
+ { NULL, NULL, 0, NULL }
+ };
+
++ static void
++ set_ref_in_py(const int copyID)
++ {
++ pylinkedlist_T *cur;
++ dict_T *dd;
++ list_T *ll;
++
++ if (lastdict != NULL)
++ for(cur = lastdict ; cur != NULL ; cur = cur->pll_prev)
++ {
++ dd = ((DictionaryObject *) (cur->pll_obj))->dict;
++ if (dd->dv_copyID != copyID)
++ {
++ dd->dv_copyID = copyID;
++ set_ref_in_ht(&dd->dv_hashtab, copyID);
++ }
++ }
++
++ if (lastlist != NULL)
++ for(cur = lastlist ; cur != NULL ; cur = cur->pll_prev)
++ {
++ ll = ((ListObject *) (cur->pll_obj))->list;
++ if (ll->lv_copyID != copyID)
++ {
++ ll->lv_copyID = copyID;
++ set_ref_in_list(ll, copyID);
++ }
++ }
++ }
++
++ static int
++ set_string_copy(char_u *str, typval_T *tv)
++ {
++ tv->vval.v_string = vim_strsave(str);
++ if (tv->vval.v_string == NULL)
++ {
++ PyErr_NoMemory();
++ return -1;
++ }
++ return 0;
++ }
++
++ #ifdef FEAT_EVAL
++ typedef int (*pytotvfunc)(PyObject *, typval_T *, PyObject *);
++
++ static int
++ convert_dl(PyObject *obj, typval_T *tv,
++ pytotvfunc py_to_tv, PyObject *lookupDict)
++ {
++ PyObject *capsule;
++ char hexBuf[sizeof(void *) * 2 + 3];
++
++ sprintf(hexBuf, "%p", obj);
++
++ capsule = PyDict_GetItemString(lookupDict, hexBuf);
++ if (capsule == NULL)
++ {
++ capsule = PyCapsule_New(tv, NULL, NULL);
++ PyDict_SetItemString(lookupDict, hexBuf, capsule);
++ Py_DECREF(capsule);
++ if (py_to_tv(obj, tv, lookupDict) == -1)
++ {
++ tv->v_type = VAR_UNKNOWN;
++ return -1;
++ }
++ /* As we are not using copy_tv which increments reference count we must
++ * do it ourself. */
++ switch(tv->v_type)
++ {
++ case VAR_DICT: ++tv->vval.v_dict->dv_refcount; break;
++ case VAR_LIST: ++tv->vval.v_list->lv_refcount; break;
++ }
++ }
++ else
++ {
++ typval_T *v = PyCapsule_GetPointer(capsule, NULL);
++ copy_tv(v, tv);
++ }
++ return 0;
++ }
++
++ static int
++ ConvertFromPyObject(PyObject *obj, typval_T *tv)
++ {
++ PyObject *lookup_dict;
++ int r;
++
++ lookup_dict = PyDict_New();
++ r = _ConvertFromPyObject(obj, tv, lookup_dict);
++ Py_DECREF(lookup_dict);
++ return r;
++ }
++
++ static int
++ _ConvertFromPyObject(PyObject *obj, typval_T *tv, PyObject *lookupDict)
++ {
++ if (obj->ob_type == &DictionaryType)
++ {
++ tv->v_type = VAR_DICT;
++ tv->vval.v_dict = (((DictionaryObject *)(obj))->dict);
++ ++tv->vval.v_dict->dv_refcount;
++ }
++ else if (obj->ob_type == &ListType)
++ {
++ tv->v_type = VAR_LIST;
++ tv->vval.v_list = (((ListObject *)(obj))->list);
++ ++tv->vval.v_list->lv_refcount;
++ }
++ else if (obj->ob_type == &FunctionType)
++ {
++ if (set_string_copy(((FunctionObject *) (obj))->name, tv) == -1)
++ return -1;
++
++ tv->v_type = VAR_FUNC;
++ func_ref(tv->vval.v_string);
++ }
++ #if PY_MAJOR_VERSION >= 3
++ else if (PyBytes_Check(obj))
++ {
++ char_u *result = (char_u *) PyBytes_AsString(obj);
++
++ if (result == NULL)
++ return -1;
++
++ if (set_string_copy(result, tv) == -1)
++ return -1;
++
++ tv->v_type = VAR_STRING;
++ }
++ else if (PyUnicode_Check(obj))
++ {
++ PyObject *bytes;
++ char_u *result;
++
++ bytes = PyString_AsBytes(obj);
++ if (bytes == NULL)
++ return -1;
++
++ result = (char_u *) PyBytes_AsString(bytes);
++ if (result == NULL)
++ return -1;
++
++ if (set_string_copy(result, tv) == -1)
++ {
++ Py_XDECREF(bytes);
++ return -1;
++ }
++ Py_XDECREF(bytes);
++
++ tv->v_type = VAR_STRING;
++ }
++ #else
++ else if (PyUnicode_Check(obj))
++ {
++ PyObject *bytes;
++ char_u *result;
++
++ bytes = PyUnicode_AsEncodedString(obj, (char *)ENC_OPT, NULL);
++ if (bytes == NULL)
++ return -1;
++
++ result=(char_u *) PyString_AsString(bytes);
++ if (result == NULL)
++ return -1;
++
++ if (set_string_copy(result, tv) == -1)
++ {
++ Py_XDECREF(bytes);
++ return -1;
++ }
++ Py_XDECREF(bytes);
++
++ tv->v_type = VAR_STRING;
++ }
++ else if (PyString_Check(obj))
++ {
++ char_u *result = (char_u *) PyString_AsString(obj);
++
++ if (result == NULL)
++ return -1;
++
++ if (set_string_copy(result, tv) == -1)
++ return -1;
++
++ tv->v_type = VAR_STRING;
++ }
++ else if (PyInt_Check(obj))
++ {
++ tv->v_type = VAR_NUMBER;
++ tv->vval.v_number = (varnumber_T) PyInt_AsLong(obj);
++ }
++ #endif
++ else if (PyLong_Check(obj))
++ {
++ tv->v_type = VAR_NUMBER;
++ tv->vval.v_number = (varnumber_T) PyLong_AsLong(obj);
++ }
++ else if (PyDict_Check(obj))
++ return convert_dl(obj, tv, pydict_to_tv, lookupDict);
++ #ifdef FEAT_FLOAT
++ else if (PyFloat_Check(obj))
++ {
++ tv->v_type = VAR_FLOAT;
++ tv->vval.v_float = (float_T) PyFloat_AsDouble(obj);
++ }
++ #endif
++ else if (PyIter_Check(obj))
++ return convert_dl(obj, tv, pyiter_to_tv, lookupDict);
++ else if (PySequence_Check(obj))
++ return convert_dl(obj, tv, pyseq_to_tv, lookupDict);
++ else if (PyMapping_Check(obj))
++ return convert_dl(obj, tv, pymap_to_tv, lookupDict);
++ else
++ {
++ PyErr_SetString(PyExc_TypeError, _("unable to convert to vim structure"));
++ return -1;
++ }
++ return 0;
++ }
++
++ static PyObject *
++ ConvertToPyObject(typval_T *tv)
++ {
++ if (tv == NULL)
++ {
++ PyErr_SetVim(_("NULL reference passed"));
++ return NULL;
++ }
++ switch (tv->v_type)
++ {
++ case VAR_STRING:
++ return PyBytes_FromString((char *) tv->vval.v_string);
++ case VAR_NUMBER:
++ return PyLong_FromLong((long) tv->vval.v_number);
++ #ifdef FEAT_FLOAT
++ case VAR_FLOAT:
++ return PyFloat_FromDouble((double) tv->vval.v_float);
++ #endif
++ case VAR_LIST:
++ return ListNew(tv->vval.v_list);
++ case VAR_DICT:
++ return DictionaryNew(tv->vval.v_dict);
++ case VAR_FUNC:
++ return FunctionNew(tv->vval.v_string);
++ case VAR_UNKNOWN:
++ Py_INCREF(Py_None);
++ return Py_None;
++ default:
++ PyErr_SetVim(_("internal error: invalid value type"));
++ return NULL;
++ }
++ }
++ #endif
+*** ../vim-7.3.568/src/if_python.c 2011-08-28 16:00:14.000000000 +0200
+--- src/if_python.c 2012-06-29 12:47:48.000000000 +0200
+***************
+*** 1,4 ****
+! /* vi:set ts=8 sts=4 sw=4:
+ *
+ * VIM - Vi IMproved by Bram Moolenaar
+ *
+--- 1,4 ----
+! /* vi:set ts=8 sts=4 sw=4 noet:
+ *
+ * VIM - Vi IMproved by Bram Moolenaar
+ *
+***************
+*** 56,61 ****
+--- 56,63 ----
+
+ static void init_structs(void);
+
++ #define PyBytes_FromString PyString_FromString
++
+ /* No-op conversion functions, use with care! */
+ #define PyString_AsBytes(obj) (obj)
+ #define PyString_FreeBytes(obj)
+***************
+*** 122,132 ****
+--- 124,136 ----
+ /* This makes if_python.c compile without warnings against Python 2.5
+ * on Win32 and Win64. */
+ # undef PyRun_SimpleString
++ # undef PyRun_String
+ # undef PyArg_Parse
+ # undef PyArg_ParseTuple
+ # undef Py_BuildValue
+ # undef Py_InitModule4
+ # undef Py_InitModule4_64
++ # undef PyObject_CallMethod
+
+ /*
+ * Wrapper defines
+***************
+*** 134,139 ****
+--- 138,144 ----
+ # define PyArg_Parse dll_PyArg_Parse
+ # define PyArg_ParseTuple dll_PyArg_ParseTuple
+ # define PyMem_Free dll_PyMem_Free
++ # define PyMem_Malloc dll_PyMem_Malloc
+ # define PyDict_SetItemString dll_PyDict_SetItemString
+ # define PyErr_BadArgument dll_PyErr_BadArgument
+ # define PyErr_Clear dll_PyErr_Clear
+***************
+*** 150,172 ****
+--- 155,202 ----
+ # endif
+ # define PyInt_AsLong dll_PyInt_AsLong
+ # define PyInt_FromLong dll_PyInt_FromLong
++ # define PyLong_AsLong dll_PyLong_AsLong
++ # define PyLong_FromLong dll_PyLong_FromLong
+ # define PyInt_Type (*dll_PyInt_Type)
++ # define PyLong_Type (*dll_PyLong_Type)
+ # define PyList_GetItem dll_PyList_GetItem
+ # define PyList_Append dll_PyList_Append
+ # define PyList_New dll_PyList_New
+ # define PyList_SetItem dll_PyList_SetItem
+ # define PyList_Size dll_PyList_Size
+ # define PyList_Type (*dll_PyList_Type)
++ # define PySequence_Check dll_PySequence_Check
++ # define PySequence_Size dll_PySequence_Size
++ # define PySequence_GetItem dll_PySequence_GetItem
++ # define PyTuple_Size dll_PyTuple_Size
++ # define PyTuple_GetItem dll_PyTuple_GetItem
++ # define PyTuple_Type (*dll_PyTuple_Type)
+ # define PyImport_ImportModule dll_PyImport_ImportModule
+ # define PyDict_New dll_PyDict_New
+ # define PyDict_GetItemString dll_PyDict_GetItemString
++ # define PyDict_Next dll_PyDict_Next
++ # ifdef PyMapping_Items
++ # define PY_NO_MAPPING_ITEMS
++ # else
++ # define PyMapping_Items dll_PyMapping_Items
++ # endif
++ # define PyObject_CallMethod dll_PyObject_CallMethod
++ # define PyMapping_Check dll_PyMapping_Check
++ # define PyIter_Next dll_PyIter_Next
+ # define PyModule_GetDict dll_PyModule_GetDict
+ # define PyRun_SimpleString dll_PyRun_SimpleString
++ # define PyRun_String dll_PyRun_String
+ # define PyString_AsString dll_PyString_AsString
+ # define PyString_FromString dll_PyString_FromString
+ # define PyString_FromStringAndSize dll_PyString_FromStringAndSize
+ # define PyString_Size dll_PyString_Size
+ # define PyString_Type (*dll_PyString_Type)
++ # define PyUnicode_Type (*dll_PyUnicode_Type)
++ # define PyUnicodeUCS4_AsEncodedString (*dll_PyUnicodeUCS4_AsEncodedString)
++ # define PyFloat_AsDouble dll_PyFloat_AsDouble
++ # define PyFloat_FromDouble dll_PyFloat_FromDouble
++ # define PyFloat_Type (*dll_PyFloat_Type)
++ # define PyImport_AddModule (*dll_PyImport_AddModule)
+ # define PySys_SetObject dll_PySys_SetObject
+ # define PySys_SetArgv dll_PySys_SetArgv
+ # define PyType_Type (*dll_PyType_Type)
+***************
+*** 179,186 ****
+--- 209,218 ----
+ # define Py_Finalize dll_Py_Finalize
+ # define Py_IsInitialized dll_Py_IsInitialized
+ # define _PyObject_New dll__PyObject_New
++ # define _PyObject_NextNotImplemented (*dll__PyObject_NextNotImplemented)
+ # define _Py_NoneStruct (*dll__Py_NoneStruct)
+ # define PyObject_Init dll__PyObject_Init
++ # define PyObject_GetIter dll_PyObject_GetIter
+ # if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02020000
+ # define PyType_IsSubtype dll_PyType_IsSubtype
+ # endif
+***************
+*** 188,193 ****
+--- 220,227 ----
+ # define PyObject_Malloc dll_PyObject_Malloc
+ # define PyObject_Free dll_PyObject_Free
+ # endif
++ # define PyCapsule_New dll_PyCapsule_New
++ # define PyCapsule_GetPointer dll_PyCapsule_GetPointer
+
+ /*
+ * Pointers for dynamic link
+***************
+*** 195,200 ****
+--- 229,235 ----
+ static int(*dll_PyArg_Parse)(PyObject *, char *, ...);
+ static int(*dll_PyArg_ParseTuple)(PyObject *, char *, ...);
+ static int(*dll_PyMem_Free)(void *);
++ static void* (*dll_PyMem_Malloc)(size_t);
+ static int(*dll_PyDict_SetItemString)(PyObject *dp, char *key, PyObject *item);
+ static int(*dll_PyErr_BadArgument)(void);
+ static void(*dll_PyErr_Clear)(void);
+***************
+*** 208,233 ****
+ # ifdef PY_CAN_RECURSE
+ static PyGILState_STATE (*dll_PyGILState_Ensure)(void);
+ static void (*dll_PyGILState_Release)(PyGILState_STATE);
+! #endif
+ static long(*dll_PyInt_AsLong)(PyObject *);
+ static PyObject*(*dll_PyInt_FromLong)(long);
+ static PyTypeObject* dll_PyInt_Type;
+ static PyObject*(*dll_PyList_GetItem)(PyObject *, PyInt);
+ static PyObject*(*dll_PyList_Append)(PyObject *, PyObject *);
+ static PyObject*(*dll_PyList_New)(PyInt size);
+ static int(*dll_PyList_SetItem)(PyObject *, PyInt, PyObject *);
+ static PyInt(*dll_PyList_Size)(PyObject *);
+ static PyTypeObject* dll_PyList_Type;
+ static PyObject*(*dll_PyImport_ImportModule)(const char *);
+ static PyObject*(*dll_PyDict_New)(void);
+ static PyObject*(*dll_PyDict_GetItemString)(PyObject *, const char *);
+ static PyObject*(*dll_PyModule_GetDict)(PyObject *);
+ static int(*dll_PyRun_SimpleString)(char *);
+ static char*(*dll_PyString_AsString)(PyObject *);
+ static PyObject*(*dll_PyString_FromString)(const char *);
+ static PyObject*(*dll_PyString_FromStringAndSize)(const char *, PyInt);
+ static PyInt(*dll_PyString_Size)(PyObject *);
+ static PyTypeObject* dll_PyString_Type;
+ static int(*dll_PySys_SetObject)(char *, PyObject *);
+ static int(*dll_PySys_SetArgv)(int, char **);
+ static PyTypeObject* dll_PyType_Type;
+--- 243,290 ----
+ # ifdef PY_CAN_RECURSE
+ static PyGILState_STATE (*dll_PyGILState_Ensure)(void);
+ static void (*dll_PyGILState_Release)(PyGILState_STATE);
+! # endif
+ static long(*dll_PyInt_AsLong)(PyObject *);
+ static PyObject*(*dll_PyInt_FromLong)(long);
++ static long(*dll_PyLong_AsLong)(PyObject *);
++ static PyObject*(*dll_PyLong_FromLong)(long);
+ static PyTypeObject* dll_PyInt_Type;
++ static PyTypeObject* dll_PyLong_Type;
+ static PyObject*(*dll_PyList_GetItem)(PyObject *, PyInt);
+ static PyObject*(*dll_PyList_Append)(PyObject *, PyObject *);
+ static PyObject*(*dll_PyList_New)(PyInt size);
+ static int(*dll_PyList_SetItem)(PyObject *, PyInt, PyObject *);
+ static PyInt(*dll_PyList_Size)(PyObject *);
+ static PyTypeObject* dll_PyList_Type;
++ static int (*dll_PySequence_Check)(PyObject *);
++ static PyInt(*dll_PySequence_Size)(PyObject *);
++ static PyObject*(*dll_PySequence_GetItem)(PyObject *, PyInt);
++ static PyInt(*dll_PyTuple_Size)(PyObject *);
++ static PyObject*(*dll_PyTuple_GetItem)(PyObject *, PyInt);
++ static PyTypeObject* dll_PyTuple_Type;
+ static PyObject*(*dll_PyImport_ImportModule)(const char *);
+ static PyObject*(*dll_PyDict_New)(void);
+ static PyObject*(*dll_PyDict_GetItemString)(PyObject *, const char *);
++ static int (*dll_PyDict_Next)(PyObject *, Py_ssize_t *, PyObject **, PyObject **);
++ # ifndef PY_NO_MAPPING_ITEMS
++ static PyObject* (*dll_PyMapping_Items)(PyObject *);
++ # endif
++ static PyObject* (*dll_PyObject_CallMethod)(PyObject *, char *, PyObject *);
++ static int (*dll_PyMapping_Check)(PyObject *);
++ static PyObject* (*dll_PyIter_Next)(PyObject *);
+ static PyObject*(*dll_PyModule_GetDict)(PyObject *);
+ static int(*dll_PyRun_SimpleString)(char *);
++ static PyObject *(*dll_PyRun_String)(char *, int, PyObject *, PyObject *);
+ static char*(*dll_PyString_AsString)(PyObject *);
+ static PyObject*(*dll_PyString_FromString)(const char *);
+ static PyObject*(*dll_PyString_FromStringAndSize)(const char *, PyInt);
+ static PyInt(*dll_PyString_Size)(PyObject *);
+ static PyTypeObject* dll_PyString_Type;
++ static PyTypeObject* dll_PyUnicode_Type;
++ static PyObject *(*PyUnicodeUCS4_AsEncodedString)(PyObject *, char *, char *);
++ static double(*dll_PyFloat_AsDouble)(PyObject *);
++ static PyObject*(*dll_PyFloat_FromDouble)(double);
++ static PyTypeObject* dll_PyFloat_Type;
+ static int(*dll_PySys_SetObject)(char *, PyObject *);
+ static int(*dll_PySys_SetArgv)(int, char **);
+ static PyTypeObject* dll_PyType_Type;
+***************
+*** 235,246 ****
+--- 292,306 ----
+ static PyObject*(*dll_Py_BuildValue)(char *, ...);
+ static PyObject*(*dll_Py_FindMethod)(struct PyMethodDef[], PyObject *, char *);
+ static PyObject*(*dll_Py_InitModule4)(char *, struct PyMethodDef *, char *, PyObject *, int);
++ static PyObject*(*dll_PyImport_AddModule)(char *);
+ static void(*dll_Py_SetPythonHome)(char *home);
+ static void(*dll_Py_Initialize)(void);
+ static void(*dll_Py_Finalize)(void);
+ static int(*dll_Py_IsInitialized)(void);
+ static PyObject*(*dll__PyObject_New)(PyTypeObject *, PyObject *);
+ static PyObject*(*dll__PyObject_Init)(PyObject *, PyTypeObject *);
++ static PyObject* (*dll_PyObject_GetIter)(PyObject *);
++ static iternextfunc dll__PyObject_NextNotImplemented;
+ static PyObject* dll__Py_NoneStruct;
+ # if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02020000
+ static int (*dll_PyType_IsSubtype)(PyTypeObject *, PyTypeObject *);
+***************
+*** 249,254 ****
+--- 309,316 ----
+ static void* (*dll_PyObject_Malloc)(size_t);
+ static void (*dll_PyObject_Free)(void*);
+ # endif
++ static PyObject* (*dll_PyCapsule_New)(void *, char *, PyCapsule_Destructor);
++ static void* (*dll_PyCapsule_GetPointer)(PyObject *, char *);
+
+ static HINSTANCE hinstPython = 0; /* Instance of python.dll */
+
+***************
+*** 278,283 ****
+--- 340,346 ----
+ {"PyArg_Parse", (PYTHON_PROC*)&dll_PyArg_Parse},
+ {"PyArg_ParseTuple", (PYTHON_PROC*)&dll_PyArg_ParseTuple},
+ {"PyMem_Free", (PYTHON_PROC*)&dll_PyMem_Free},
++ {"PyMem_Malloc", (PYTHON_PROC*)&dll_PyMem_Malloc},
+ {"PyDict_SetItemString", (PYTHON_PROC*)&dll_PyDict_SetItemString},
+ {"PyErr_BadArgument", (PYTHON_PROC*)&dll_PyErr_BadArgument},
+ {"PyErr_Clear", (PYTHON_PROC*)&dll_PyErr_Clear},
+***************
+*** 294,316 ****
+--- 357,402 ----
+ # endif
+ {"PyInt_AsLong", (PYTHON_PROC*)&dll_PyInt_AsLong},
+ {"PyInt_FromLong", (PYTHON_PROC*)&dll_PyInt_FromLong},
++ {"PyLong_AsLong", (PYTHON_PROC*)&dll_PyLong_AsLong},
++ {"PyLong_FromLong", (PYTHON_PROC*)&dll_PyLong_FromLong},
+ {"PyInt_Type", (PYTHON_PROC*)&dll_PyInt_Type},
++ {"PyLong_Type", (PYTHON_PROC*)&dll_PyLong_Type},
+ {"PyList_GetItem", (PYTHON_PROC*)&dll_PyList_GetItem},
+ {"PyList_Append", (PYTHON_PROC*)&dll_PyList_Append},
+ {"PyList_New", (PYTHON_PROC*)&dll_PyList_New},
+ {"PyList_SetItem", (PYTHON_PROC*)&dll_PyList_SetItem},
+ {"PyList_Size", (PYTHON_PROC*)&dll_PyList_Size},
+ {"PyList_Type", (PYTHON_PROC*)&dll_PyList_Type},
++ {"PySequence_GetItem", (PYTHON_PROC*)&dll_PySequence_GetItem},
++ {"PySequence_Size", (PYTHON_PROC*)&dll_PySequence_Size},
++ {"PySequence_Check", (PYTHON_PROC*)&dll_PySequence_Check},
++ {"PyTuple_GetItem", (PYTHON_PROC*)&dll_PyTuple_GetItem},
++ {"PyTuple_Size", (PYTHON_PROC*)&dll_PyTuple_Size},
++ {"PyTuple_Type", (PYTHON_PROC*)&dll_PyTuple_Type},
+ {"PyImport_ImportModule", (PYTHON_PROC*)&dll_PyImport_ImportModule},
+ {"PyDict_GetItemString", (PYTHON_PROC*)&dll_PyDict_GetItemString},
++ {"PyDict_Next", (PYTHON_PROC*)&dll_PyDict_Next},
+ {"PyDict_New", (PYTHON_PROC*)&dll_PyDict_New},
++ # ifndef PY_NO_MAPPING_ITEMS
++ {"PyMapping_Items", (PYTHON_PROC*)&dll_PyMapping_Items},
++ # endif
++ {"PyObject_CallMethod", (PYTHON_PROC*)&dll_PyObject_CallMethod},
++ {"PyMapping_Check", (PYTHON_PROC*)&dll_PyMapping_Check},
++ {"PyIter_Next", (PYTHON_PROC*)&dll_PyIter_Next},
+ {"PyModule_GetDict", (PYTHON_PROC*)&dll_PyModule_GetDict},
+ {"PyRun_SimpleString", (PYTHON_PROC*)&dll_PyRun_SimpleString},
++ {"PyRun_String", (PYTHON_PROC*)&dll_PyRun_String},
+ {"PyString_AsString", (PYTHON_PROC*)&dll_PyString_AsString},
+ {"PyString_FromString", (PYTHON_PROC*)&dll_PyString_FromString},
+ {"PyString_FromStringAndSize", (PYTHON_PROC*)&dll_PyString_FromStringAndSize},
+ {"PyString_Size", (PYTHON_PROC*)&dll_PyString_Size},
+ {"PyString_Type", (PYTHON_PROC*)&dll_PyString_Type},
++ {"PyUnicode_Type", (PYTHON_PROC*)&dll_PyUnicode_Type},
++ {"PyUnicodeUCS4_AsEncodedString", (PYTHON_PROC*)&dll_PyUnicodeUCS4_AsEncodedString},
++ {"PyFloat_Type", (PYTHON_PROC*)&dll_PyFloat_Type},
++ {"PyFloat_AsDouble", (PYTHON_PROC*)&dll_PyFloat_AsDouble},
++ {"PyFloat_FromDouble", (PYTHON_PROC*)&dll_PyFloat_FromDouble},
++ {"PyImport_AddModule", (PYTHON_PROC*)&dll_PyImport_AddModule},
+ {"PySys_SetObject", (PYTHON_PROC*)&dll_PySys_SetObject},
+ {"PySys_SetArgv", (PYTHON_PROC*)&dll_PySys_SetArgv},
+ {"PyType_Type", (PYTHON_PROC*)&dll_PyType_Type},
+***************
+*** 328,333 ****
+--- 414,421 ----
+ {"Py_IsInitialized", (PYTHON_PROC*)&dll_Py_IsInitialized},
+ {"_PyObject_New", (PYTHON_PROC*)&dll__PyObject_New},
+ {"PyObject_Init", (PYTHON_PROC*)&dll__PyObject_Init},
++ {"PyObject_GetIter", (PYTHON_PROC*)&dll_PyObject_GetIter},
++ {"_PyObject_NextNotImplemented", (PYTHON_PROC*)&dll__PyObject_NextNotImplemented},
+ {"_Py_NoneStruct", (PYTHON_PROC*)&dll__Py_NoneStruct},
+ # if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02020000
+ {"PyType_IsSubtype", (PYTHON_PROC*)&dll_PyType_IsSubtype},
+***************
+*** 336,341 ****
+--- 424,431 ----
+ {"PyObject_Malloc", (PYTHON_PROC*)&dll_PyObject_Malloc},
+ {"PyObject_Free", (PYTHON_PROC*)&dll_PyObject_Free},
+ # endif
++ {"PyCapsule_New", (PYTHON_PROC*)&dll_PyCapsule_New},
++ {"PyCapsule_GetPointer", (PYTHON_PROC*)&dll_PyCapsule_GetPointer},
+ {"", NULL},
+ };
+
+***************
+*** 434,443 ****
+--- 524,548 ----
+
+ static PyObject *BufferNew (buf_T *);
+ static PyObject *WindowNew(win_T *);
++ static PyObject *DictionaryNew(dict_T *);
+ static PyObject *LineToString(const char *);
+
+ static PyTypeObject RangeType;
+
++ static int initialised = 0;
++ #define PYINITIALISED initialised
++
++ /* Add conversion from PyInt? */
++ #define DICTKEY_GET(err) \
++ if (!PyString_Check(keyObject)) \
++ { \
++ PyErr_SetString(PyExc_TypeError, _("only string keys are allowed")); \
++ return err; \
++ } \
++ key = (char_u *) PyString_AsString(keyObject);
++ #define DICTKEY_UNREF
++ #define DICTKEY_DECL
++
+ /*
+ * Include the code shared with if_python3.c
+ */
+***************
+*** 451,456 ****
+--- 556,563 ----
+ static PyInt RangeStart;
+ static PyInt RangeEnd;
+
++ static PyObject *globals;
++
+ static void PythonIO_Flush(void);
+ static int PythonIO_Init(void);
+ static int PythonMod_Init(void);
+***************
+*** 466,473 ****
+ * 1. Python interpreter main program.
+ */
+
+- static int initialised = 0;
+-
+ #if PYTHON_API_VERSION < 1007 /* Python 1.4 */
+ typedef PyObject PyThreadState;
+ #endif
+--- 573,578 ----
+***************
+*** 581,586 ****
+--- 686,693 ----
+ if (PythonMod_Init())
+ goto fail;
+
++ globals = PyModule_GetDict(PyImport_AddModule("__main__"));
++
+ /* Remove the element from sys.path that was added because of our
+ * argv[0] value in PythonMod_Init(). Previously we used an empty
+ * string, but dependinding on the OS we then get an empty entry or
+***************
+*** 609,615 ****
+ * External interface
+ */
+ static void
+! DoPythonCommand(exarg_T *eap, const char *cmd)
+ {
+ #ifndef PY_CAN_RECURSE
+ static int recursive = 0;
+--- 716,722 ----
+ * External interface
+ */
+ static void
+! DoPythonCommand(exarg_T *eap, const char *cmd, typval_T *rettv)
+ {
+ #ifndef PY_CAN_RECURSE
+ static int recursive = 0;
+***************
+*** 639,646 ****
+ if (Python_Init())
+ goto theend;
+
+! RangeStart = eap->line1;
+! RangeEnd = eap->line2;
+ Python_Release_Vim(); /* leave vim */
+
+ #if defined(HAVE_LOCALE_H) || defined(X_LOCALE)
+--- 746,761 ----
+ if (Python_Init())
+ goto theend;
+
+! if (rettv == NULL)
+! {
+! RangeStart = eap->line1;
+! RangeEnd = eap->line2;
+! }
+! else
+! {
+! RangeStart = (PyInt) curwin->w_cursor.lnum;
+! RangeEnd = RangeStart;
+! }
+ Python_Release_Vim(); /* leave vim */
+
+ #if defined(HAVE_LOCALE_H) || defined(X_LOCALE)
+***************
+*** 658,664 ****
+
+ Python_RestoreThread(); /* enter python */
+
+! PyRun_SimpleString((char *)(cmd));
+
+ Python_SaveThread(); /* leave python */
+
+--- 773,795 ----
+
+ Python_RestoreThread(); /* enter python */
+
+! if (rettv == NULL)
+! PyRun_SimpleString((char *)(cmd));
+! else
+! {
+! PyObject *r;
+!
+! r = PyRun_String((char *)(cmd), Py_eval_input, globals, globals);
+! if (r == NULL)
+! EMSG(_("E858: Eval did not return a valid python object"));
+! else
+! {
+! if (ConvertFromPyObject(r, rettv) == -1)
+! EMSG(_("E859: Failed to convert returned python object to vim value"));
+! Py_DECREF(r);
+! }
+! PyErr_Clear();
+! }
+
+ Python_SaveThread(); /* leave python */
+
+***************
+*** 680,686 ****
+ #ifndef PY_CAN_RECURSE
+ --recursive;
+ #endif
+! return; /* keeps lint happy */
+ }
+
+ /*
+--- 811,817 ----
+ #ifndef PY_CAN_RECURSE
+ --recursive;
+ #endif
+! return;
+ }
+
+ /*
+***************
+*** 695,703 ****
+ if (!eap->skip)
+ {
+ if (script == NULL)
+! DoPythonCommand(eap, (char *)eap->arg);
+ else
+! DoPythonCommand(eap, (char *)script);
+ }
+ vim_free(script);
+ }
+--- 826,834 ----
+ if (!eap->skip)
+ {
+ if (script == NULL)
+! DoPythonCommand(eap, (char *)eap->arg, NULL);
+ else
+! DoPythonCommand(eap, (char *)script, NULL);
+ }
+ vim_free(script);
+ }
+***************
+*** 743,749 ****
+ *p++ = '\0';
+
+ /* Execute the file */
+! DoPythonCommand(eap, buffer);
+ }
+
+ /******************************************************
+--- 874,880 ----
+ *p++ = '\0';
+
+ /* Execute the file */
+! DoPythonCommand(eap, buffer, NULL);
+ }
+
+ /******************************************************
+***************
+*** 765,778 ****
+ static int
+ OutputSetattr(PyObject *self, char *name, PyObject *val)
+ {
+! if (val == NULL) {
+ PyErr_SetString(PyExc_AttributeError, _("can't delete OutputObject attributes"));
+ return -1;
+ }
+
+ if (strcmp(name, "softspace") == 0)
+ {
+! if (!PyInt_Check(val)) {
+ PyErr_SetString(PyExc_TypeError, _("softspace must be an integer"));
+ return -1;
+ }
+--- 896,911 ----
+ static int
+ OutputSetattr(PyObject *self, char *name, PyObject *val)
+ {
+! if (val == NULL)
+! {
+ PyErr_SetString(PyExc_AttributeError, _("can't delete OutputObject attributes"));
+ return -1;
+ }
+
+ if (strcmp(name, "softspace") == 0)
+ {
+! if (!PyInt_Check(val))
+! {
+ PyErr_SetString(PyExc_TypeError, _("softspace must be an integer"));
+ return -1;
+ }
+***************
+*** 800,805 ****
+--- 933,941 ----
+ * 3. Implementation of the Vim module for Python
+ */
+
++ static PyObject *ConvertToPyObject(typval_T *);
++ static int ConvertFromPyObject(PyObject *, typval_T *);
++
+ /* Window type - Implementation functions
+ * --------------------------------------
+ */
+***************
+*** 1441,1446 ****
+--- 1577,1748 ----
+ return result;
+ }
+
++ static void DictionaryDestructor(PyObject *);
++ static PyObject *DictionaryGetattr(PyObject *, char*);
++
++ static PyMappingMethods DictionaryAsMapping = {
++ (PyInquiry) DictionaryLength,
++ (binaryfunc) DictionaryItem,
++ (objobjargproc) DictionaryAssItem,
++ };
++
++ static PyTypeObject DictionaryType = {
++ PyObject_HEAD_INIT(0)
++ 0,
++ "vimdictionary",
++ sizeof(DictionaryObject),
++ 0,
++
++ (destructor) DictionaryDestructor,
++ (printfunc) 0,
++ (getattrfunc) DictionaryGetattr,
++ (setattrfunc) 0,
++ (cmpfunc) 0,
++ (reprfunc) 0,
++
++ 0, /* as number */
++ 0, /* as sequence */
++ &DictionaryAsMapping, /* as mapping */
++
++ (hashfunc) 0,
++ (ternaryfunc) 0,
++ (reprfunc) 0,
++ };
++
++ static void
++ DictionaryDestructor(PyObject *self)
++ {
++ DictionaryObject *this = ((DictionaryObject *) (self));
++
++ pyll_remove(&this->ref, &lastdict);
++ dict_unref(this->dict);
++
++ Py_DECREF(self);
++ }
++
++ static PyObject *
++ DictionaryGetattr(PyObject *self, char *name)
++ {
++ return Py_FindMethod(DictionaryMethods, self, name);
++ }
++
++ static void ListDestructor(PyObject *);
++ static PyObject *ListGetattr(PyObject *, char *);
++
++ static PySequenceMethods ListAsSeq = {
++ (PyInquiry) ListLength,
++ (binaryfunc) 0,
++ (PyIntArgFunc) 0,
++ (PyIntArgFunc) ListItem,
++ (PyIntIntArgFunc) ListSlice,
++ (PyIntObjArgProc) ListAssItem,
++ (PyIntIntObjArgProc) ListAssSlice,
++ (objobjproc) 0,
++ #if PY_MAJOR_VERSION >= 2
++ (binaryfunc) ListConcatInPlace,
++ 0,
++ #endif
++ };
++
++ static PyTypeObject ListType = {
++ PyObject_HEAD_INIT(0)
++ 0,
++ "vimlist",
++ sizeof(ListObject),
++ 0,
++
++ (destructor) ListDestructor,
++ (printfunc) 0,
++ (getattrfunc) ListGetattr,
++ (setattrfunc) 0,
++ (cmpfunc) 0,
++ (reprfunc) 0,
++
++ 0, /* as number */
++ &ListAsSeq, /* as sequence */
++ 0, /* as mapping */
++
++ (hashfunc) 0,
++ (ternaryfunc) 0,
++ (reprfunc) 0,
++ };
++
++ static void
++ ListDestructor(PyObject *self)
++ {
++ ListObject *this = ((ListObject *) (self));
++
++ pyll_remove(&this->ref, &lastlist);
++ list_unref(this->list);
++
++ Py_DECREF(self);
++ }
++
++ static PyObject *
++ ListGetattr(PyObject *self, char *name)
++ {
++ return Py_FindMethod(ListMethods, self, name);
++ }
++
++ static void FunctionDestructor(PyObject *);
++ static PyObject *FunctionGetattr(PyObject *, char *);
++
++ static PyTypeObject FunctionType = {
++ PyObject_HEAD_INIT(0)
++ 0,
++ "vimfunction",
++ sizeof(FunctionObject),
++ 0,
++
++ (destructor) FunctionDestructor,
++ (printfunc) 0,
++ (getattrfunc) FunctionGetattr,
++ (setattrfunc) 0,
++ (cmpfunc) 0,
++ (reprfunc) 0,
++
++ 0, /* as number */
++ 0, /* as sequence */
++ 0, /* as mapping */
++
++ (hashfunc) 0,
++ (ternaryfunc) FunctionCall,
++ (reprfunc) 0,
++ };
++
++ static void
++ FunctionDestructor(PyObject *self)
++ {
++ FunctionObject *this = (FunctionObject *) (self);
++
++ func_unref(this->name);
++ PyMem_Del(this->name);
++
++ Py_DECREF(self);
++ }
++
++ static PyObject *
++ FunctionGetattr(PyObject *self, char *name)
++ {
++ FunctionObject *this = (FunctionObject *)(self);
++
++ if (strcmp(name, "name") == 0)
++ return PyString_FromString((char *)(this->name));
++ else
++ return Py_FindMethod(FunctionMethods, self, name);
++ }
++
++ void
++ do_pyeval (char_u *str, typval_T *rettv)
++ {
++ DoPythonCommand(NULL, (char *) str, rettv);
++ switch(rettv->v_type)
++ {
++ case VAR_DICT: ++rettv->vval.v_dict->dv_refcount; break;
++ case VAR_LIST: ++rettv->vval.v_list->lv_refcount; break;
++ case VAR_FUNC: func_ref(rettv->vval.v_string); break;
++ }
++ }
+
+ /* Don't generate a prototype for the next function, it generates an error on
+ * newer Python versions. */
+***************
+*** 1453,1458 ****
+--- 1755,1766 ----
+ }
+ #endif /* Python 1.4 */
+
++ void
++ set_ref_in_python (int copyID)
++ {
++ set_ref_in_py(copyID);
++ }
++
+ static void
+ init_structs(void)
+ {
+*** ../vim-7.3.568/src/if_python3.c 2012-02-04 20:17:21.000000000 +0100
+--- src/if_python3.c 2012-06-29 11:54:10.000000000 +0200
+***************
+*** 77,83 ****
+
+ #define PyInt Py_ssize_t
+ #define PyString_Check(obj) PyUnicode_Check(obj)
+! #define PyString_AsBytes(obj) PyUnicode_AsEncodedString(obj, (char *)ENC_OPT, CODEC_ERROR_HANDLER);
+ #define PyString_FreeBytes(obj) Py_XDECREF(bytes)
+ #define PyString_AsString(obj) PyBytes_AsString(obj)
+ #define PyString_Size(obj) PyBytes_GET_SIZE(bytes)
+--- 77,83 ----
+
+ #define PyInt Py_ssize_t
+ #define PyString_Check(obj) PyUnicode_Check(obj)
+! #define PyString_AsBytes(obj) PyUnicode_AsEncodedString(obj, (char *)ENC_OPT, CODEC_ERROR_HANDLER)
+ #define PyString_FreeBytes(obj) Py_XDECREF(bytes)
+ #define PyString_AsString(obj) PyBytes_AsString(obj)
+ #define PyString_Size(obj) PyBytes_GET_SIZE(bytes)
+***************
+*** 109,114 ****
+--- 109,115 ----
+ # undef PyArg_ParseTuple
+ # define PyArg_ParseTuple py3_PyArg_ParseTuple
+ # define PyMem_Free py3_PyMem_Free
++ # define PyMem_Malloc py3_PyMem_Malloc
+ # define PyDict_SetItemString py3_PyDict_SetItemString
+ # define PyErr_BadArgument py3_PyErr_BadArgument
+ # define PyErr_Clear py3_PyErr_Clear
+***************
+*** 128,141 ****
+--- 129,155 ----
+ # define PyList_New py3_PyList_New
+ # define PyList_SetItem py3_PyList_SetItem
+ # define PyList_Size py3_PyList_Size
++ # define PySequence_Check py3_PySequence_Check
++ # define PySequence_Size py3_PySequence_Size
++ # define PySequence_GetItem py3_PySequence_GetItem
++ # define PyTuple_Size py3_PyTuple_Size
++ # define PyTuple_GetItem py3_PyTuple_GetItem
+ # define PySlice_GetIndicesEx py3_PySlice_GetIndicesEx
+ # define PyImport_ImportModule py3_PyImport_ImportModule
++ # define PyImport_AddModule py3_PyImport_AddModule
+ # define PyObject_Init py3__PyObject_Init
+ # define PyDict_New py3_PyDict_New
+ # define PyDict_GetItemString py3_PyDict_GetItemString
++ # define PyDict_Next py3_PyDict_Next
++ # define PyMapping_Check py3_PyMapping_Check
++ # define PyMapping_Items py3_PyMapping_Items
++ # define PyIter_Next py3_PyIter_Next
++ # define PyObject_GetIter py3_PyObject_GetIter
+ # define PyModule_GetDict py3_PyModule_GetDict
+ #undef PyRun_SimpleString
+ # define PyRun_SimpleString py3_PyRun_SimpleString
++ #undef PyRun_String
++ # define PyRun_String py3_PyRun_String
+ # define PySys_SetObject py3_PySys_SetObject
+ # define PySys_SetArgv py3_PySys_SetArgv
+ # define PyType_Type (*py3_PyType_Type)
+***************
+*** 147,152 ****
+--- 161,167 ----
+ # define Py_Finalize py3_Py_Finalize
+ # define Py_IsInitialized py3_Py_IsInitialized
+ # define _Py_NoneStruct (*py3__Py_NoneStruct)
++ # define _PyObject_NextNotImplemented (*py3__PyObject_NextNotImplemented)
+ # define PyModule_AddObject py3_PyModule_AddObject
+ # define PyImport_AppendInittab py3_PyImport_AppendInittab
+ # define _PyUnicode_AsString py3__PyUnicode_AsString
+***************
+*** 154,161 ****
+--- 169,181 ----
+ # define PyUnicode_AsEncodedString py3_PyUnicode_AsEncodedString
+ # undef PyBytes_AsString
+ # define PyBytes_AsString py3_PyBytes_AsString
++ # undef PyBytes_FromString
++ # define PyBytes_FromString py3_PyBytes_FromString
++ # define PyFloat_FromDouble py3_PyFloat_FromDouble
++ # define PyFloat_AsDouble py3_PyFloat_AsDouble
+ # define PyObject_GenericGetAttr py3_PyObject_GenericGetAttr
+ # define PySlice_Type (*py3_PySlice_Type)
++ # define PyFloat_Type (*py3_PyFloat_Type)
+ # define PyErr_NewException py3_PyErr_NewException
+ # ifdef Py_DEBUG
+ # define _Py_NegativeRefcount py3__Py_NegativeRefcount
+***************
+*** 174,179 ****
+--- 194,202 ----
+ # define PyUnicode_FromString py3_PyUnicode_FromString
+ # undef PyUnicode_Decode
+ # define PyUnicode_Decode py3_PyUnicode_Decode
++ # define PyType_IsSubtype py3_PyType_IsSubtype
++ # define PyCapsule_New py3_PyCapsule_New
++ # define PyCapsule_GetPointer py3_PyCapsule_GetPointer
+
+ # ifdef Py_DEBUG
+ # undef PyObject_NEW
+***************
+*** 194,215 ****
+--- 217,250 ----
+ static int (*py3_PySys_SetObject)(char *, PyObject *);
+ static PyObject* (*py3_PyList_Append)(PyObject *, PyObject *);
+ static Py_ssize_t (*py3_PyList_Size)(PyObject *);
++ static int (*py3_PySequence_Check)(PyObject *);
++ static Py_ssize_t (*py3_PySequence_Size)(PyObject *);
++ static PyObject* (*py3_PySequence_GetItem)(PyObject *, Py_ssize_t);
++ static Py_ssize_t (*py3_PyTuple_Size)(PyObject *);
++ static PyObject* (*py3_PyTuple_GetItem)(PyObject *, Py_ssize_t);
++ static int (*py3_PyMapping_Check)(PyObject *);
++ static PyObject* (*py3_PyMapping_Items)(PyObject *);
+ static int (*py3_PySlice_GetIndicesEx)(PyObject *r, Py_ssize_t length,
+ Py_ssize_t *start, Py_ssize_t *stop, Py_ssize_t *step, Py_ssize_t *slicelength);
+ static PyObject* (*py3_PyErr_NoMemory)(void);
+ static void (*py3_Py_Finalize)(void);
+ static void (*py3_PyErr_SetString)(PyObject *, const char *);
+ static int (*py3_PyRun_SimpleString)(char *);
++ static PyObject* (*py3_PyRun_String)(char *, int, PyObject *, PyObject *);
+ static PyObject* (*py3_PyList_GetItem)(PyObject *, Py_ssize_t);
+ static PyObject* (*py3_PyImport_ImportModule)(const char *);
++ static PyObject* (*py3_PyImport_AddModule)(const char *);
+ static int (*py3_PyErr_BadArgument)(void);
+ static PyTypeObject* py3_PyType_Type;
+ static PyObject* (*py3_PyErr_Occurred)(void);
+ static PyObject* (*py3_PyModule_GetDict)(PyObject *);
+ static int (*py3_PyList_SetItem)(PyObject *, Py_ssize_t, PyObject *);
+ static PyObject* (*py3_PyDict_GetItemString)(PyObject *, const char *);
++ static int (*py3_PyDict_Next)(PyObject *, Py_ssize_t *, PyObject **, PyObject **);
+ static PyObject* (*py3_PyLong_FromLong)(long);
+ static PyObject* (*py3_PyDict_New)(void);
++ static PyObject* (*py3_PyIter_Next)(PyObject *);
++ static PyObject* (*py3_PyObject_GetIter)(PyObject *);
+ static PyObject* (*py3_Py_BuildValue)(char *, ...);
+ static int (*py3_PyType_Ready)(PyTypeObject *type);
+ static int (*py3_PyDict_SetItemString)(PyObject *dp, char *key, PyObject *item);
+***************
+*** 224,244 ****
+--- 259,287 ----
+ static int (*py3_PyArg_Parse)(PyObject *, char *, ...);
+ static int (*py3_PyArg_ParseTuple)(PyObject *, char *, ...);
+ static int (*py3_PyMem_Free)(void *);
++ static void* (*py3_PyMem_Malloc)(size_t);
+ static int (*py3_Py_IsInitialized)(void);
+ static void (*py3_PyErr_Clear)(void);
+ static PyObject*(*py3__PyObject_Init)(PyObject *, PyTypeObject *);
++ static iternextfunc py3__PyObject_NextNotImplemented;
+ static PyObject* py3__Py_NoneStruct;
+ static int (*py3_PyModule_AddObject)(PyObject *m, const char *name, PyObject *o);
+ static int (*py3_PyImport_AppendInittab)(const char *name, PyObject* (*initfunc)(void));
+ static char* (*py3__PyUnicode_AsString)(PyObject *unicode);
+ static PyObject* (*py3_PyUnicode_AsEncodedString)(PyObject *unicode, const char* encoding, const char* errors);
+ static char* (*py3_PyBytes_AsString)(PyObject *bytes);
++ static PyObject* (*py3_PyBytes_FromString)(char *str);
++ static PyObject* (*py3_PyFloat_FromDouble)(double num);
++ static double (*py3_PyFloat_AsDouble)(PyObject *);
+ static PyObject* (*py3_PyObject_GenericGetAttr)(PyObject *obj, PyObject *name);
+ static PyObject* (*py3_PyModule_Create2)(struct PyModuleDef* module, int module_api_version);
+ static PyObject* (*py3_PyType_GenericAlloc)(PyTypeObject *type, Py_ssize_t nitems);
+ static PyObject* (*py3_PyType_GenericNew)(PyTypeObject *type, PyObject *args, PyObject *kwds);
+ static PyTypeObject* py3_PySlice_Type;
++ static PyTypeObject* py3_PyFloat_Type;
+ static PyObject* (*py3_PyErr_NewException)(char *name, PyObject *base, PyObject *dict);
++ static PyObject* (*py3_PyCapsule_New)(void *, char *, PyCapsule_Destructor);
++ static void* (*py3_PyCapsule_GetPointer)(PyObject *, char *);
+ # ifdef Py_DEBUG
+ static void (*py3__Py_NegativeRefcount)(const char *fname, int lineno, PyObject *op);
+ static Py_ssize_t* py3__Py_RefTotal;
+***************
+*** 249,254 ****
+--- 292,298 ----
+ static void (*py3_PyObject_Free)(void*);
+ static void* (*py3_PyObject_Malloc)(size_t);
+ # endif
++ static int (*py3_PyType_IsSubtype)(PyTypeObject *, PyTypeObject *);
+
+ static HINSTANCE hinstPy3 = 0; /* Instance of python.dll */
+
+***************
+*** 280,304 ****
+--- 324,361 ----
+ {"Py_Initialize", (PYTHON_PROC*)&py3_Py_Initialize},
+ {"PyArg_ParseTuple", (PYTHON_PROC*)&py3_PyArg_ParseTuple},
+ {"PyMem_Free", (PYTHON_PROC*)&py3_PyMem_Free},
++ {"PyMem_Malloc", (PYTHON_PROC*)&py3_PyMem_Malloc},
+ {"PyList_New", (PYTHON_PROC*)&py3_PyList_New},
+ {"PyGILState_Ensure", (PYTHON_PROC*)&py3_PyGILState_Ensure},
+ {"PyGILState_Release", (PYTHON_PROC*)&py3_PyGILState_Release},
+ {"PySys_SetObject", (PYTHON_PROC*)&py3_PySys_SetObject},
+ {"PyList_Append", (PYTHON_PROC*)&py3_PyList_Append},
+ {"PyList_Size", (PYTHON_PROC*)&py3_PyList_Size},
++ {"PySequence_Check", (PYTHON_PROC*)&py3_PySequence_Check},
++ {"PySequence_Size", (PYTHON_PROC*)&py3_PySequence_Size},
++ {"PySequence_GetItem", (PYTHON_PROC*)&py3_PySequence_GetItem},
++ {"PyTuple_Size", (PYTHON_PROC*)&py3_PyTuple_Size},
++ {"PyTuple_GetItem", (PYTHON_PROC*)&py3_PyTuple_GetItem},
+ {"PySlice_GetIndicesEx", (PYTHON_PROC*)&py3_PySlice_GetIndicesEx},
+ {"PyErr_NoMemory", (PYTHON_PROC*)&py3_PyErr_NoMemory},
+ {"Py_Finalize", (PYTHON_PROC*)&py3_Py_Finalize},
+ {"PyErr_SetString", (PYTHON_PROC*)&py3_PyErr_SetString},
+ {"PyRun_SimpleString", (PYTHON_PROC*)&py3_PyRun_SimpleString},
++ {"PyRun_String", (PYTHON_PROC*)&py3_PyRun_String},
+ {"PyList_GetItem", (PYTHON_PROC*)&py3_PyList_GetItem},
+ {"PyImport_ImportModule", (PYTHON_PROC*)&py3_PyImport_ImportModule},
++ {"PyImport_AddModule", (PYTHON_PROC*)&py3_PyImport_AddModule},
+ {"PyErr_BadArgument", (PYTHON_PROC*)&py3_PyErr_BadArgument},
+ {"PyType_Type", (PYTHON_PROC*)&py3_PyType_Type},
+ {"PyErr_Occurred", (PYTHON_PROC*)&py3_PyErr_Occurred},
+ {"PyModule_GetDict", (PYTHON_PROC*)&py3_PyModule_GetDict},
+ {"PyList_SetItem", (PYTHON_PROC*)&py3_PyList_SetItem},
+ {"PyDict_GetItemString", (PYTHON_PROC*)&py3_PyDict_GetItemString},
++ {"PyDict_Next", (PYTHON_PROC*)&py3_PyDict_Next},
++ {"PyMapping_Check", (PYTHON_PROC*)&py3_PyMapping_Check},
++ {"PyMapping_Items", (PYTHON_PROC*)&py3_PyMapping_Items},
++ {"PyIter_Next", (PYTHON_PROC*)&py3_PyIter_Next},
++ {"PyObject_GetIter", (PYTHON_PROC*)&py3_PyObject_GetIter},
+ {"PyLong_FromLong", (PYTHON_PROC*)&py3_PyLong_FromLong},
+ {"PyDict_New", (PYTHON_PROC*)&py3_PyDict_New},
+ {"Py_BuildValue", (PYTHON_PROC*)&py3_Py_BuildValue},
+***************
+*** 311,316 ****
+--- 368,374 ----
+ {"PyEval_SaveThread", (PYTHON_PROC*)&py3_PyEval_SaveThread},
+ {"PyArg_Parse", (PYTHON_PROC*)&py3_PyArg_Parse},
+ {"Py_IsInitialized", (PYTHON_PROC*)&py3_Py_IsInitialized},
++ {"_PyObject_NextNotImplemented", (PYTHON_PROC*)&py3__PyObject_NextNotImplemented},
+ {"_Py_NoneStruct", (PYTHON_PROC*)&py3__Py_NoneStruct},
+ {"PyErr_Clear", (PYTHON_PROC*)&py3_PyErr_Clear},
+ {"PyObject_Init", (PYTHON_PROC*)&py3__PyObject_Init},
+***************
+*** 318,328 ****
+--- 376,390 ----
+ {"PyImport_AppendInittab", (PYTHON_PROC*)&py3_PyImport_AppendInittab},
+ {"_PyUnicode_AsString", (PYTHON_PROC*)&py3__PyUnicode_AsString},
+ {"PyBytes_AsString", (PYTHON_PROC*)&py3_PyBytes_AsString},
++ {"PyBytes_FromString", (PYTHON_PROC*)&py3_PyBytes_FromString},
++ {"PyFloat_FromDouble", (PYTHON_PROC*)&py3_PyFloat_FromDouble},
++ {"PyFloat_AsDouble", (PYTHON_PROC*)&py3_PyFloat_AsDouble},
+ {"PyObject_GenericGetAttr", (PYTHON_PROC*)&py3_PyObject_GenericGetAttr},
+ {"PyModule_Create2", (PYTHON_PROC*)&py3_PyModule_Create2},
+ {"PyType_GenericAlloc", (PYTHON_PROC*)&py3_PyType_GenericAlloc},
+ {"PyType_GenericNew", (PYTHON_PROC*)&py3_PyType_GenericNew},
+ {"PySlice_Type", (PYTHON_PROC*)&py3_PySlice_Type},
++ {"PyFloat_Type", (PYTHON_PROC*)&py3_PyFloat_Type},
+ {"PyErr_NewException", (PYTHON_PROC*)&py3_PyErr_NewException},
+ # ifdef Py_DEBUG
+ {"_Py_NegativeRefcount", (PYTHON_PROC*)&py3__Py_NegativeRefcount},
+***************
+*** 334,339 ****
+--- 396,404 ----
+ {"PyObject_Malloc", (PYTHON_PROC*)&py3_PyObject_Malloc},
+ {"PyObject_Free", (PYTHON_PROC*)&py3_PyObject_Free},
+ # endif
++ {"PyType_IsSubtype", (PYTHON_PROC*)&py3_PyType_IsSubtype},
++ {"PyCapsule_New", (PYTHON_PROC*)&py3_PyCapsule_New},
++ {"PyCapsule_GetPointer", (PYTHON_PROC*)&py3_PyCapsule_GetPointer},
+ {"", NULL},
+ };
+
+***************
+*** 472,482 ****
+--- 537,577 ----
+
+ static PyTypeObject RangeType;
+
++ static int py3initialised = 0;
++
++ #define PYINITIALISED py3initialised
++
++ /* Add conversion from PyInt? */
++ #define DICTKEY_GET(err) \
++ if (PyBytes_Check(keyObject)) \
++ key = (char_u *) PyBytes_AsString(keyObject); \
++ else if (PyUnicode_Check(keyObject)) \
++ { \
++ bytes = PyString_AsBytes(keyObject); \
++ if (bytes == NULL) \
++ return err; \
++ key = (char_u *) PyBytes_AsString(bytes); \
++ if (key == NULL) \
++ return err; \
++ } \
++ else \
++ { \
++ PyErr_SetString(PyExc_TypeError, _("only string keys are allowed")); \
++ return err; \
++ }
++ #define DICTKEY_UNREF \
++ if (bytes != NULL) \
++ Py_XDECREF(bytes);
++
++ #define DICTKEY_DECL PyObject *bytes = NULL;
++
+ /*
+ * Include the code shared with if_python.c
+ */
+ #include "if_py_both.h"
+
++ #define PY3OBJ_DELETED(obj) (obj->ob_base.ob_refcnt<=0)
++
+ static void
+ call_PyObject_Free(void *p)
+ {
+***************
+*** 506,511 ****
+--- 601,608 ----
+ static Py_ssize_t RangeStart;
+ static Py_ssize_t RangeEnd;
+
++ static PyObject *globals;
++
+ static int PythonIO_Init(void);
+ static void PythonIO_Fini(void);
+ PyMODINIT_FUNC Py3Init_vim(void);
+***************
+*** 514,521 ****
+ * 1. Python interpreter main program.
+ */
+
+- static int py3initialised = 0;
+-
+ static PyGILState_STATE pygilstate = PyGILState_UNLOCKED;
+
+ void
+--- 611,616 ----
+***************
+*** 593,598 ****
+--- 688,695 ----
+
+ PyImport_AppendInittab("vim", Py3Init_vim);
+
++ globals = PyModule_GetDict(PyImport_AddModule("__main__"));
++
+ /* Remove the element from sys.path that was added because of our
+ * argv[0] value in Py3Init_vim(). Previously we used an empty
+ * string, but dependinding on the OS we then get an empty entry or
+***************
+*** 629,635 ****
+ * External interface
+ */
+ static void
+! DoPy3Command(exarg_T *eap, const char *cmd)
+ {
+ #if defined(MACOS) && !defined(MACOS_X_UNIX)
+ GrafPtr oldPort;
+--- 726,732 ----
+ * External interface
+ */
+ static void
+! DoPy3Command(exarg_T *eap, const char *cmd, typval_T *rettv)
+ {
+ #if defined(MACOS) && !defined(MACOS_X_UNIX)
+ GrafPtr oldPort;
+***************
+*** 649,656 ****
+ if (Python3_Init())
+ goto theend;
+
+! RangeStart = eap->line1;
+! RangeEnd = eap->line2;
+ Python_Release_Vim(); /* leave vim */
+
+ #if defined(HAVE_LOCALE_H) || defined(X_LOCALE)
+--- 746,761 ----
+ if (Python3_Init())
+ goto theend;
+
+! if (rettv == NULL)
+! {
+! RangeStart = eap->line1;
+! RangeEnd = eap->line2;
+! }
+! else
+! {
+! RangeStart = (PyInt) curwin->w_cursor.lnum;
+! RangeEnd = RangeStart;
+! }
+ Python_Release_Vim(); /* leave vim */
+
+ #if defined(HAVE_LOCALE_H) || defined(X_LOCALE)
+***************
+*** 674,680 ****
+ (char *)ENC_OPT, CODEC_ERROR_HANDLER);
+ cmdbytes = PyUnicode_AsEncodedString(cmdstr, "utf-8", CODEC_ERROR_HANDLER);
+ Py_XDECREF(cmdstr);
+! PyRun_SimpleString(PyBytes_AsString(cmdbytes));
+ Py_XDECREF(cmdbytes);
+
+ PyGILState_Release(pygilstate);
+--- 779,802 ----
+ (char *)ENC_OPT, CODEC_ERROR_HANDLER);
+ cmdbytes = PyUnicode_AsEncodedString(cmdstr, "utf-8", CODEC_ERROR_HANDLER);
+ Py_XDECREF(cmdstr);
+! if (rettv == NULL)
+! PyRun_SimpleString(PyBytes_AsString(cmdbytes));
+! else
+! {
+! PyObject *r;
+!
+! r = PyRun_String(PyBytes_AsString(cmdbytes), Py_eval_input,
+! globals, globals);
+! if (r == NULL)
+! EMSG(_("E860: Eval did not return a valid python 3 object"));
+! else
+! {
+! if (ConvertFromPyObject(r, rettv) == -1)
+! EMSG(_("E861: Failed to convert returned python 3 object to vim value"));
+! Py_DECREF(r);
+! }
+! PyErr_Clear();
+! }
+ Py_XDECREF(cmdbytes);
+
+ PyGILState_Release(pygilstate);
+***************
+*** 709,717 ****
+ if (!eap->skip)
+ {
+ if (script == NULL)
+! DoPy3Command(eap, (char *)eap->arg);
+ else
+! DoPy3Command(eap, (char *)script);
+ }
+ vim_free(script);
+ }
+--- 831,839 ----
+ if (!eap->skip)
+ {
+ if (script == NULL)
+! DoPy3Command(eap, (char *)eap->arg, NULL);
+ else
+! DoPy3Command(eap, (char *)script, NULL);
+ }
+ vim_free(script);
+ }
+***************
+*** 772,778 ****
+
+
+ /* Execute the file */
+! DoPy3Command(eap, buffer);
+ }
+
+ /******************************************************
+--- 894,900 ----
+
+
+ /* Execute the file */
+! DoPy3Command(eap, buffer, NULL);
+ }
+
+ /******************************************************
+***************
+*** 802,815 ****
+ if (PyUnicode_Check(nameobj))
+ name = _PyUnicode_AsString(nameobj);
+
+! if (val == NULL) {
+ PyErr_SetString(PyExc_AttributeError, _("can't delete OutputObject attributes"));
+ return -1;
+ }
+
+ if (strcmp(name, "softspace") == 0)
+ {
+! if (!PyLong_Check(val)) {
+ PyErr_SetString(PyExc_TypeError, _("softspace must be an integer"));
+ return -1;
+ }
+--- 924,939 ----
+ if (PyUnicode_Check(nameobj))
+ name = _PyUnicode_AsString(nameobj);
+
+! if (val == NULL)
+! {
+ PyErr_SetString(PyExc_AttributeError, _("can't delete OutputObject attributes"));
+ return -1;
+ }
+
+ if (strcmp(name, "softspace") == 0)
+ {
+! if (!PyLong_Check(val))
+! {
+ PyErr_SetString(PyExc_TypeError, _("softspace must be an integer"));
+ return -1;
+ }
+***************
+*** 1030,1049 ****
+ static PyObject *
+ BufferSubscript(PyObject *self, PyObject* idx)
+ {
+! if (PyLong_Check(idx)) {
+ long _idx = PyLong_AsLong(idx);
+ return BufferItem(self,_idx);
+! } else if (PySlice_Check(idx)) {
+ Py_ssize_t start, stop, step, slicelen;
+
+ if (PySlice_GetIndicesEx((PyObject *)idx,
+ (Py_ssize_t)((BufferObject *)(self))->buf->b_ml.ml_line_count+1,
+ &start, &stop,
+! &step, &slicelen) < 0) {
+ return NULL;
+ }
+ return BufferSlice(self, start, stop);
+! } else {
+ PyErr_SetString(PyExc_IndexError, "Index must be int or slice");
+ return NULL;
+ }
+--- 1154,1178 ----
+ static PyObject *
+ BufferSubscript(PyObject *self, PyObject* idx)
+ {
+! if (PyLong_Check(idx))
+! {
+ long _idx = PyLong_AsLong(idx);
+ return BufferItem(self,_idx);
+! } else if (PySlice_Check(idx))
+! {
+ Py_ssize_t start, stop, step, slicelen;
+
+ if (PySlice_GetIndicesEx((PyObject *)idx,
+ (Py_ssize_t)((BufferObject *)(self))->buf->b_ml.ml_line_count+1,
+ &start, &stop,
+! &step, &slicelen) < 0)
+! {
+ return NULL;
+ }
+ return BufferSlice(self, start, stop);
+! }
+! else
+! {
+ PyErr_SetString(PyExc_IndexError, "Index must be int or slice");
+ return NULL;
+ }
+***************
+*** 1052,1075 ****
+ static Py_ssize_t
+ BufferAsSubscript(PyObject *self, PyObject* idx, PyObject* val)
+ {
+! if (PyLong_Check(idx)) {
+ long n = PyLong_AsLong(idx);
+ return RBAsItem((BufferObject *)(self), n, val, 1,
+ (Py_ssize_t)((BufferObject *)(self))->buf->b_ml.ml_line_count,
+ NULL);
+! } else if (PySlice_Check(idx)) {
+ Py_ssize_t start, stop, step, slicelen;
+
+ if (PySlice_GetIndicesEx((PyObject *)idx,
+ (Py_ssize_t)((BufferObject *)(self))->buf->b_ml.ml_line_count+1,
+ &start, &stop,
+! &step, &slicelen) < 0) {
+ return -1;
+ }
+ return RBAsSlice((BufferObject *)(self), start, stop, val, 1,
+ (PyInt)((BufferObject *)(self))->buf->b_ml.ml_line_count,
+ NULL);
+! } else {
+ PyErr_SetString(PyExc_IndexError, "Index must be int or slice");
+ return -1;
+ }
+--- 1181,1209 ----
+ static Py_ssize_t
+ BufferAsSubscript(PyObject *self, PyObject* idx, PyObject* val)
+ {
+! if (PyLong_Check(idx))
+! {
+ long n = PyLong_AsLong(idx);
+ return RBAsItem((BufferObject *)(self), n, val, 1,
+ (Py_ssize_t)((BufferObject *)(self))->buf->b_ml.ml_line_count,
+ NULL);
+! } else if (PySlice_Check(idx))
+! {
+ Py_ssize_t start, stop, step, slicelen;
+
+ if (PySlice_GetIndicesEx((PyObject *)idx,
+ (Py_ssize_t)((BufferObject *)(self))->buf->b_ml.ml_line_count+1,
+ &start, &stop,
+! &step, &slicelen) < 0)
+! {
+ return -1;
+ }
+ return RBAsSlice((BufferObject *)(self), start, stop, val, 1,
+ (PyInt)((BufferObject *)(self))->buf->b_ml.ml_line_count,
+ NULL);
+! }
+! else
+! {
+ PyErr_SetString(PyExc_IndexError, "Index must be int or slice");
+ return -1;
+ }
+***************
+*** 1142,1161 ****
+ static PyObject *
+ RangeSubscript(PyObject *self, PyObject* idx)
+ {
+! if (PyLong_Check(idx)) {
+ long _idx = PyLong_AsLong(idx);
+ return RangeItem(self,_idx);
+! } else if (PySlice_Check(idx)) {
+ Py_ssize_t start, stop, step, slicelen;
+
+ if (PySlice_GetIndicesEx((PyObject *)idx,
+ ((RangeObject *)(self))->end-((RangeObject *)(self))->start+1,
+ &start, &stop,
+! &step, &slicelen) < 0) {
+ return NULL;
+ }
+ return RangeSlice(self, start, stop);
+! } else {
+ PyErr_SetString(PyExc_IndexError, "Index must be int or slice");
+ return NULL;
+ }
+--- 1276,1300 ----
+ static PyObject *
+ RangeSubscript(PyObject *self, PyObject* idx)
+ {
+! if (PyLong_Check(idx))
+! {
+ long _idx = PyLong_AsLong(idx);
+ return RangeItem(self,_idx);
+! } else if (PySlice_Check(idx))
+! {
+ Py_ssize_t start, stop, step, slicelen;
+
+ if (PySlice_GetIndicesEx((PyObject *)idx,
+ ((RangeObject *)(self))->end-((RangeObject *)(self))->start+1,
+ &start, &stop,
+! &step, &slicelen) < 0)
+! {
+ return NULL;
+ }
+ return RangeSlice(self, start, stop);
+! }
+! else
+! {
+ PyErr_SetString(PyExc_IndexError, "Index must be int or slice");
+ return NULL;
+ }
+***************
+*** 1164,1183 ****
+ static Py_ssize_t
+ RangeAsSubscript(PyObject *self, PyObject *idx, PyObject *val)
+ {
+! if (PyLong_Check(idx)) {
+ long n = PyLong_AsLong(idx);
+ return RangeAsItem(self, n, val);
+! } else if (PySlice_Check(idx)) {
+ Py_ssize_t start, stop, step, slicelen;
+
+ if (PySlice_GetIndicesEx((PyObject *)idx,
+ ((RangeObject *)(self))->end-((RangeObject *)(self))->start+1,
+ &start, &stop,
+! &step, &slicelen) < 0) {
+ return -1;
+ }
+ return RangeAsSlice(self, start, stop, val);
+! } else {
+ PyErr_SetString(PyExc_IndexError, "Index must be int or slice");
+ return -1;
+ }
+--- 1303,1327 ----
+ static Py_ssize_t
+ RangeAsSubscript(PyObject *self, PyObject *idx, PyObject *val)
+ {
+! if (PyLong_Check(idx))
+! {
+ long n = PyLong_AsLong(idx);
+ return RangeAsItem(self, n, val);
+! } else if (PySlice_Check(idx))
+! {
+ Py_ssize_t start, stop, step, slicelen;
+
+ if (PySlice_GetIndicesEx((PyObject *)idx,
+ ((RangeObject *)(self))->end-((RangeObject *)(self))->start+1,
+ &start, &stop,
+! &step, &slicelen) < 0)
+! {
+ return -1;
+ }
+ return RangeAsSlice(self, start, stop, val);
+! }
+! else
+! {
+ PyErr_SetString(PyExc_IndexError, "Index must be int or slice");
+ return -1;
+ }
+***************
+*** 1390,1395 ****
+--- 1534,1680 ----
+ }
+ }
+
++ /* Dictionary object - Definitions
++ */
++
++ static PyInt DictionaryLength(PyObject *);
++
++ static PyMappingMethods DictionaryAsMapping = {
++ /* mp_length */ (lenfunc) DictionaryLength,
++ /* mp_subscript */ (binaryfunc) DictionaryItem,
++ /* mp_ass_subscript */ (objobjargproc) DictionaryAssItem,
++ };
++
++ static PyTypeObject DictionaryType;
++
++ static void
++ DictionaryDestructor(PyObject *self)
++ {
++ DictionaryObject *this = (DictionaryObject *)(self);
++
++ pyll_remove(&this->ref, &lastdict);
++ dict_unref(this->dict);
++
++ Py_TYPE(self)->tp_free((PyObject*)self);
++ }
++
++ /* List object - Definitions
++ */
++
++ static PyInt ListLength(PyObject *);
++ static PyObject *ListItem(PyObject *, Py_ssize_t);
++
++ static PySequenceMethods ListAsSeq = {
++ (lenfunc) ListLength, /* sq_length, len(x) */
++ (binaryfunc) 0, /* RangeConcat, sq_concat, x+y */
++ (ssizeargfunc) 0, /* RangeRepeat, sq_repeat, x*n */
++ (ssizeargfunc) ListItem, /* sq_item, x[i] */
++ (void *) 0, /* was_sq_slice, x[i:j] */
++ (ssizeobjargproc) ListAssItem, /* sq_as_item, x[i]=v */
++ (void *) 0, /* was_sq_ass_slice, x[i:j]=v */
++ 0, /* sq_contains */
++ (binaryfunc) ListConcatInPlace,/* sq_inplace_concat */
++ 0, /* sq_inplace_repeat */
++ };
++
++ static PyObject *ListSubscript(PyObject *, PyObject *);
++ static Py_ssize_t ListAsSubscript(PyObject *, PyObject *, PyObject *);
++
++ static PyMappingMethods ListAsMapping = {
++ /* mp_length */ (lenfunc) ListLength,
++ /* mp_subscript */ (binaryfunc) ListSubscript,
++ /* mp_ass_subscript */ (objobjargproc) ListAsSubscript,
++ };
++
++ static PyTypeObject ListType;
++
++ static PyObject *
++ ListSubscript(PyObject *self, PyObject* idxObject)
++ {
++ if (PyLong_Check(idxObject))
++ {
++ long idx = PyLong_AsLong(idxObject);
++ return ListItem(self, idx);
++ }
++ else if (PySlice_Check(idxObject))
++ {
++ Py_ssize_t start, stop, step, slicelen;
++
++ if (PySlice_GetIndicesEx(idxObject, ListLength(self), &start, &stop,
++ &step, &slicelen) < 0)
++ return NULL;
++ return ListSlice(self, start, stop);
++ }
++ else
++ {
++ PyErr_SetString(PyExc_IndexError, "Index must be int or slice");
++ return NULL;
++ }
++ }
++
++ static Py_ssize_t
++ ListAsSubscript(PyObject *self, PyObject *idxObject, PyObject *obj)
++ {
++ if (PyLong_Check(idxObject))
++ {
++ long idx = PyLong_AsLong(idxObject);
++ return ListAssItem(self, idx, obj);
++ }
++ else if (PySlice_Check(idxObject))
++ {
++ Py_ssize_t start, stop, step, slicelen;
++
++ if (PySlice_GetIndicesEx(idxObject, ListLength(self), &start, &stop,
++ &step, &slicelen) < 0)
++ return -1;
++ return ListAssSlice(self, start, stop, obj);
++ }
++ else
++ {
++ PyErr_SetString(PyExc_IndexError, "Index must be int or slice");
++ return -1;
++ }
++ }
++
++ static void
++ ListDestructor(PyObject *self)
++ {
++ ListObject *this = (ListObject *)(self);
++
++ pyll_remove(&this->ref, &lastlist);
++ list_unref(this->list);
++
++ Py_TYPE(self)->tp_free((PyObject*)self);
++ }
++
++ /* Function object - Definitions
++ */
++
++ static void
++ FunctionDestructor(PyObject *self)
++ {
++ FunctionObject *this = (FunctionObject *) (self);
++
++ func_unref(this->name);
++ PyMem_Del(this->name);
++
++ Py_TYPE(self)->tp_free((PyObject*)self);
++ }
++
++ static PyObject *
++ FunctionGetattro(PyObject *self, PyObject *nameobj)
++ {
++ FunctionObject *this = (FunctionObject *)(self);
++ char *name = "";
++ if (PyUnicode_Check(nameobj))
++ name = _PyUnicode_AsString(nameobj);
++
++ if (strcmp(name, "name") == 0)
++ return PyUnicode_FromString((char *)(this->name));
++
++ return PyObject_GenericGetAttr(self, nameobj);
++ }
++
+ /* External interface
+ */
+
+***************
+*** 1449,1454 ****
+--- 1734,1742 ----
+ PyType_Ready(&BufListType);
+ PyType_Ready(&WinListType);
+ PyType_Ready(&CurrentType);
++ PyType_Ready(&DictionaryType);
++ PyType_Ready(&ListType);
++ PyType_Ready(&FunctionType);
+
+ /* Set sys.argv[] to avoid a crash in warn(). */
+ PySys_SetArgv(1, argv);
+***************
+*** 1517,1522 ****
+--- 1805,1828 ----
+ return result;
+ }
+
++ void
++ do_py3eval (char_u *str, typval_T *rettv)
++ {
++ DoPy3Command(NULL, (char *) str, rettv);
++ switch(rettv->v_type)
++ {
++ case VAR_DICT: ++rettv->vval.v_dict->dv_refcount; break;
++ case VAR_LIST: ++rettv->vval.v_list->lv_refcount; break;
++ case VAR_FUNC: func_ref(rettv->vval.v_string); break;
++ }
++ }
++
++ void
++ set_ref_in_python3 (int copyID)
++ {
++ set_ref_in_py(copyID);
++ }
++
+ static void
+ init_structs(void)
+ {
+***************
+*** 1598,1603 ****
+--- 1904,1938 ----
+ CurrentType.tp_flags = Py_TPFLAGS_DEFAULT;
+ CurrentType.tp_doc = "vim current object";
+
++ vim_memset(&DictionaryType, 0, sizeof(DictionaryType));
++ DictionaryType.tp_name = "vim.dictionary";
++ DictionaryType.tp_basicsize = sizeof(DictionaryObject);
++ DictionaryType.tp_dealloc = DictionaryDestructor;
++ DictionaryType.tp_as_mapping = &DictionaryAsMapping;
++ DictionaryType.tp_flags = Py_TPFLAGS_DEFAULT;
++ DictionaryType.tp_doc = "dictionary pushing modifications to vim structure";
++ DictionaryType.tp_methods = DictionaryMethods;
++
++ vim_memset(&ListType, 0, sizeof(ListType));
++ ListType.tp_name = "vim.list";
++ ListType.tp_dealloc = ListDestructor;
++ ListType.tp_basicsize = sizeof(ListObject);
++ ListType.tp_as_sequence = &ListAsSeq;
++ ListType.tp_as_mapping = &ListAsMapping;
++ ListType.tp_flags = Py_TPFLAGS_DEFAULT;
++ ListType.tp_doc = "list pushing modifications to vim structure";
++ ListType.tp_methods = ListMethods;
++
++ vim_memset(&FunctionType, 0, sizeof(FunctionType));
++ FunctionType.tp_name = "vim.list";
++ FunctionType.tp_basicsize = sizeof(FunctionObject);
++ FunctionType.tp_getattro = FunctionGetattro;
++ FunctionType.tp_dealloc = FunctionDestructor;
++ FunctionType.tp_call = FunctionCall;
++ FunctionType.tp_flags = Py_TPFLAGS_DEFAULT;
++ FunctionType.tp_doc = "object that calls vim function";
++ FunctionType.tp_methods = FunctionMethods;
++
+ vim_memset(&vimmodule, 0, sizeof(vimmodule));
+ vimmodule.m_name = "vim";
+ vimmodule.m_doc = vim_module_doc;
+*** ../vim-7.3.568/src/proto/eval.pro 2011-09-14 16:52:02.000000000 +0200
+--- src/proto/eval.pro 2012-06-20 18:20:28.000000000 +0200
+***************
+*** 46,57 ****
+--- 46,66 ----
+ list_T *list_alloc __ARGS((void));
+ void list_unref __ARGS((list_T *l));
+ void list_free __ARGS((list_T *l, int recurse));
++ listitem_T *listitem_alloc __ARGS((void));
++ void listitem_remove __ARGS((list_T *l, listitem_T *item));
+ dictitem_T *dict_lookup __ARGS((hashitem_T *hi));
++ listitem_T *list_find __ARGS((list_T *l, long n));
+ char_u *list_find_str __ARGS((list_T *l, long idx));
++ void list_append __ARGS((list_T *l, listitem_T *item));
+ int list_append_tv __ARGS((list_T *l, typval_T *tv));
+ int list_append_dict __ARGS((list_T *list, dict_T *dict));
+ int list_append_string __ARGS((list_T *l, char_u *str, int len));
++ int list_insert_tv __ARGS((list_T *l, typval_T *tv, listitem_T *item));
++ void list_remove __ARGS((list_T *l, listitem_T *item, listitem_T *item2));
+ int garbage_collect __ARGS((void));
++ void set_ref_in_ht __ARGS((hashtab_T *ht, int copyID));
++ void set_ref_in_list __ARGS((list_T *l, int copyID));
++ void set_ref_in_item __ARGS((typval_T *tv, int copyID));
+ dict_T *dict_alloc __ARGS((void));
+ void dict_unref __ARGS((dict_T *d));
+ dictitem_T *dictitem_alloc __ARGS((char_u *key));
+***************
+*** 64,69 ****
+--- 73,79 ----
+ long get_dict_number __ARGS((dict_T *d, char_u *key));
+ char_u *get_function_name __ARGS((expand_T *xp, int idx));
+ char_u *get_expr_name __ARGS((expand_T *xp, int idx));
++ int func_call __ARGS((char_u *name, typval_T *args, dict_T *selfdict, typval_T *rettv));
+ long do_searchpair __ARGS((char_u *spat, char_u *mpat, char_u *epat, int dir, char_u *skip, int flags, pos_T *match_pos, linenr_T lnum_stop, long time_limit));
+ void set_vim_var_nr __ARGS((int idx, long val));
+ long get_vim_var_nr __ARGS((int idx));
+***************
+*** 94,99 ****
+--- 104,111 ----
+ void func_dump_profile __ARGS((FILE *fd));
+ char_u *get_user_func_name __ARGS((expand_T *xp, int idx));
+ void ex_delfunction __ARGS((exarg_T *eap));
++ void func_unref __ARGS((char_u *name));
++ void func_ref __ARGS((char_u *name));
+ void ex_return __ARGS((exarg_T *eap));
+ int do_return __ARGS((exarg_T *eap, int reanimate, int is_cmd, void *rettv));
+ void discard_pending_return __ARGS((void *rettv));
+*** ../vim-7.3.568/src/proto/if_python.pro 2010-08-15 21:57:28.000000000 +0200
+--- src/proto/if_python.pro 2012-06-20 18:23:06.000000000 +0200
+***************
+*** 6,9 ****
+--- 6,11 ----
+ void ex_pyfile __ARGS((exarg_T *eap));
+ void python_buffer_free __ARGS((buf_T *buf));
+ void python_window_free __ARGS((win_T *win));
++ void do_pyeval __ARGS((char_u *str, typval_T *rettv));
++ void set_ref_in_python __ARGS((int copyID));
+ /* vim: set ft=c : */
+*** ../vim-7.3.568/src/proto/if_python3.pro 2010-08-15 21:57:28.000000000 +0200
+--- src/proto/if_python3.pro 2012-06-20 18:34:26.000000000 +0200
+***************
+*** 6,9 ****
+--- 6,11 ----
+ void ex_py3file __ARGS((exarg_T *eap));
+ void python3_buffer_free __ARGS((buf_T *buf));
+ void python3_window_free __ARGS((win_T *win));
++ void do_py3eval __ARGS((char_u *str, typval_T *rettv));
++ void set_ref_in_python3 __ARGS((int copyID));
+ /* vim: set ft=c : */
+*** ../vim-7.3.568/src/testdir/Make_amiga.mak 2012-04-05 16:56:38.000000000 +0200
+--- src/testdir/Make_amiga.mak 2012-06-20 18:43:05.000000000 +0200
+***************
+*** 14,19 ****
+--- 14,20 ----
+ # test27 can't edit file with "*"
+ # test52 only for Win32
+ # test85 no Lua interface
++ # test86, 87 no Python interface
+
+ SCRIPTS = test1.out test3.out test4.out test5.out test6.out \
+ test7.out test8.out test9.out \
+*** ../vim-7.3.568/src/testdir/Make_dos.mak 2012-04-13 19:11:16.000000000 +0200
+--- src/testdir/Make_dos.mak 2012-06-20 18:43:45.000000000 +0200
+***************
+*** 30,36 ****
+ test68.out test69.out test71.out test72.out test73.out \
+ test74.out test75.out test76.out test77.out test78.out \
+ test79.out test80.out test81.out test82.out test83.out \
+! test84.out test85.out
+
+ SCRIPTS32 = test50.out test70.out
+
+--- 30,36 ----
+ test68.out test69.out test71.out test72.out test73.out \
+ test74.out test75.out test76.out test77.out test78.out \
+ test79.out test80.out test81.out test82.out test83.out \
+! test84.out test85.out test86.out test87.out
+
+ SCRIPTS32 = test50.out test70.out
+
+*** ../vim-7.3.568/src/testdir/Make_ming.mak 2012-04-13 19:11:16.000000000 +0200
+--- src/testdir/Make_ming.mak 2012-06-20 18:44:12.000000000 +0200
+***************
+*** 50,56 ****
+ test68.out test69.out test71.out test72.out test73.out \
+ test74.out test75.out test76.out test77.out test78.out \
+ test79.out test80.out test81.out test82.out test83.out \
+! test84.out test85.out
+
+ SCRIPTS32 = test50.out test70.out
+
+--- 50,56 ----
+ test68.out test69.out test71.out test72.out test73.out \
+ test74.out test75.out test76.out test77.out test78.out \
+ test79.out test80.out test81.out test82.out test83.out \
+! test84.out test85.out test86.out test87.out
+
+ SCRIPTS32 = test50.out test70.out
+
+*** ../vim-7.3.568/src/testdir/Make_os2.mak 2012-04-05 16:56:38.000000000 +0200
+--- src/testdir/Make_os2.mak 2012-06-20 18:44:32.000000000 +0200
+***************
+*** 14,19 ****
+--- 14,20 ----
+ # test27 can't edit file with "*" in file name
+ # test52 only for Win32
+ # test85 no Lua interface
++ # test86, 87 no Python interface
+
+ SCRIPTS = test1.out test3.out test4.out test5.out test6.out \
+ test7.out test8.out test9.out \
+*** ../vim-7.3.568/src/testdir/Makefile 2012-04-05 16:56:38.000000000 +0200
+--- src/testdir/Makefile 2012-06-29 11:56:00.000000000 +0200
+***************
+*** 27,33 ****
+ test69.out test70.out test71.out test72.out test73.out \
+ test74.out test75.out test76.out test77.out test78.out \
+ test79.out test80.out test81.out test82.out test83.out \
+! test84.out test85.out
+
+ SCRIPTS_GUI = test16.out
+
+--- 27,33 ----
+ test69.out test70.out test71.out test72.out test73.out \
+ test74.out test75.out test76.out test77.out test78.out \
+ test79.out test80.out test81.out test82.out test83.out \
+! test84.out test85.out test86.out test87.out
+
+ SCRIPTS_GUI = test16.out
+
+*** ../vim-7.3.568/src/testdir/test86.in 2012-06-20 20:19:31.000000000 +0200
+--- src/testdir/test86.in 2012-06-20 18:01:02.000000000 +0200
+***************
+*** 0 ****
+--- 1,211 ----
++ Tests for various python features. vim: set ft=vim :
++
++ STARTTEST
++ :so small.vim
++ :if !has('python') | e! test.ok | wq! test.out | endif
++ :py import vim
++ :fun Test()
++ :let l = []
++ :py l=vim.bindeval('l')
++ :py f=vim.bindeval('function("strlen")')
++ :" Extending List directly with different types
++ :py l.extend([1, "as'd", [1, 2, f, {'a': 1}]])
++ :$put =string(l)
++ :$put =string(l[-1])
++ :try
++ : $put =string(l[-4])
++ :catch
++ : $put =v:exception[:13]
++ :endtry
++ :" List assignment
++ :py l[0]=0
++ :$put =string(l)
++ :py l[-2]=f
++ :$put =string(l)
++ :"
++ :" Extending Dictionary directly with different types
++ :let d = {}
++ :py d=vim.bindeval('d')
++ :py d['1']='asd'
++ :py d['b']=[1, 2, f]
++ :py d['-1']={'a': 1}
++ :let dkeys = []
++ :py dk=vim.bindeval('dkeys')
++ :py dkeys=d.keys()
++ :py dkeys.sort()
++ :py dk.extend(dkeys)
++ :$put =string(dkeys)
++ :for [key, val] in sort(items(d))
++ : $put =string(key) . ' : ' . string(val)
++ : unlet key val
++ :endfor
++ :"
++ :" removing items with del
++ :py del l[2]
++ :$put =string(l)
++ :let l = range(8)
++ :py l=vim.bindeval('l')
++ :try
++ : py del l[:3]
++ : py del l[1:]
++ :catch
++ : $put =v:exception
++ :endtry
++ :$put =string(l)
++ :"
++ :py del d['-1']
++ :$put =string(d)
++ :"
++ :" removing items out of range: silently skip items that don't exist
++ :let l = [0, 1, 2, 3]
++ :py l=vim.bindeval('l')
++ :" The following two ranges delete nothing as they match empty list:
++ :py del l[2:1]
++ :$put =string(l)
++ :py del l[2:2]
++ :$put =string(l)
++ :py del l[2:3]
++ :$put =string(l)
++ :let l = [0, 1, 2, 3]
++ :py l=vim.bindeval('l')
++ :py del l[2:4]
++ :$put =string(l)
++ :let l = [0, 1, 2, 3]
++ :py l=vim.bindeval('l')
++ :py del l[2:5]
++ :$put =string(l)
++ :let l = [0, 1, 2, 3]
++ :py l=vim.bindeval('l')
++ :py del l[2:6]
++ :$put =string(l)
++ :let l = [0, 1, 2, 3]
++ :py l=vim.bindeval('l')
++ :" The following two ranges delete nothing as they match empty list:
++ :py del l[-1:2]
++ :$put =string(l)
++ :py del l[-2:2]
++ :$put =string(l)
++ :py del l[-3:2]
++ :$put =string(l)
++ :let l = [0, 1, 2, 3]
++ :py l=vim.bindeval('l')
++ :py del l[-4:2]
++ :$put =string(l)
++ :let l = [0, 1, 2, 3]
++ :py l=vim.bindeval('l')
++ :py del l[-5:2]
++ :$put =string(l)
++ :let l = [0, 1, 2, 3]
++ :py l=vim.bindeval('l')
++ :py del l[-6:2]
++ :$put =string(l)
++ :"
++ :" Slice assignment to a list
++ :let l = [0, 1, 2, 3]
++ :py l=vim.bindeval('l')
++ :py l[0:0]=['a']
++ :$put =string(l)
++ :let l = [0, 1, 2, 3]
++ :py l=vim.bindeval('l')
++ :py l[1:2]=['b']
++ :$put =string(l)
++ :let l = [0, 1, 2, 3]
++ :py l=vim.bindeval('l')
++ :py l[2:4]=['c']
++ :$put =string(l)
++ :let l = [0, 1, 2, 3]
++ :py l=vim.bindeval('l')
++ :py l[4:4]=['d']
++ :$put =string(l)
++ :let l = [0, 1, 2, 3]
++ :py l=vim.bindeval('l')
++ :py l[-1:2]=['e']
++ :$put =string(l)
++ :let l = [0, 1, 2, 3]
++ :py l=vim.bindeval('l')
++ :py l[-10:2]=['f']
++ :$put =string(l)
++ :let l = [0, 1, 2, 3]
++ :py l=vim.bindeval('l')
++ :py l[2:-10]=['g']
++ :$put =string(l)
++ :let l = []
++ :py l=vim.bindeval('l')
++ :py l[0:0]=['h']
++ :$put =string(l)
++ :"
++ :" Locked variables
++ :let l = [0, 1, 2, 3]
++ :py l=vim.bindeval('l')
++ :lockvar! l
++ :py l[2]='i'
++ :$put =string(l)
++ :unlockvar! l
++ :"
++ :" Function calls
++ :function New(...)
++ :return ['NewStart']+a:000+['NewEnd']
++ :endfunction
++ :function DictNew(...) dict
++ :return ['DictNewStart']+a:000+['DictNewEnd', self]
++ :endfunction
++ :let l=[function('New'), function('DictNew')]
++ :py l=vim.bindeval('l')
++ :py l.extend(list(l[0](1, 2, 3)))
++ :$put =string(l)
++ :py l.extend(list(l[1](1, 2, 3, self={'a': 'b'})))
++ :$put =string(l)
++ :py l.extend([l[0].name])
++ :$put =string(l)
++ :try
++ : py l[1](1, 2, 3)
++ :catch
++ : $put =v:exception[:16]
++ :endtry
++ :delfunction New
++ :try
++ : py l[0](1, 2, 3)
++ :catch
++ : $put =v:exception[:16]
++ :endtry
++ :if has('float')
++ : let l=[0.0]
++ : py l=vim.bindeval('l')
++ : py l.extend([0.0])
++ : $put =string(l)
++ :else
++ : $put ='[0.0, 0.0]'
++ :endif
++ :"
++ :" pyeval()
++ :let l=pyeval('range(3)')
++ :$put =string(l)
++ :let d=pyeval('{"a": "b", "c": 1, "d": ["e"]}')
++ :$put =sort(items(d))
++ :try
++ : let undef=pyeval('undefined_name')
++ :catch
++ : $put =v:exception[:13]
++ :endtry
++ :try
++ : let vim=pyeval('vim')
++ :catch
++ : $put =v:exception[:13]
++ :endtry
++ :if has('float')
++ : let f=pyeval('0.0')
++ : $put =string(f)
++ :else
++ : $put ='0.0'
++ :endif
++ :endfun
++ :"
++ :call Test()
++ :"
++ :delfunc Test
++ :call garbagecollect(1)
++ :"
++ :/^start:/,$wq! test.out
++ ENDTEST
++
++ start:
+*** ../vim-7.3.568/src/testdir/test86.ok 2012-06-20 20:19:31.000000000 +0200
+--- src/testdir/test86.ok 2012-06-20 18:01:02.000000000 +0200
+***************
+*** 0 ****
+--- 1,47 ----
++ start:
++ [1, 'as''d', [1, 2, function('strlen'), {'a': 1}]]
++ [1, 2, function('strlen'), {'a': 1}]
++ Vim(put):E684:
++ [0, 'as''d', [1, 2, function('strlen'), {'a': 1}]]
++ [0, function('strlen'), [1, 2, function('strlen'), {'a': 1}]]
++ ['-1', '1', 'b']
++ '-1' : {'a': 1}
++ '1' : 'asd'
++ 'b' : [1, 2, function('strlen')]
++ [0, function('strlen')]
++ [3]
++ {'1': 'asd', 'b': [1, 2, function('strlen')]}
++ [0, 1, 2, 3]
++ [0, 1, 2, 3]
++ [0, 1, 3]
++ [0, 1]
++ [0, 1]
++ [0, 1]
++ [0, 1, 2, 3]
++ [0, 1, 2, 3]
++ [0, 2, 3]
++ [2, 3]
++ [2, 3]
++ [2, 3]
++ ['a', 0, 1, 2, 3]
++ [0, 'b', 2, 3]
++ [0, 1, 'c']
++ [0, 1, 2, 3, 'd']
++ [0, 1, 2, 'e', 3]
++ ['f', 2, 3]
++ [0, 1, 'g', 2, 3]
++ ['h']
++ [0, 1, 2, 3]
++ [function('New'), function('DictNew'), 'NewStart', 1, 2, 3, 'NewEnd']
++ [function('New'), function('DictNew'), 'NewStart', 1, 2, 3, 'NewEnd', 'DictNewStart', 1, 2, 3, 'DictNewEnd', {'a': 'b'}]
++ [function('New'), function('DictNew'), 'NewStart', 1, 2, 3, 'NewEnd', 'DictNewStart', 1, 2, 3, 'DictNewEnd', {'a': 'b'}, 'New']
++ Vim(python):E725:
++ Vim(python):E117:
++ [0.0, 0.0]
++ [0, 1, 2]
++ ['a', 'b']
++ ['c', 1]
++ ['d', ['e']]
++ Vim(let):E858:
++ Vim(let):E859:
++ 0.0
+*** ../vim-7.3.568/src/testdir/test87.in 2012-06-20 20:19:31.000000000 +0200
+--- src/testdir/test87.in 2012-06-20 18:01:02.000000000 +0200
+***************
+*** 0 ****
+--- 1,211 ----
++ Tests for various python features. vim: set ft=vim :
++
++ STARTTEST
++ :so small.vim
++ :if !has('python3') | e! test.ok | wq! test.out | endif
++ :py3 import vim
++ :fun Test()
++ :let l = []
++ :py3 l=vim.bindeval('l')
++ :py3 f=vim.bindeval('function("strlen")')
++ :" Extending List directly with different types
++ :py3 l+=[1, "as'd", [1, 2, f, {'a': 1}]]
++ :$put =string(l)
++ :$put =string(l[-1])
++ :try
++ : $put =string(l[-4])
++ :catch
++ : $put =v:exception[:13]
++ :endtry
++ :" List assignment
++ :py3 l[0]=0
++ :$put =string(l)
++ :py3 l[-2]=f
++ :$put =string(l)
++ :"
++ :" Extending Dictionary directly with different types
++ :let d = {}
++ :py3 d=vim.bindeval('d')
++ :py3 d['1']='asd'
++ :py3 d['b']=[1, 2, f]
++ :py3 d['-1']={'a': 1}
++ :let dkeys = []
++ :py3 dk=vim.bindeval('dkeys')
++ :py3 dkeys=d.keys()
++ :py3 dkeys.sort()
++ :py3 dk+=dkeys
++ :$put =string(dkeys)
++ :for [key, val] in sort(items(d))
++ : $put =string(key) . ' : ' . string(val)
++ : unlet key val
++ :endfor
++ :"
++ :" removing items with del
++ :py3 del l[2]
++ :$put =string(l)
++ :let l = range(8)
++ :py3 l=vim.bindeval('l')
++ :try
++ : py3 del l[:3]
++ : py3 del l[1:]
++ :catch
++ : $put =v:exception
++ :endtry
++ :$put =string(l)
++ :"
++ :py3 del d['-1']
++ :$put =string(d)
++ :"
++ :" removing items out of range: silently skip items that don't exist
++ :let l = [0, 1, 2, 3]
++ :py3 l=vim.bindeval('l')
++ :" The following two ranges delete nothing as they match empty list:
++ :py3 del l[2:1]
++ :$put =string(l)
++ :py3 del l[2:2]
++ :$put =string(l)
++ :py3 del l[2:3]
++ :$put =string(l)
++ :let l = [0, 1, 2, 3]
++ :py3 l=vim.bindeval('l')
++ :py3 del l[2:4]
++ :$put =string(l)
++ :let l = [0, 1, 2, 3]
++ :py3 l=vim.bindeval('l')
++ :py3 del l[2:5]
++ :$put =string(l)
++ :let l = [0, 1, 2, 3]
++ :py3 l=vim.bindeval('l')
++ :py3 del l[2:6]
++ :$put =string(l)
++ :let l = [0, 1, 2, 3]
++ :py3 l=vim.bindeval('l')
++ :" The following two ranges delete nothing as they match empty list:
++ :py3 del l[-1:2]
++ :$put =string(l)
++ :py3 del l[-2:2]
++ :$put =string(l)
++ :py3 del l[-3:2]
++ :$put =string(l)
++ :let l = [0, 1, 2, 3]
++ :py3 l=vim.bindeval('l')
++ :py3 del l[-4:2]
++ :$put =string(l)
++ :let l = [0, 1, 2, 3]
++ :py3 l=vim.bindeval('l')
++ :py3 del l[-5:2]
++ :$put =string(l)
++ :let l = [0, 1, 2, 3]
++ :py3 l=vim.bindeval('l')
++ :py3 del l[-6:2]
++ :$put =string(l)
++ :"
++ :" Slice assignment to a list
++ :let l = [0, 1, 2, 3]
++ :py3 l=vim.bindeval('l')
++ :py3 l[0:0]=['a']
++ :$put =string(l)
++ :let l = [0, 1, 2, 3]
++ :py3 l=vim.bindeval('l')
++ :py3 l[1:2]=['b']
++ :$put =string(l)
++ :let l = [0, 1, 2, 3]
++ :py3 l=vim.bindeval('l')
++ :py3 l[2:4]=['c']
++ :$put =string(l)
++ :let l = [0, 1, 2, 3]
++ :py3 l=vim.bindeval('l')
++ :py3 l[4:4]=['d']
++ :$put =string(l)
++ :let l = [0, 1, 2, 3]
++ :py3 l=vim.bindeval('l')
++ :py3 l[-1:2]=['e']
++ :$put =string(l)
++ :let l = [0, 1, 2, 3]
++ :py3 l=vim.bindeval('l')
++ :py3 l[-10:2]=['f']
++ :$put =string(l)
++ :let l = [0, 1, 2, 3]
++ :py3 l=vim.bindeval('l')
++ :py3 l[2:-10]=['g']
++ :$put =string(l)
++ :let l = []
++ :py3 l=vim.bindeval('l')
++ :py3 l[0:0]=['h']
++ :$put =string(l)
++ :"
++ :" Locked variables
++ :let l = [0, 1, 2, 3]
++ :py3 l=vim.bindeval('l')
++ :lockvar! l
++ :py3 l[2]='i'
++ :$put =string(l)
++ :unlockvar! l
++ :"
++ :" Function calls
++ :function New(...)
++ :return ['NewStart']+a:000+['NewEnd']
++ :endfunction
++ :function DictNew(...) dict
++ :return ['DictNewStart']+a:000+['DictNewEnd', self]
++ :endfunction
++ :let l=[function('New'), function('DictNew')]
++ :py3 l=vim.bindeval('l')
++ :py3 l.extend(list(l[0](1, 2, 3)))
++ :$put =string(l)
++ :py3 l.extend(list(l[1](1, 2, 3, self={'a': 'b'})))
++ :$put =string(l)
++ :py3 l+=[l[0].name]
++ :$put =string(l)
++ :try
++ : py3 l[1](1, 2, 3)
++ :catch
++ : $put =v:exception[:13]
++ :endtry
++ :delfunction New
++ :try
++ : py3 l[0](1, 2, 3)
++ :catch
++ : $put =v:exception[:13]
++ :endtry
++ :if has('float')
++ : let l=[0.0]
++ : py3 l=vim.bindeval('l')
++ : py3 l.extend([0.0])
++ : $put =string(l)
++ :else
++ : $put ='[0.0, 0.0]'
++ :endif
++ :"
++ :" py3eval()
++ :let l=py3eval('[0, 1, 2]')
++ :$put =string(l)
++ :let d=py3eval('{"a": "b", "c": 1, "d": ["e"]}')
++ :$put =sort(items(d))
++ :try
++ : let undef=py3eval('undefined_name')
++ :catch
++ : $put =v:exception[:13]
++ :endtry
++ :try
++ : let vim=py3eval('vim')
++ :catch
++ : $put =v:exception[:13]
++ :endtry
++ :if has('float')
++ : let f=py3eval('0.0')
++ : $put =string(f)
++ :else
++ : $put ='0.0'
++ :endif
++ :endfun
++ :"
++ :call Test()
++ :"
++ :delfunc Test
++ :call garbagecollect(1)
++ :"
++ :/^start:/,$wq! test.out
++ ENDTEST
++
++ start:
+*** ../vim-7.3.568/src/testdir/test87.ok 2012-06-20 20:19:31.000000000 +0200
+--- src/testdir/test87.ok 2012-06-20 18:01:02.000000000 +0200
+***************
+*** 0 ****
+--- 1,47 ----
++ start:
++ [1, 'as''d', [1, 2, function('strlen'), {'a': 1}]]
++ [1, 2, function('strlen'), {'a': 1}]
++ Vim(put):E684:
++ [0, 'as''d', [1, 2, function('strlen'), {'a': 1}]]
++ [0, function('strlen'), [1, 2, function('strlen'), {'a': 1}]]
++ ['-1', '1', 'b']
++ '-1' : {'a': 1}
++ '1' : 'asd'
++ 'b' : [1, 2, function('strlen')]
++ [0, function('strlen')]
++ [3]
++ {'1': 'asd', 'b': [1, 2, function('strlen')]}
++ [0, 1, 2, 3]
++ [0, 1, 2, 3]
++ [0, 1, 3]
++ [0, 1]
++ [0, 1]
++ [0, 1]
++ [0, 1, 2, 3]
++ [0, 1, 2, 3]
++ [0, 2, 3]
++ [2, 3]
++ [2, 3]
++ [2, 3]
++ ['a', 0, 1, 2, 3]
++ [0, 'b', 2, 3]
++ [0, 1, 'c']
++ [0, 1, 2, 3, 'd']
++ [0, 1, 2, 'e', 3]
++ ['f', 2, 3]
++ [0, 1, 'g', 2, 3]
++ ['h']
++ [0, 1, 2, 3]
++ [function('New'), function('DictNew'), 'NewStart', 1, 2, 3, 'NewEnd']
++ [function('New'), function('DictNew'), 'NewStart', 1, 2, 3, 'NewEnd', 'DictNewStart', 1, 2, 3, 'DictNewEnd', {'a': 'b'}]
++ [function('New'), function('DictNew'), 'NewStart', 1, 2, 3, 'NewEnd', 'DictNewStart', 1, 2, 3, 'DictNewEnd', {'a': 'b'}, 'New']
++ Vim(py3):E725:
++ Vim(py3):E117:
++ [0.0, 0.0]
++ [0, 1, 2]
++ ['a', 'b']
++ ['c', 1]
++ ['d', ['e']]
++ Vim(let):E860:
++ Vim(let):E861:
++ 0.0
+*** ../vim-7.3.568/src/version.c 2012-06-29 12:35:40.000000000 +0200
+--- src/version.c 2012-06-29 12:47:03.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 569,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+69. Yahoo welcomes you with your own start page
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.570 b/source/ap/vim/patches/7.3.570
new file mode 100644
index 000000000..c644194d5
--- /dev/null
+++ b/source/ap/vim/patches/7.3.570
@@ -0,0 +1,145 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.570
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.570
+Problem: ":vimgrep" does not obey 'wildignore'.
+Solution: Apply 'wildignore' and 'suffixes' to ":vimgrep". (Ingo Karkat)
+Files: src/ex_cmds2.c, src/proto/ex_cmds2.pro, src/quickfix.c, src/spell.c
+
+
+*** ../vim-7.3.569/src/ex_cmds2.c 2012-06-20 15:48:53.000000000 +0200
+--- src/ex_cmds2.c 2012-06-29 12:43:34.000000000 +0200
+***************
+*** 1850,1871 ****
+ #if defined(FEAT_QUICKFIX) || defined(FEAT_SYN_HL) || defined(PROTO)
+ /*
+ * Parse a list of arguments (file names), expand them and return in
+! * "fnames[fcountp]".
+ * Return FAIL or OK.
+ */
+ int
+! get_arglist_exp(str, fcountp, fnamesp)
+ char_u *str;
+ int *fcountp;
+ char_u ***fnamesp;
+ {
+ garray_T ga;
+ int i;
+
+ if (get_arglist(&ga, str) == FAIL)
+ return FAIL;
+! i = gen_expand_wildcards(ga.ga_len, (char_u **)ga.ga_data,
+! fcountp, fnamesp, EW_FILE|EW_NOTFOUND);
+ ga_clear(&ga);
+ return i;
+ }
+--- 1850,1877 ----
+ #if defined(FEAT_QUICKFIX) || defined(FEAT_SYN_HL) || defined(PROTO)
+ /*
+ * Parse a list of arguments (file names), expand them and return in
+! * "fnames[fcountp]". When "wig" is TRUE, removes files matching 'wildignore'.
+ * Return FAIL or OK.
+ */
+ int
+! get_arglist_exp(str, fcountp, fnamesp, wig)
+ char_u *str;
+ int *fcountp;
+ char_u ***fnamesp;
++ int wig;
+ {
+ garray_T ga;
+ int i;
+
+ if (get_arglist(&ga, str) == FAIL)
+ return FAIL;
+! if (wig == TRUE)
+! i = expand_wildcards(ga.ga_len, (char_u **)ga.ga_data,
+! fcountp, fnamesp, EW_FILE|EW_NOTFOUND);
+! else
+! i = gen_expand_wildcards(ga.ga_len, (char_u **)ga.ga_data,
+! fcountp, fnamesp, EW_FILE|EW_NOTFOUND);
+!
+ ga_clear(&ga);
+ return i;
+ }
+*** ../vim-7.3.569/src/proto/ex_cmds2.pro 2011-05-19 18:26:34.000000000 +0200
+--- src/proto/ex_cmds2.pro 2012-06-29 12:43:49.000000000 +0200
+***************
+*** 42,48 ****
+ int check_fname __ARGS((void));
+ int buf_write_all __ARGS((buf_T *buf, int forceit));
+ int get_arglist __ARGS((garray_T *gap, char_u *str));
+! int get_arglist_exp __ARGS((char_u *str, int *fcountp, char_u ***fnamesp));
+ void set_arglist __ARGS((char_u *str));
+ void check_arg_idx __ARGS((win_T *win));
+ void ex_args __ARGS((exarg_T *eap));
+--- 42,48 ----
+ int check_fname __ARGS((void));
+ int buf_write_all __ARGS((buf_T *buf, int forceit));
+ int get_arglist __ARGS((garray_T *gap, char_u *str));
+! int get_arglist_exp __ARGS((char_u *str, int *fcountp, char_u ***fnamesp, int wig));
+ void set_arglist __ARGS((char_u *str));
+ void check_arg_idx __ARGS((win_T *win));
+ void ex_args __ARGS((exarg_T *eap));
+*** ../vim-7.3.569/src/quickfix.c 2012-06-01 18:34:37.000000000 +0200
+--- src/quickfix.c 2012-06-29 12:43:49.000000000 +0200
+***************
+*** 3189,3195 ****
+ ;
+
+ /* parse the list of arguments */
+! if (get_arglist_exp(p, &fcount, &fnames) == FAIL)
+ goto theend;
+ if (fcount == 0)
+ {
+--- 3189,3195 ----
+ ;
+
+ /* parse the list of arguments */
+! if (get_arglist_exp(p, &fcount, &fnames, TRUE) == FAIL)
+ goto theend;
+ if (fcount == 0)
+ {
+*** ../vim-7.3.569/src/spell.c 2012-06-01 17:49:51.000000000 +0200
+--- src/spell.c 2012-06-29 12:43:49.000000000 +0200
+***************
+*** 8553,8559 ****
+ }
+
+ /* Expand all the remaining arguments (e.g., $VIMRUNTIME). */
+! if (get_arglist_exp(arg, &fcount, &fnames) == OK)
+ {
+ mkspell(fcount, fnames, ascii, eap->forceit, FALSE);
+ FreeWild(fcount, fnames);
+--- 8553,8559 ----
+ }
+
+ /* Expand all the remaining arguments (e.g., $VIMRUNTIME). */
+! if (get_arglist_exp(arg, &fcount, &fnames, FALSE) == OK)
+ {
+ mkspell(fcount, fnames, ascii, eap->forceit, FALSE);
+ FreeWild(fcount, fnames);
+*** ../vim-7.3.569/src/version.c 2012-06-29 12:54:32.000000000 +0200
+--- src/version.c 2012-06-29 12:56:12.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 570,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+70. ISDN lines are added to your house on a hourly basis
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.571 b/source/ap/vim/patches/7.3.571
new file mode 100644
index 000000000..ad62ffc2b
--- /dev/null
+++ b/source/ap/vim/patches/7.3.571
@@ -0,0 +1,117 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.571
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.571
+Problem: Duplicated condition.
+Solution: Remove one. (Dominique Pelle)
+Files: src/os_win32.c
+
+
+*** ../vim-7.3.570/src/os_win32.c 2012-02-29 13:58:43.000000000 +0100
+--- src/os_win32.c 2012-06-29 13:10:54.000000000 +0200
+***************
+*** 308,314 ****
+ # ifndef GETTEXT_DLL
+ # define GETTEXT_DLL "libintl.dll"
+ # endif
+! /* Dummy funcitons */
+ static char *null_libintl_gettext(const char *);
+ static char *null_libintl_textdomain(const char *);
+ static char *null_libintl_bindtextdomain(const char *, const char *);
+--- 308,314 ----
+ # ifndef GETTEXT_DLL
+ # define GETTEXT_DLL "libintl.dll"
+ # endif
+! /* Dummy functions */
+ static char *null_libintl_gettext(const char *);
+ static char *null_libintl_textdomain(const char *);
+ static char *null_libintl_bindtextdomain(const char *, const char *);
+***************
+*** 1409,1415 ****
+
+
+ /*
+! * mch_inchar(): low-level input funcion.
+ * Get one or more characters from the keyboard or the mouse.
+ * If time == 0, do not wait for characters.
+ * If time == n, wait a short time for characters.
+--- 1409,1415 ----
+
+
+ /*
+! * mch_inchar(): low-level input function.
+ * Get one or more characters from the keyboard or the mouse.
+ * If time == 0, do not wait for characters.
+ * If time == n, wait a short time for characters.
+***************
+*** 3451,3464 ****
+ * to avoid to perform a blocking read */
+ ret = PeekNamedPipe(g_hChildStd_OUT_Rd, /* pipe to query */
+ NULL, /* optional buffer */
+! 0, /* buffe size */
+ NULL, /* number of read bytes */
+ &availableBytes, /* available bytes total */
+ NULL); /* byteLeft */
+
+ repeatCount = 0;
+ /* We got real data in the pipe, read it */
+! while (ret != 0 && availableBytes > 0 && availableBytes > 0)
+ {
+ repeatCount++;
+ toRead =
+--- 3451,3464 ----
+ * to avoid to perform a blocking read */
+ ret = PeekNamedPipe(g_hChildStd_OUT_Rd, /* pipe to query */
+ NULL, /* optional buffer */
+! 0, /* buffer size */
+ NULL, /* number of read bytes */
+ &availableBytes, /* available bytes total */
+ NULL); /* byteLeft */
+
+ repeatCount = 0;
+ /* We got real data in the pipe, read it */
+! while (ret != 0 && availableBytes > 0)
+ {
+ repeatCount++;
+ toRead =
+***************
+*** 3638,3644 ****
+ NULL, /* Process security attributes */
+ NULL, /* Thread security attributes */
+
+! // this command can be litigeous, handle inheritence was
+ // deactivated for pending temp file, but, if we deactivate
+ // it, the pipes don't work for some reason.
+ TRUE, /* Inherit handles, first deactivated,
+--- 3638,3644 ----
+ NULL, /* Process security attributes */
+ NULL, /* Thread security attributes */
+
+! // this command can be litigious, handle inheritance was
+ // deactivated for pending temp file, but, if we deactivate
+ // it, the pipes don't work for some reason.
+ TRUE, /* Inherit handles, first deactivated,
+*** ../vim-7.3.570/src/version.c 2012-06-29 12:57:03.000000000 +0200
+--- src/version.c 2012-06-29 13:12:31.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 571,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+71. You wonder how people walk
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.572 b/source/ap/vim/patches/7.3.572
new file mode 100644
index 000000000..14fc127ec
--- /dev/null
+++ b/source/ap/vim/patches/7.3.572
@@ -0,0 +1,59 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.572
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.572
+Problem: Duplicate statement in if and else. (Dominique Pelle)
+Solution: Remove the condition and add a TODO.
+Files: src/gui_xmebw.c
+
+
+*** ../vim-7.3.571/src/gui_xmebw.c 2010-08-15 21:57:29.000000000 +0200
+--- src/gui_xmebw.c 2012-06-29 13:17:15.000000000 +0200
+***************
+*** 375,385 ****
+
+ XGetGeometry(dpy, pix, &root, &x, &y, &width, &height, &border, &depth);
+
+! if (eb->enhancedbutton.label_location == (int)XmTOP
+! || eb->enhancedbutton.label_location == (int)XmBOTTOM)
+! shift = eb->primitive.shadow_thickness / 2;
+! else
+! shift = eb->primitive.shadow_thickness / 2;
+
+ if (shift < 1)
+ shift = 1;
+--- 375,382 ----
+
+ XGetGeometry(dpy, pix, &root, &x, &y, &width, &height, &border, &depth);
+
+! /* TODO: does the shift depend on label_location somehow? */
+! shift = eb->primitive.shadow_thickness / 2;
+
+ if (shift < 1)
+ shift = 1;
+*** ../vim-7.3.571/src/version.c 2012-06-29 13:13:59.000000000 +0200
+--- src/version.c 2012-06-29 13:18:41.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 572,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+72. Somebody at IRC just mentioned a way to obtain full motion video without
+ a PC using a wireless protocol called NTSC, you wonder how you never
+ heard about it
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.573 b/source/ap/vim/patches/7.3.573
new file mode 100644
index 000000000..7734a76a0
--- /dev/null
+++ b/source/ap/vim/patches/7.3.573
@@ -0,0 +1,52 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.573
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.573
+Problem: Using array index before bounds checking.
+Solution: Swap the parts of the condition. (Dominique Pelle)
+Files: src/ops.c
+
+
+*** ../vim-7.3.572/src/ops.c 2012-06-13 17:28:51.000000000 +0200
+--- src/ops.c 2012-06-29 13:27:11.000000000 +0200
+***************
+*** 6458,6464 ****
+ long chars = 0;
+ int is_word = 0;
+
+! for (i = 0; line[i] && i < limit; )
+ {
+ if (is_word)
+ {
+--- 6458,6464 ----
+ long chars = 0;
+ int is_word = 0;
+
+! for (i = 0; i < limit && line[i] != NUL; )
+ {
+ if (is_word)
+ {
+*** ../vim-7.3.572/src/version.c 2012-06-29 13:19:23.000000000 +0200
+--- src/version.c 2012-06-29 13:27:59.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 573,
+ /**/
+
+--
+"Thou shalt not follow the Null Pointer, for at its end Chaos and
+Madness lie."
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.574 b/source/ap/vim/patches/7.3.574
new file mode 100644
index 000000000..e23d818f1
--- /dev/null
+++ b/source/ap/vim/patches/7.3.574
@@ -0,0 +1,88 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.574
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.574
+Problem: When pasting a register in the search command line a CTRL-L
+ character is not pasted. (Dominique Pelle)
+Solution: Escape the CTRL-L. (Christian Brabandt)
+Files: src/ex_getln.c
+
+
+*** ../vim-7.3.573/src/ex_getln.c 2012-06-06 12:02:57.000000000 +0200
+--- src/ex_getln.c 2012-06-29 13:39:03.000000000 +0200
+***************
+*** 3133,3139 ****
+ else
+ #endif
+ c = *s++;
+! if (cv == Ctrl_V || c == ESC || c == Ctrl_C || c == CAR || c == NL
+ #ifdef UNIX
+ || c == intr_char
+ #endif
+--- 3133,3140 ----
+ else
+ #endif
+ c = *s++;
+! if (cv == Ctrl_V || c == ESC || c == Ctrl_C
+! || c == CAR || c == NL || c == Ctrl_L
+ #ifdef UNIX
+ || c == intr_char
+ #endif
+***************
+*** 4692,4698 ****
+ if (tab[i].ic)
+ regmatch.rm_ic = TRUE;
+ ret = ExpandGeneric(xp, &regmatch, num_file, file,
+! tab[i].func, tab[i].escaped);
+ break;
+ }
+ }
+--- 4693,4699 ----
+ if (tab[i].ic)
+ regmatch.rm_ic = TRUE;
+ ret = ExpandGeneric(xp, &regmatch, num_file, file,
+! tab[i].func, tab[i].escaped);
+ break;
+ }
+ }
+***************
+*** 5125,5131 ****
+ vim_free(matches);
+ }
+ if (ga.ga_len == 0)
+! return FAIL;
+
+ /* Sort and remove duplicates which can happen when specifying multiple
+ * directories in dirnames. */
+--- 5126,5132 ----
+ vim_free(matches);
+ }
+ if (ga.ga_len == 0)
+! return FAIL;
+
+ /* Sort and remove duplicates which can happen when specifying multiple
+ * directories in dirnames. */
+*** ../vim-7.3.573/src/version.c 2012-06-29 13:34:15.000000000 +0200
+--- src/version.c 2012-06-29 13:38:22.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 574,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+73. You give your dog used motherboards instead of bones
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.575 b/source/ap/vim/patches/7.3.575
new file mode 100644
index 000000000..f5d80d724
--- /dev/null
+++ b/source/ap/vim/patches/7.3.575
@@ -0,0 +1,60 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.575
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.575
+Problem: "ygt" tries to yank instead of giving an error. (Daniel Mueller)
+Solution: Check for a pending operator.
+Files: src/normal.c
+
+
+*** ../vim-7.3.574/src/normal.c 2012-06-06 16:12:54.000000000 +0200
+--- src/normal.c 2012-06-29 13:50:26.000000000 +0200
+***************
+*** 8393,8402 ****
+
+ #ifdef FEAT_WINDOWS
+ case 't':
+! goto_tabpage((int)cap->count0);
+ break;
+ case 'T':
+! goto_tabpage(-(int)cap->count1);
+ break;
+ #endif
+
+--- 8393,8404 ----
+
+ #ifdef FEAT_WINDOWS
+ case 't':
+! if (!checkclearop(oap))
+! goto_tabpage((int)cap->count0);
+ break;
+ case 'T':
+! if (!checkclearop(oap))
+! goto_tabpage(-(int)cap->count1);
+ break;
+ #endif
+
+*** ../vim-7.3.574/src/version.c 2012-06-29 13:44:37.000000000 +0200
+--- src/version.c 2012-06-29 13:52:01.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 575,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+74. Your most erotic dreams are about cybersex
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.576 b/source/ap/vim/patches/7.3.576
new file mode 100644
index 000000000..bc226d90c
--- /dev/null
+++ b/source/ap/vim/patches/7.3.576
@@ -0,0 +1,255 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.576
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.576
+Problem: Formatting of lists inside comments is not right yet.
+Solution: Use another solution and add a test. (Tor Perkins)
+Files: src/edit.c, src/misc1.c, src/testdir/test68.in,
+ src/testdir/test69.ok
+
+
+*** ../vim-7.3.575/src/edit.c 2012-06-20 22:55:56.000000000 +0200
+--- src/edit.c 2012-06-29 14:10:36.000000000 +0200
+***************
+*** 6320,6333 ****
+ if (!(flags & INSCHAR_COM_LIST))
+ {
+ /*
+! * This section is for numeric lists w/o comments. If comment
+! * indents are needed with numeric lists (formatoptions=nq),
+! * then the INSCHAR_COM_LIST flag will cause the corresponding
+! * OPENLINE_COM_LIST flag to be passed through to open_line()
+! * (as seen above)...
+ */
+ if (second_indent < 0 && has_format_option(FO_Q_NUMBER))
+! second_indent = get_number_indent(curwin->w_cursor.lnum -1);
+ if (second_indent >= 0)
+ {
+ #ifdef FEAT_VREPLACE
+--- 6320,6334 ----
+ if (!(flags & INSCHAR_COM_LIST))
+ {
+ /*
+! * This section is for auto-wrap of numeric lists. When not
+! * in insert mode (i.e. format_lines()), the INSCHAR_COM_LIST
+! * flag will be set and open_line() will handle it (as seen
+! * above). The code here (and in get_number_indent()) will
+! * recognize comments if needed...
+ */
+ if (second_indent < 0 && has_format_option(FO_Q_NUMBER))
+! second_indent =
+! get_number_indent(curwin->w_cursor.lnum - 1);
+ if (second_indent >= 0)
+ {
+ #ifdef FEAT_VREPLACE
+***************
+*** 6336,6342 ****
+--- 6337,6367 ----
+ FALSE, NUL, TRUE);
+ else
+ #endif
++ #ifdef FEAT_COMMENTS
++ if (leader_len > 0 && second_indent - leader_len > 0)
++ {
++ int i;
++ int padding = second_indent - leader_len;
++
++ /* We started at the first_line of a numbered list
++ * that has a comment. the open_line() function has
++ * inserted the proper comment leader and positioned
++ * the cursor at the end of the split line. Now we
++ * add the additional whitespace needed after the
++ * comment leader for the numbered list. */
++ for (i = 0; i < padding; i++)
++ {
++ ins_str((char_u *)" ");
++ changed_bytes(curwin->w_cursor.lnum, leader_len);
++ }
++ }
++ else
++ {
++ #endif
+ (void)set_indent(second_indent, SIN_CHANGED);
++ #ifdef FEAT_COMMENTS
++ }
++ #endif
+ }
+ }
+ first_line = FALSE;
+*** ../vim-7.3.575/src/misc1.c 2012-06-20 17:56:06.000000000 +0200
+--- src/misc1.c 2012-06-29 14:10:12.000000000 +0200
+***************
+*** 424,491 ****
+ colnr_T col;
+ pos_T pos;
+
+ if (lnum > curbuf->b_ml.ml_line_count)
+ return -1;
+ pos.lnum = 0;
+
+ #ifdef FEAT_COMMENTS
+! if (has_format_option(FO_Q_COMS) && has_format_option(FO_Q_NUMBER))
+! {
+! regmatch_T regmatch;
+! int lead_len; /* length of comment leader */
+!
+ lead_len = get_leader_len(ml_get(lnum), NULL, FALSE, TRUE);
+- regmatch.regprog = vim_regcomp(curbuf->b_p_flp, RE_MAGIC);
+- if (regmatch.regprog != NULL)
+- {
+- regmatch.rm_ic = FALSE;
+-
+- /* vim_regexec() expects a pointer to a line. This lets us
+- * start matching for the flp beyond any comment leader... */
+- if (vim_regexec(&regmatch, ml_get(lnum) + lead_len, (colnr_T)0))
+- {
+- pos.lnum = lnum;
+- pos.col = (colnr_T)(*regmatch.endp - ml_get(lnum));
+- #ifdef FEAT_VIRTUALEDIT
+- pos.coladd = 0;
+ #endif
+! }
+! }
+! vim_free(regmatch.regprog);
+! }
+! else
+ {
+! /*
+! * What follows is the orig code that is not "comment aware"...
+! *
+! * I'm not sure if regmmatch_T (multi-match) is needed in this case.
+! * It may be true that this section would work properly using the
+! * regmatch_T code above, in which case, these two separate sections
+! * should be consolidated w/ FEAT_COMMENTS making lead_len > 0...
+! */
+! #endif
+! regmmatch_T regmatch;
+
+! regmatch.regprog = vim_regcomp(curbuf->b_p_flp, RE_MAGIC);
+!
+! if (regmatch.regprog != NULL)
+ {
+! regmatch.rmm_ic = FALSE;
+! regmatch.rmm_maxcol = 0;
+! if (vim_regexec_multi(&regmatch, curwin, curbuf,
+! lnum, (colnr_T)0, NULL))
+! {
+! pos.lnum = regmatch.endpos[0].lnum + lnum;
+! pos.col = regmatch.endpos[0].col;
+ #ifdef FEAT_VIRTUALEDIT
+! pos.coladd = 0;
+ #endif
+- }
+- vim_free(regmatch.regprog);
+ }
+- #ifdef FEAT_COMMENTS
+ }
+! #endif
+
+ if (pos.lnum == 0 || *ml_get_pos(&pos) == NUL)
+ return -1;
+--- 424,458 ----
+ colnr_T col;
+ pos_T pos;
+
++ regmatch_T regmatch;
++ int lead_len = 0; /* length of comment leader */
++
+ if (lnum > curbuf->b_ml.ml_line_count)
+ return -1;
+ pos.lnum = 0;
+
+ #ifdef FEAT_COMMENTS
+! /* In format_lines() (i.e. not insert mode), fo+=q is needed too... */
+! if ((State & INSERT) || has_format_option(FO_Q_COMS))
+ lead_len = get_leader_len(ml_get(lnum), NULL, FALSE, TRUE);
+ #endif
+! regmatch.regprog = vim_regcomp(curbuf->b_p_flp, RE_MAGIC);
+! if (regmatch.regprog != NULL)
+ {
+! regmatch.rm_ic = FALSE;
+
+! /* vim_regexec() expects a pointer to a line. This lets us
+! * start matching for the flp beyond any comment leader... */
+! if (vim_regexec(&regmatch, ml_get(lnum) + lead_len, (colnr_T)0))
+ {
+! pos.lnum = lnum;
+! pos.col = (colnr_T)(*regmatch.endp - ml_get(lnum));
+ #ifdef FEAT_VIRTUALEDIT
+! pos.coladd = 0;
+ #endif
+ }
+ }
+! vim_free(regmatch.regprog);
+
+ if (pos.lnum == 0 || *ml_get_pos(&pos) == NUL)
+ return -1;
+*** ../vim-7.3.575/src/testdir/test68.in 2012-06-13 17:28:51.000000000 +0200
+--- src/testdir/test68.in 2012-06-29 14:27:27.000000000 +0200
+***************
+*** 52,57 ****
+--- 52,68 ----
+
+ STARTTEST
+ /^{/+1
++ :set tw=5 fo=tcn comments=:#
++ A bjA b
++ ENDTEST
++
++ {
++ 1 a
++ # 1 a
++ }
++
++ STARTTEST
++ /^{/+1
+ :set tw=5 fo=qn comments=:#
+ gwap
+ ENDTEST
+***************
+*** 83,88 ****
+--- 94,107 ----
+ }
+
+ STARTTEST
++ /^#/
++ :setl tw=12 fo=tqnc comments=:#
++ A foobar
++ ENDTEST
++
++ # 1 xxxxx
++
++ STARTTEST
+ :g/^STARTTEST/.,/^ENDTEST/d
+ :1;/^Results/,$wq! test.out
+ ENDTEST
+*** ../vim-7.3.575/src/version.c 2012-06-29 13:56:01.000000000 +0200
+--- src/version.c 2012-06-29 15:03:10.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 576,
+ /**/
+
+--
+Proof techniques #2: Proof by Oddity.
+ SAMPLE: To prove that horses have an infinite number of legs.
+(1) Horses have an even number of legs.
+(2) They have two legs in back and fore legs in front.
+(3) This makes a total of six legs, which certainly is an odd number of
+ legs for a horse.
+(4) But the only number that is both odd and even is infinity.
+(5) Therefore, horses must have an infinite number of legs.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.577 b/source/ap/vim/patches/7.3.577
new file mode 100644
index 000000000..2929b22d3
--- /dev/null
+++ b/source/ap/vim/patches/7.3.577
@@ -0,0 +1,273 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.577
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.577
+Problem: Size of memory does not fit in 32 bit unsigned.
+Solution: Use Kbyte instead of byte. Call GlobalMemoryStatusEx() instead of
+ GlobalMemoryStatus() when available.
+Files: src/misc2.c, src/option.c, src/os_amiga.c, src/os_msdos.c,
+ src/os_win16.c, src/os_win32.c
+
+
+*** ../vim-7.3.576/src/misc2.c 2012-02-29 13:58:43.000000000 +0100
+--- src/misc2.c 2012-06-29 15:30:54.000000000 +0200
+***************
+*** 815,820 ****
+--- 815,821 ----
+ #else
+ # define KEEP_ROOM (2 * 8192L)
+ #endif
++ #define KEEP_ROOM_KB (KEEP_ROOM / 1024L)
+
+ /*
+ * Note: if unsigned is 16 bits we can only allocate up to 64K with alloc().
+***************
+*** 940,946 ****
+ allocated = 0;
+ # endif
+ /* 3. check for available memory: call mch_avail_mem() */
+! if (mch_avail_mem(TRUE) < KEEP_ROOM && !releasing)
+ {
+ free((char *)p); /* System is low... no go! */
+ p = NULL;
+--- 941,947 ----
+ allocated = 0;
+ # endif
+ /* 3. check for available memory: call mch_avail_mem() */
+! if (mch_avail_mem(TRUE) < KEEP_ROOM_KB && !releasing)
+ {
+ free((char *)p); /* System is low... no go! */
+ p = NULL;
+*** ../vim-7.3.576/src/option.c 2012-03-28 19:58:34.000000000 +0200
+--- src/option.c 2012-06-29 15:31:46.000000000 +0200
+***************
+*** 3154,3160 ****
+ {
+ #ifdef HAVE_AVAIL_MEM
+ /* Use amount of memory available at this moment. */
+! n = (mch_avail_mem(FALSE) >> 11);
+ #else
+ # ifdef HAVE_TOTAL_MEM
+ /* Use amount of memory available to Vim. */
+--- 3154,3160 ----
+ {
+ #ifdef HAVE_AVAIL_MEM
+ /* Use amount of memory available at this moment. */
+! n = (mch_avail_mem(FALSE) >> 1);
+ #else
+ # ifdef HAVE_TOTAL_MEM
+ /* Use amount of memory available to Vim. */
+***************
+*** 6702,6708 ****
+ {
+ for (s = *varp; *s;)
+ {
+! while(*s == ',' || *s == ' ')
+ s++;
+ if (!*s)
+ break;
+--- 6702,6708 ----
+ {
+ for (s = *varp; *s;)
+ {
+! while (*s == ',' || *s == ' ')
+ s++;
+ if (!*s)
+ break;
+***************
+*** 7391,7397 ****
+ new_unnamed |= CLIP_UNNAMED;
+ p += 7;
+ }
+! else if (STRNCMP(p, "unnamedplus", 11) == 0
+ && (p[11] == ',' || p[11] == NUL))
+ {
+ new_unnamed |= CLIP_UNNAMED_PLUS;
+--- 7391,7397 ----
+ new_unnamed |= CLIP_UNNAMED;
+ p += 7;
+ }
+! else if (STRNCMP(p, "unnamedplus", 11) == 0
+ && (p[11] == ',' || p[11] == NUL))
+ {
+ new_unnamed |= CLIP_UNNAMED_PLUS;
+*** ../vim-7.3.576/src/os_amiga.c 2011-10-20 18:24:16.000000000 +0200
+--- src/os_amiga.c 2012-06-29 15:33:59.000000000 +0200
+***************
+*** 191,206 ****
+ }
+
+ /*
+! * Return amount of memory still available.
+ */
+ long_u
+ mch_avail_mem(special)
+ int special;
+ {
+ #ifdef __amigaos4__
+! return (long_u)AvailMem(MEMF_ANY);
+ #else
+! return (long_u)AvailMem(special ? (long)MEMF_CHIP : (long)MEMF_ANY);
+ #endif
+ }
+
+--- 191,206 ----
+ }
+
+ /*
+! * Return amount of memory still available in Kbyte.
+ */
+ long_u
+ mch_avail_mem(special)
+ int special;
+ {
+ #ifdef __amigaos4__
+! return (long_u)AvailMem(MEMF_ANY) >> 10;
+ #else
+! return (long_u)(AvailMem(special ? (long)MEMF_CHIP : (long)MEMF_ANY)) >> 10;
+ #endif
+ }
+
+*** ../vim-7.3.576/src/os_msdos.c 2011-06-19 01:14:22.000000000 +0200
+--- src/os_msdos.c 2012-06-29 15:33:26.000000000 +0200
+***************
+*** 550,564 ****
+ #endif
+
+ /*
+! * Return amount of memory currently available.
+ */
+ long_u
+ mch_avail_mem(int special)
+ {
+ #ifdef DJGPP
+! return _go32_dpmi_remaining_virtual_memory();
+ #else
+! return coreleft();
+ #endif
+ }
+
+--- 550,564 ----
+ #endif
+
+ /*
+! * Return amount of memory currently available in Kbyte.
+ */
+ long_u
+ mch_avail_mem(int special)
+ {
+ #ifdef DJGPP
+! return _go32_dpmi_remaining_virtual_memory() >> 10;
+ #else
+! return coreleft() >> 10;
+ #endif
+ }
+
+*** ../vim-7.3.576/src/os_win16.c 2011-10-20 18:24:16.000000000 +0200
+--- src/os_win16.c 2012-06-29 15:34:18.000000000 +0200
+***************
+*** 379,391 ****
+
+
+ /*
+! * How much memory is available?
+ */
+ long_u
+ mch_avail_mem(
+ int special)
+ {
+! return GetFreeSpace(0);
+ }
+
+
+--- 379,391 ----
+
+
+ /*
+! * How much memory is available in Kbyte?
+ */
+ long_u
+ mch_avail_mem(
+ int special)
+ {
+! return GetFreeSpace(0) >> 10;
+ }
+
+
+*** ../vim-7.3.576/src/os_win32.c 2012-06-29 13:13:59.000000000 +0200
+--- src/os_win32.c 2012-06-29 15:39:52.000000000 +0200
+***************
+*** 4992,5009 ****
+
+
+ /*
+! * How much memory is available?
+ * Return sum of available physical and page file memory.
+ */
+ /*ARGSUSED*/
+ long_u
+ mch_avail_mem(int special)
+ {
+! MEMORYSTATUS ms;
+
+! ms.dwLength = sizeof(MEMORYSTATUS);
+! GlobalMemoryStatus(&ms);
+! return (long_u) (ms.dwAvailPhys + ms.dwAvailPageFile);
+ }
+
+ #ifdef FEAT_MBYTE
+--- 4992,5020 ----
+
+
+ /*
+! * How much memory is available in Kbyte?
+ * Return sum of available physical and page file memory.
+ */
+ /*ARGSUSED*/
+ long_u
+ mch_avail_mem(int special)
+ {
+! if (g_PlatformId != VER_PLATFORM_WIN32_NT)
+! {
+! MEMORYSTATUS ms;
+
+! ms.dwLength = sizeof(MEMORYSTATUS);
+! GlobalMemoryStatus(&ms);
+! return (long_u)((ms.dwAvailPhys + ms.dwAvailPageFile) >> 10);
+! }
+! else
+! {
+! MEMORYSTATUSEX ms;
+!
+! ms.dwLength = sizeof(MEMORYSTATUSEX);
+! GlobalMemoryStatusEx(&ms);
+! return (long_u)((ms.ullAvailPhys + ms.ullAvailPageFile) >> 10);
+! }
+ }
+
+ #ifdef FEAT_MBYTE
+*** ../vim-7.3.576/src/version.c 2012-06-29 15:04:34.000000000 +0200
+--- src/version.c 2012-06-29 15:45:44.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 577,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+75. You start wondering whether you could actually upgrade your brain
+ with a Pentium Pro microprocessor 80. The upgrade works just fine.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.578 b/source/ap/vim/patches/7.3.578
new file mode 100644
index 000000000..9b0aedd26
--- /dev/null
+++ b/source/ap/vim/patches/7.3.578
@@ -0,0 +1,80 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.578
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.578
+Problem: Misplaced declaration.
+Solution: Move declaration to start of block.
+Files: src/if_py_both.h
+
+
+*** ../vim-7.3.577/src/if_py_both.h 2012-06-29 12:54:32.000000000 +0200
+--- src/if_py_both.h 2012-06-29 16:15:29.000000000 +0200
+***************
+*** 818,838 ****
+
+ if (valObject == NULL)
+ {
+ if (di == NULL)
+ {
+ PyErr_SetString(PyExc_IndexError, _("no such key in dictionary"));
+ return -1;
+ }
+! hashitem_T *hi = hash_find(&d->dv_hashtab, di->di_key);
+ hash_remove(&d->dv_hashtab, hi);
+ dictitem_free(di);
+ return 0;
+ }
+
+ if (ConvertFromPyObject(valObject, &tv) == -1)
+- {
+ return -1;
+- }
+
+ if (di == NULL)
+ {
+--- 818,838 ----
+
+ if (valObject == NULL)
+ {
++ hashitem_T *hi;
++
+ if (di == NULL)
+ {
+ PyErr_SetString(PyExc_IndexError, _("no such key in dictionary"));
+ return -1;
+ }
+! hi = hash_find(&d->dv_hashtab, di->di_key);
+ hash_remove(&d->dv_hashtab, hi);
+ dictitem_free(di);
+ return 0;
+ }
+
+ if (ConvertFromPyObject(valObject, &tv) == -1)
+ return -1;
+
+ if (di == NULL)
+ {
+*** ../vim-7.3.577/src/version.c 2012-06-29 15:51:26.000000000 +0200
+--- src/version.c 2012-06-29 16:18:10.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 578,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+77. The phone company asks you to test drive their new PBX system
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.579 b/source/ap/vim/patches/7.3.579
new file mode 100644
index 000000000..ed618fe72
--- /dev/null
+++ b/source/ap/vim/patches/7.3.579
@@ -0,0 +1,232 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.579
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.579 (after 7.3.569)
+Problem: Can't compile with Python 2.5.
+Solution: Use PyCObject when Capsules are not available.
+Files: src/if_py_both.h, src/if_python.c, src/if_python3.c
+
+
+*** ../vim-7.3.578/src/if_py_both.h 2012-06-29 16:19:46.000000000 +0200
+--- src/if_py_both.h 2012-06-29 16:15:29.000000000 +0200
+***************
+*** 56,62 ****
+ /* name, function, calling, documentation */
+ {"write", OutputWrite, 1, ""},
+ {"writelines", OutputWritelines, 1, ""},
+! {"flush", OutputFlush, 1, ""},
+ { NULL, NULL, 0, NULL}
+ };
+
+--- 56,62 ----
+ /* name, function, calling, documentation */
+ {"write", OutputWrite, 1, ""},
+ {"writelines", OutputWritelines, 1, ""},
+! {"flush", OutputFlush, 1, ""},
+ { NULL, NULL, 0, NULL}
+ };
+
+***************
+*** 506,513 ****
+ /* name, function, calling, documentation */
+ {"command", VimCommand, 1, "Execute a Vim ex-mode command" },
+ {"eval", VimEval, 1, "Evaluate an expression using Vim evaluator" },
+! {"bindeval", VimEvalPy, 1, "Like eval(), but returns objects attached to vim ones"},
+! {"strwidth", VimStrwidth, 1, "Screen string width, counts <Tab> as having width 1"},
+ { NULL, NULL, 0, NULL }
+ };
+
+--- 506,513 ----
+ /* name, function, calling, documentation */
+ {"command", VimCommand, 1, "Execute a Vim ex-mode command" },
+ {"eval", VimEval, 1, "Evaluate an expression using Vim evaluator" },
+! {"bindeval", VimEvalPy, 1, "Like eval(), but returns objects attached to vim ones"},
+! {"strwidth", VimStrwidth, 1, "Screen string width, counts <Tab> as having width 1"},
+ { NULL, NULL, 0, NULL }
+ };
+
+***************
+*** 2432,2448 ****
+--- 2432,2463 ----
+ convert_dl(PyObject *obj, typval_T *tv,
+ pytotvfunc py_to_tv, PyObject *lookupDict)
+ {
++ # ifdef PY_USE_CAPSULE
+ PyObject *capsule;
++ # else
++ PyCObject *cobject;
++ # endif
+ char hexBuf[sizeof(void *) * 2 + 3];
+
+ sprintf(hexBuf, "%p", obj);
+
++ # ifdef PY_USE_CAPSULE
+ capsule = PyDict_GetItemString(lookupDict, hexBuf);
+ if (capsule == NULL)
++ # else
++ cobject = (PyCObject *)PyDict_GetItemString(lookupDict, hexBuf);
++ if (cobject == NULL)
++ # endif
+ {
++ # ifdef PY_USE_CAPSULE
+ capsule = PyCapsule_New(tv, NULL, NULL);
+ PyDict_SetItemString(lookupDict, hexBuf, capsule);
+ Py_DECREF(capsule);
++ # else
++ cobject = PyCObject_FromVoidPtr(tv, NULL);
++ PyDict_SetItemString(lookupDict, hexBuf, cobject);
++ Py_DECREF(cobject);
++ # endif
+ if (py_to_tv(obj, tv, lookupDict) == -1)
+ {
+ tv->v_type = VAR_UNKNOWN;
+***************
+*** 2458,2464 ****
+ }
+ else
+ {
+! typval_T *v = PyCapsule_GetPointer(capsule, NULL);
+ copy_tv(v, tv);
+ }
+ return 0;
+--- 2473,2485 ----
+ }
+ else
+ {
+! typval_T *v;
+!
+! # ifdef PY_USE_CAPSULE
+! v = PyCapsule_GetPointer(capsule, NULL);
+! # else
+! v = PyCObject_AsVoidPtr(cobject);
+! # endif
+ copy_tv(v, tv);
+ }
+ return 0;
+*** ../vim-7.3.578/src/if_python.c 2012-06-29 12:54:32.000000000 +0200
+--- src/if_python.c 2012-06-29 16:17:44.000000000 +0200
+***************
+*** 71,76 ****
+--- 71,80 ----
+ # define PySequenceMethods Py_ssize_t
+ #endif
+
++ #if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02070000
++ # define PY_USE_CAPSULE
++ #endif
++
+ #if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02050000
+ # define PyInt Py_ssize_t
+ # define PyInquiry lenfunc
+***************
+*** 220,227 ****
+ # define PyObject_Malloc dll_PyObject_Malloc
+ # define PyObject_Free dll_PyObject_Free
+ # endif
+! # define PyCapsule_New dll_PyCapsule_New
+! # define PyCapsule_GetPointer dll_PyCapsule_GetPointer
+
+ /*
+ * Pointers for dynamic link
+--- 224,236 ----
+ # define PyObject_Malloc dll_PyObject_Malloc
+ # define PyObject_Free dll_PyObject_Free
+ # endif
+! # ifdef PY_USE_CAPSULE
+! # define PyCapsule_New dll_PyCapsule_New
+! # define PyCapsule_GetPointer dll_PyCapsule_GetPointer
+! # else
+! # define PyCObject_FromVoidPtr dll_PyCObject_FromVoidPtr
+! # define PyCObject_AsVoidPtr dll_PyCObject_AsVoidPtr
+! # endif
+
+ /*
+ * Pointers for dynamic link
+***************
+*** 309,316 ****
+--- 318,330 ----
+ static void* (*dll_PyObject_Malloc)(size_t);
+ static void (*dll_PyObject_Free)(void*);
+ # endif
++ # ifdef PY_USE_CAPSULE
+ static PyObject* (*dll_PyCapsule_New)(void *, char *, PyCapsule_Destructor);
+ static void* (*dll_PyCapsule_GetPointer)(PyObject *, char *);
++ # else
++ static PyCObject* (*dll_PyCObject_FromVoidPtr)(void *cobj, void (*destr)(void *));
++ static void* (*dll_PyCObject_AsVoidPtr)(PyCObject *);
++ # endif
+
+ static HINSTANCE hinstPython = 0; /* Instance of python.dll */
+
+***************
+*** 403,409 ****
+ {"PyType_Ready", (PYTHON_PROC*)&dll_PyType_Ready},
+ {"Py_BuildValue", (PYTHON_PROC*)&dll_Py_BuildValue},
+ {"Py_FindMethod", (PYTHON_PROC*)&dll_Py_FindMethod},
+! # if (PY_VERSION_HEX >= 0x02050000) && SIZEOF_SIZE_T != SIZEOF_INT
+ {"Py_InitModule4_64", (PYTHON_PROC*)&dll_Py_InitModule4},
+ # else
+ {"Py_InitModule4", (PYTHON_PROC*)&dll_Py_InitModule4},
+--- 417,424 ----
+ {"PyType_Ready", (PYTHON_PROC*)&dll_PyType_Ready},
+ {"Py_BuildValue", (PYTHON_PROC*)&dll_Py_BuildValue},
+ {"Py_FindMethod", (PYTHON_PROC*)&dll_Py_FindMethod},
+! # if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02050000 \
+! && SIZEOF_SIZE_T != SIZEOF_INT
+ {"Py_InitModule4_64", (PYTHON_PROC*)&dll_Py_InitModule4},
+ # else
+ {"Py_InitModule4", (PYTHON_PROC*)&dll_Py_InitModule4},
+***************
+*** 424,431 ****
+--- 439,451 ----
+ {"PyObject_Malloc", (PYTHON_PROC*)&dll_PyObject_Malloc},
+ {"PyObject_Free", (PYTHON_PROC*)&dll_PyObject_Free},
+ # endif
++ # ifdef PY_USE_CAPSULE
+ {"PyCapsule_New", (PYTHON_PROC*)&dll_PyCapsule_New},
+ {"PyCapsule_GetPointer", (PYTHON_PROC*)&dll_PyCapsule_GetPointer},
++ # else
++ {"PyCObject_FromVoidPtr", (PYTHON_PROC*)&dll_PyCObject_FromVoidPtr},
++ {"PyCObject_AsVoidPtr", (PYTHON_PROC*)&dll_PyCObject_AsVoidPtr},
++ # endif
+ {"", NULL},
+ };
+
+*** ../vim-7.3.578/src/if_python3.c 2012-06-29 12:54:32.000000000 +0200
+--- src/if_python3.c 2012-06-29 16:16:54.000000000 +0200
+***************
+*** 75,80 ****
+--- 75,83 ----
+ # define CODEC_ERROR_HANDLER NULL
+ #endif
+
++ /* Python 3 does not support CObjects, always use Capsules */
++ #define PY_USE_CAPSULE
++
+ #define PyInt Py_ssize_t
+ #define PyString_Check(obj) PyUnicode_Check(obj)
+ #define PyString_AsBytes(obj) PyUnicode_AsEncodedString(obj, (char *)ENC_OPT, CODEC_ERROR_HANDLER)
+*** ../vim-7.3.578/src/version.c 2012-06-29 16:19:46.000000000 +0200
+--- src/version.c 2012-06-29 16:21:25.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 579,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+78. You find yourself dialing IP numbers on the phone.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.580 b/source/ap/vim/patches/7.3.580
new file mode 100644
index 000000000..c2c2a5371
--- /dev/null
+++ b/source/ap/vim/patches/7.3.580
@@ -0,0 +1,52 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.580
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.580
+Problem: Warning on 64 bit MS-Windows.
+Solution: Add type cast. (Mike Williams)
+Files: src/if_py_both.h
+
+
+*** ../vim-7.3.579/src/if_py_both.h 2012-06-29 16:28:23.000000000 +0200
+--- src/if_py_both.h 2012-06-29 17:49:59.000000000 +0200
+***************
+*** 495,501 ****
+ if (!PyArg_ParseTuple(args, "s", &expr))
+ return NULL;
+
+! return PyLong_FromLong(mb_string2cells((char_u *)expr, STRLEN(expr)));
+ }
+
+ /*
+--- 495,501 ----
+ if (!PyArg_ParseTuple(args, "s", &expr))
+ return NULL;
+
+! return PyLong_FromLong(mb_string2cells((char_u *)expr, (int)STRLEN(expr)));
+ }
+
+ /*
+*** ../vim-7.3.579/src/version.c 2012-06-29 16:28:23.000000000 +0200
+--- src/version.c 2012-06-29 17:50:36.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 580,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+79. All of your most erotic dreams have a scrollbar at the right side.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.581 b/source/ap/vim/patches/7.3.581
new file mode 100644
index 000000000..553003039
--- /dev/null
+++ b/source/ap/vim/patches/7.3.581
@@ -0,0 +1,117 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.581
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.581
+Problem: Problems compiling with Python.
+Solution: Pick UCS2 or UCS4 function at runtime. (lilydjwg)
+Files: src/if_python.c
+
+
+*** ../vim-7.3.580/src/if_python.c 2012-06-29 16:28:23.000000000 +0200
+--- src/if_python.c 2012-06-29 19:10:53.000000000 +0200
+***************
+*** 196,202 ****
+ # define PyString_Size dll_PyString_Size
+ # define PyString_Type (*dll_PyString_Type)
+ # define PyUnicode_Type (*dll_PyUnicode_Type)
+! # define PyUnicodeUCS4_AsEncodedString (*dll_PyUnicodeUCS4_AsEncodedString)
+ # define PyFloat_AsDouble dll_PyFloat_AsDouble
+ # define PyFloat_FromDouble dll_PyFloat_FromDouble
+ # define PyFloat_Type (*dll_PyFloat_Type)
+--- 196,203 ----
+ # define PyString_Size dll_PyString_Size
+ # define PyString_Type (*dll_PyString_Type)
+ # define PyUnicode_Type (*dll_PyUnicode_Type)
+! # undef PyUnicode_AsEncodedString
+! # define PyUnicode_AsEncodedString py_PyUnicode_AsEncodedString
+ # define PyFloat_AsDouble dll_PyFloat_AsDouble
+ # define PyFloat_FromDouble dll_PyFloat_FromDouble
+ # define PyFloat_Type (*dll_PyFloat_Type)
+***************
+*** 290,296 ****
+ static PyInt(*dll_PyString_Size)(PyObject *);
+ static PyTypeObject* dll_PyString_Type;
+ static PyTypeObject* dll_PyUnicode_Type;
+! static PyObject *(*PyUnicodeUCS4_AsEncodedString)(PyObject *, char *, char *);
+ static double(*dll_PyFloat_AsDouble)(PyObject *);
+ static PyObject*(*dll_PyFloat_FromDouble)(double);
+ static PyTypeObject* dll_PyFloat_Type;
+--- 291,297 ----
+ static PyInt(*dll_PyString_Size)(PyObject *);
+ static PyTypeObject* dll_PyString_Type;
+ static PyTypeObject* dll_PyUnicode_Type;
+! static PyObject *(*py_PyUnicode_AsEncodedString)(PyObject *, char *, char *);
+ static double(*dll_PyFloat_AsDouble)(PyObject *);
+ static PyObject*(*dll_PyFloat_FromDouble)(double);
+ static PyTypeObject* dll_PyFloat_Type;
+***************
+*** 406,412 ****
+ {"PyString_Size", (PYTHON_PROC*)&dll_PyString_Size},
+ {"PyString_Type", (PYTHON_PROC*)&dll_PyString_Type},
+ {"PyUnicode_Type", (PYTHON_PROC*)&dll_PyUnicode_Type},
+- {"PyUnicodeUCS4_AsEncodedString", (PYTHON_PROC*)&dll_PyUnicodeUCS4_AsEncodedString},
+ {"PyFloat_Type", (PYTHON_PROC*)&dll_PyFloat_Type},
+ {"PyFloat_AsDouble", (PYTHON_PROC*)&dll_PyFloat_AsDouble},
+ {"PyFloat_FromDouble", (PYTHON_PROC*)&dll_PyFloat_FromDouble},
+--- 407,412 ----
+***************
+*** 471,476 ****
+--- 471,477 ----
+ python_runtime_link_init(char *libname, int verbose)
+ {
+ int i;
++ void *ucs_as_encoded_string;
+
+ #if !(defined(PY_NO_RTLD_GLOBAL) && defined(PY3_NO_RTLD_GLOBAL)) && defined(UNIX) && defined(FEAT_PYTHON3)
+ /* Can't have Python and Python3 loaded at the same time.
+***************
+*** 506,511 ****
+--- 507,531 ----
+ return FAIL;
+ }
+ }
++
++ /* Load unicode functions separately as only the ucs2 or the ucs4 functions
++ * will be present in the library. */
++ ucs_as_encoded_string = symbol_from_dll(hinstPython,
++ "PyUnicodeUCS2_AsEncodedString");
++ if (ucs_as_encoded_string == NULL)
++ ucs_as_encoded_string = symbol_from_dll(hinstPython,
++ "PyUnicodeUCS4_AsEncodedString");
++ if (ucs_as_encoded_string != NULL)
++ py_PyUnicode_AsEncodedString = ucs_as_encoded_string;
++ else
++ {
++ close_dll(hinstPython);
++ hinstPython = 0;
++ if (verbose)
++ EMSG2(_(e_loadfunc), "PyUnicode_UCSX_*");
++ return FAIL;
++ }
++
+ return OK;
+ }
+
+*** ../vim-7.3.580/src/version.c 2012-06-29 17:51:58.000000000 +0200
+--- src/version.c 2012-06-29 19:13:47.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 581,
+ /**/
+
+--
+ASCII stupid question, get a stupid ANSI.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.582 b/source/ap/vim/patches/7.3.582
new file mode 100644
index 000000000..4e118a7df
--- /dev/null
+++ b/source/ap/vim/patches/7.3.582
@@ -0,0 +1,61 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.582
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.582 (after 7.3.576)
+Problem: Missing parts of the test OK file.
+Solution: Add the missing parts.
+Files: src/testdir/test68.ok
+
+
+*** ../vim-7.3.581/src/testdir/test68.ok 2012-06-13 17:28:51.000000000 +0200
+--- src/testdir/test68.ok 2012-06-29 15:00:13.000000000 +0200
+***************
+*** 35,40 ****
+--- 35,48 ----
+
+
+ {
++ 1 a
++ b
++ # 1 a
++ # b
++ }
++
++
++ {
+ # 1 a
+ # b
+ }
+***************
+*** 48,50 ****
+--- 56,62 ----
+
+ { 1aa ^^2bb }
+
++
++ # 1 xxxxx
++ # foobar
++
+*** ../vim-7.3.581/src/version.c 2012-06-29 19:14:48.000000000 +0200
+--- src/version.c 2012-06-29 23:57:43.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 582,
+ /**/
+
+--
+If your nose runs, and your feet smell, you might be upside down.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.583 b/source/ap/vim/patches/7.3.583
new file mode 100644
index 000000000..2ea7f9d26
--- /dev/null
+++ b/source/ap/vim/patches/7.3.583
@@ -0,0 +1,79 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.583
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.583
+Problem: PyObject_NextNotImplemented is not defined before Python 2.7.
+ (Danek Duvall)
+Solution: Add #ifdefs.
+Files: src/if_python.c
+
+
+*** ../vim-7.3.582/src/if_python.c 2012-06-29 19:14:48.000000000 +0200
+--- src/if_python.c 2012-06-30 12:59:38.000000000 +0200
+***************
+*** 214,220 ****
+ # define Py_Finalize dll_Py_Finalize
+ # define Py_IsInitialized dll_Py_IsInitialized
+ # define _PyObject_New dll__PyObject_New
+! # define _PyObject_NextNotImplemented (*dll__PyObject_NextNotImplemented)
+ # define _Py_NoneStruct (*dll__Py_NoneStruct)
+ # define PyObject_Init dll__PyObject_Init
+ # define PyObject_GetIter dll_PyObject_GetIter
+--- 214,222 ----
+ # define Py_Finalize dll_Py_Finalize
+ # define Py_IsInitialized dll_Py_IsInitialized
+ # define _PyObject_New dll__PyObject_New
+! # if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02070000
+! # define _PyObject_NextNotImplemented (*dll__PyObject_NextNotImplemented)
+! # endif
+ # define _Py_NoneStruct (*dll__Py_NoneStruct)
+ # define PyObject_Init dll__PyObject_Init
+ # define PyObject_GetIter dll_PyObject_GetIter
+***************
+*** 310,316 ****
+--- 312,320 ----
+ static PyObject*(*dll__PyObject_New)(PyTypeObject *, PyObject *);
+ static PyObject*(*dll__PyObject_Init)(PyObject *, PyTypeObject *);
+ static PyObject* (*dll_PyObject_GetIter)(PyObject *);
++ # if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02070000
+ static iternextfunc dll__PyObject_NextNotImplemented;
++ # endif
+ static PyObject* dll__Py_NoneStruct;
+ # if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02020000
+ static int (*dll_PyType_IsSubtype)(PyTypeObject *, PyTypeObject *);
+***************
+*** 430,436 ****
+--- 434,442 ----
+ {"_PyObject_New", (PYTHON_PROC*)&dll__PyObject_New},
+ {"PyObject_Init", (PYTHON_PROC*)&dll__PyObject_Init},
+ {"PyObject_GetIter", (PYTHON_PROC*)&dll_PyObject_GetIter},
++ # if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02070000
+ {"_PyObject_NextNotImplemented", (PYTHON_PROC*)&dll__PyObject_NextNotImplemented},
++ # endif
+ {"_Py_NoneStruct", (PYTHON_PROC*)&dll__Py_NoneStruct},
+ # if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02020000
+ {"PyType_IsSubtype", (PYTHON_PROC*)&dll_PyType_IsSubtype},
+*** ../vim-7.3.582/src/version.c 2012-06-29 23:57:50.000000000 +0200
+--- src/version.c 2012-06-30 13:20:46.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 583,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+90. Instead of calling you to dinner, your spouse sends e-mail.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.584 b/source/ap/vim/patches/7.3.584
new file mode 100644
index 000000000..d7f1bdeb4
--- /dev/null
+++ b/source/ap/vim/patches/7.3.584
@@ -0,0 +1,134 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.584
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.584
+Problem: PyCObject is not always defined.
+Solution: Use PyObject instead.
+Files: src/if_py_both.h, src/if_python.c
+
+
+*** ../vim-7.3.583/src/if_py_both.h 2012-06-29 17:51:58.000000000 +0200
+--- src/if_py_both.h 2012-06-30 13:25:24.000000000 +0200
+***************
+*** 2432,2463 ****
+ convert_dl(PyObject *obj, typval_T *tv,
+ pytotvfunc py_to_tv, PyObject *lookupDict)
+ {
+- # ifdef PY_USE_CAPSULE
+ PyObject *capsule;
+- # else
+- PyCObject *cobject;
+- # endif
+ char hexBuf[sizeof(void *) * 2 + 3];
+
+ sprintf(hexBuf, "%p", obj);
+
+ # ifdef PY_USE_CAPSULE
+ capsule = PyDict_GetItemString(lookupDict, hexBuf);
+- if (capsule == NULL)
+ # else
+! cobject = (PyCObject *)PyDict_GetItemString(lookupDict, hexBuf);
+! if (cobject == NULL)
+ # endif
+ {
+ # ifdef PY_USE_CAPSULE
+ capsule = PyCapsule_New(tv, NULL, NULL);
+- PyDict_SetItemString(lookupDict, hexBuf, capsule);
+- Py_DECREF(capsule);
+ # else
+! cobject = PyCObject_FromVoidPtr(tv, NULL);
+! PyDict_SetItemString(lookupDict, hexBuf, cobject);
+! Py_DECREF(cobject);
+ # endif
+ if (py_to_tv(obj, tv, lookupDict) == -1)
+ {
+ tv->v_type = VAR_UNKNOWN;
+--- 2432,2456 ----
+ convert_dl(PyObject *obj, typval_T *tv,
+ pytotvfunc py_to_tv, PyObject *lookupDict)
+ {
+ PyObject *capsule;
+ char hexBuf[sizeof(void *) * 2 + 3];
+
+ sprintf(hexBuf, "%p", obj);
+
+ # ifdef PY_USE_CAPSULE
+ capsule = PyDict_GetItemString(lookupDict, hexBuf);
+ # else
+! capsule = (PyObject *)PyDict_GetItemString(lookupDict, hexBuf);
+ # endif
++ if (capsule == NULL)
+ {
+ # ifdef PY_USE_CAPSULE
+ capsule = PyCapsule_New(tv, NULL, NULL);
+ # else
+! capsule = PyCObject_FromVoidPtr(tv, NULL);
+ # endif
++ PyDict_SetItemString(lookupDict, hexBuf, capsule);
++ Py_DECREF(capsule);
+ if (py_to_tv(obj, tv, lookupDict) == -1)
+ {
+ tv->v_type = VAR_UNKNOWN;
+***************
+*** 2478,2484 ****
+ # ifdef PY_USE_CAPSULE
+ v = PyCapsule_GetPointer(capsule, NULL);
+ # else
+! v = PyCObject_AsVoidPtr(cobject);
+ # endif
+ copy_tv(v, tv);
+ }
+--- 2471,2477 ----
+ # ifdef PY_USE_CAPSULE
+ v = PyCapsule_GetPointer(capsule, NULL);
+ # else
+! v = PyCObject_AsVoidPtr(capsule);
+ # endif
+ copy_tv(v, tv);
+ }
+*** ../vim-7.3.583/src/if_python.c 2012-06-30 13:21:03.000000000 +0200
+--- src/if_python.c 2012-06-30 13:23:22.000000000 +0200
+***************
+*** 327,334 ****
+ static PyObject* (*dll_PyCapsule_New)(void *, char *, PyCapsule_Destructor);
+ static void* (*dll_PyCapsule_GetPointer)(PyObject *, char *);
+ # else
+! static PyCObject* (*dll_PyCObject_FromVoidPtr)(void *cobj, void (*destr)(void *));
+! static void* (*dll_PyCObject_AsVoidPtr)(PyCObject *);
+ # endif
+
+ static HINSTANCE hinstPython = 0; /* Instance of python.dll */
+--- 327,334 ----
+ static PyObject* (*dll_PyCapsule_New)(void *, char *, PyCapsule_Destructor);
+ static void* (*dll_PyCapsule_GetPointer)(PyObject *, char *);
+ # else
+! static PyObject* (*dll_PyCObject_FromVoidPtr)(void *cobj, void (*destr)(void *));
+! static void* (*dll_PyCObject_AsVoidPtr)(PyObject *);
+ # endif
+
+ static HINSTANCE hinstPython = 0; /* Instance of python.dll */
+*** ../vim-7.3.583/src/version.c 2012-06-30 13:21:03.000000000 +0200
+--- src/version.c 2012-06-30 13:33:08.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 584,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+91. It's Saturday afternoon in the middle of May and you
+ are on computer.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.585 b/source/ap/vim/patches/7.3.585
new file mode 100644
index 000000000..6509780c7
--- /dev/null
+++ b/source/ap/vim/patches/7.3.585
@@ -0,0 +1,56 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.585
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.585
+Problem: Calling changed_bytes() too often.
+Solution: Move changed_bytes() out of a loop. (Tor Perkins)
+Files: src/edit.c
+
+
+*** ../vim-7.3.584/src/edit.c 2012-06-29 15:04:34.000000000 +0200
+--- src/edit.c 2012-07-06 13:29:25.000000000 +0200
+***************
+*** 6350,6359 ****
+ * add the additional whitespace needed after the
+ * comment leader for the numbered list. */
+ for (i = 0; i < padding; i++)
+- {
+ ins_str((char_u *)" ");
+! changed_bytes(curwin->w_cursor.lnum, leader_len);
+! }
+ }
+ else
+ {
+--- 6350,6357 ----
+ * add the additional whitespace needed after the
+ * comment leader for the numbered list. */
+ for (i = 0; i < padding; i++)
+ ins_str((char_u *)" ");
+! changed_bytes(curwin->w_cursor.lnum, leader_len);
+ }
+ else
+ {
+*** ../vim-7.3.584/src/version.c 2012-07-06 13:36:02.000000000 +0200
+--- src/version.c 2012-07-06 13:35:03.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 585,
+ /**/
+
+--
+From "know your smileys":
+ :'-D Laughing so much that they're crying
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.586 b/source/ap/vim/patches/7.3.586
new file mode 100644
index 000000000..889ebd137
--- /dev/null
+++ b/source/ap/vim/patches/7.3.586
@@ -0,0 +1,103 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.586
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.586
+Problem: When compiling with Cygwin or MingW MEMORYSTATUSEX is not defined.
+Solution: Set the default for WINVER to 0x0500.
+Files: src/Make_ming.mak, src/Make_cyg.mak
+
+
+*** ../vim-7.3.585/src/Make_ming.mak 2012-04-20 16:13:21.000000000 +0200
+--- src/Make_ming.mak 2012-06-30 21:23:55.000000000 +0200
+***************
+*** 52,58 ****
+ OLE=no
+ # Set the default $(WINVER) to make it work with pre-Win2k
+ ifndef WINVER
+! WINVER = 0x0400
+ endif
+ # Set to yes to enable Cscope support
+ CSCOPE=yes
+--- 52,58 ----
+ OLE=no
+ # Set the default $(WINVER) to make it work with pre-Win2k
+ ifndef WINVER
+! WINVER = 0x0500
+ endif
+ # Set to yes to enable Cscope support
+ CSCOPE=yes
+*** ../vim-7.3.585/src/Make_cyg.mak 2011-09-30 16:56:00.000000000 +0200
+--- src/Make_cyg.mak 2012-06-30 21:23:42.000000000 +0200
+***************
+*** 1,6 ****
+ #
+ # Makefile for VIM on Win32, using Cygnus gcc
+! # Last updated by Dan Sharp. Last Change: 2010 Nov 03
+ #
+ # Also read INSTALLpc.txt!
+ #
+--- 1,6 ----
+ #
+ # Makefile for VIM on Win32, using Cygnus gcc
+! # Last updated by Dan Sharp. Last Change: 2012 Jun 30
+ #
+ # Also read INSTALLpc.txt!
+ #
+***************
+*** 48,54 ****
+ # -L/lib/w32api to EXTRA_LIBS.
+ # POSTSCRIPT no or yes: set to yes for PostScript printing (no)
+ # FEATURES TINY, SMALL, NORMAL, BIG or HUGE (BIG)
+! # WINVER Lowest Win32 version to support. (0x0400)
+ # CSCOPE no or yes: to include cscope interface support (yes)
+ # OPTIMIZE SPACE, SPEED, or MAXSPEED: set optimization level (MAXSPEED)
+ # NETBEANS no or yes: to include netbeans interface support (yes when GUI
+--- 48,54 ----
+ # -L/lib/w32api to EXTRA_LIBS.
+ # POSTSCRIPT no or yes: set to yes for PostScript printing (no)
+ # FEATURES TINY, SMALL, NORMAL, BIG or HUGE (BIG)
+! # WINVER Lowest Win32 version to support. (0x0500)
+ # CSCOPE no or yes: to include cscope interface support (yes)
+ # OPTIMIZE SPACE, SPEED, or MAXSPEED: set optimization level (MAXSPEED)
+ # NETBEANS no or yes: to include netbeans interface support (yes when GUI
+***************
+*** 85,91 ****
+ endif
+
+ ifndef WINVER
+! WINVER = 0x0400
+ endif
+
+ ifndef CSCOPE
+--- 85,91 ----
+ endif
+
+ ifndef WINVER
+! WINVER = 0x0500
+ endif
+
+ ifndef CSCOPE
+*** ../vim-7.3.585/src/version.c 2012-07-06 13:36:36.000000000 +0200
+--- src/version.c 2012-07-06 13:39:41.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 586,
+ /**/
+
+--
+From "know your smileys":
+ :-& Eating spaghetti
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.587 b/source/ap/vim/patches/7.3.587
new file mode 100644
index 000000000..22252318b
--- /dev/null
+++ b/source/ap/vim/patches/7.3.587
@@ -0,0 +1,84 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.587
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.587
+Problem: Compiler warning for local var shadowing global var.
+Solution: Rename the var and move it to an inner block. (Christian Brabandt)
+Files: src/buffer.c
+
+
+*** ../vim-7.3.586/src/buffer.c 2012-06-20 17:54:34.000000000 +0200
+--- src/buffer.c 2012-07-06 16:19:32.000000000 +0200
+***************
+*** 1363,1371 ****
+ int action;
+ {
+ buf_T *prevbuf;
+- #ifdef FEAT_WINDOWS
+- win_T *prevwin;
+- #endif
+ int unload = (action == DOBUF_UNLOAD || action == DOBUF_DEL
+ || action == DOBUF_WIPE);
+
+--- 1363,1368 ----
+***************
+*** 1406,1412 ****
+ #endif
+ {
+ #ifdef FEAT_WINDOWS
+! prevwin = curwin;
+ #endif
+ if (prevbuf == curbuf)
+ u_sync(FALSE);
+--- 1403,1409 ----
+ #endif
+ {
+ #ifdef FEAT_WINDOWS
+! win_T *previouswin = curwin;
+ #endif
+ if (prevbuf == curbuf)
+ u_sync(FALSE);
+***************
+*** 1415,1423 ****
+ && !P_HID(prevbuf)
+ && !bufIsChanged(prevbuf)) ? DOBUF_UNLOAD : 0, FALSE);
+ #ifdef FEAT_WINDOWS
+! if (curwin != prevwin && win_valid(prevwin))
+ /* autocommands changed curwin, Grr! */
+! curwin = prevwin;
+ #endif
+ }
+ }
+--- 1412,1420 ----
+ && !P_HID(prevbuf)
+ && !bufIsChanged(prevbuf)) ? DOBUF_UNLOAD : 0, FALSE);
+ #ifdef FEAT_WINDOWS
+! if (curwin != previouswin && win_valid(previouswin))
+ /* autocommands changed curwin, Grr! */
+! curwin = previouswin;
+ #endif
+ }
+ }
+*** ../vim-7.3.586/src/version.c 2012-07-06 13:40:44.000000000 +0200
+--- src/version.c 2012-07-06 16:19:08.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 587,
+ /**/
+
+--
+There's no place like $(HOME)!
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.588 b/source/ap/vim/patches/7.3.588
new file mode 100644
index 000000000..6dfabd073
--- /dev/null
+++ b/source/ap/vim/patches/7.3.588
@@ -0,0 +1,85 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.588
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.588
+Problem: Crash on NULL pointer.
+Solution: Fix the immediate problem by checking for NULL. (Lech Lorens)
+Files: src/window.c
+
+
+*** ../vim-7.3.587/src/window.c 2012-06-13 18:15:13.000000000 +0200
+--- src/window.c 2012-07-06 16:32:59.000000000 +0200
+***************
+*** 2184,2190 ****
+ }
+
+ #ifdef FEAT_AUTOCMD
+! if (win->w_closing || win->w_buffer->b_closing)
+ return; /* window is already being closed */
+ if (win == aucmd_win)
+ {
+--- 2184,2190 ----
+ }
+
+ #ifdef FEAT_AUTOCMD
+! if (win->w_closing || (win->w_buffer != NULL && win->w_buffer->b_closing))
+ return; /* window is already being closed */
+ if (win == aucmd_win)
+ {
+***************
+*** 3723,3729 ****
+ enter_tabpage(tp, old_curbuf, trigger_autocmds)
+ tabpage_T *tp;
+ buf_T *old_curbuf UNUSED;
+! int trigger_autocmds UNUSED;
+ {
+ int old_off = tp->tp_firstwin->w_winrow;
+ win_T *next_prevwin = tp->tp_prevwin;
+--- 3723,3729 ----
+ enter_tabpage(tp, old_curbuf, trigger_autocmds)
+ tabpage_T *tp;
+ buf_T *old_curbuf UNUSED;
+! int trigger_autocmds UNUSED;
+ {
+ int old_off = tp->tp_firstwin->w_winrow;
+ win_T *next_prevwin = tp->tp_prevwin;
+***************
+*** 3868,3874 ****
+ void
+ goto_tabpage_tp(tp, trigger_autocmds)
+ tabpage_T *tp;
+! int trigger_autocmds;
+ {
+ /* Don't repeat a message in another tab page. */
+ set_keep_msg(NULL, 0);
+--- 3868,3874 ----
+ void
+ goto_tabpage_tp(tp, trigger_autocmds)
+ tabpage_T *tp;
+! int trigger_autocmds;
+ {
+ /* Don't repeat a message in another tab page. */
+ set_keep_msg(NULL, 0);
+*** ../vim-7.3.587/src/version.c 2012-07-06 16:21:58.000000000 +0200
+--- src/version.c 2012-07-06 16:37:47.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 588,
+ /**/
+
+--
+Momento mori, ergo carpe diem
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.589 b/source/ap/vim/patches/7.3.589
new file mode 100644
index 000000000..fdda2b95f
--- /dev/null
+++ b/source/ap/vim/patches/7.3.589
@@ -0,0 +1,69 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.589
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.589
+Problem: Crash when $HOME is not set.
+Solution: Check for a NULL pointer. (Chris Webb)
+Files: src/misc1.c
+
+
+*** ../vim-7.3.588/src/misc1.c 2012-06-29 15:04:34.000000000 +0200
+--- src/misc1.c 2012-07-06 16:44:39.000000000 +0200
+***************
+*** 4496,4503 ****
+ #else
+ homedir_env_orig = homedir_env = mch_getenv((char_u *)"HOME");
+ #endif
+ #if defined(FEAT_MODIFY_FNAME) || defined(WIN3264)
+! if (vim_strchr(homedir_env, '~') != NULL)
+ {
+ int usedlen = 0;
+ int flen;
+--- 4496,4507 ----
+ #else
+ homedir_env_orig = homedir_env = mch_getenv((char_u *)"HOME");
+ #endif
++ /* Empty is the same as not set. */
++ if (homedir_env != NULL && *homedir_env == NUL)
++ homedir_env = NULL;
++
+ #if defined(FEAT_MODIFY_FNAME) || defined(WIN3264)
+! if (homedir_env != NULL && vim_strchr(homedir_env, '~') != NULL)
+ {
+ int usedlen = 0;
+ int flen;
+***************
+*** 4513,4520 ****
+ }
+ #endif
+
+- if (homedir_env != NULL && *homedir_env == NUL)
+- homedir_env = NULL;
+ if (homedir_env != NULL)
+ envlen = STRLEN(homedir_env);
+
+--- 4517,4522 ----
+*** ../vim-7.3.588/src/version.c 2012-07-06 16:39:43.000000000 +0200
+--- src/version.c 2012-07-06 16:45:18.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 589,
+ /**/
+
+--
+I AM THANKFUL...
+...for the taxes that I pay because it means that I am employed.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.590 b/source/ap/vim/patches/7.3.590
new file mode 100644
index 000000000..4e524f79b
--- /dev/null
+++ b/source/ap/vim/patches/7.3.590
@@ -0,0 +1,61 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.590
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.590
+Problem: The '< and '> marks cannot be set directly.
+Solution: Allow setting '< and '>. (Christian Brabandt)
+Files: src/mark.c
+
+
+*** ../vim-7.3.589/src/mark.c 2011-02-25 15:11:17.000000000 +0100
+--- src/mark.c 2012-07-06 17:47:23.000000000 +0200
+***************
+*** 98,103 ****
+--- 98,116 ----
+ return OK;
+ }
+
++ #ifdef FEAT_VISUAL
++ if (c == '<')
++ {
++ curbuf->b_visual.vi_start = *pos;
++ return OK;
++ }
++ if (c == '>')
++ {
++ curbuf->b_visual.vi_end = *pos;
++ return OK;
++ }
++ #endif
++
+ #ifndef EBCDIC
+ if (c > 'z') /* some islower() and isupper() cannot handle
+ characters above 127 */
+*** ../vim-7.3.589/src/version.c 2012-07-06 16:49:37.000000000 +0200
+--- src/version.c 2012-07-06 17:49:00.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 590,
+ /**/
+
+--
+The primary purpose of the DATA statement is to give names to constants;
+instead of referring to pi as 3.141592653589793 at every appearance, the
+variable PI can be given that value with a DATA statement and used instead
+of the longer form of the constant. This also simplifies modifying the
+program, should the value of pi change.
+ -- FORTRAN manual for Xerox Computers
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.591 b/source/ap/vim/patches/7.3.591
new file mode 100644
index 000000000..180fe6080
--- /dev/null
+++ b/source/ap/vim/patches/7.3.591
@@ -0,0 +1,208 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.591
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.591
+Problem: Can only move to a tab by absolute number.
+Solution: Move a number of tabs to the left or the right. (Lech Lorens)
+Files: runtime/doc/tabpage.txt, src/ex_cmds.h, src/ex_docmd.c,
+ src/testdir/test62.in, src/testdir/test62.ok, src/window.c
+
+
+*** ../vim-7.3.590/runtime/doc/tabpage.txt 2010-08-15 21:57:17.000000000 +0200
+--- runtime/doc/tabpage.txt 2012-07-06 18:10:06.000000000 +0200
+***************
+*** 173,182 ****
+--- 173,192 ----
+ REORDERING TAB PAGES:
+
+ :tabm[ove] [N] *:tabm* *:tabmove*
++ :[N]tabm[ove]
+ Move the current tab page to after tab page N. Use zero to
+ make the current tab page the first one. Without N the tab
+ page is made the last one.
+
++ :tabm[ove] +[N]
++ :tabm[ove] -[N]
++ Move the current tab page N places to the right (with +) or to
++ the left (with -).
++
++ Note that although it is possible to move a tab behind the N-th one by using
++ :Ntabmove, it is impossible to move it by N places by using :+Ntabmove. For
++ clarification what +N means in this context see |[range]|.
++
+
+ LOOPING OVER TAB PAGES:
+
+*** ../vim-7.3.590/src/ex_cmds.h 2012-05-18 18:47:11.000000000 +0200
+--- src/ex_cmds.h 2012-07-06 18:10:13.000000000 +0200
+***************
+*** 944,950 ****
+ EX(CMD_tabfirst, "tabfirst", ex_tabnext,
+ TRLBAR),
+ EX(CMD_tabmove, "tabmove", ex_tabmove,
+! RANGE|NOTADR|ZEROR|COUNT|TRLBAR|ZEROR),
+ EX(CMD_tablast, "tablast", ex_tabnext,
+ TRLBAR),
+ EX(CMD_tabnext, "tabnext", ex_tabnext,
+--- 944,950 ----
+ EX(CMD_tabfirst, "tabfirst", ex_tabnext,
+ TRLBAR),
+ EX(CMD_tabmove, "tabmove", ex_tabmove,
+! RANGE|NOTADR|ZEROR|EXTRA|NOSPC|TRLBAR),
+ EX(CMD_tablast, "tablast", ex_tabnext,
+ TRLBAR),
+ EX(CMD_tabnext, "tabnext", ex_tabnext,
+*** ../vim-7.3.590/src/ex_docmd.c 2012-06-06 19:02:40.000000000 +0200
+--- src/ex_docmd.c 2012-07-06 18:16:25.000000000 +0200
+***************
+*** 7478,7484 ****
+ ex_tabmove(eap)
+ exarg_T *eap;
+ {
+! tabpage_move(eap->addr_count == 0 ? 9999 : (int)eap->line2);
+ }
+
+ /*
+--- 7478,7519 ----
+ ex_tabmove(eap)
+ exarg_T *eap;
+ {
+! int tab_number = 9999;
+!
+! if (eap->arg && *eap->arg != NUL)
+! {
+! char_u *p = eap->arg;
+! int relative = 0; /* argument +N/-N means: move N places to the
+! * right/left relative to the current position. */
+!
+! if (*eap->arg == '-')
+! {
+! relative = -1;
+! p = eap->arg + 1;
+! }
+! else if (*eap->arg == '+')
+! {
+! relative = 1;
+! p = eap->arg + 1;
+! }
+! else
+! p = eap->arg;
+!
+! if (p == skipdigits(p))
+! {
+! /* No numbers as argument. */
+! eap->errmsg = e_invarg;
+! return;
+! }
+!
+! tab_number = getdigits(&p);
+! if (relative != 0)
+! tab_number = tab_number * relative + tabpage_index(curtab) - 1;;
+! }
+! else if (eap->addr_count != 0)
+! tab_number = eap->line2;
+!
+! tabpage_move(tab_number);
+ }
+
+ /*
+*** ../vim-7.3.590/src/testdir/test62.in 2012-03-07 22:55:17.000000000 +0100
+--- src/testdir/test62.in 2012-07-06 18:10:13.000000000 +0200
+***************
+*** 93,98 ****
+--- 93,126 ----
+ :endif
+ :"
+ :"
++ :for i in range(9) | tabnew | endfor
++ 1gt
++ Go=tabpagenr() 
++ :tabmove 5
++ i=tabpagenr() 
++ :tabmove -2
++ i=tabpagenr() 
++ :tabmove +4
++ i=tabpagenr() 
++ :tabmove
++ i=tabpagenr() 
++ :tabmove -20
++ i=tabpagenr() 
++ :tabmove +20
++ i=tabpagenr() 
++ :3tabmove
++ i=tabpagenr() 
++ :7tabmove 5
++ i=tabpagenr() 
++ :let a='No error caught.'
++ :try
++ :tabmove foo
++ :catch E474
++ :let a='E474 caught.'
++ :endtry
++ i=a 
++ :"
++ :"
+ :/^Results/,$w! test.out
+ :qa!
+ ENDTEST
+*** ../vim-7.3.590/src/testdir/test62.ok 2012-02-22 19:13:00.000000000 +0100
+--- src/testdir/test62.ok 2012-07-06 18:10:13.000000000 +0200
+***************
+*** 8,10 ****
+--- 8,20 ----
+ tab drop 1: pass
+ tab drop 2: pass
+ tab drop 3: pass
++ 1
++ 6
++ 4
++ 8
++ 10
++ 1
++ 10
++ 4
++ 6
++ E474 caught.
+*** ../vim-7.3.590/src/window.c 2012-07-06 16:39:43.000000000 +0200
+--- src/window.c 2012-07-06 18:10:13.000000000 +0200
+***************
+*** 3929,3935 ****
+ }
+
+ /* Re-insert it at the specified position. */
+! if (n == 0)
+ {
+ curtab->tp_next = first_tabpage;
+ first_tabpage = curtab;
+--- 3929,3935 ----
+ }
+
+ /* Re-insert it at the specified position. */
+! if (n <= 0)
+ {
+ curtab->tp_next = first_tabpage;
+ first_tabpage = curtab;
+*** ../vim-7.3.590/src/version.c 2012-07-06 17:51:24.000000000 +0200
+--- src/version.c 2012-07-06 18:11:08.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 591,
+ /**/
+
+--
+Bare feet magnetize sharp metal objects so they point upward from the
+floor -- especially in the dark.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.592 b/source/ap/vim/patches/7.3.592
new file mode 100644
index 000000000..be13ef744
--- /dev/null
+++ b/source/ap/vim/patches/7.3.592
@@ -0,0 +1,126 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.592
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.592
+Problem: Vim on GTK does not support g:browsefilter.
+Solution: Add a GtkFileFilter to the file chooser. (Christian Brabandt)
+Files: src/gui_gtk.c
+
+
+*** ../vim-7.3.591/src/gui_gtk.c 2012-06-06 16:14:36.000000000 +0200
+--- src/gui_gtk.c 2012-07-10 13:08:06.000000000 +0200
+***************
+*** 840,846 ****
+ char_u *dflt,
+ char_u *ext UNUSED,
+ char_u *initdir,
+! char_u *filter UNUSED)
+ {
+ #ifdef USE_FILE_CHOOSER
+ GtkWidget *fc;
+--- 840,846 ----
+ char_u *dflt,
+ char_u *ext UNUSED,
+ char_u *initdir,
+! char_u *filter)
+ {
+ #ifdef USE_FILE_CHOOSER
+ GtkWidget *fc;
+***************
+*** 848,853 ****
+--- 848,854 ----
+ char_u dirbuf[MAXPATHL];
+ guint log_handler;
+ const gchar *domain = "Gtk";
++ GtkFileFilter *gfilter;
+
+ title = CONVERT_TO_UTF8(title);
+
+***************
+*** 879,884 ****
+--- 880,924 ----
+ NULL);
+ gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(fc),
+ (const gchar *)dirbuf);
++
++ if (filter != NULL && *filter != NUL)
++ {
++ int i = 0;
++ char_u *patt;
++ char_u *p = filter;
++
++ gfilter = gtk_file_filter_new();
++ patt = alloc(STRLEN(filter));
++ while (p != NULL && *p != NUL)
++ {
++ if (*p == '\n' || *p == ';' || *p == '\t')
++ {
++ STRNCPY(patt, filter, i);
++ patt[i] = '\0';
++ if (*p == '\t')
++ gtk_file_filter_set_name(gfilter, (gchar *)patt);
++ else
++ {
++ gtk_file_filter_add_pattern(gfilter, (gchar *)patt);
++ if (*p == '\n')
++ {
++ gtk_file_chooser_add_filter((GtkFileChooser *)fc,
++ gfilter);
++ if (*(p + 1) != NUL)
++ gfilter = gtk_file_filter_new();
++ }
++ }
++ filter = ++p;
++ i = 0;
++ }
++ else
++ {
++ p++;
++ i++;
++ }
++ }
++ vim_free(patt);
++ }
+ if (saving && dflt != NULL && *dflt != NUL)
+ gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(fc), (char *)dflt);
+
+***************
+*** 1304,1310 ****
+ gtk_widget_show(entry);
+
+ /* Make Enter work like pressing OK. */
+! gtk_entry_set_activates_default(GTK_ENTRY(entry), TRUE);
+
+ text = CONVERT_TO_UTF8(textfield);
+ gtk_entry_set_text(GTK_ENTRY(entry), (const char *)text);
+--- 1344,1350 ----
+ gtk_widget_show(entry);
+
+ /* Make Enter work like pressing OK. */
+! gtk_entry_set_activates_default(GTK_ENTRY(entry), TRUE);
+
+ text = CONVERT_TO_UTF8(textfield);
+ gtk_entry_set_text(GTK_ENTRY(entry), (const char *)text);
+*** ../vim-7.3.591/src/version.c 2012-07-06 18:27:34.000000000 +0200
+--- src/version.c 2012-07-10 13:00:29.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 592,
+ /**/
+
+--
+To be rich is not the end, but only a change of worries.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.593 b/source/ap/vim/patches/7.3.593
new file mode 100644
index 000000000..b8f26748f
--- /dev/null
+++ b/source/ap/vim/patches/7.3.593
@@ -0,0 +1,81 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.593
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.593
+Problem: No easy way to decide if b:browsefilter will work.
+Solution: Add the browsefilter feature.
+Files: src/gui_gtk.c, src/eval.c, src/vim.h
+
+
+*** ../vim-7.3.592/src/gui_gtk.c 2012-07-10 13:12:46.000000000 +0200
+--- src/gui_gtk.c 2012-07-10 13:40:38.000000000 +0200
+***************
+*** 779,787 ****
+ /*
+ * Implementation of the file selector related stuff
+ */
+- #if GTK_CHECK_VERSION(2,4,0)
+- # define USE_FILE_CHOOSER
+- #endif
+
+ #ifndef USE_FILE_CHOOSER
+ static void
+--- 779,784 ----
+*** ../vim-7.3.592/src/eval.c 2012-06-29 12:54:32.000000000 +0200
+--- src/eval.c 2012-07-10 13:34:10.000000000 +0200
+***************
+*** 12044,12049 ****
+--- 12044,12054 ----
+ "all_builtin_terms",
+ # endif
+ #endif
++ #if defined(FEAT_BROWSE) && (defined(USE_FILE_CHOOSER) \
++ || defined(FEAT_GUI_W32) \
++ || defined(FEAT_GUI_MOTIF))
++ "browsefilter",
++ #endif
+ #ifdef FEAT_BYTEOFF
+ "byte_offset",
+ #endif
+*** ../vim-7.3.592/src/vim.h 2012-06-13 17:28:51.000000000 +0200
+--- src/vim.h 2012-07-10 13:30:44.000000000 +0200
+***************
+*** 2125,2130 ****
+--- 2125,2136 ----
+ # endif
+ #endif
+
++ #if defined(FEAT_BROWSE) && defined(GTK_CHECK_VERSION)
++ # if GTK_CHECK_VERSION(2,4,0)
++ # define USE_FILE_CHOOSER
++ # endif
++ #endif
++
+ #ifndef FEAT_NETBEANS_INTG
+ # undef NBDEBUG
+ #endif
+*** ../vim-7.3.592/src/version.c 2012-07-10 13:12:46.000000000 +0200
+--- src/version.c 2012-07-10 13:34:50.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 593,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+102. When filling out your driver's license application, you give
+ your IP address.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.594 b/source/ap/vim/patches/7.3.594
new file mode 100644
index 000000000..3f7d3b261
--- /dev/null
+++ b/source/ap/vim/patches/7.3.594
@@ -0,0 +1,171 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.594
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.594
+Problem: The X command server doesn't work perfectly. It sends an empty
+ reply for as-keys requests.
+Solution: Remove duplicate ga_init2(). Do not send a reply for as-keys
+ requests. (Brian Burns)
+Files: src/if_xcmdsrv.c
+
+
+*** ../vim-7.3.593/src/if_xcmdsrv.c 2010-08-15 21:57:27.000000000 +0200
+--- src/if_xcmdsrv.c 2012-07-10 14:15:59.000000000 +0200
+***************
+*** 655,661 ****
+ if (SendInit(dpy) < 0)
+ return NULL;
+ }
+- ga_init2(&ga, 1, 100);
+
+ /*
+ * Read the registry property.
+--- 655,660 ----
+***************
+*** 1198,1206 ****
+ if ((*p == 'c' || *p == 'k') && (p[1] == 0))
+ {
+ Window resWindow;
+! char_u *name, *script, *serial, *end, *res;
+ Bool asKeys = *p == 'k';
+- garray_T reply;
+ char_u *enc;
+
+ /*
+--- 1197,1204 ----
+ if ((*p == 'c' || *p == 'k') && (p[1] == 0))
+ {
+ Window resWindow;
+! char_u *name, *script, *serial, *end;
+ Bool asKeys = *p == 'k';
+ char_u *enc;
+
+ /*
+***************
+*** 1256,1305 ****
+ if (script == NULL || name == NULL)
+ continue;
+
+! /*
+! * Initialize the result property, so that we're ready at any
+! * time if we need to return an error.
+! */
+! if (resWindow != None)
+! {
+! ga_init2(&reply, 1, 100);
+ #ifdef FEAT_MBYTE
+! ga_grow(&reply, 50 + STRLEN(p_enc));
+! sprintf(reply.ga_data, "%cr%c-E %s%c-s %s%c-r ",
+ 0, 0, p_enc, 0, serial, 0);
+! reply.ga_len = 14 + STRLEN(p_enc) + STRLEN(serial);
+ #else
+! ga_grow(&reply, 50);
+! sprintf(reply.ga_data, "%cr%c-s %s%c-r ", 0, 0, serial, 0);
+! reply.ga_len = 10 + STRLEN(serial);
+ #endif
+! }
+! res = NULL;
+! if (serverName != NULL && STRICMP(name, serverName) == 0)
+! {
+! script = serverConvert(enc, script, &tofree);
+! if (asKeys)
+! server_to_input_buf(script);
+! else
+! res = eval_client_expr_to_string(script);
+! vim_free(tofree);
+! }
+! if (resWindow != None)
+! {
+! if (res != NULL)
+! ga_concat(&reply, res);
+! else if (asKeys == 0)
+! {
+! ga_concat(&reply, (char_u *)_(e_invexprmsg));
+! ga_append(&reply, 0);
+! ga_concat(&reply, (char_u *)"-c 1");
+! }
+! ga_append(&reply, NUL);
+! (void)AppendPropCarefully(dpy, resWindow, commProperty,
+! reply.ga_data, reply.ga_len);
+! ga_clear(&reply);
+! }
+! vim_free(res);
+ }
+ else if (*p == 'r' && p[1] == 0)
+ {
+--- 1254,1305 ----
+ if (script == NULL || name == NULL)
+ continue;
+
+! if (serverName != NULL && STRICMP(name, serverName) == 0)
+! {
+! script = serverConvert(enc, script, &tofree);
+! if (asKeys)
+! server_to_input_buf(script);
+! else
+! {
+! char_u *res;
+!
+! res = eval_client_expr_to_string(script);
+! if (resWindow != None)
+! {
+! garray_T reply;
+!
+! /* Initialize the result property. */
+! ga_init2(&reply, 1, 100);
+ #ifdef FEAT_MBYTE
+! ga_grow(&reply, 50 + STRLEN(p_enc));
+! sprintf(reply.ga_data, "%cr%c-E %s%c-s %s%c-r ",
+ 0, 0, p_enc, 0, serial, 0);
+! reply.ga_len = 14 + STRLEN(p_enc) + STRLEN(serial);
+ #else
+! ga_grow(&reply, 50);
+! sprintf(reply.ga_data, "%cr%c-s %s%c-r ",
+! 0, 0, serial, 0);
+! reply.ga_len = 10 + STRLEN(serial);
+ #endif
+!
+! /* Evaluate the expression and return the result. */
+! if (res != NULL)
+! ga_concat(&reply, res);
+! else
+! {
+! ga_concat(&reply, (char_u *)_(e_invexprmsg));
+! ga_append(&reply, 0);
+! ga_concat(&reply, (char_u *)"-c 1");
+! }
+! ga_append(&reply, NUL);
+! (void)AppendPropCarefully(dpy, resWindow, commProperty,
+! reply.ga_data, reply.ga_len);
+! ga_clear(&reply);
+! }
+! vim_free(res);
+! }
+! vim_free(tofree);
+! }
+ }
+ else if (*p == 'r' && p[1] == 0)
+ {
+*** ../vim-7.3.593/src/version.c 2012-07-10 13:41:09.000000000 +0200
+--- src/version.c 2012-07-10 14:17:50.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 594,
+ /**/
+
+--
+A meeting is an event at which the minutes are kept and the hours are lost.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.595 b/source/ap/vim/patches/7.3.595
new file mode 100644
index 000000000..0fc9b522e
--- /dev/null
+++ b/source/ap/vim/patches/7.3.595
@@ -0,0 +1,154 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.595
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.595
+Problem: The X command server responds slowly
+Solution: Change the loop that waits for replies. (Brian Burns)
+Files: src/if_xcmdsrv.c
+
+
+*** ../vim-7.3.594/src/if_xcmdsrv.c 2012-07-10 14:25:00.000000000 +0200
+--- src/if_xcmdsrv.c 2012-07-10 14:44:13.000000000 +0200
+***************
+*** 572,632 ****
+ {
+ time_t start;
+ time_t now;
+- time_t lastChk = 0;
+ XEvent event;
+! XPropertyEvent *e = (XPropertyEvent *)&event;
+! # define SEND_MSEC_POLL 50
+
+ time(&start);
+! while (endCond(endData) == 0)
+ {
+ time(&now);
+ if (seconds >= 0 && (now - start) >= seconds)
+ break;
+! if (now != lastChk)
+! {
+! lastChk = now;
+! if (!WindowValid(dpy, w))
+! break;
+! /*
+! * Sometimes the PropertyChange event doesn't come.
+! * This can be seen in eg: vim -c 'echo remote_expr("gvim", "3+2")'
+! */
+! serverEventProc(dpy, NULL);
+! }
+ if (localLoop)
+ {
+- /* Just look out for the answer without calling back into Vim */
+ #ifndef HAVE_SELECT
+- struct pollfd fds;
+-
+- fds.fd = ConnectionNumber(dpy);
+- fds.events = POLLIN;
+ if (poll(&fds, 1, SEND_MSEC_POLL) < 0)
+ break;
+ #else
+! fd_set fds;
+! struct timeval tv;
+!
+! tv.tv_sec = 0;
+! tv.tv_usec = SEND_MSEC_POLL * 1000;
+! FD_ZERO(&fds);
+! FD_SET(ConnectionNumber(dpy), &fds);
+! if (select(ConnectionNumber(dpy) + 1, &fds, NULL, NULL, &tv) < 0)
+ break;
+ #endif
+- while (XEventsQueued(dpy, QueuedAfterReading) > 0)
+- {
+- XNextEvent(dpy, &event);
+- if (event.type == PropertyNotify && e->window == commWindow)
+- serverEventProc(dpy, &event);
+- }
+ }
+ else
+ {
+ if (got_int)
+ break;
+! ui_delay((long)SEND_MSEC_POLL, TRUE);
+ ui_breakcheck();
+ }
+ }
+--- 572,626 ----
+ {
+ time_t start;
+ time_t now;
+ XEvent event;
+!
+! #define UI_MSEC_DELAY 50
+! #define SEND_MSEC_POLL 500
+! #ifndef HAVE_SELECT
+! struct pollfd fds;
+!
+! fds.fd = ConnectionNumber(dpy);
+! fds.events = POLLIN;
+! #else
+! fd_set fds;
+! struct timeval tv;
+!
+! tv.tv_sec = 0;
+! tv.tv_usec = SEND_MSEC_POLL * 1000;
+! FD_ZERO(&fds);
+! FD_SET(ConnectionNumber(dpy), &fds);
+! #endif
+
+ time(&start);
+! while (TRUE)
+ {
++ while (XCheckWindowEvent(dpy, commWindow, PropertyChangeMask, &event))
++ serverEventProc(dpy, &event);
++
++ if (endCond(endData) != 0)
++ break;
++ if (!WindowValid(dpy, w))
++ break;
+ time(&now);
+ if (seconds >= 0 && (now - start) >= seconds)
+ break;
+!
+! /* Just look out for the answer without calling back into Vim */
+ if (localLoop)
+ {
+ #ifndef HAVE_SELECT
+ if (poll(&fds, 1, SEND_MSEC_POLL) < 0)
+ break;
+ #else
+! if (select(FD_SETSIZE, &fds, NULL, NULL, &tv) < 0)
+ break;
+ #endif
+ }
+ else
+ {
+ if (got_int)
+ break;
+! ui_delay((long)UI_MSEC_DELAY, TRUE);
+ ui_breakcheck();
+ }
+ }
+*** ../vim-7.3.594/src/version.c 2012-07-10 14:25:00.000000000 +0200
+--- src/version.c 2012-07-10 14:52:16.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 595,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+104. When people ask about the Presidential Election you ask "Which country?"
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.596 b/source/ap/vim/patches/7.3.596
new file mode 100644
index 000000000..59513b2b2
--- /dev/null
+++ b/source/ap/vim/patches/7.3.596
@@ -0,0 +1,171 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.596
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.596
+Problem: Can't remove all signs for a file or buffer.
+Solution: Support "*" for the sign id. (Christian Brabandt)
+Files: runtime/doc/sign.txt, src/buffer.c, src/ex_cmds.c,
+ src/proto/buffer.pro
+
+
+*** ../vim-7.3.595/runtime/doc/sign.txt 2010-08-15 21:57:17.000000000 +0200
+--- runtime/doc/sign.txt 2012-07-10 15:05:19.000000000 +0200
+***************
+*** 150,157 ****
+ Remove the previously placed sign {id} from file {fname}.
+ See remark above about {fname} |:sign-fname|.
+
+ :sign unplace {id} buffer={nr}
+! Same, but use buffer {nr}.
+
+ :sign unplace {id}
+ Remove the previously placed sign {id} from all files it
+--- 153,166 ----
+ Remove the previously placed sign {id} from file {fname}.
+ See remark above about {fname} |:sign-fname|.
+
++ :sign unplace * file={fname}
++ Remove all placed signs in file {fname}.
++
+ :sign unplace {id} buffer={nr}
+! Remove the previously placed sign {id} from buffer {nr}.
+!
+! :sign unplace * buffer={nr}
+! Remove all placed signs in buffer {nr}.
+
+ :sign unplace {id}
+ Remove the previously placed sign {id} from all files it
+*** ../vim-7.3.595/src/buffer.c 2012-07-06 16:21:58.000000000 +0200
+--- src/buffer.c 2012-07-10 15:06:05.000000000 +0200
+***************
+*** 57,63 ****
+
+ #if defined(FEAT_SIGNS)
+ static void insert_sign __ARGS((buf_T *buf, signlist_T *prev, signlist_T *next, int id, linenr_T lnum, int typenr));
+- static void buf_delete_signs __ARGS((buf_T *buf));
+ #endif
+
+ #if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX)
+--- 57,62 ----
+***************
+*** 5537,5543 ****
+ /*
+ * Delete signs in buffer "buf".
+ */
+! static void
+ buf_delete_signs(buf)
+ buf_T *buf;
+ {
+--- 5536,5542 ----
+ /*
+ * Delete signs in buffer "buf".
+ */
+! void
+ buf_delete_signs(buf)
+ buf_T *buf;
+ {
+*** ../vim-7.3.595/src/ex_cmds.c 2012-05-18 16:24:06.000000000 +0200
+--- src/ex_cmds.c 2012-07-10 15:14:22.000000000 +0200
+***************
+*** 6997,7002 ****
+--- 6997,7012 ----
+ lnum = atoi((char *)arg);
+ arg = skiptowhite(arg);
+ }
++ else if (STRNCMP(arg, "*", 1) == 0 && idx == SIGNCMD_UNPLACE)
++ {
++ if (id != -1)
++ {
++ EMSG(_(e_invarg));
++ return;
++ }
++ id = -2;
++ arg = skiptowhite(arg + 1);
++ }
+ else if (STRNCMP(arg, "name=", 5) == 0)
+ {
+ arg += 5;
+***************
+*** 7033,7039 ****
+ {
+ EMSG2(_("E158: Invalid buffer name: %s"), arg);
+ }
+! else if (id <= 0)
+ {
+ if (lnum >= 0 || sign_name != NULL)
+ EMSG(_(e_invarg));
+--- 7043,7049 ----
+ {
+ EMSG2(_("E158: Invalid buffer name: %s"), arg);
+ }
+! else if (id <= 0 && !(idx == SIGNCMD_UNPLACE && id == -2))
+ {
+ if (lnum >= 0 || sign_name != NULL)
+ EMSG(_(e_invarg));
+***************
+*** 7074,7084 ****
+ }
+ else if (idx == SIGNCMD_UNPLACE)
+ {
+- /* ":sign unplace {id} file={fname}" */
+ if (lnum >= 0 || sign_name != NULL)
+ EMSG(_(e_invarg));
+ else
+ {
+ lnum = buf_delsign(buf, id);
+ update_debug_sign(buf, lnum);
+ }
+--- 7084,7100 ----
+ }
+ else if (idx == SIGNCMD_UNPLACE)
+ {
+ if (lnum >= 0 || sign_name != NULL)
+ EMSG(_(e_invarg));
++ else if (id == -2)
++ {
++ /* ":sign unplace * file={fname}" */
++ redraw_buf_later(buf, NOT_VALID);
++ buf_delete_signs(buf);
++ }
+ else
+ {
++ /* ":sign unplace {id} file={fname}" */
+ lnum = buf_delsign(buf, id);
+ update_debug_sign(buf, lnum);
+ }
+*** ../vim-7.3.595/src/proto/buffer.pro 2012-02-22 14:58:24.000000000 +0100
+--- src/proto/buffer.pro 2012-07-10 15:06:10.000000000 +0200
+***************
+*** 60,65 ****
+--- 60,66 ----
+ int buf_findsign_id __ARGS((buf_T *buf, linenr_T lnum));
+ int buf_findsigntype_id __ARGS((buf_T *buf, linenr_T lnum, int typenr));
+ int buf_signcount __ARGS((buf_T *buf, linenr_T lnum));
++ void buf_delete_signs __ARGS((buf_T *buf));
+ void buf_delete_all_signs __ARGS((void));
+ void sign_list_placed __ARGS((buf_T *rbuf));
+ void sign_mark_adjust __ARGS((linenr_T line1, linenr_T line2, long amount, long amount_after));
+*** ../vim-7.3.595/src/version.c 2012-07-10 14:56:42.000000000 +0200
+--- src/version.c 2012-07-10 15:16:40.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 596,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+105. When someone asks you for your address, you tell them your URL.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.597 b/source/ap/vim/patches/7.3.597
new file mode 100644
index 000000000..2a4f0b3d7
--- /dev/null
+++ b/source/ap/vim/patches/7.3.597
@@ -0,0 +1,720 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.597
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.597
+Problem: 'clipboard' "autoselect" only applies to the * register. (Sergey
+ Vakulenko)
+Solution: Make 'autoselect' work for the + register. (Christian Brabant)
+ Add the "autoselectplus" option in 'clipboard' and the "P" flag in
+ 'guioptions'.
+Files: runtime/doc/options.txt, src/normal.c, src/ops.c, src/screen.c,
+ src/ui.c, src/globals.h, src/proto/ui.pro, src/option.h, src/gui.c
+
+
+*** ../vim-7.3.596/runtime/doc/options.txt 2012-02-20 22:18:23.000000000 +0100
+--- runtime/doc/options.txt 2012-07-10 15:40:35.000000000 +0200
+***************
+*** 1437,1442 ****
+--- 1452,1458 ----
+ This option is a list of comma separated names.
+ These names are recognized:
+
++ *clipboard-unnamed*
+ unnamed When included, Vim will use the clipboard register '*'
+ for all yank, delete, change and put operations which
+ would normally go to the unnamed register. When a
+***************
+*** 1446,1460 ****
+ explicitly accessed using the "* notation. Also see
+ |gui-clipboard|.
+
+ unnamedplus A variant of "unnamed" flag which uses the clipboard
+ register '+' (|quoteplus|) instead of register '*' for
+ all operations except yank. Yank shall copy the text
+ into register '+' and also into '*' when "unnamed" is
+ included.
+! Only available with the |+x11| feature.
+ Availability can be checked with: >
+ if has('unnamedplus')
+ <
+ autoselect Works like the 'a' flag in 'guioptions': If present,
+ then whenever Visual mode is started, or the Visual
+ area extended, Vim tries to become the owner of the
+--- 1462,1478 ----
+ explicitly accessed using the "* notation. Also see
+ |gui-clipboard|.
+
++ *clipboard-unnamedplus*
+ unnamedplus A variant of "unnamed" flag which uses the clipboard
+ register '+' (|quoteplus|) instead of register '*' for
+ all operations except yank. Yank shall copy the text
+ into register '+' and also into '*' when "unnamed" is
+ included.
+! Only available with the |+X11| feature.
+ Availability can be checked with: >
+ if has('unnamedplus')
+ <
++ *clipboard-autoselect*
+ autoselect Works like the 'a' flag in 'guioptions': If present,
+ then whenever Visual mode is started, or the Visual
+ area extended, Vim tries to become the owner of the
+***************
+*** 1466,1474 ****
+--- 1484,1499 ----
+ "autoselect" flag is used.
+ Also applies to the modeless selection.
+
++ *clipboard-autoselectplus*
++ autoselectplus Like "autoselect" but using the + register instead of
++ the * register. Compare to the 'P' flag in
++ 'guioptions'.
++
++ *clipboard-autoselectml*
+ autoselectml Like "autoselect", but for the modeless selection
+ only. Compare to the 'A' flag in 'guioptions'.
+
++ *clipboard-html*
+ html When the clipboard contains HTML, use this when
+ pasting. When putting text on the clipboard, mark it
+ as HTML. This works to copy rendered HTML from
+***************
+*** 1479,1484 ****
+--- 1504,1510 ----
+ Only supported for GTK version 2 and later.
+ Only available with the |+multi_byte| feature.
+
++ *clipboard-exclude*
+ exclude:{pattern}
+ Defines a pattern that is matched against the name of
+ the terminal 'term'. If there is a match, no
+***************
+*** 3547,3552 ****
+--- 3600,3608 ----
+ windowing system's global selection unless explicitly told to
+ by a yank or delete operation for the "* register.
+ The same applies to the modeless selection.
++ *'go-P'*
++ 'P' Like autoselect but using the "+ register instead of the "*
++ register.
+ *'go-A'*
+ 'A' Autoselect for the modeless selection. Like 'a', but only
+ applies to the modeless selection.
+*** ../vim-7.3.596/src/normal.c 2012-06-29 13:56:01.000000000 +0200
+--- src/normal.c 2012-07-10 15:44:24.000000000 +0200
+***************
+*** 1451,1457 ****
+ * This could call do_pending_operator() recursively, but that's OK
+ * because gui_yank will be TRUE for the nested call.
+ */
+! if (clip_star.available
+ && oap->op_type != OP_NOP
+ && !gui_yank
+ # ifdef FEAT_VISUAL
+--- 1451,1457 ----
+ * This could call do_pending_operator() recursively, but that's OK
+ * because gui_yank will be TRUE for the nested call.
+ */
+! if ((clip_star.available || clip_plus.available)
+ && oap->op_type != OP_NOP
+ && !gui_yank
+ # ifdef FEAT_VISUAL
+*** ../vim-7.3.596/src/ops.c 2012-06-29 13:34:15.000000000 +0200
+--- src/ops.c 2012-07-10 16:20:29.000000000 +0200
+***************
+*** 962,969 ****
+ * selection too. */
+ if (name == '*' && clip_star.available)
+ {
+! if (clip_isautosel())
+! clip_update_selection();
+ may_get_selection(name);
+ }
+ #endif
+--- 962,975 ----
+ * selection too. */
+ if (name == '*' && clip_star.available)
+ {
+! if (clip_isautosel_star())
+! clip_update_selection(&clip_star);
+! may_get_selection(name);
+! }
+! if (name == '+' && clip_plus.available)
+! {
+! if (clip_isautosel_plus())
+! clip_update_selection(&clip_plus);
+ may_get_selection(name);
+ }
+ #endif
+***************
+*** 3190,3196 ****
+
+ clip_own_selection(&clip_plus);
+ clip_gen_set_selection(&clip_plus);
+! if (!clip_isautosel() && !did_star && curr == &(y_regs[PLUS_REGISTER]))
+ {
+ copy_yank_reg(&(y_regs[STAR_REGISTER]));
+ clip_own_selection(&clip_star);
+--- 3196,3203 ----
+
+ clip_own_selection(&clip_plus);
+ clip_gen_set_selection(&clip_plus);
+! if (!clip_isautosel_star() && !did_star
+! && curr == &(y_regs[PLUS_REGISTER]))
+ {
+ copy_yank_reg(&(y_regs[STAR_REGISTER]));
+ clip_own_selection(&clip_star);
+*** ../vim-7.3.596/src/screen.c 2012-06-13 18:06:32.000000000 +0200
+--- src/screen.c 2012-07-10 16:39:01.000000000 +0200
+***************
+*** 519,526 ****
+ # endif
+ # ifdef FEAT_CLIPBOARD
+ /* When Visual area changed, may have to update selection. */
+! if (clip_star.available && clip_isautosel())
+! clip_update_selection();
+ # endif
+ #ifdef FEAT_GUI
+ /* Remove the cursor before starting to do anything, because
+--- 519,528 ----
+ # endif
+ # ifdef FEAT_CLIPBOARD
+ /* When Visual area changed, may have to update selection. */
+! if (clip_star.available && clip_isautosel_star())
+! clip_update_selection(&clip_star);
+! if (clip_plus.available && clip_isautosel_plus())
+! clip_update_selection(&clip_plus);
+ # endif
+ #ifdef FEAT_GUI
+ /* Remove the cursor before starting to do anything, because
+***************
+*** 814,821 ****
+
+ #ifdef FEAT_CLIPBOARD
+ /* When Visual area changed, may have to update selection. */
+! if (clip_star.available && clip_isautosel())
+! clip_update_selection();
+ #endif
+
+ win_update(wp);
+--- 816,825 ----
+
+ #ifdef FEAT_CLIPBOARD
+ /* When Visual area changed, may have to update selection. */
+! if (clip_star.available && clip_isautosel_star())
+! clip_update_selection(&clip_star);
+! if (clip_plus.available && clip_isautosel_plus())
+! clip_update_selection(&clip_plus);
+ #endif
+
+ win_update(wp);
+***************
+*** 3000,3006 ****
+ area_highlighting = TRUE;
+ attr = hl_attr(HLF_V);
+ #if defined(FEAT_CLIPBOARD) && defined(FEAT_X11)
+! if (clip_star.available && !clip_star.owned && clip_isautosel())
+ attr = hl_attr(HLF_VNC);
+ #endif
+ }
+--- 3004,3013 ----
+ area_highlighting = TRUE;
+ attr = hl_attr(HLF_V);
+ #if defined(FEAT_CLIPBOARD) && defined(FEAT_X11)
+! if ((clip_star.available && !clip_star.owned
+! && clip_isautosel_star())
+! || (clip_plus.available && !clip_plus.owned
+! && clip_isautosel_plus()))
+ attr = hl_attr(HLF_VNC);
+ #endif
+ }
+***************
+*** 9060,9066 ****
+ || (wp != NULL && wp->w_width != Columns)
+ # endif
+ )
+! clip_clear_selection();
+ else
+ clip_scroll_selection(-line_count);
+ #endif
+--- 9067,9073 ----
+ || (wp != NULL && wp->w_width != Columns)
+ # endif
+ )
+! clip_clear_selection(&clip_star);
+ else
+ clip_scroll_selection(-line_count);
+ #endif
+***************
+*** 9281,9287 ****
+ || (wp != NULL && wp->w_width != Columns)
+ # endif
+ )
+! clip_clear_selection();
+ else
+ clip_scroll_selection(line_count);
+ #endif
+--- 9288,9294 ----
+ || (wp != NULL && wp->w_width != Columns)
+ # endif
+ )
+! clip_clear_selection(&clip_star);
+ else
+ clip_scroll_selection(line_count);
+ #endif
+*** ../vim-7.3.596/src/ui.c 2012-02-12 01:35:06.000000000 +0100
+--- src/ui.c 2012-07-10 16:43:17.000000000 +0200
+***************
+*** 381,386 ****
+--- 381,388 ----
+
+ #if defined(FEAT_CLIPBOARD) || defined(PROTO)
+
++ static void clip_copy_selection __ARGS((VimClipboard *clip));
++
+ /*
+ * Selection stuff using Visual mode, for cutting and pasting text to other
+ * windows.
+***************
+*** 423,431 ****
+ * this is called whenever VIsual mode is ended.
+ */
+ void
+! clip_update_selection()
+ {
+! pos_T start, end;
+
+ /* If visual mode is only due to a redo command ("."), then ignore it */
+ if (!redo_VIsual_busy && VIsual_active && (State & NORMAL))
+--- 425,434 ----
+ * this is called whenever VIsual mode is ended.
+ */
+ void
+! clip_update_selection(clip)
+! VimClipboard *clip;
+ {
+! pos_T start, end;
+
+ /* If visual mode is only due to a redo command ("."), then ignore it */
+ if (!redo_VIsual_busy && VIsual_active && (State & NORMAL))
+***************
+*** 444,460 ****
+ start = curwin->w_cursor;
+ end = VIsual;
+ }
+! if (!equalpos(clip_star.start, start)
+! || !equalpos(clip_star.end, end)
+! || clip_star.vmode != VIsual_mode)
+ {
+! clip_clear_selection();
+! clip_star.start = start;
+! clip_star.end = end;
+! clip_star.vmode = VIsual_mode;
+! clip_free_selection(&clip_star);
+! clip_own_selection(&clip_star);
+! clip_gen_set_selection(&clip_star);
+ }
+ }
+ }
+--- 447,463 ----
+ start = curwin->w_cursor;
+ end = VIsual;
+ }
+! if (!equalpos(clip->start, start)
+! || !equalpos(clip->end, end)
+! || clip->vmode != VIsual_mode)
+ {
+! clip_clear_selection(clip);
+! clip->start = start;
+! clip->end = end;
+! clip->vmode = VIsual_mode;
+! clip_free_selection(clip);
+! clip_own_selection(clip);
+! clip_gen_set_selection(clip);
+ }
+ }
+ }
+***************
+*** 475,481 ****
+ int was_owned = cbd->owned;
+
+ cbd->owned = (clip_gen_own_selection(cbd) == OK);
+! if (!was_owned && cbd == &clip_star)
+ {
+ /* May have to show a different kind of highlighting for the
+ * selected area. There is no specific redraw command for this,
+--- 478,484 ----
+ int was_owned = cbd->owned;
+
+ cbd->owned = (clip_gen_own_selection(cbd) == OK);
+! if (!was_owned && (cbd == &clip_star || cbd == &clip_plus))
+ {
+ /* May have to show a different kind of highlighting for the
+ * selected area. There is no specific redraw command for this,
+***************
+*** 483,489 ****
+ if (cbd->owned
+ && (get_real_state() == VISUAL
+ || get_real_state() == SELECTMODE)
+! && clip_isautosel()
+ && hl_attr(HLF_V) != hl_attr(HLF_VNC))
+ redraw_curbuf_later(INVERTED_ALL);
+ }
+--- 486,493 ----
+ if (cbd->owned
+ && (get_real_state() == VISUAL
+ || get_real_state() == SELECTMODE)
+! && (cbd == &clip_star ? clip_isautosel_star()
+! : clip_isautosel_plus())
+ && hl_attr(HLF_V) != hl_attr(HLF_VNC))
+ redraw_curbuf_later(INVERTED_ALL);
+ }
+***************
+*** 502,513 ****
+ #ifdef FEAT_X11
+ int was_owned = cbd->owned;
+ #endif
+! int visual_selection = (cbd == &clip_star);
+
+ clip_free_selection(cbd);
+ cbd->owned = FALSE;
+ if (visual_selection)
+! clip_clear_selection();
+ clip_gen_lose_selection(cbd);
+ #ifdef FEAT_X11
+ if (visual_selection)
+--- 506,520 ----
+ #ifdef FEAT_X11
+ int was_owned = cbd->owned;
+ #endif
+! int visual_selection = FALSE;
+!
+! if (cbd == &clip_star || cbd == &clip_plus)
+! visual_selection = TRUE;
+
+ clip_free_selection(cbd);
+ cbd->owned = FALSE;
+ if (visual_selection)
+! clip_clear_selection(cbd);
+ clip_gen_lose_selection(cbd);
+ #ifdef FEAT_X11
+ if (visual_selection)
+***************
+*** 518,524 ****
+ if (was_owned
+ && (get_real_state() == VISUAL
+ || get_real_state() == SELECTMODE)
+! && clip_isautosel()
+ && hl_attr(HLF_V) != hl_attr(HLF_VNC))
+ {
+ update_curbuf(INVERTED_ALL);
+--- 525,532 ----
+ if (was_owned
+ && (get_real_state() == VISUAL
+ || get_real_state() == SELECTMODE)
+! && (cbd == &clip_star ?
+! clip_isautosel_star() : clip_isautosel_plus())
+ && hl_attr(HLF_V) != hl_attr(HLF_VNC))
+ {
+ update_curbuf(INVERTED_ALL);
+***************
+*** 534,551 ****
+ #endif
+ }
+
+! void
+! clip_copy_selection()
+! {
+! if (VIsual_active && (State & NORMAL) && clip_star.available)
+! {
+! if (clip_isautosel())
+! clip_update_selection();
+! clip_free_selection(&clip_star);
+! clip_own_selection(&clip_star);
+! if (clip_star.owned)
+! clip_get_selection(&clip_star);
+! clip_gen_set_selection(&clip_star);
+ }
+ }
+
+--- 542,559 ----
+ #endif
+ }
+
+! static void
+! clip_copy_selection(clip)
+! VimClipboard *clip;
+! {
+! if (VIsual_active && (State & NORMAL) && clip->available)
+! {
+! clip_update_selection(clip);
+! clip_free_selection(clip);
+! clip_own_selection(clip);
+! if (clip->owned)
+! clip_get_selection(clip);
+! clip_gen_set_selection(clip);
+ }
+ }
+
+***************
+*** 555,575 ****
+ void
+ clip_auto_select()
+ {
+! if (clip_isautosel())
+! clip_copy_selection();
+ }
+
+ /*
+! * Return TRUE if automatic selection of Visual area is desired.
+ */
+ int
+! clip_isautosel()
+ {
+ return (
+ #ifdef FEAT_GUI
+ gui.in_use ? (vim_strchr(p_go, GO_ASEL) != NULL) :
+ #endif
+! clip_autoselect);
+ }
+
+
+--- 563,600 ----
+ void
+ clip_auto_select()
+ {
+! if (clip_isautosel_star())
+! clip_copy_selection(&clip_star);
+! if (clip_isautosel_plus())
+! clip_copy_selection(&clip_plus);
+ }
+
+ /*
+! * Return TRUE if automatic selection of Visual area is desired for the *
+! * register.
+ */
+ int
+! clip_isautosel_star()
+ {
+ return (
+ #ifdef FEAT_GUI
+ gui.in_use ? (vim_strchr(p_go, GO_ASEL) != NULL) :
+ #endif
+! clip_autoselect_star);
+! }
+!
+! /*
+! * Return TRUE if automatic selection of Visual area is desired for the +
+! * register.
+! */
+! int
+! clip_isautosel_plus()
+! {
+! return (
+! #ifdef FEAT_GUI
+! gui.in_use ? (vim_strchr(p_go, GO_ASELPLUS) != NULL) :
+! #endif
+! clip_autoselect_plus);
+ }
+
+
+***************
+*** 657,663 ****
+ VimClipboard *cb = &clip_star;
+
+ if (cb->state == SELECT_DONE)
+! clip_clear_selection();
+
+ row = check_row(row);
+ col = check_col(col);
+--- 682,688 ----
+ VimClipboard *cb = &clip_star;
+
+ if (cb->state == SELECT_DONE)
+! clip_clear_selection(cb);
+
+ row = check_row(row);
+ col = check_col(col);
+***************
+*** 749,755 ****
+ printf("Selection ended: (%u,%u) to (%u,%u)\n", cb->start.lnum,
+ cb->start.col, cb->end.lnum, cb->end.col);
+ #endif
+! if (clip_isautosel()
+ || (
+ #ifdef FEAT_GUI
+ gui.in_use ? (vim_strchr(p_go, GO_ASELML) != NULL) :
+--- 774,780 ----
+ printf("Selection ended: (%u,%u) to (%u,%u)\n", cb->start.lnum,
+ cb->start.col, cb->end.lnum, cb->end.col);
+ #endif
+! if (clip_isautosel_star()
+ || (
+ #ifdef FEAT_GUI
+ gui.in_use ? (vim_strchr(p_go, GO_ASELML) != NULL) :
+***************
+*** 932,947 ****
+ * Called from outside to clear selected region from the display
+ */
+ void
+! clip_clear_selection()
+ {
+- VimClipboard *cb = &clip_star;
+
+! if (cb->state == SELECT_CLEARED)
+ return;
+
+! clip_invert_area((int)cb->start.lnum, cb->start.col, (int)cb->end.lnum,
+! cb->end.col, CLIP_CLEAR);
+! cb->state = SELECT_CLEARED;
+ }
+
+ /*
+--- 957,972 ----
+ * Called from outside to clear selected region from the display
+ */
+ void
+! clip_clear_selection(cbd)
+! VimClipboard *cbd;
+ {
+
+! if (cbd->state == SELECT_CLEARED)
+ return;
+
+! clip_invert_area((int)cbd->start.lnum, cbd->start.col, (int)cbd->end.lnum,
+! cbd->end.col, CLIP_CLEAR);
+! cbd->state = SELECT_CLEARED;
+ }
+
+ /*
+***************
+*** 954,960 ****
+ if (clip_star.state == SELECT_DONE
+ && row2 >= clip_star.start.lnum
+ && row1 <= clip_star.end.lnum)
+! clip_clear_selection();
+ }
+
+ /*
+--- 979,985 ----
+ if (clip_star.state == SELECT_DONE
+ && row2 >= clip_star.start.lnum
+ && row1 <= clip_star.end.lnum)
+! clip_clear_selection(&clip_star);
+ }
+
+ /*
+*** ../vim-7.3.596/src/globals.h 2012-06-29 12:35:40.000000000 +0200
+--- src/globals.h 2012-07-10 16:35:13.000000000 +0200
+***************
+*** 517,523 ****
+ # define CLIP_UNNAMED_PLUS 2
+ EXTERN int clip_unnamed INIT(= 0); /* above two values or'ed */
+
+! EXTERN int clip_autoselect INIT(= FALSE);
+ EXTERN int clip_autoselectml INIT(= FALSE);
+ EXTERN int clip_html INIT(= FALSE);
+ EXTERN regprog_T *clip_exclude_prog INIT(= NULL);
+--- 517,524 ----
+ # define CLIP_UNNAMED_PLUS 2
+ EXTERN int clip_unnamed INIT(= 0); /* above two values or'ed */
+
+! EXTERN int clip_autoselect_star INIT(= FALSE);
+! EXTERN int clip_autoselect_plus INIT(= FALSE);
+ EXTERN int clip_autoselectml INIT(= FALSE);
+ EXTERN int clip_html INIT(= FALSE);
+ EXTERN regprog_T *clip_exclude_prog INIT(= NULL);
+*** ../vim-7.3.596/src/proto/ui.pro 2010-08-15 21:57:28.000000000 +0200
+--- src/proto/ui.pro 2012-07-10 16:37:35.000000000 +0200
+***************
+*** 11,27 ****
+ void ui_new_shellsize __ARGS((void));
+ void ui_breakcheck __ARGS((void));
+ void clip_init __ARGS((int can_use));
+! void clip_update_selection __ARGS((void));
+ void clip_own_selection __ARGS((VimClipboard *cbd));
+ void clip_lose_selection __ARGS((VimClipboard *cbd));
+- void clip_copy_selection __ARGS((void));
+ void clip_auto_select __ARGS((void));
+! int clip_isautosel __ARGS((void));
+ void clip_modeless __ARGS((int button, int is_click, int is_drag));
+ void clip_start_selection __ARGS((int col, int row, int repeated_click));
+ void clip_process_selection __ARGS((int button, int col, int row, int_u repeated_click));
+ void clip_may_redraw_selection __ARGS((int row, int col, int len));
+! void clip_clear_selection __ARGS((void));
+ void clip_may_clear_selection __ARGS((int row1, int row2));
+ void clip_scroll_selection __ARGS((int rows));
+ void clip_copy_modeless_selection __ARGS((int both));
+--- 11,27 ----
+ void ui_new_shellsize __ARGS((void));
+ void ui_breakcheck __ARGS((void));
+ void clip_init __ARGS((int can_use));
+! void clip_update_selection __ARGS((VimClipboard *clip));
+ void clip_own_selection __ARGS((VimClipboard *cbd));
+ void clip_lose_selection __ARGS((VimClipboard *cbd));
+ void clip_auto_select __ARGS((void));
+! int clip_isautosel_star __ARGS((void));
+! int clip_isautosel_plus __ARGS((void));
+ void clip_modeless __ARGS((int button, int is_click, int is_drag));
+ void clip_start_selection __ARGS((int col, int row, int repeated_click));
+ void clip_process_selection __ARGS((int button, int col, int row, int_u repeated_click));
+ void clip_may_redraw_selection __ARGS((int row, int col, int len));
+! void clip_clear_selection __ARGS((VimClipboard *cbd));
+ void clip_may_clear_selection __ARGS((int row1, int row2));
+ void clip_scroll_selection __ARGS((int rows));
+ void clip_copy_modeless_selection __ARGS((int both));
+*** ../vim-7.3.596/src/option.h 2012-06-06 16:12:54.000000000 +0200
+--- src/option.h 2012-07-10 15:54:32.000000000 +0200
+***************
+*** 229,234 ****
+--- 229,235 ----
+ #define GO_MENUS 'm' /* use menu bar */
+ #define GO_NOSYSMENU 'M' /* don't source system menu */
+ #define GO_POINTER 'p' /* pointer enter/leave callbacks */
++ #define GO_ASELPLUS 'P' /* autoselectPlus */
+ #define GO_RIGHT 'r' /* use right scrollbar */
+ #define GO_VRIGHT 'R' /* right scrollbar with vert split */
+ #define GO_TEAROFF 't' /* add tear-off menu items */
+*** ../vim-7.3.596/src/gui.c 2012-05-27 00:37:45.000000000 +0200
+--- src/gui.c 2012-07-10 16:43:34.000000000 +0200
+***************
+*** 3154,3160 ****
+ }
+
+ if (clip_star.state != SELECT_CLEARED && !did_clip)
+! clip_clear_selection();
+ #endif
+
+ /* Don't put events in the input queue now. */
+--- 3154,3160 ----
+ }
+
+ if (clip_star.state != SELECT_CLEARED && !did_clip)
+! clip_clear_selection(&clip_star);
+ #endif
+
+ /* Don't put events in the input queue now. */
+*** ../vim-7.3.596/src/version.c 2012-07-10 15:18:18.000000000 +0200
+--- src/version.c 2012-07-10 16:32:16.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 597,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+106. When told to "go to your room" you inform your parents that you
+ can't...because you were kicked out and banned.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.598 b/source/ap/vim/patches/7.3.598
new file mode 100644
index 000000000..3a38b4a78
--- /dev/null
+++ b/source/ap/vim/patches/7.3.598
@@ -0,0 +1,73 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.598
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.598
+Problem: Cannot act upon end of completion. (Taro Muraoka)
+Solution: Add an autocommand event that is triggered when completion has
+ finished. (Idea by Florian Klein)
+Files: src/edit.c, src/fileio.c, src/vim.h
+
+
+*** ../vim-7.3.597/src/edit.c 2012-07-06 13:36:36.000000000 +0200
+--- src/edit.c 2012-07-10 17:02:37.000000000 +0200
+***************
+*** 3824,3829 ****
+--- 3824,3834 ----
+ if (want_cindent && in_cinkeys(KEY_COMPLETE, ' ', inindent(0)))
+ do_c_expr_indent();
+ #endif
++ #ifdef FEAT_AUTOCMD
++ /* Trigger the CompleteDone event to give scripts a chance to act
++ * upon the completion. */
++ apply_autocmds(EVENT_COMPLETEDONE, NULL, NULL, FALSE, curbuf);
++ #endif
+ }
+ }
+
+*** ../vim-7.3.597/src/fileio.c 2012-06-13 14:28:16.000000000 +0200
+--- src/fileio.c 2012-07-10 17:05:51.000000000 +0200
+***************
+*** 7643,7648 ****
+--- 7643,7649 ----
+ {"CmdwinEnter", EVENT_CMDWINENTER},
+ {"CmdwinLeave", EVENT_CMDWINLEAVE},
+ {"ColorScheme", EVENT_COLORSCHEME},
++ {"CompleteDone", EVENT_COMPLETEDONE},
+ {"CursorHold", EVENT_CURSORHOLD},
+ {"CursorHoldI", EVENT_CURSORHOLDI},
+ {"CursorMoved", EVENT_CURSORMOVED},
+*** ../vim-7.3.597/src/vim.h 2012-07-10 13:41:09.000000000 +0200
+--- src/vim.h 2012-07-10 17:06:24.000000000 +0200
+***************
+*** 1241,1246 ****
+--- 1241,1247 ----
+ EVENT_CMDWINENTER, /* after entering the cmdline window */
+ EVENT_CMDWINLEAVE, /* before leaving the cmdline window */
+ EVENT_COLORSCHEME, /* after loading a colorscheme */
++ EVENT_COMPLETEDONE, /* after finishing insert complete */
+ EVENT_FILEAPPENDPOST, /* after appending to a file */
+ EVENT_FILEAPPENDPRE, /* before appending to a file */
+ EVENT_FILEAPPENDCMD, /* append to a file using command */
+*** ../vim-7.3.597/src/version.c 2012-07-10 16:49:08.000000000 +0200
+--- src/version.c 2012-07-10 17:08:41.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 598,
+ /**/
+
+--
+Laughing helps. It's like jogging on the inside.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.599 b/source/ap/vim/patches/7.3.599
new file mode 100644
index 000000000..adfe6f996
--- /dev/null
+++ b/source/ap/vim/patches/7.3.599
@@ -0,0 +1,107 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.599
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.599 (after 7.3.597)
+Problem: Missing change in one file.
+Solution: Patch for changed clip_autoselect().
+Files: src/option.c
+
+
+*** ../vim-7.3.598/src/option.c 2012-06-29 15:51:26.000000000 +0200
+--- src/option.c 2012-07-10 16:35:07.000000000 +0200
+***************
+*** 7377,7383 ****
+ check_clipboard_option()
+ {
+ int new_unnamed = 0;
+! int new_autoselect = FALSE;
+ int new_autoselectml = FALSE;
+ int new_html = FALSE;
+ regprog_T *new_exclude_prog = NULL;
+--- 7377,7384 ----
+ check_clipboard_option()
+ {
+ int new_unnamed = 0;
+! int new_autoselect_star = FALSE;
+! int new_autoselect_plus = FALSE;
+ int new_autoselectml = FALSE;
+ int new_html = FALSE;
+ regprog_T *new_exclude_prog = NULL;
+***************
+*** 7398,7410 ****
+ p += 11;
+ }
+ else if (STRNCMP(p, "autoselect", 10) == 0
+! && (p[10] == ',' || p[10] == NUL))
+ {
+! new_autoselect = TRUE;
+ p += 10;
+ }
+ else if (STRNCMP(p, "autoselectml", 12) == 0
+! && (p[12] == ',' || p[12] == NUL))
+ {
+ new_autoselectml = TRUE;
+ p += 12;
+--- 7399,7417 ----
+ p += 11;
+ }
+ else if (STRNCMP(p, "autoselect", 10) == 0
+! && (p[10] == ',' || p[10] == NUL))
+ {
+! new_autoselect_star = TRUE;
+ p += 10;
+ }
++ else if (STRNCMP(p, "autoselectplus", 14) == 0
++ && (p[14] == ',' || p[14] == NUL))
++ {
++ new_autoselect_plus = TRUE;
++ p += 14;
++ }
+ else if (STRNCMP(p, "autoselectml", 12) == 0
+! && (p[12] == ',' || p[12] == NUL))
+ {
+ new_autoselectml = TRUE;
+ p += 12;
+***************
+*** 7433,7439 ****
+ if (errmsg == NULL)
+ {
+ clip_unnamed = new_unnamed;
+! clip_autoselect = new_autoselect;
+ clip_autoselectml = new_autoselectml;
+ clip_html = new_html;
+ vim_free(clip_exclude_prog);
+--- 7440,7447 ----
+ if (errmsg == NULL)
+ {
+ clip_unnamed = new_unnamed;
+! clip_autoselect_star = new_autoselect_star;
+! clip_autoselect_plus = new_autoselect_plus;
+ clip_autoselectml = new_autoselectml;
+ clip_html = new_html;
+ vim_free(clip_exclude_prog);
+*** ../vim-7.3.598/src/version.c 2012-07-10 17:14:50.000000000 +0200
+--- src/version.c 2012-07-10 18:30:17.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 599,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+108. While reading a magazine, you look for the Zoom icon for a better
+ look at a photograph.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.600 b/source/ap/vim/patches/7.3.600
new file mode 100644
index 000000000..6504da017
--- /dev/null
+++ b/source/ap/vim/patches/7.3.600
@@ -0,0 +1,68 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.600
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.600
+Problem: <f-args> is not expanded properly with DBCS encoding.
+Solution: Skip over character instead of byte. (Yukihiro Nakadaira)
+Files: src/ex_docmd.c
+
+
+*** ../vim-7.3.599/src/ex_docmd.c 2012-07-06 18:27:34.000000000 +0200
+--- src/ex_docmd.c 2012-07-10 19:20:10.000000000 +0200
+***************
+*** 5845,5852 ****
+--- 5845,5858 ----
+ }
+ else
+ {
++ #ifdef FEAT_MBYTE
++ int charlen = (*mb_ptr2len)(p);
++ len += charlen;
++ p += charlen;
++ #else
+ ++len;
+ ++p;
++ #endif
+ }
+ }
+
+***************
+*** 5889,5895 ****
+ }
+ else
+ {
+! *q++ = *p++;
+ }
+ }
+ *q++ = '"';
+--- 5895,5901 ----
+ }
+ else
+ {
+! MB_COPY_CHAR(p, q);
+ }
+ }
+ *q++ = '"';
+*** ../vim-7.3.599/src/version.c 2012-07-10 18:31:49.000000000 +0200
+--- src/version.c 2012-07-10 19:21:29.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 600,
+ /**/
+
+--
+In a world without walls and borders, who needs windows and gates?
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.601 b/source/ap/vim/patches/7.3.601
new file mode 100644
index 000000000..b61a93316
--- /dev/null
+++ b/source/ap/vim/patches/7.3.601
@@ -0,0 +1,51 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.601
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.601
+Problem: Bad code style.
+Solution: Insert space, remove parens.
+Files: src/farsi.c
+
+
+*** ../vim-7.3.600/src/farsi.c 2010-08-15 21:57:28.000000000 +0200
+--- src/farsi.c 2012-07-12 21:59:15.000000000 +0200
+***************
+*** 1813,1819 ****
+ ptr[i] = toF_leading(ptr[i]);
+ ++i;
+
+! while(canF_Rjoin(ptr[i]) && (i < llen))
+ {
+ ptr[i] = toF_Rjoin(ptr[i]);
+ if (F_isterm(ptr[i]) || !F_isalpha(ptr[i]))
+--- 1813,1819 ----
+ ptr[i] = toF_leading(ptr[i]);
+ ++i;
+
+! while (canF_Rjoin(ptr[i]) && i < llen)
+ {
+ ptr[i] = toF_Rjoin(ptr[i]);
+ if (F_isterm(ptr[i]) || !F_isalpha(ptr[i]))
+*** ../vim-7.3.600/src/version.c 2012-07-10 19:25:06.000000000 +0200
+--- src/version.c 2012-07-16 17:25:48.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 601,
+ /**/
+
+--
+There are three kinds of persons: Those who can count and those who can't.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.602 b/source/ap/vim/patches/7.3.602
new file mode 100644
index 000000000..fd5f3cf47
--- /dev/null
+++ b/source/ap/vim/patches/7.3.602
@@ -0,0 +1,55 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.602
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.602
+Problem: Missing files in distribution.
+Solution: Update the list of files.
+Files: Filelist
+
+
+*** ../vim-7.3.601/Filelist 2011-10-20 16:35:25.000000000 +0200
+--- Filelist 2012-06-20 12:06:41.000000000 +0200
+***************
+*** 463,468 ****
+--- 463,469 ----
+ runtime/macros/hanoi/hanoi.vim \
+ runtime/macros/hanoi/poster \
+ runtime/macros/justify.vim \
++ runtime/macros/less.bat \
+ runtime/macros/less.sh \
+ runtime/macros/less.vim \
+ runtime/macros/life/click.me \
+***************
+*** 666,671 ****
+--- 667,674 ----
+
+ # generic language files
+ LANG_GEN = \
++ runtime/doc/*-de.1 \
++ runtime/doc/*-de.UTF-8.1 \
+ runtime/doc/*-fr.1 \
+ runtime/doc/*-fr.UTF-8.1 \
+ runtime/doc/*-it.1 \
+*** ../vim-7.3.601/src/version.c 2012-07-16 17:26:18.000000000 +0200
+--- src/version.c 2012-07-16 17:27:31.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 602,
+ /**/
+
+--
+Never eat yellow snow.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.603 b/source/ap/vim/patches/7.3.603
new file mode 100644
index 000000000..00a024b0a
--- /dev/null
+++ b/source/ap/vim/patches/7.3.603
@@ -0,0 +1,370 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.603
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.603
+Problem: It is possible to add replace builtin functions by calling
+ extend() on g:.
+Solution: Add a flag to a dict to indicate it is a scope. Check for
+ existing functions. (ZyX)
+Files: src/buffer.c, src/eval.c, src/proto/eval.pro, src/structs.h,
+ src/testdir/test34.in, src/testdir/test34.ok, src/window.c
+
+
+*** ../vim-7.3.602/src/buffer.c 2012-07-10 15:18:18.000000000 +0200
+--- src/buffer.c 2012-07-16 16:52:58.000000000 +0200
+***************
+*** 1747,1753 ****
+ buf->b_wininfo->wi_win = curwin;
+
+ #ifdef FEAT_EVAL
+! init_var_dict(&buf->b_vars, &buf->b_bufvar); /* init b: variables */
+ #endif
+ #ifdef FEAT_SYN_HL
+ hash_init(&buf->b_s.b_keywtab);
+--- 1747,1754 ----
+ buf->b_wininfo->wi_win = curwin;
+
+ #ifdef FEAT_EVAL
+! /* init b: variables */
+! init_var_dict(&buf->b_vars, &buf->b_bufvar, VAR_SCOPE);
+ #endif
+ #ifdef FEAT_SYN_HL
+ hash_init(&buf->b_s.b_keywtab);
+*** ../vim-7.3.602/src/eval.c 2012-07-10 13:41:09.000000000 +0200
+--- src/eval.c 2012-07-16 17:18:11.000000000 +0200
+***************
+*** 850,857 ****
+ int i;
+ struct vimvar *p;
+
+! init_var_dict(&globvardict, &globvars_var);
+! init_var_dict(&vimvardict, &vimvars_var);
+ vimvardict.dv_lock = VAR_FIXED;
+ hash_init(&compat_hashtab);
+ hash_init(&func_hashtab);
+--- 850,857 ----
+ int i;
+ struct vimvar *p;
+
+! init_var_dict(&globvardict, &globvars_var, VAR_DEF_SCOPE);
+! init_var_dict(&vimvardict, &vimvars_var, VAR_SCOPE);
+ vimvardict.dv_lock = VAR_FIXED;
+ hash_init(&compat_hashtab);
+ hash_init(&func_hashtab);
+***************
+*** 2725,2738 ****
+ lp->ll_dict = lp->ll_tv->vval.v_dict;
+ lp->ll_di = dict_find(lp->ll_dict, key, len);
+
+! /* When assigning to g: check that a function and variable name is
+! * valid. */
+! if (rettv != NULL && lp->ll_dict == &globvardict)
+ {
+! if (rettv->v_type == VAR_FUNC
+ && var_check_func_name(key, lp->ll_di == NULL))
+! return NULL;
+! if (!valid_varname(key))
+ return NULL;
+ }
+
+--- 2725,2750 ----
+ lp->ll_dict = lp->ll_tv->vval.v_dict;
+ lp->ll_di = dict_find(lp->ll_dict, key, len);
+
+! /* When assigning to a scope dictionary check that a function and
+! * variable name is valid (only variable name unless it is l: or
+! * g: dictionary). Disallow overwriting a builtin function. */
+! if (rettv != NULL && lp->ll_dict->dv_scope != 0)
+ {
+! int prevval;
+! int wrong;
+!
+! if (len != -1)
+! {
+! prevval = key[len];
+! key[len] = NUL;
+! }
+! wrong = (lp->ll_dict->dv_scope == VAR_DEF_SCOPE
+! && rettv->v_type == VAR_FUNC
+ && var_check_func_name(key, lp->ll_di == NULL))
+! || !valid_varname(key);
+! if (len != -1)
+! key[len] = prevval;
+! if (wrong)
+ return NULL;
+ }
+
+***************
+*** 6951,6957 ****
+ d = (dict_T *)alloc(sizeof(dict_T));
+ if (d != NULL)
+ {
+! /* Add the list to the list of dicts for garbage collection. */
+ if (first_dict != NULL)
+ first_dict->dv_used_prev = d;
+ d->dv_used_next = first_dict;
+--- 6963,6969 ----
+ d = (dict_T *)alloc(sizeof(dict_T));
+ if (d != NULL)
+ {
+! /* Add the dict to the list of dicts for garbage collection. */
+ if (first_dict != NULL)
+ first_dict->dv_used_prev = d;
+ d->dv_used_next = first_dict;
+***************
+*** 6960,6965 ****
+--- 6972,6978 ----
+
+ hash_init(&d->dv_hashtab);
+ d->dv_lock = 0;
++ d->dv_scope = 0;
+ d->dv_refcount = 0;
+ d->dv_copyID = 0;
+ }
+***************
+*** 10203,10208 ****
+--- 10216,10234 ----
+ {
+ --todo;
+ di1 = dict_find(d1, hi2->hi_key, -1);
++ if (d1->dv_scope != 0)
++ {
++ /* Disallow replacing a builtin function in l: and g:.
++ * Check the key to be valid when adding to any
++ * scope. */
++ if (d1->dv_scope == VAR_DEF_SCOPE
++ && HI2DI(hi2)->di_tv.v_type == VAR_FUNC
++ && var_check_func_name(hi2->hi_key,
++ di1 == NULL))
++ break;
++ if (!valid_varname(hi2->hi_key))
++ break;
++ }
+ if (di1 == NULL)
+ {
+ di1 = dictitem_copy(HI2DI(hi2));
+***************
+*** 20027,20033 ****
+ {
+ sv = SCRIPT_SV(ga_scripts.ga_len + 1) =
+ (scriptvar_T *)alloc_clear(sizeof(scriptvar_T));
+! init_var_dict(&sv->sv_dict, &sv->sv_var);
+ ++ga_scripts.ga_len;
+ }
+ }
+--- 20053,20059 ----
+ {
+ sv = SCRIPT_SV(ga_scripts.ga_len + 1) =
+ (scriptvar_T *)alloc_clear(sizeof(scriptvar_T));
+! init_var_dict(&sv->sv_dict, &sv->sv_var, VAR_SCOPE);
+ ++ga_scripts.ga_len;
+ }
+ }
+***************
+*** 20038,20049 ****
+ * point to it.
+ */
+ void
+! init_var_dict(dict, dict_var)
+ dict_T *dict;
+ dictitem_T *dict_var;
+ {
+ hash_init(&dict->dv_hashtab);
+ dict->dv_lock = 0;
+ dict->dv_refcount = DO_NOT_FREE_CNT;
+ dict->dv_copyID = 0;
+ dict_var->di_tv.vval.v_dict = dict;
+--- 20064,20077 ----
+ * point to it.
+ */
+ void
+! init_var_dict(dict, dict_var, scope)
+ dict_T *dict;
+ dictitem_T *dict_var;
++ int scope;
+ {
+ hash_init(&dict->dv_hashtab);
+ dict->dv_lock = 0;
++ dict->dv_scope = scope;
+ dict->dv_refcount = DO_NOT_FREE_CNT;
+ dict->dv_copyID = 0;
+ dict_var->di_tv.vval.v_dict = dict;
+***************
+*** 22304,22310 ****
+ /*
+ * Init l: variables.
+ */
+! init_var_dict(&fc->l_vars, &fc->l_vars_var);
+ if (selfdict != NULL)
+ {
+ /* Set l:self to "selfdict". Use "name" to avoid a warning from
+--- 22332,22338 ----
+ /*
+ * Init l: variables.
+ */
+! init_var_dict(&fc->l_vars, &fc->l_vars_var, VAR_DEF_SCOPE);
+ if (selfdict != NULL)
+ {
+ /* Set l:self to "selfdict". Use "name" to avoid a warning from
+***************
+*** 22325,22331 ****
+ * Set a:0 to "argcount".
+ * Set a:000 to a list with room for the "..." arguments.
+ */
+! init_var_dict(&fc->l_avars, &fc->l_avars_var);
+ add_nr_var(&fc->l_avars, &fc->fixvar[fixvar_idx++].var, "0",
+ (varnumber_T)(argcount - fp->uf_args.ga_len));
+ /* Use "name" to avoid a warning from some compiler that checks the
+--- 22353,22359 ----
+ * Set a:0 to "argcount".
+ * Set a:000 to a list with room for the "..." arguments.
+ */
+! init_var_dict(&fc->l_avars, &fc->l_avars_var, VAR_SCOPE);
+ add_nr_var(&fc->l_avars, &fc->fixvar[fixvar_idx++].var, "0",
+ (varnumber_T)(argcount - fp->uf_args.ga_len));
+ /* Use "name" to avoid a warning from some compiler that checks the
+*** ../vim-7.3.602/src/proto/eval.pro 2012-06-29 12:54:32.000000000 +0200
+--- src/proto/eval.pro 2012-07-16 16:55:16.000000000 +0200
+***************
+*** 93,99 ****
+ char_u *get_tv_string_chk __ARGS((typval_T *varp));
+ char_u *get_var_value __ARGS((char_u *name));
+ void new_script_vars __ARGS((scid_T id));
+! void init_var_dict __ARGS((dict_T *dict, dictitem_T *dict_var));
+ void vars_clear __ARGS((hashtab_T *ht));
+ void copy_tv __ARGS((typval_T *from, typval_T *to));
+ void ex_echo __ARGS((exarg_T *eap));
+--- 93,99 ----
+ char_u *get_tv_string_chk __ARGS((typval_T *varp));
+ char_u *get_var_value __ARGS((char_u *name));
+ void new_script_vars __ARGS((scid_T id));
+! void init_var_dict __ARGS((dict_T *dict, dictitem_T *dict_var, int scope));
+ void vars_clear __ARGS((hashtab_T *ht));
+ void copy_tv __ARGS((typval_T *from, typval_T *to));
+ void ex_echo __ARGS((exarg_T *eap));
+*** ../vim-7.3.602/src/structs.h 2012-06-06 19:02:40.000000000 +0200
+--- src/structs.h 2012-07-16 16:56:43.000000000 +0200
+***************
+*** 1106,1111 ****
+--- 1106,1116 ----
+ #define VAR_DICT 5 /* "v_dict" is used */
+ #define VAR_FLOAT 6 /* "v_float" is used */
+
++ /* Values for "dv_scope". */
++ #define VAR_SCOPE 1 /* a:, v:, s:, etc. scope dictionaries */
++ #define VAR_DEF_SCOPE 2 /* l:, g: scope dictionaries: here funcrefs are not
++ allowed to mask existing functions */
++
+ /* Values for "v_lock". */
+ #define VAR_LOCKED 1 /* locked with lock(), can use unlock() */
+ #define VAR_FIXED 2 /* locked forever */
+***************
+*** 1181,1186 ****
+--- 1186,1192 ----
+ int dv_copyID; /* ID used by deepcopy() */
+ dict_T *dv_copydict; /* copied dict used by deepcopy() */
+ char dv_lock; /* zero, VAR_LOCKED, VAR_FIXED */
++ char dv_scope; /* zero, VAR_SCOPE, VAR_DEF_SCOPE */
+ dict_T *dv_used_next; /* next dict in used dicts list */
+ dict_T *dv_used_prev; /* previous dict in used dicts list */
+ };
+*** ../vim-7.3.602/src/testdir/test34.in 2010-08-15 21:57:29.000000000 +0200
+--- src/testdir/test34.in 2012-07-16 16:51:29.000000000 +0200
+***************
+*** 1,5 ****
+--- 1,6 ----
+ Test for user functions.
+ Also test an <expr> mapping calling a function.
++ Also test that a builtin function cannot be replaced.
+
+ STARTTEST
+ :so small.vim
+***************
+*** 58,64 ****
+ ---*---
+ (one
+ (two
+! [(one again:$-5,$w! test.out
+ :delfunc Table
+ :delfunc Compute
+ :delfunc Expr1
+--- 59,68 ----
+ ---*---
+ (one
+ (two
+! [(one again:call append(line('$'), max([1, 2, 3]))
+! :call extend(g:, {'max': function('min')})
+! :call append(line('$'), max([1, 2, 3]))
+! :$-7,$w! test.out
+ :delfunc Table
+ :delfunc Compute
+ :delfunc Expr1
+*** ../vim-7.3.602/src/testdir/test34.ok 2011-10-12 22:02:07.000000000 +0200
+--- src/testdir/test34.ok 2012-07-16 16:43:15.000000000 +0200
+***************
+*** 4,6 ****
+--- 4,8 ----
+ 1. one
+ 2. two
+ 1. one again
++ 3
++ 3
+*** ../vim-7.3.602/src/window.c 2012-07-06 18:27:34.000000000 +0200
+--- src/window.c 2012-07-16 16:53:45.000000000 +0200
+***************
+*** 3468,3474 ****
+ # endif
+ #ifdef FEAT_EVAL
+ /* init t: variables */
+! init_var_dict(&tp->tp_vars, &tp->tp_winvar);
+ #endif
+ tp->tp_ch_used = p_ch;
+ }
+--- 3468,3474 ----
+ # endif
+ #ifdef FEAT_EVAL
+ /* init t: variables */
+! init_var_dict(&tp->tp_vars, &tp->tp_winvar, VAR_SCOPE);
+ #endif
+ tp->tp_ch_used = p_ch;
+ }
+***************
+*** 4410,4416 ****
+ #endif
+ #ifdef FEAT_EVAL
+ /* init w: variables */
+! init_var_dict(&new_wp->w_vars, &new_wp->w_winvar);
+ #endif
+ #ifdef FEAT_FOLDING
+ foldInitWin(new_wp);
+--- 4410,4416 ----
+ #endif
+ #ifdef FEAT_EVAL
+ /* init w: variables */
+! init_var_dict(&new_wp->w_vars, &new_wp->w_winvar, VAR_SCOPE);
+ #endif
+ #ifdef FEAT_FOLDING
+ foldInitWin(new_wp);
+*** ../vim-7.3.602/src/version.c 2012-07-16 17:27:57.000000000 +0200
+--- src/version.c 2012-07-16 17:29:06.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 603,
+ /**/
+
+--
+Birthdays are healthy. The more you have them, the longer you live.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.604 b/source/ap/vim/patches/7.3.604
new file mode 100644
index 000000000..f7e63bd0d
--- /dev/null
+++ b/source/ap/vim/patches/7.3.604
@@ -0,0 +1,60 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.604
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.604
+Problem: inputdialog() doesn't use the cancel argument in the console.
+ (David Fishburn)
+Solution: Use the third argument. (Christian Brabant)
+Files: src/eval.c
+
+
+*** ../vim-7.3.603/src/eval.c 2012-07-16 17:31:48.000000000 +0200
+--- src/eval.c 2012-07-16 19:20:47.000000000 +0200
+***************
+*** 12940,12945 ****
+--- 12940,12946 ----
+ int xp_namelen;
+ long argt;
+
++ /* input() with a third argument: completion */
+ rettv->vval.v_string = NULL;
+
+ xp_name = get_tv_string_buf_chk(&argvars[2], buf);
+***************
+*** 12958,12963 ****
+--- 12959,12969 ----
+ rettv->vval.v_string =
+ getcmdline_prompt(inputsecret_flag ? NUL : '@', p, echo_attr,
+ xp_type, xp_arg);
++ if (rettv->vval.v_string == NULL
++ && argvars[1].v_type != VAR_UNKNOWN
++ && argvars[2].v_type != VAR_UNKNOWN)
++ rettv->vval.v_string = vim_strsave(get_tv_string_buf(
++ &argvars[2], buf));
+
+ vim_free(xp_arg);
+
+*** ../vim-7.3.603/src/version.c 2012-07-16 17:31:48.000000000 +0200
+--- src/version.c 2012-07-16 19:23:11.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 604,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+135. You cut classes or miss work so you can stay home and browse the web.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.605 b/source/ap/vim/patches/7.3.605
new file mode 100644
index 000000000..703382516
--- /dev/null
+++ b/source/ap/vim/patches/7.3.605
@@ -0,0 +1,86 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.605
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.605 (after 7.3.577)
+Problem: MS-Windows: Can't compile with older compilers. (Titov Anatoly)
+Solution: Add #ifdef for MEMORYSTATUSEX.
+Files: src/os_win32.c
+
+
+*** ../vim-7.3.604/src/os_win32.c 2012-06-29 15:51:26.000000000 +0200
+--- src/os_win32.c 2012-07-19 11:35:00.000000000 +0200
+***************
+*** 4999,5020 ****
+ long_u
+ mch_avail_mem(int special)
+ {
+! if (g_PlatformId != VER_PLATFORM_WIN32_NT)
+! {
+! MEMORYSTATUS ms;
+!
+! ms.dwLength = sizeof(MEMORYSTATUS);
+! GlobalMemoryStatus(&ms);
+! return (long_u)((ms.dwAvailPhys + ms.dwAvailPageFile) >> 10);
+! }
+! else
+ {
+ MEMORYSTATUSEX ms;
+
+ ms.dwLength = sizeof(MEMORYSTATUSEX);
+ GlobalMemoryStatusEx(&ms);
+ return (long_u)((ms.ullAvailPhys + ms.ullAvailPageFile) >> 10);
+ }
+ }
+
+ #ifdef FEAT_MBYTE
+--- 4999,5025 ----
+ long_u
+ mch_avail_mem(int special)
+ {
+! #ifdef MEMORYSTATUSEX
+! PlatformId();
+! if (g_PlatformId == VER_PLATFORM_WIN32_NT)
+ {
+ MEMORYSTATUSEX ms;
+
++ /* Need to use GlobalMemoryStatusEx() when there is more memory than
++ * what fits in 32 bits. But it's not always available. */
+ ms.dwLength = sizeof(MEMORYSTATUSEX);
+ GlobalMemoryStatusEx(&ms);
+ return (long_u)((ms.ullAvailPhys + ms.ullAvailPageFile) >> 10);
+ }
++ else
++ #endif
++ {
++ MEMORYSTATUS ms;
++
++ ms.dwLength = sizeof(MEMORYSTATUS);
++ GlobalMemoryStatus(&ms);
++ return (long_u)((ms.dwAvailPhys + ms.dwAvailPageFile) >> 10);
++ }
+ }
+
+ #ifdef FEAT_MBYTE
+*** ../vim-7.3.604/src/version.c 2012-07-16 19:27:25.000000000 +0200
+--- src/version.c 2012-07-19 11:36:12.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 605,
+ /**/
+
+--
+Fingers not found - Pound head on keyboard to continue.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.606 b/source/ap/vim/patches/7.3.606
new file mode 100644
index 000000000..2296653c4
--- /dev/null
+++ b/source/ap/vim/patches/7.3.606
@@ -0,0 +1,76 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.606
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.606
+Problem: CTRL-P completion has a problem with multi-byte characters.
+Solution: Check for next character being NUL properly. (Yasuhiro Matsumoto)
+Files: src/search.c, src/macros.h
+
+
+*** ../vim-7.3.605/src/search.c 2012-06-06 16:12:54.000000000 +0200
+--- src/search.c 2012-07-19 17:09:20.000000000 +0200
+***************
+*** 5141,5147 ****
+ && !(compl_cont_status & CONT_SOL)
+ #endif
+ && *startp != NUL
+! && *(p = startp + 1) != NUL)
+ goto search_line;
+ }
+ line_breakcheck();
+--- 5141,5147 ----
+ && !(compl_cont_status & CONT_SOL)
+ #endif
+ && *startp != NUL
+! && *(p = startp + MB_PTR2LEN(startp)) != NUL)
+ goto search_line;
+ }
+ line_breakcheck();
+*** ../vim-7.3.605/src/macros.h 2010-09-21 16:56:29.000000000 +0200
+--- src/macros.h 2012-07-19 17:08:38.000000000 +0200
+***************
+*** 259,264 ****
+--- 259,266 ----
+ * PTR2CHAR(): get character from pointer.
+ */
+ #ifdef FEAT_MBYTE
++ /* Get the length of the character p points to */
++ # define MB_PTR2LEN(p) (has_mbyte ? (*mb_ptr2len)(p) : 1)
+ /* Advance multi-byte pointer, skip over composing chars. */
+ # define mb_ptr_adv(p) p += has_mbyte ? (*mb_ptr2len)(p) : 1
+ /* Advance multi-byte pointer, do not skip over composing chars. */
+***************
+*** 272,277 ****
+--- 274,280 ----
+ # define MB_CHARLEN(p) (has_mbyte ? mb_charlen(p) : (int)STRLEN(p))
+ # define PTR2CHAR(p) (has_mbyte ? mb_ptr2char(p) : (int)*(p))
+ #else
++ # define MB_PTR2LEN(p) 1
+ # define mb_ptr_adv(p) ++p
+ # define mb_cptr_adv(p) ++p
+ # define mb_ptr_back(s, p) --p
+*** ../vim-7.3.605/src/version.c 2012-07-19 11:37:22.000000000 +0200
+--- src/version.c 2012-07-19 17:13:53.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 606,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+151. You find yourself engaged to someone you've never actually met,
+ except through e-mail.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.607 b/source/ap/vim/patches/7.3.607
new file mode 100644
index 000000000..4dbf559dd
--- /dev/null
+++ b/source/ap/vim/patches/7.3.607
@@ -0,0 +1,56 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.607
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.607
+Problem: With an 8 color terminal the selected menu item is black on black,
+ because darkGrey as bg is the same as black.
+Solution: Swap fg and bg colors. (James McCoy)
+Files: src/syntax.c
+
+
+*** ../vim-7.3.606/src/syntax.c 2012-06-01 13:18:48.000000000 +0200
+--- src/syntax.c 2012-07-19 17:34:42.000000000 +0200
+***************
+*** 6653,6660 ****
+ "PmenuThumb ctermbg=White guibg=White"),
+ CENT("Pmenu ctermbg=Magenta ctermfg=Black",
+ "Pmenu ctermbg=Magenta ctermfg=Black guibg=Magenta"),
+! CENT("PmenuSel ctermbg=DarkGrey ctermfg=Black",
+! "PmenuSel ctermbg=DarkGrey ctermfg=Black guibg=DarkGrey"),
+ #endif
+ CENT("Title term=bold ctermfg=LightMagenta",
+ "Title term=bold ctermfg=LightMagenta gui=bold guifg=Magenta"),
+--- 6653,6660 ----
+ "PmenuThumb ctermbg=White guibg=White"),
+ CENT("Pmenu ctermbg=Magenta ctermfg=Black",
+ "Pmenu ctermbg=Magenta ctermfg=Black guibg=Magenta"),
+! CENT("PmenuSel ctermbg=Black ctermfg=DarkGrey",
+! "PmenuSel ctermbg=Black ctermfg=DarkGrey guibg=DarkGrey"),
+ #endif
+ CENT("Title term=bold ctermfg=LightMagenta",
+ "Title term=bold ctermfg=LightMagenta gui=bold guifg=Magenta"),
+*** ../vim-7.3.606/src/version.c 2012-07-19 17:18:21.000000000 +0200
+--- src/version.c 2012-07-19 17:38:05.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 607,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+152. You find yourself falling for someone you've never seen or hardly
+ know, but, boy can he/she TYPE!!!!!!
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.608 b/source/ap/vim/patches/7.3.608
new file mode 100644
index 000000000..148bc494e
--- /dev/null
+++ b/source/ap/vim/patches/7.3.608
@@ -0,0 +1,119 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.608
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.608
+Problem: winrestview() does not always restore the view correctly.
+Solution: Call win_new_height() and win_new_width(). (Lech Lorens)
+Files: src/eval.c, src/proto/window.pro, src/window.c
+
+
+*** ../vim-7.3.607/src/eval.c 2012-07-16 19:27:25.000000000 +0200
+--- src/eval.c 2012-07-19 17:50:16.000000000 +0200
+***************
+*** 18601,18606 ****
+--- 18601,18610 ----
+ curwin->w_skipcol = get_dict_number(dict, (char_u *)"skipcol");
+
+ check_cursor();
++ win_new_height(curwin, curwin->w_height);
++ # ifdef FEAT_VERTSPLIT
++ win_new_width(curwin, W_WIDTH(curwin));
++ # endif
+ changed_window_setting();
+
+ if (curwin->w_topline == 0)
+*** ../vim-7.3.607/src/proto/window.pro 2012-06-13 14:28:16.000000000 +0200
+--- src/proto/window.pro 2012-07-19 18:05:10.000000000 +0200
+***************
+*** 51,56 ****
+--- 51,58 ----
+ void win_setminheight __ARGS((void));
+ void win_drag_status_line __ARGS((win_T *dragwin, int offset));
+ void win_drag_vsep_line __ARGS((win_T *dragwin, int offset));
++ void win_new_height __ARGS((win_T *wp, int height));
++ void win_new_width __ARGS((win_T *wp, int width));
+ void win_comp_scroll __ARGS((win_T *wp));
+ void command_height __ARGS((void));
+ void last_status __ARGS((int morewin));
+*** ../vim-7.3.607/src/window.c 2012-07-16 17:31:48.000000000 +0200
+--- src/window.c 2012-07-19 18:05:18.000000000 +0200
+***************
+*** 54,60 ****
+ static void frame_insert __ARGS((frame_T *before, frame_T *frp));
+ static void frame_remove __ARGS((frame_T *frp));
+ #ifdef FEAT_VERTSPLIT
+- static void win_new_width __ARGS((win_T *wp, int width));
+ static void win_goto_ver __ARGS((int up, long count));
+ static void win_goto_hor __ARGS((int left, long count));
+ #endif
+--- 54,59 ----
+***************
+*** 71,77 ****
+
+ static win_T *win_alloc __ARGS((win_T *after, int hidden));
+ static void set_fraction __ARGS((win_T *wp));
+- static void win_new_height __ARGS((win_T *wp, int height));
+
+ #define URL_SLASH 1 /* path_is_url() has found "://" */
+ #define URL_BACKSLASH 2 /* path_is_url() has found ":\\" */
+--- 70,75 ----
+***************
+*** 5557,5563 ****
+ * This takes care of the things inside the window, not what happens to the
+ * window position, the frame or to other windows.
+ */
+! static void
+ win_new_height(wp, height)
+ win_T *wp;
+ int height;
+--- 5555,5561 ----
+ * This takes care of the things inside the window, not what happens to the
+ * window position, the frame or to other windows.
+ */
+! void
+ win_new_height(wp, height)
+ win_T *wp;
+ int height;
+***************
+*** 5697,5703 ****
+ /*
+ * Set the width of a window.
+ */
+! static void
+ win_new_width(wp, width)
+ win_T *wp;
+ int width;
+--- 5695,5701 ----
+ /*
+ * Set the width of a window.
+ */
+! void
+ win_new_width(wp, width)
+ win_T *wp;
+ int width;
+*** ../vim-7.3.607/src/version.c 2012-07-19 17:39:01.000000000 +0200
+--- src/version.c 2012-07-19 17:53:37.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 608,
+ /**/
+
+--
+Although the scythe isn't pre-eminent among the weapons of war, anyone who
+has been on the wrong end of, say, a peasants' revolt will know that in
+skilled hands it is fearsome.
+ -- (Terry Pratchett, Mort)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.609 b/source/ap/vim/patches/7.3.609
new file mode 100644
index 000000000..ed731f509
--- /dev/null
+++ b/source/ap/vim/patches/7.3.609
@@ -0,0 +1,251 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.609
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.609
+Problem: File names in :checkpath! output are garbled.
+Solution: Check for \zs in the pattern. (Lech Lorens)
+Files: src/search.c, src/testdir/test17.in, src/testdir/test17.ok
+
+
+*** ../vim-7.3.608/src/search.c 2012-07-19 17:18:21.000000000 +0200
+--- src/search.c 2012-07-25 13:33:08.000000000 +0200
+***************
+*** 4740,4756 ****
+ * Isolate the file name.
+ * Include the surrounding "" or <> if present.
+ */
+! for (p = incl_regmatch.endp[0]; !vim_isfilec(*p); p++)
+! ;
+! for (i = 0; vim_isfilec(p[i]); i++)
+! ;
+ if (i == 0)
+ {
+ /* Nothing found, use the rest of the line. */
+ p = incl_regmatch.endp[0];
+ i = (int)STRLEN(p);
+ }
+! else
+ {
+ if (p[-1] == '"' || p[-1] == '<')
+ {
+--- 4740,4772 ----
+ * Isolate the file name.
+ * Include the surrounding "" or <> if present.
+ */
+! if (inc_opt != NULL
+! && strstr((char *)inc_opt, "\\zs") != NULL)
+! {
+! /* pattern contains \zs, use the match */
+! p = incl_regmatch.startp[0];
+! i = (int)(incl_regmatch.endp[0]
+! - incl_regmatch.startp[0]);
+! }
+! else
+! {
+! /* find the file name after the end of the match */
+! for (p = incl_regmatch.endp[0];
+! *p && !vim_isfilec(*p); p++)
+! ;
+! for (i = 0; vim_isfilec(p[i]); i++)
+! ;
+! }
+!
+ if (i == 0)
+ {
+ /* Nothing found, use the rest of the line. */
+ p = incl_regmatch.endp[0];
+ i = (int)STRLEN(p);
+ }
+! /* Avoid checking before the start of the line, can
+! * happen if \zs appears in the regexp. */
+! else if (p > line)
+ {
+ if (p[-1] == '"' || p[-1] == '<')
+ {
+*** ../vim-7.3.608/src/testdir/test17.in 2010-08-15 21:57:29.000000000 +0200
+--- src/testdir/test17.in 2012-07-25 13:41:43.000000000 +0200
+***************
+*** 1,4 ****
+! Tests for "gf" on ${VAR}
+
+ STARTTEST
+ :so small.vim
+--- 1,6 ----
+! Tests for:
+! - "gf" on ${VAR},
+! - ":checkpath!" with various 'include' settings.
+
+ STARTTEST
+ :so small.vim
+***************
+*** 20,27 ****
+ :endif
+ gf
+ :w! test.out
+! :qa!
+ ENDTEST
+
+ ${CDIR}/test17a.in
+ $TDIR/test17a.in
+--- 22,120 ----
+ :endif
+ gf
+ :w! test.out
+! :brewind
+ ENDTEST
+
+ ${CDIR}/test17a.in
+ $TDIR/test17a.in
++
++ STARTTEST
++ :" check for 'include' without \zs or \ze
++ :lang C
++ :!rm -f ./Xbase.a
++ :!rm -rf ./Xdir1
++ :!mkdir -p Xdir1/dir2
++ :e Xdir1/dir2/foo.a
++ i#include "bar.a"
++ :w
++ :e Xdir1/dir2/bar.a
++ i#include "baz.a"
++ :w
++ :e Xdir1/dir2/baz.a
++ i#include "foo.a"
++ :w
++ :e Xbase.a
++ :set path=Xdir1/dir2
++ i#include <foo.a>
++ :w
++ :redir! >>test.out
++ :checkpath!
++ :redir END
++ :brewind
++ ENDTEST
++
++ STARTTEST
++ :" check for 'include' with \zs and \ze
++ :!rm -f ./Xbase.b
++ :!rm -rf ./Xdir1
++ :!mkdir -p Xdir1/dir2
++ :let &include='^\s*%inc\s*/\zs[^/]\+\ze'
++ :function! DotsToSlashes()
++ : return substitute(v:fname, '\.', '/', 'g') . '.b'
++ :endfunction
++ :let &includeexpr='DotsToSlashes()'
++ :e Xdir1/dir2/foo.b
++ i%inc /bar/
++ :w
++ :e Xdir1/dir2/bar.b
++ i%inc /baz/
++ :w
++ :e Xdir1/dir2/baz.b
++ i%inc /foo/
++ :w
++ :e Xbase.b
++ :set path=Xdir1/dir2
++ i%inc /foo/
++ :w
++ :redir! >>test.out
++ :checkpath!
++ :redir END
++ :brewind
++ ENDTEST
++
++ STARTTEST
++ :" check for 'include' with \zs and no \ze
++ :!rm -f ./Xbase.c
++ :!rm -rf ./Xdir1
++ :!mkdir -p Xdir1/dir2
++ :let &include='^\s*%inc\s*\%([[:upper:]][^[:space:]]*\s\+\)\?\zs\S\+\ze'
++ :function! StripNewlineChar()
++ : if v:fname =~ '\n$'
++ : return v:fname[:-2]
++ : endif
++ : return v:fname
++ :endfunction
++ :let &includeexpr='StripNewlineChar()'
++ :e Xdir1/dir2/foo.c
++ i%inc bar.c
++ :w
++ :e Xdir1/dir2/bar.c
++ i%inc baz.c
++ :w
++ :e Xdir1/dir2/baz.c
++ i%inc foo.c
++ :w
++ :e Xdir1/dir2/FALSE.c
++ i%inc foo.c
++ :w
++ :e Xbase.c
++ :set path=Xdir1/dir2
++ i%inc FALSE.c foo.c
++ :w
++ :redir! >>test.out
++ :checkpath!
++ :redir END
++ :brewind
++ :q
++ ENDTEST
++
+*** ../vim-7.3.608/src/testdir/test17.ok 2010-08-15 21:57:29.000000000 +0200
+--- src/testdir/test17.ok 2012-07-25 13:45:37.000000000 +0200
+***************
+*** 1,3 ****
+--- 1,33 ----
+ This file is just to test "gf" in test 17.
+ The contents is not important.
+ Just testing!
++
++
++ --- Included files in path ---
++ Xdir1/dir2/foo.a
++ Xdir1/dir2/foo.a -->
++ Xdir1/dir2/bar.a
++ Xdir1/dir2/bar.a -->
++ Xdir1/dir2/baz.a
++ Xdir1/dir2/baz.a -->
++ "foo.a" (Already listed)
++
++
++ --- Included files in path ---
++ Xdir1/dir2/foo.b
++ Xdir1/dir2/foo.b -->
++ Xdir1/dir2/bar.b
++ Xdir1/dir2/bar.b -->
++ Xdir1/dir2/baz.b
++ Xdir1/dir2/baz.b -->
++ foo (Already listed)
++
++
++ --- Included files in path ---
++ Xdir1/dir2/foo.c
++ Xdir1/dir2/foo.c -->
++ Xdir1/dir2/bar.c
++ Xdir1/dir2/bar.c -->
++ Xdir1/dir2/baz.c
++ Xdir1/dir2/baz.c -->
++ foo.c^@ (Already listed)
+*** ../vim-7.3.608/src/version.c 2012-07-19 18:05:40.000000000 +0200
+--- src/version.c 2012-07-25 13:38:54.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 609,
+ /**/
+
+--
+"The question of whether computers can think is just like the question
+of whether submarines can swim." -- Edsger W. Dijkstra
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.610 b/source/ap/vim/patches/7.3.610
new file mode 100644
index 000000000..5e48837fa
--- /dev/null
+++ b/source/ap/vim/patches/7.3.610
@@ -0,0 +1,400 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.610
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.610
+Problem: Cannot operate on the text that a search pattern matches.
+Solution: Add the "gn" and "gN" commands. (Christian Brabandt)
+Files: runtime/doc/index.txt, runtime/doc/visual.txt, src/normal.c,
+ src/proto/search.pro, src/search.c, src/testdir/test53.in,
+ src/testdir/test53.ok
+
+
+*** ../vim-7.3.609/runtime/doc/index.txt 2010-08-15 21:57:18.000000000 +0200
+--- runtime/doc/index.txt 2012-07-25 14:27:20.000000000 +0200
+***************
+*** 719,726 ****
+--- 719,729 ----
+ |gH| gH start Select line mode
+ |gI| gI 2 like "I", but always start in column 1
+ |gJ| gJ 2 join lines without inserting space
++ |gN| gN 1,2 find the previous match with the last used
++ search pattern and Visually select it
+ |gP| ["x]gP 2 put the text [from register x] before the
+ cursor N times, leave the cursor after it
++ |gQ| gQ switch to "Ex" mode with Vim editing
+ |gR| gR 2 enter Virtual Replace mode
+ |gU| gU{motion} 2 make Nmove text uppercase
+ |gV| gV don't reselect the previous Visual area
+***************
+*** 750,755 ****
+--- 753,760 ----
+ lines down
+ |gk| gk 1 like "k", but when 'wrap' on go N screen
+ lines up
++ |gn| gn 1,2 find the next match with the last used
++ search pattern and Visually select it
+ |gm| gm 1 go to character at middle of the screenline
+ |go| go 1 cursor to byte N in the buffer
+ |gp| ["x]gp 2 put the text [from register x] after the
+*** ../vim-7.3.609/runtime/doc/visual.txt 2010-08-15 21:57:16.000000000 +0200
+--- runtime/doc/visual.txt 2012-07-25 14:42:22.000000000 +0200
+***************
+*** 94,99 ****
+--- 99,116 ----
+ After using "p" or "P" in Visual mode the text that
+ was put will be selected.
+
++ *gn* *v_gn*
++ gn Search forward for the last used search pattern, like
++ with `n`, and start Visual mode to select the match.
++ If the cursor is on the match, visually selects it.
++ If an operator is pending, operates on the match.
++ E.g., "dgn" deletes the text of the next match.
++ If Visual mode is active, extends the selection
++ until the end of the next match.
++
++ *gN* *v_gN*
++ gN Like |gn| but searches backward, like with `N`.
++
+ *<LeftMouse>*
+ <LeftMouse> Set the current cursor position. If Visual mode is
+ active it is stopped. Only when 'mouse' option is
+*** ../vim-7.3.609/src/normal.c 2012-07-10 16:49:08.000000000 +0200
+--- src/normal.c 2012-07-25 14:31:40.000000000 +0200
+***************
+*** 1780,1789 ****
+ {
+ /* Prepare for redoing. Only use the nchar field for "r",
+ * otherwise it might be the second char of the operator. */
+! prep_redo(oap->regname, 0L, NUL, 'v',
+! get_op_char(oap->op_type),
+! get_extra_op_char(oap->op_type),
+! oap->op_type == OP_REPLACE ? cap->nchar : NUL);
+ if (!redo_VIsual_busy)
+ {
+ redo_VIsual_mode = resel_VIsual_mode;
+--- 1780,1797 ----
+ {
+ /* Prepare for redoing. Only use the nchar field for "r",
+ * otherwise it might be the second char of the operator. */
+! if (cap->cmdchar == 'g' && (cap->nchar == 'n'
+! || cap->nchar == 'N'))
+! /* "gn" and "gN" are a bit different */
+! prep_redo(oap->regname, 0L, NUL, cap->cmdchar, cap->nchar,
+! get_op_char(oap->op_type),
+! get_extra_op_char(oap->op_type));
+! else
+! prep_redo(oap->regname, 0L, NUL, 'v',
+! get_op_char(oap->op_type),
+! get_extra_op_char(oap->op_type),
+! oap->op_type == OP_REPLACE
+! ? cap->nchar : NUL);
+ if (!redo_VIsual_busy)
+ {
+ redo_VIsual_mode = resel_VIsual_mode;
+***************
+*** 7987,7992 ****
+--- 7995,8011 ----
+ cap->arg = TRUE;
+ nv_visual(cap);
+ break;
++
++ /* "gn", "gN" visually select next/previous search match
++ * "gn" selects next match
++ * "gN" selects previous match
++ */
++ case 'N':
++ case 'n':
++ if (!current_search(cap->count1, cap->nchar == 'n'))
++ beep_flush();
++
++ break;
+ #endif /* FEAT_VISUAL */
+
+ /*
+*** ../vim-7.3.609/src/proto/search.pro 2010-08-15 21:57:28.000000000 +0200
+--- src/proto/search.pro 2012-07-25 14:24:01.000000000 +0200
+***************
+*** 27,32 ****
+--- 27,33 ----
+ int end_word __ARGS((long count, int bigword, int stop, int empty));
+ int bckend_word __ARGS((long count, int bigword, int eol));
+ int current_word __ARGS((oparg_T *oap, long count, int include, int bigword));
++ int current_search __ARGS((long count, int forward));
+ int current_sent __ARGS((oparg_T *oap, long count, int include));
+ int current_block __ARGS((oparg_T *oap, long count, int include, int what, int other));
+ int current_tagblock __ARGS((oparg_T *oap, long count_arg, int include));
+*** ../vim-7.3.609/src/search.c 2012-07-25 13:46:25.000000000 +0200
+--- src/search.c 2012-07-25 14:54:28.000000000 +0200
+***************
+*** 3397,3402 ****
+--- 3397,3547 ----
+ return OK;
+ }
+
++ #if defined(FEAT_VISUAL) || defined(PROTO)
++ /*
++ * Find next search match under cursor, cursor at end.
++ * Used while an operator is pending, and in Visual mode.
++ * TODO: redo only works when used in operator pending mode
++ */
++ int
++ current_search(count, forward)
++ long count;
++ int forward; /* move forward or backwards */
++ {
++ pos_T start_pos; /* position before the pattern */
++ pos_T orig_pos; /* position of the cursor at beginning */
++ pos_T pos; /* position after the pattern */
++ int i;
++ int dir;
++ int result; /* result of various function calls */
++ char_u old_p_ws = p_ws;
++ int visual_active = FALSE;
++ int flags = 0;
++ pos_T save_VIsual;
++
++
++ /* wrapping should not occur */
++ p_ws = FALSE;
++
++ /* Correct cursor when 'selection' is exclusive */
++ if (VIsual_active && *p_sel == 'e' && lt(VIsual, curwin->w_cursor))
++ dec_cursor();
++
++ if (VIsual_active)
++ {
++ orig_pos = curwin->w_cursor;
++ save_VIsual = VIsual;
++ visual_active = TRUE;
++
++ /* just started visual selection, only one character */
++ if (equalpos(VIsual, curwin->w_cursor))
++ visual_active = FALSE;
++
++ pos = curwin->w_cursor;
++ start_pos = VIsual;
++
++ /* make sure, searching further will extend the match */
++ if (VIsual_active)
++ {
++ if (forward)
++ incl(&pos);
++ else
++ decl(&pos);
++ }
++ }
++ else
++ orig_pos = pos = start_pos = curwin->w_cursor;
++
++ /*
++ * The trick is to first search backwards and then search forward again,
++ * so that a match at the current cursor position will be correctly
++ * captured.
++ */
++ for (i = 0; i < 2; i++)
++ {
++ if (i && count == 1)
++ flags = SEARCH_START;
++
++ if (forward)
++ dir = i;
++ else
++ dir = !i;
++ result = searchit(curwin, curbuf, &pos, (dir ? FORWARD : BACKWARD),
++ spats[last_idx].pat, (long) (i ? count : 1),
++ SEARCH_KEEP | flags | (dir ? 0 : SEARCH_END),
++ RE_SEARCH, 0, NULL);
++
++ /* First search may fail, but then start searching from the
++ * beginning of the file (cursor might be on the search match)
++ * except when Visual mode is active, so that extending the visual
++ * selection works. */
++ if (!result && i) /* not found, abort */
++ {
++ curwin->w_cursor = orig_pos;
++ if (VIsual_active)
++ VIsual = save_VIsual;
++ p_ws = old_p_ws;
++ return FAIL;
++ }
++ else if (!i && !result && !visual_active)
++ {
++ if (forward) /* try again from start of buffer */
++ {
++ clearpos(&pos);
++ }
++ else /* try again from end of buffer */
++ {
++ /* searching backwards, so set pos to last line and col */
++ pos.lnum = curwin->w_buffer->b_ml.ml_line_count;
++ pos.col = STRLEN(ml_get(curwin->w_buffer->b_ml.ml_line_count));
++ }
++ }
++
++ }
++
++ start_pos = pos;
++ flags = (forward ? SEARCH_END : 0);
++
++ /* move to match */
++ result = searchit(curwin, curbuf, &pos, (forward ? FORWARD : BACKWARD),
++ spats[last_idx].pat, 0L, flags | SEARCH_KEEP, RE_SEARCH, 0, NULL);
++
++ if (!VIsual_active)
++ VIsual = start_pos;
++
++ p_ws = old_p_ws;
++ curwin->w_cursor = pos;
++ VIsual_active = TRUE;
++ VIsual_mode = 'v';
++
++ if (VIsual_active)
++ {
++ redraw_curbuf_later(INVERTED); /* update the inversion */
++ if (*p_sel == 'e' && ltoreq(VIsual, curwin->w_cursor))
++ inc_cursor();
++ }
++
++ #ifdef FEAT_FOLDING
++ if (fdo_flags & FDO_SEARCH && KeyTyped)
++ foldOpenCursor();
++ #endif
++
++ may_start_select('c');
++ #ifdef FEAT_MOUSE
++ setmouse();
++ #endif
++ #ifdef FEAT_CLIPBOARD
++ /* Make sure the clipboard gets updated. Needed because start and
++ * end are still the same, and the selection needs to be owned */
++ clip_star.vmode = NUL;
++ #endif
++ redraw_curbuf_later(INVERTED);
++ showmode();
++
++ return OK;
++ }
++ #endif /* FEAT_VISUAL */
++
+ /*
+ * Find sentence(s) under the cursor, cursor at end.
+ * When Visual active, extend it by one or more sentences.
+***************
+*** 3420,3426 ****
+
+ #ifdef FEAT_VISUAL
+ /*
+! * When visual area is bigger than one character: Extend it.
+ */
+ if (VIsual_active && !equalpos(start_pos, VIsual))
+ {
+--- 3565,3571 ----
+
+ #ifdef FEAT_VISUAL
+ /*
+! * When the Visual area is bigger than one character: Extend it.
+ */
+ if (VIsual_active && !equalpos(start_pos, VIsual))
+ {
+***************
+*** 3508,3515 ****
+ #endif
+
+ /*
+! * If cursor started on blank, check if it is just before the start of the
+! * next sentence.
+ */
+ while (c = gchar_pos(&pos), vim_iswhite(c)) /* vim_iswhite() is a macro */
+ incl(&pos);
+--- 3653,3660 ----
+ #endif
+
+ /*
+! * If the cursor started on a blank, check if it is just before the start
+! * of the next sentence.
+ */
+ while (c = gchar_pos(&pos), vim_iswhite(c)) /* vim_iswhite() is a macro */
+ incl(&pos);
+***************
+*** 3558,3564 ****
+ #ifdef FEAT_VISUAL
+ if (VIsual_active)
+ {
+! /* avoid getting stuck with "is" on a single space before a sent. */
+ if (equalpos(start_pos, curwin->w_cursor))
+ goto extend;
+ if (*p_sel == 'e')
+--- 3703,3709 ----
+ #ifdef FEAT_VISUAL
+ if (VIsual_active)
+ {
+! /* Avoid getting stuck with "is" on a single space before a sentence. */
+ if (equalpos(start_pos, curwin->w_cursor))
+ goto extend;
+ if (*p_sel == 'e')
+*** ../vim-7.3.609/src/testdir/test53.in 2010-08-15 21:57:29.000000000 +0200
+--- src/testdir/test53.in 2012-07-25 15:01:34.000000000 +0200
+***************
+*** 28,33 ****
+--- 28,40 ----
+ :put =matchstr(\"abcd\", \".\", 0, -1) " a
+ :put =match(\"abcd\", \".\", 0, 5) " -1
+ :put =match(\"abcd\", \".\", 0, -1) " 0
++ /^foobar
++ gncsearchmatch/one\_s*two\_s
++ :1
++ gnd
++ /[a]bcdx
++ :1
++ 2gnd
+ :/^start:/,/^end:/wq! test.out
+ ENDTEST
+
+***************
+*** 45,48 ****
+--- 52,60 ----
+ -<b>asdf<i>Xasdf</i>asdf</b>-
+ -<b>asdX<i>as<b />df</i>asdf</b>-
+ </begin>
++ SEARCH:
++ foobar
++ one
++ two
++ abcdx | abcdx | abcdx
+ end:
+*** ../vim-7.3.609/src/testdir/test53.ok 2010-08-15 21:57:29.000000000 +0200
+--- src/testdir/test53.ok 2012-07-25 14:24:01.000000000 +0200
+***************
+*** 18,21 ****
+--- 18,24 ----
+ a
+ -1
+ 0
++ SEARCH:
++ searchmatch
++ abcdx | | abcdx
+ end:
+*** ../vim-7.3.609/src/version.c 2012-07-25 13:46:25.000000000 +0200
+--- src/version.c 2012-07-25 15:03:43.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 610,
+ /**/
+
+--
+Did you ever see a "Hit any key to continue" message in a music piece?
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.611 b/source/ap/vim/patches/7.3.611
new file mode 100644
index 000000000..5e366a784
--- /dev/null
+++ b/source/ap/vim/patches/7.3.611
@@ -0,0 +1,58 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.611
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.611
+Problem: Can't use Vim dictionary as self argument in Python.
+Solution: Fix the check for the "self" argument. (ZyX)
+Files: src/if_py_both.h
+
+
+*** ../vim-7.3.610/src/if_py_both.h 2012-06-30 13:34:29.000000000 +0200
+--- src/if_py_both.h 2012-07-25 15:32:10.000000000 +0200
+***************
+*** 1284,1292 ****
+ selfdictObject = PyDict_GetItemString(kwargs, "self");
+ if (selfdictObject != NULL)
+ {
+! if (!PyDict_Check(selfdictObject))
+ {
+! PyErr_SetString(PyExc_TypeError, _("'self' argument must be a dictionary"));
+ clear_tv(&args);
+ return NULL;
+ }
+--- 1284,1293 ----
+ selfdictObject = PyDict_GetItemString(kwargs, "self");
+ if (selfdictObject != NULL)
+ {
+! if (!PyMapping_Check(selfdictObject))
+ {
+! PyErr_SetString(PyExc_TypeError,
+! _("'self' argument must be a dictionary"));
+ clear_tv(&args);
+ return NULL;
+ }
+*** ../vim-7.3.610/src/version.c 2012-07-25 15:06:20.000000000 +0200
+--- src/version.c 2012-07-25 15:32:24.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 611,
+ /**/
+
+--
+In Joseph Heller's novel "Catch-22", the main character tries to get out of a
+war by proving he is crazy. But the mere fact he wants to get out of the war
+only shows he isn't crazy -- creating the original "Catch-22".
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.612 b/source/ap/vim/patches/7.3.612
new file mode 100644
index 000000000..7b2207ede
--- /dev/null
+++ b/source/ap/vim/patches/7.3.612
@@ -0,0 +1,83 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.612
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.612
+Problem: Auto formatting messes up text when 'fo' contains "2". (ZyX)
+Solution: Decrement "less_cols". (Tor Perkins)
+Files: src/misc1.c, src/testdir/test68.in, src/testdir/test68.ok
+
+
+*** ../vim-7.3.611/src/misc1.c 2012-07-06 16:49:37.000000000 +0200
+--- src/misc1.c 2012-07-25 16:03:58.000000000 +0200
+***************
+*** 1329,1334 ****
+--- 1329,1335 ----
+ for (i = 0; i < padding; i++)
+ {
+ STRCAT(leader, " ");
++ less_cols--;
+ newcol++;
+ }
+ }
+*** ../vim-7.3.611/src/testdir/test68.in 2012-06-29 15:04:34.000000000 +0200
+--- src/testdir/test68.in 2012-07-25 15:57:06.000000000 +0200
+***************
+*** 94,99 ****
+--- 94,109 ----
+ }
+
+ STARTTEST
++ /mno pqr/
++ :setl tw=20 fo=an12wcq comments=s1:/*,mb:*,ex:*/
++ A vwx yz
++ ENDTEST
++
++ /* abc def ghi jkl
++ * mno pqr stu
++ */
++
++ STARTTEST
+ /^#/
+ :setl tw=12 fo=tqnc comments=:#
+ A foobar
+*** ../vim-7.3.611/src/testdir/test68.ok 2012-06-29 23:57:50.000000000 +0200
+--- src/testdir/test68.ok 2012-07-25 16:03:05.000000000 +0200
+***************
+*** 57,62 ****
+--- 57,68 ----
+ { 1aa ^^2bb }
+
+
++ /* abc def ghi jkl
++ * mno pqr stu
++ * vwx yz
++ */
++
++
+ # 1 xxxxx
+ # foobar
+
+*** ../vim-7.3.611/src/version.c 2012-07-25 15:36:00.000000000 +0200
+--- src/version.c 2012-07-25 16:08:02.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 612,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+169. You hire a housekeeper for your home page.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.613 b/source/ap/vim/patches/7.3.613
new file mode 100644
index 000000000..520e87c38
--- /dev/null
+++ b/source/ap/vim/patches/7.3.613
@@ -0,0 +1,149 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.613
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.613
+Problem: Including Python's config.c in the build causes trouble. It is
+ not clear why it was there.
+Solution: Omit the config file. (James McCoy)
+Files: src/Makefile, src/auto/configure, src/configure.in
+
+
+*** ../vim-7.3.612/src/Makefile 2012-06-20 18:39:12.000000000 +0200
+--- src/Makefile 2012-07-25 16:22:57.000000000 +0200
+***************
+*** 2559,2577 ****
+ objects/if_perlsfio.o: if_perlsfio.c
+ $(CCC) $(PERL_CFLAGS) -o $@ if_perlsfio.c
+
+- objects/py_config.o: $(PYTHON_CONFDIR)/config.c
+- $(CCC) $(PYTHON_CFLAGS) -o $@ $(PYTHON_CONFDIR)/config.c \
+- -I$(PYTHON_CONFDIR) -DHAVE_CONFIG_H -DNO_MAIN
+-
+ objects/py_getpath.o: $(PYTHON_CONFDIR)/getpath.c
+ $(CCC) $(PYTHON_CFLAGS) -o $@ $(PYTHON_CONFDIR)/getpath.c \
+ -I$(PYTHON_CONFDIR) -DHAVE_CONFIG_H -DNO_MAIN \
+ $(PYTHON_GETPATH_CFLAGS)
+
+- objects/py3_config.o: $(PYTHON3_CONFDIR)/config.c
+- $(CCC) $(PYTHON3_CFLAGS) -o $@ $(PYTHON3_CONFDIR)/config.c \
+- -I$(PYTHON3_CONFDIR) -DHAVE_CONFIG_H -DNO_MAIN
+-
+ objects/if_python.o: if_python.c if_py_both.h
+ $(CCC) $(PYTHON_CFLAGS) $(PYTHON_CFLAGS_EXTRA) -o $@ if_python.c
+
+--- 2559,2569 ----
+*** ../vim-7.3.612/src/auto/configure 2012-06-13 19:19:36.000000000 +0200
+--- src/auto/configure 2012-07-25 16:23:49.000000000 +0200
+***************
+*** 5357,5367 ****
+ PYTHON_CFLAGS="-I${vi_cv_path_python_pfx}/include/python${vi_cv_var_python_version} -I${vi_cv_path_python_epfx}/include/python${vi_cv_var_python_version} -DPYTHON_HOME=\\\"${vi_cv_path_python_pfx}\\\""
+ fi
+ PYTHON_SRC="if_python.c"
+! if test "x$MACOSX" = "xyes"; then
+! PYTHON_OBJ="objects/if_python.o"
+! else
+! PYTHON_OBJ="objects/if_python.o objects/py_config.o"
+! fi
+ if test "${vi_cv_var_python_version}" = "1.4"; then
+ PYTHON_OBJ="$PYTHON_OBJ objects/py_getpath.o"
+ fi
+--- 5357,5363 ----
+ PYTHON_CFLAGS="-I${vi_cv_path_python_pfx}/include/python${vi_cv_var_python_version} -I${vi_cv_path_python_epfx}/include/python${vi_cv_var_python_version} -DPYTHON_HOME=\\\"${vi_cv_path_python_pfx}\\\""
+ fi
+ PYTHON_SRC="if_python.c"
+! PYTHON_OBJ="objects/if_python.o"
+ if test "${vi_cv_var_python_version}" = "1.4"; then
+ PYTHON_OBJ="$PYTHON_OBJ objects/py_getpath.o"
+ fi
+***************
+*** 5656,5666 ****
+ PYTHON3_CFLAGS="-I${vi_cv_path_python3_pfx}/include/python${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags} -I${vi_cv_path_python3_epfx}/include/python${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags} -DPYTHON3_HOME=L\\\"${vi_cv_path_python3_pfx}\\\""
+ fi
+ PYTHON3_SRC="if_python3.c"
+! if test "x$MACOSX" = "xyes"; then
+! PYTHON3_OBJ="objects/if_python3.o"
+! else
+! PYTHON3_OBJ="objects/if_python3.o objects/py3_config.o"
+! fi
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if -pthread should be used" >&5
+ $as_echo_n "checking if -pthread should be used... " >&6; }
+--- 5652,5658 ----
+ PYTHON3_CFLAGS="-I${vi_cv_path_python3_pfx}/include/python${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags} -I${vi_cv_path_python3_epfx}/include/python${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags} -DPYTHON3_HOME=L\\\"${vi_cv_path_python3_pfx}\\\""
+ fi
+ PYTHON3_SRC="if_python3.c"
+! PYTHON3_OBJ="objects/if_python3.o"
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if -pthread should be used" >&5
+ $as_echo_n "checking if -pthread should be used... " >&6; }
+*** ../vim-7.3.612/src/configure.in 2012-06-13 19:19:36.000000000 +0200
+--- src/configure.in 2012-07-25 16:23:41.000000000 +0200
+***************
+*** 916,927 ****
+ PYTHON_CFLAGS="-I${vi_cv_path_python_pfx}/include/python${vi_cv_var_python_version} -I${vi_cv_path_python_epfx}/include/python${vi_cv_var_python_version} -DPYTHON_HOME=\\\"${vi_cv_path_python_pfx}\\\""
+ fi
+ PYTHON_SRC="if_python.c"
+! dnl For Mac OSX 10.2 config.o is included in the Python library.
+! if test "x$MACOSX" = "xyes"; then
+! PYTHON_OBJ="objects/if_python.o"
+! else
+! PYTHON_OBJ="objects/if_python.o objects/py_config.o"
+! fi
+ if test "${vi_cv_var_python_version}" = "1.4"; then
+ PYTHON_OBJ="$PYTHON_OBJ objects/py_getpath.o"
+ fi
+--- 916,922 ----
+ PYTHON_CFLAGS="-I${vi_cv_path_python_pfx}/include/python${vi_cv_var_python_version} -I${vi_cv_path_python_epfx}/include/python${vi_cv_var_python_version} -DPYTHON_HOME=\\\"${vi_cv_path_python_pfx}\\\""
+ fi
+ PYTHON_SRC="if_python.c"
+! PYTHON_OBJ="objects/if_python.o"
+ if test "${vi_cv_var_python_version}" = "1.4"; then
+ PYTHON_OBJ="$PYTHON_OBJ objects/py_getpath.o"
+ fi
+***************
+*** 1106,1117 ****
+ PYTHON3_CFLAGS="-I${vi_cv_path_python3_pfx}/include/python${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags} -I${vi_cv_path_python3_epfx}/include/python${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags} -DPYTHON3_HOME=L\\\"${vi_cv_path_python3_pfx}\\\""
+ fi
+ PYTHON3_SRC="if_python3.c"
+! dnl For Mac OSX 10.2 config.o is included in the Python library.
+! if test "x$MACOSX" = "xyes"; then
+! PYTHON3_OBJ="objects/if_python3.o"
+! else
+! PYTHON3_OBJ="objects/if_python3.o objects/py3_config.o"
+! fi
+
+ dnl On FreeBSD linking with "-pthread" is required to use threads.
+ dnl _THREAD_SAFE must be used for compiling then.
+--- 1101,1107 ----
+ PYTHON3_CFLAGS="-I${vi_cv_path_python3_pfx}/include/python${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags} -I${vi_cv_path_python3_epfx}/include/python${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags} -DPYTHON3_HOME=L\\\"${vi_cv_path_python3_pfx}\\\""
+ fi
+ PYTHON3_SRC="if_python3.c"
+! PYTHON3_OBJ="objects/if_python3.o"
+
+ dnl On FreeBSD linking with "-pthread" is required to use threads.
+ dnl _THREAD_SAFE must be used for compiling then.
+*** ../vim-7.3.612/src/version.c 2012-07-25 16:09:59.000000000 +0200
+--- src/version.c 2012-07-25 16:29:52.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 613,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+170. You introduce your wife as "my_lady@home.wife" and refer to your
+ children as "forked processes."
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.614 b/source/ap/vim/patches/7.3.614
new file mode 100644
index 000000000..87d7a4512
--- /dev/null
+++ b/source/ap/vim/patches/7.3.614
@@ -0,0 +1,176 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.614
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.614
+Problem: Number argument gets turned into a number while it should be a
+ string.
+Solution: Add flag to the call_vim_function() call. (Yasuhiro Matsumoto)
+Files: src/edit.c, src/eval.c, src/proto/eval.pro
+
+
+*** ../vim-7.3.613/src/edit.c 2012-07-10 17:14:50.000000000 +0200
+--- src/edit.c 2012-07-25 16:40:07.000000000 +0200
+***************
+*** 3959,3965 ****
+ curbuf_save = curbuf;
+
+ /* Call a function, which returns a list or dict. */
+! if (call_vim_function(funcname, 2, args, FALSE, &rettv) == OK)
+ {
+ switch (rettv.v_type)
+ {
+--- 3959,3965 ----
+ curbuf_save = curbuf;
+
+ /* Call a function, which returns a list or dict. */
+! if (call_vim_function(funcname, 2, args, FALSE, FALSE, &rettv) == OK)
+ {
+ switch (rettv.v_type)
+ {
+*** ../vim-7.3.613/src/eval.c 2012-07-19 18:05:40.000000000 +0200
+--- src/eval.c 2012-07-25 16:42:41.000000000 +0200
+***************
+*** 1564,1574 ****
+ * Returns OK or FAIL.
+ */
+ int
+! call_vim_function(func, argc, argv, safe, rettv)
+ char_u *func;
+ int argc;
+ char_u **argv;
+ int safe; /* use the sandbox */
+ typval_T *rettv;
+ {
+ typval_T *argvars;
+--- 1564,1575 ----
+ * Returns OK or FAIL.
+ */
+ int
+! call_vim_function(func, argc, argv, safe, str_arg_only, rettv)
+ char_u *func;
+ int argc;
+ char_u **argv;
+ int safe; /* use the sandbox */
++ int str_arg_only; /* all arguments are strings */
+ typval_T *rettv;
+ {
+ typval_T *argvars;
+***************
+*** 1593,1600 ****
+ continue;
+ }
+
+! /* Recognize a number argument, the others must be strings. */
+! vim_str2nr(argv[i], NULL, &len, TRUE, TRUE, &n, NULL);
+ if (len != 0 && len == (int)STRLEN(argv[i]))
+ {
+ argvars[i].v_type = VAR_NUMBER;
+--- 1594,1604 ----
+ continue;
+ }
+
+! if (str_arg_only)
+! len = 0;
+! else
+! /* Recognize a number argument, the others must be strings. */
+! vim_str2nr(argv[i], NULL, &len, TRUE, TRUE, &n, NULL);
+ if (len != 0 && len == (int)STRLEN(argv[i]))
+ {
+ argvars[i].v_type = VAR_NUMBER;
+***************
+*** 1646,1652 ****
+ typval_T rettv;
+ char_u *retval;
+
+! if (call_vim_function(func, argc, argv, safe, &rettv) == FAIL)
+ return NULL;
+
+ retval = vim_strsave(get_tv_string(&rettv));
+--- 1650,1657 ----
+ typval_T rettv;
+ char_u *retval;
+
+! /* All arguments are passed as strings, no conversion to number. */
+! if (call_vim_function(func, argc, argv, safe, TRUE, &rettv) == FAIL)
+ return NULL;
+
+ retval = vim_strsave(get_tv_string(&rettv));
+***************
+*** 1671,1677 ****
+ typval_T rettv;
+ long retval;
+
+! if (call_vim_function(func, argc, argv, safe, &rettv) == FAIL)
+ return -1;
+
+ retval = get_tv_number_chk(&rettv, NULL);
+--- 1676,1683 ----
+ typval_T rettv;
+ long retval;
+
+! /* All arguments are passed as strings, no conversion to number. */
+! if (call_vim_function(func, argc, argv, safe, TRUE, &rettv) == FAIL)
+ return -1;
+
+ retval = get_tv_number_chk(&rettv, NULL);
+***************
+*** 1694,1700 ****
+ {
+ typval_T rettv;
+
+! if (call_vim_function(func, argc, argv, safe, &rettv) == FAIL)
+ return NULL;
+
+ if (rettv.v_type != VAR_LIST)
+--- 1700,1707 ----
+ {
+ typval_T rettv;
+
+! /* All arguments are passed as strings, no conversion to number. */
+! if (call_vim_function(func, argc, argv, safe, TRUE, &rettv) == FAIL)
+ return NULL;
+
+ if (rettv.v_type != VAR_LIST)
+*** ../vim-7.3.613/src/proto/eval.pro 2012-07-16 17:31:48.000000000 +0200
+--- src/proto/eval.pro 2012-07-25 16:42:59.000000000 +0200
+***************
+*** 23,29 ****
+ list_T *eval_spell_expr __ARGS((char_u *badword, char_u *expr));
+ int get_spellword __ARGS((list_T *list, char_u **pp));
+ typval_T *eval_expr __ARGS((char_u *arg, char_u **nextcmd));
+! int call_vim_function __ARGS((char_u *func, int argc, char_u **argv, int safe, typval_T *rettv));
+ void *call_func_retstr __ARGS((char_u *func, int argc, char_u **argv, int safe));
+ long call_func_retnr __ARGS((char_u *func, int argc, char_u **argv, int safe));
+ void *call_func_retlist __ARGS((char_u *func, int argc, char_u **argv, int safe));
+--- 23,29 ----
+ list_T *eval_spell_expr __ARGS((char_u *badword, char_u *expr));
+ int get_spellword __ARGS((list_T *list, char_u **pp));
+ typval_T *eval_expr __ARGS((char_u *arg, char_u **nextcmd));
+! int call_vim_function __ARGS((char_u *func, int argc, char_u **argv, int safe, int str_arg_only, typval_T *rettv));
+ void *call_func_retstr __ARGS((char_u *func, int argc, char_u **argv, int safe));
+ long call_func_retnr __ARGS((char_u *func, int argc, char_u **argv, int safe));
+ void *call_func_retlist __ARGS((char_u *func, int argc, char_u **argv, int safe));
+*** ../vim-7.3.613/src/version.c 2012-07-25 16:32:03.000000000 +0200
+--- src/version.c 2012-07-25 16:46:11.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 614,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+171. You invent another person and chat with yourself in empty chat rooms.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.615 b/source/ap/vim/patches/7.3.615
new file mode 100644
index 000000000..96f6885fa
--- /dev/null
+++ b/source/ap/vim/patches/7.3.615
@@ -0,0 +1,107 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.615
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.615
+Problem: Completion for a user command does not recognize backslash before
+ a space.
+Solution: Recognize escaped characters. (Yasuhiro Matsumoto)
+Files: src/ex_docmd.c
+
+
+*** ../vim-7.3.614/src/ex_docmd.c 2012-07-10 19:25:06.000000000 +0200
+--- src/ex_docmd.c 2012-07-25 17:10:16.000000000 +0200
+***************
+*** 3390,3401 ****
+ return NULL;
+
+ /* Find start of last argument (argument just before cursor): */
+! p = buff + STRLEN(buff);
+! while (p != arg && *p != ' ' && *p != TAB)
+! p--;
+! if (*p == ' ' || *p == TAB)
+! p++;
+ xp->xp_pattern = p;
+
+ if (ea.argt & XFILE)
+ {
+--- 3390,3412 ----
+ return NULL;
+
+ /* Find start of last argument (argument just before cursor): */
+! p = buff;
+ xp->xp_pattern = p;
++ len = STRLEN(buff);
++ while (*p && p < buff + len)
++ {
++ if (*p == ' ' || *p == TAB)
++ {
++ /* argument starts after a space */
++ xp->xp_pattern = ++p;
++ }
++ else
++ {
++ if (*p == '\\' && *(p + 1) != NUL)
++ ++p; /* skip over escaped character */
++ mb_ptr_adv(p);
++ }
++ }
+
+ if (ea.argt & XFILE)
+ {
+***************
+*** 3821,3828 ****
+ if (compl == EXPAND_MAPPINGS)
+ return set_context_in_map_cmd(xp, (char_u *)"map",
+ arg, forceit, FALSE, FALSE, CMD_map);
+! while ((xp->xp_pattern = vim_strchr(arg, ' ')) != NULL)
+! arg = xp->xp_pattern + 1;
+ xp->xp_pattern = arg;
+ }
+ xp->xp_context = compl;
+--- 3832,3853 ----
+ if (compl == EXPAND_MAPPINGS)
+ return set_context_in_map_cmd(xp, (char_u *)"map",
+ arg, forceit, FALSE, FALSE, CMD_map);
+! /* Find start of last argument. */
+! p = arg;
+! while (*p)
+! {
+! if (*p == ' ')
+! {
+! /* argument starts after a space */
+! arg = p + 1;
+! }
+! else
+! {
+! if (*p == '\\' && *(p + 1) != NUL)
+! ++p; /* skip over escaped character */
+! mb_ptr_adv(p);
+! }
+! }
+ xp->xp_pattern = arg;
+ }
+ xp->xp_context = compl;
+*** ../vim-7.3.614/src/version.c 2012-07-25 16:46:59.000000000 +0200
+--- src/version.c 2012-07-25 17:17:05.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 615,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+172. You join listservers just for the extra e-mail.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.616 b/source/ap/vim/patches/7.3.616
new file mode 100644
index 000000000..5898eafe9
--- /dev/null
+++ b/source/ap/vim/patches/7.3.616
@@ -0,0 +1,46 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.616
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.616 (after 7.3.610)
+Problem: Can't compile without +visual.
+Solution: Add #ifdef.
+Files: src/normal.c
+
+
+*** ../vim-7.3.615/src/normal.c 2012-07-25 15:06:20.000000000 +0200
+--- src/normal.c 2012-07-27 20:52:01.000000000 +0200
+***************
+*** 8002,8008 ****
+--- 8002,8010 ----
+ */
+ case 'N':
+ case 'n':
++ #ifdef FEAT_VISUAL
+ if (!current_search(cap->count1, cap->nchar == 'n'))
++ #endif
+ beep_flush();
+
+ break;
+*** ../vim-7.3.615/src/version.c 2012-07-25 17:22:17.000000000 +0200
+--- src/version.c 2012-07-27 20:52:58.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 616,
+ /**/
+
+--
+The CIA drives around in cars with the "Intel inside" logo.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.617 b/source/ap/vim/patches/7.3.617
new file mode 100644
index 000000000..48062cd2a
--- /dev/null
+++ b/source/ap/vim/patches/7.3.617
@@ -0,0 +1,65 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.617
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.617 (after 7.3.615)
+Problem: Hang on completion.
+Solution: Skip over the space. (Yasuhiro Matsumoto)
+Files: src/ex_docmd.c
+
+
+*** ../vim-7.3.616/src/ex_docmd.c 2012-07-25 17:22:17.000000000 +0200
+--- src/ex_docmd.c 2012-07-27 21:07:42.000000000 +0200
+***************
+*** 3837,3852 ****
+ while (*p)
+ {
+ if (*p == ' ')
+- {
+ /* argument starts after a space */
+ arg = p + 1;
+! }
+! else
+! {
+! if (*p == '\\' && *(p + 1) != NUL)
+! ++p; /* skip over escaped character */
+! mb_ptr_adv(p);
+! }
+ }
+ xp->xp_pattern = arg;
+ }
+--- 3837,3847 ----
+ while (*p)
+ {
+ if (*p == ' ')
+ /* argument starts after a space */
+ arg = p + 1;
+! else if (*p == '\\' && *(p + 1) != NUL)
+! ++p; /* skip over escaped character */
+! mb_ptr_adv(p);
+ }
+ xp->xp_pattern = arg;
+ }
+*** ../vim-7.3.616/src/version.c 2012-07-27 21:05:51.000000000 +0200
+--- src/version.c 2012-07-27 21:08:31.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 617,
+ /**/
+
+--
+If Microsoft would build a car...
+... You'd have to press the "Start" button to turn the engine off.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.618 b/source/ap/vim/patches/7.3.618
new file mode 100644
index 000000000..d0cc9c681
--- /dev/null
+++ b/source/ap/vim/patches/7.3.618
@@ -0,0 +1,367 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.618
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.618 (after 7.3.616)
+Problem: Still doesn't compile with small features.
+Solution: Move current_search() out of #ifdef. (Dominique Pelle)
+Files: src/normal.c, src/search.c
+
+
+*** ../vim-7.3.617/src/normal.c 2012-07-27 21:05:51.000000000 +0200
+--- src/normal.c 2012-07-28 13:34:13.000000000 +0200
+***************
+*** 7995,8000 ****
+--- 7995,8001 ----
+ cap->arg = TRUE;
+ nv_visual(cap);
+ break;
++ #endif /* FEAT_VISUAL */
+
+ /* "gn", "gN" visually select next/previous search match
+ * "gn" selects next match
+***************
+*** 8006,8014 ****
+ if (!current_search(cap->count1, cap->nchar == 'n'))
+ #endif
+ beep_flush();
+-
+ break;
+- #endif /* FEAT_VISUAL */
+
+ /*
+ * "gj" and "gk" two new funny movement keys -- up and down
+--- 8007,8013 ----
+*** ../vim-7.3.617/src/search.c 2012-07-25 15:06:20.000000000 +0200
+--- src/search.c 2012-07-28 13:37:19.000000000 +0200
+***************
+*** 3397,3547 ****
+ return OK;
+ }
+
+- #if defined(FEAT_VISUAL) || defined(PROTO)
+- /*
+- * Find next search match under cursor, cursor at end.
+- * Used while an operator is pending, and in Visual mode.
+- * TODO: redo only works when used in operator pending mode
+- */
+- int
+- current_search(count, forward)
+- long count;
+- int forward; /* move forward or backwards */
+- {
+- pos_T start_pos; /* position before the pattern */
+- pos_T orig_pos; /* position of the cursor at beginning */
+- pos_T pos; /* position after the pattern */
+- int i;
+- int dir;
+- int result; /* result of various function calls */
+- char_u old_p_ws = p_ws;
+- int visual_active = FALSE;
+- int flags = 0;
+- pos_T save_VIsual;
+-
+-
+- /* wrapping should not occur */
+- p_ws = FALSE;
+-
+- /* Correct cursor when 'selection' is exclusive */
+- if (VIsual_active && *p_sel == 'e' && lt(VIsual, curwin->w_cursor))
+- dec_cursor();
+-
+- if (VIsual_active)
+- {
+- orig_pos = curwin->w_cursor;
+- save_VIsual = VIsual;
+- visual_active = TRUE;
+-
+- /* just started visual selection, only one character */
+- if (equalpos(VIsual, curwin->w_cursor))
+- visual_active = FALSE;
+-
+- pos = curwin->w_cursor;
+- start_pos = VIsual;
+-
+- /* make sure, searching further will extend the match */
+- if (VIsual_active)
+- {
+- if (forward)
+- incl(&pos);
+- else
+- decl(&pos);
+- }
+- }
+- else
+- orig_pos = pos = start_pos = curwin->w_cursor;
+-
+- /*
+- * The trick is to first search backwards and then search forward again,
+- * so that a match at the current cursor position will be correctly
+- * captured.
+- */
+- for (i = 0; i < 2; i++)
+- {
+- if (i && count == 1)
+- flags = SEARCH_START;
+-
+- if (forward)
+- dir = i;
+- else
+- dir = !i;
+- result = searchit(curwin, curbuf, &pos, (dir ? FORWARD : BACKWARD),
+- spats[last_idx].pat, (long) (i ? count : 1),
+- SEARCH_KEEP | flags | (dir ? 0 : SEARCH_END),
+- RE_SEARCH, 0, NULL);
+-
+- /* First search may fail, but then start searching from the
+- * beginning of the file (cursor might be on the search match)
+- * except when Visual mode is active, so that extending the visual
+- * selection works. */
+- if (!result && i) /* not found, abort */
+- {
+- curwin->w_cursor = orig_pos;
+- if (VIsual_active)
+- VIsual = save_VIsual;
+- p_ws = old_p_ws;
+- return FAIL;
+- }
+- else if (!i && !result && !visual_active)
+- {
+- if (forward) /* try again from start of buffer */
+- {
+- clearpos(&pos);
+- }
+- else /* try again from end of buffer */
+- {
+- /* searching backwards, so set pos to last line and col */
+- pos.lnum = curwin->w_buffer->b_ml.ml_line_count;
+- pos.col = STRLEN(ml_get(curwin->w_buffer->b_ml.ml_line_count));
+- }
+- }
+-
+- }
+-
+- start_pos = pos;
+- flags = (forward ? SEARCH_END : 0);
+-
+- /* move to match */
+- result = searchit(curwin, curbuf, &pos, (forward ? FORWARD : BACKWARD),
+- spats[last_idx].pat, 0L, flags | SEARCH_KEEP, RE_SEARCH, 0, NULL);
+-
+- if (!VIsual_active)
+- VIsual = start_pos;
+-
+- p_ws = old_p_ws;
+- curwin->w_cursor = pos;
+- VIsual_active = TRUE;
+- VIsual_mode = 'v';
+-
+- if (VIsual_active)
+- {
+- redraw_curbuf_later(INVERTED); /* update the inversion */
+- if (*p_sel == 'e' && ltoreq(VIsual, curwin->w_cursor))
+- inc_cursor();
+- }
+-
+- #ifdef FEAT_FOLDING
+- if (fdo_flags & FDO_SEARCH && KeyTyped)
+- foldOpenCursor();
+- #endif
+-
+- may_start_select('c');
+- #ifdef FEAT_MOUSE
+- setmouse();
+- #endif
+- #ifdef FEAT_CLIPBOARD
+- /* Make sure the clipboard gets updated. Needed because start and
+- * end are still the same, and the selection needs to be owned */
+- clip_star.vmode = NUL;
+- #endif
+- redraw_curbuf_later(INVERTED);
+- showmode();
+-
+- return OK;
+- }
+- #endif /* FEAT_VISUAL */
+-
+ /*
+ * Find sentence(s) under the cursor, cursor at end.
+ * When Visual active, extend it by one or more sentences.
+--- 3397,3402 ----
+***************
+*** 4670,4675 ****
+--- 4525,4675 ----
+
+ #endif /* FEAT_TEXTOBJ */
+
++ #if defined(FEAT_VISUAL) || defined(PROTO)
++ /*
++ * Find next search match under cursor, cursor at end.
++ * Used while an operator is pending, and in Visual mode.
++ * TODO: redo only works when used in operator pending mode
++ */
++ int
++ current_search(count, forward)
++ long count;
++ int forward; /* move forward or backwards */
++ {
++ pos_T start_pos; /* position before the pattern */
++ pos_T orig_pos; /* position of the cursor at beginning */
++ pos_T pos; /* position after the pattern */
++ int i;
++ int dir;
++ int result; /* result of various function calls */
++ char_u old_p_ws = p_ws;
++ int visual_active = FALSE;
++ int flags = 0;
++ pos_T save_VIsual;
++
++
++ /* wrapping should not occur */
++ p_ws = FALSE;
++
++ /* Correct cursor when 'selection' is exclusive */
++ if (VIsual_active && *p_sel == 'e' && lt(VIsual, curwin->w_cursor))
++ dec_cursor();
++
++ if (VIsual_active)
++ {
++ orig_pos = curwin->w_cursor;
++ save_VIsual = VIsual;
++ visual_active = TRUE;
++
++ /* just started visual selection, only one character */
++ if (equalpos(VIsual, curwin->w_cursor))
++ visual_active = FALSE;
++
++ pos = curwin->w_cursor;
++ start_pos = VIsual;
++
++ /* make sure, searching further will extend the match */
++ if (VIsual_active)
++ {
++ if (forward)
++ incl(&pos);
++ else
++ decl(&pos);
++ }
++ }
++ else
++ orig_pos = pos = start_pos = curwin->w_cursor;
++
++ /*
++ * The trick is to first search backwards and then search forward again,
++ * so that a match at the current cursor position will be correctly
++ * captured.
++ */
++ for (i = 0; i < 2; i++)
++ {
++ if (i && count == 1)
++ flags = SEARCH_START;
++
++ if (forward)
++ dir = i;
++ else
++ dir = !i;
++ result = searchit(curwin, curbuf, &pos, (dir ? FORWARD : BACKWARD),
++ spats[last_idx].pat, (long) (i ? count : 1),
++ SEARCH_KEEP | flags | (dir ? 0 : SEARCH_END),
++ RE_SEARCH, 0, NULL);
++
++ /* First search may fail, but then start searching from the
++ * beginning of the file (cursor might be on the search match)
++ * except when Visual mode is active, so that extending the visual
++ * selection works. */
++ if (!result && i) /* not found, abort */
++ {
++ curwin->w_cursor = orig_pos;
++ if (VIsual_active)
++ VIsual = save_VIsual;
++ p_ws = old_p_ws;
++ return FAIL;
++ }
++ else if (!i && !result && !visual_active)
++ {
++ if (forward) /* try again from start of buffer */
++ {
++ clearpos(&pos);
++ }
++ else /* try again from end of buffer */
++ {
++ /* searching backwards, so set pos to last line and col */
++ pos.lnum = curwin->w_buffer->b_ml.ml_line_count;
++ pos.col = STRLEN(ml_get(curwin->w_buffer->b_ml.ml_line_count));
++ }
++ }
++
++ }
++
++ start_pos = pos;
++ flags = (forward ? SEARCH_END : 0);
++
++ /* move to match */
++ result = searchit(curwin, curbuf, &pos, (forward ? FORWARD : BACKWARD),
++ spats[last_idx].pat, 0L, flags | SEARCH_KEEP, RE_SEARCH, 0, NULL);
++
++ if (!VIsual_active)
++ VIsual = start_pos;
++
++ p_ws = old_p_ws;
++ curwin->w_cursor = pos;
++ VIsual_active = TRUE;
++ VIsual_mode = 'v';
++
++ if (VIsual_active)
++ {
++ redraw_curbuf_later(INVERTED); /* update the inversion */
++ if (*p_sel == 'e' && ltoreq(VIsual, curwin->w_cursor))
++ inc_cursor();
++ }
++
++ #ifdef FEAT_FOLDING
++ if (fdo_flags & FDO_SEARCH && KeyTyped)
++ foldOpenCursor();
++ #endif
++
++ may_start_select('c');
++ #ifdef FEAT_MOUSE
++ setmouse();
++ #endif
++ #ifdef FEAT_CLIPBOARD
++ /* Make sure the clipboard gets updated. Needed because start and
++ * end are still the same, and the selection needs to be owned */
++ clip_star.vmode = NUL;
++ #endif
++ redraw_curbuf_later(INVERTED);
++ showmode();
++
++ return OK;
++ }
++ #endif /* FEAT_VISUAL */
++
+ #if defined(FEAT_LISP) || defined(FEAT_CINDENT) || defined(FEAT_TEXTOBJ) \
+ || defined(PROTO)
+ /*
+*** ../vim-7.3.617/src/version.c 2012-07-27 21:12:03.000000000 +0200
+--- src/version.c 2012-07-29 12:54:29.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 618,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+185. You order fast food over the Internet
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.619 b/source/ap/vim/patches/7.3.619
new file mode 100644
index 000000000..1fedcc786
--- /dev/null
+++ b/source/ap/vim/patches/7.3.619
@@ -0,0 +1,50 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.619
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.619
+Problem: When executing a shell command Vim may become slow to respond.
+Solution: Don't wait after every processed message. (idea by Yasuhiro
+ Matsumoto)
+Files: src/os_win32.c
+
+
+*** ../vim-7.3.618/src/os_win32.c 2012-07-19 11:37:22.000000000 +0200
+--- src/os_win32.c 2012-08-02 12:30:52.000000000 +0200
+***************
+*** 3319,3324 ****
+--- 3319,3326 ----
+ {
+ TranslateMessage(&msg);
+ pDispatchMessage(&msg);
++ delay = 1;
++ continue;
+ }
+ if (WaitForSingleObject(pi.hProcess, delay) != WAIT_TIMEOUT)
+ break;
+*** ../vim-7.3.618/src/version.c 2012-07-29 12:55:21.000000000 +0200
+--- src/version.c 2012-08-02 12:29:08.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 619,
+ /**/
+
+--
+Some of the well know MS-Windows errors:
+ EMULTI Multitasking attempted, system confused
+ EKEYBOARD Keyboard locked, try getting out of this one!
+ EXPLAIN Unexplained error, please tell us what happened
+ EFUTURE Reserved for our future mistakes
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.620 b/source/ap/vim/patches/7.3.620
new file mode 100644
index 000000000..5890f15f9
--- /dev/null
+++ b/source/ap/vim/patches/7.3.620
@@ -0,0 +1,163 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.620
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.620
+Problem: Building with recent Ruby on Win32 doesn't work.
+Solution: Add a separate argument for the API version. (Yasuhiro Matsumoto)
+Files: src/Make_ming.mak, src/Make_mvc.mak
+
+
+*** ../vim-7.3.619/src/Make_ming.mak 2012-07-06 13:40:44.000000000 +0200
+--- src/Make_ming.mak 2012-08-02 17:02:34.000000000 +0200
+***************
+*** 260,266 ****
+ # DYNAMIC_RUBY=yes (to load the Ruby DLL dynamically)
+ # RUBY_VER=[Ruby version, eg 16, 17] (default is 16)
+ # RUBY_VER_LONG=[Ruby version, eg 1.6, 1.7] (default is 1.6)
+! # You must set RUBY_VER_LONG when change RUBY_VER.
+ #RUBY=c:/ruby
+ ifdef RUBY
+ ifndef DYNAMIC_RUBY
+--- 260,268 ----
+ # DYNAMIC_RUBY=yes (to load the Ruby DLL dynamically)
+ # RUBY_VER=[Ruby version, eg 16, 17] (default is 16)
+ # RUBY_VER_LONG=[Ruby version, eg 1.6, 1.7] (default is 1.6)
+! # You must set RUBY_VER_LONG when changing RUBY_VER.
+! # You must set RUBY_API_VER version to RUBY_VER_LONG.
+! # Don't set ruby API version to RUBY_VER like 191.
+ #RUBY=c:/ruby
+ ifdef RUBY
+ ifndef DYNAMIC_RUBY
+***************
+*** 273,278 ****
+--- 275,283 ----
+ ifndef RUBY_VER_LONG
+ RUBY_VER_LONG = 1.6
+ endif
++ ifndef RUBY_API_VER
++ RUBY_API_VER = $(subst .,,$(RUBY_VER_LONG))
++ endif
+
+ ifndef RUBY_PLATFORM
+ ifeq ($(RUBY_VER), 16)
+***************
+*** 288,296 ****
+
+ ifndef RUBY_INSTALL_NAME
+ ifeq ($(RUBY_VER), 16)
+! RUBY_INSTALL_NAME = mswin32-ruby$(RUBY_VER)
+ else
+! RUBY_INSTALL_NAME = msvcrt-ruby$(RUBY_VER)
+ endif
+ endif
+
+--- 293,301 ----
+
+ ifndef RUBY_INSTALL_NAME
+ ifeq ($(RUBY_VER), 16)
+! RUBY_INSTALL_NAME = mswin32-ruby$(RUBY_API_VER)
+ else
+! RUBY_INSTALL_NAME = msvcrt-ruby$(RUBY_API_VER)
+ endif
+ endif
+
+*** ../vim-7.3.619/src/Make_mvc.mak 2012-02-22 16:01:53.000000000 +0100
+--- src/Make_mvc.mak 2012-08-02 17:42:31.000000000 +0200
+***************
+*** 63,68 ****
+--- 63,70 ----
+ # RUBY_VER=[Ruby version, eg 16, 17] (default is 18)
+ # RUBY_VER_LONG=[Ruby version, eg 1.6, 1.7] (default is 1.8)
+ # You must set RUBY_VER_LONG when change RUBY_VER.
++ # You must set RUBY_API_VER to RUBY_VER_LONG.
++ # Don't set ruby API version to RUBY_VER like 191.
+ #
+ # Tcl interface:
+ # TCL=[Path to Tcl directory]
+***************
+*** 807,834 ****
+ !ifndef RUBY_VER_LONG
+ RUBY_VER_LONG = 1.8
+ !endif
+
+ !if $(RUBY_VER) >= 18
+ !ifndef RUBY_PLATFORM
+ RUBY_PLATFORM = i386-mswin32
+ !endif
+ !ifndef RUBY_INSTALL_NAME
+! RUBY_INSTALL_NAME = msvcrt-ruby$(RUBY_VER)
+ !endif
+ !else
+ !ifndef RUBY_PLATFORM
+ RUBY_PLATFORM = i586-mswin32
+ !endif
+ !ifndef RUBY_INSTALL_NAME
+! RUBY_INSTALL_NAME = mswin32-ruby$(RUBY_VER)
+ !endif
+ !endif # $(RUBY_VER) >= 18
+
+ !message Ruby requested (version $(RUBY_VER)) - root dir is "$(RUBY)"
+ CFLAGS = $(CFLAGS) -DFEAT_RUBY
+ RUBY_OBJ = $(OUTDIR)\if_ruby.obj
+! !if $(RUBY_VER) >= 190
+! RUBY_INC = /I "$(RUBY)\include\ruby-$(RUBY_VER_LONG)\$(RUBY_PLATFORM)" /I "$(RUBY)\include\ruby-$(RUBY_VER_LONG)"
+ !else
+ RUBY_INC = /I "$(RUBY)\lib\ruby\$(RUBY_VER_LONG)\$(RUBY_PLATFORM)"
+ !endif
+--- 813,843 ----
+ !ifndef RUBY_VER_LONG
+ RUBY_VER_LONG = 1.8
+ !endif
++ !ifndef RUBY_API_VER
++ RUBY_API_VER = $(RUBY_VER_LONG:.=)
++ !endif
+
+ !if $(RUBY_VER) >= 18
+ !ifndef RUBY_PLATFORM
+ RUBY_PLATFORM = i386-mswin32
+ !endif
+ !ifndef RUBY_INSTALL_NAME
+! RUBY_INSTALL_NAME = msvcrt-ruby$(RUBY_API_VER)
+ !endif
+ !else
+ !ifndef RUBY_PLATFORM
+ RUBY_PLATFORM = i586-mswin32
+ !endif
+ !ifndef RUBY_INSTALL_NAME
+! RUBY_INSTALL_NAME = mswin32-ruby$(RUBY_API_VER)
+ !endif
+ !endif # $(RUBY_VER) >= 18
+
+ !message Ruby requested (version $(RUBY_VER)) - root dir is "$(RUBY)"
+ CFLAGS = $(CFLAGS) -DFEAT_RUBY
+ RUBY_OBJ = $(OUTDIR)\if_ruby.obj
+! !if $(RUBY_VER) >= 19
+! RUBY_INC = /I "$(RUBY)\lib\ruby\$(RUBY_VER_LONG)\$(RUBY_PLATFORM)" /I "$(RUBY)\include\ruby-$(RUBY_VER_LONG)" /I "$(RUBY)\include\ruby-$(RUBY_VER_LONG)\$(RUBY_PLATFORM)"
+ !else
+ RUBY_INC = /I "$(RUBY)\lib\ruby\$(RUBY_VER_LONG)\$(RUBY_PLATFORM)"
+ !endif
+*** ../vim-7.3.619/src/version.c 2012-08-02 12:31:40.000000000 +0200
+--- src/version.c 2012-08-02 21:20:28.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 620,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+199. You read this entire list of symptoms, looking for something
+ that doesn't describe you.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.621 b/source/ap/vim/patches/7.3.621
new file mode 100644
index 000000000..7e3fe2a55
--- /dev/null
+++ b/source/ap/vim/patches/7.3.621
@@ -0,0 +1,72 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.621
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.621
+Problem: Compiler warnings on 64 bit windows.
+Solution: Add type casts. (Mike Williams)
+Files: src/ex_docmd.c, src/search.c
+
+
+*** ../vim-7.3.620/src/ex_docmd.c 2012-07-27 21:12:03.000000000 +0200
+--- src/ex_docmd.c 2012-08-02 21:19:22.000000000 +0200
+***************
+*** 3392,3398 ****
+ /* Find start of last argument (argument just before cursor): */
+ p = buff;
+ xp->xp_pattern = p;
+! len = STRLEN(buff);
+ while (*p && p < buff + len)
+ {
+ if (*p == ' ' || *p == TAB)
+--- 3392,3398 ----
+ /* Find start of last argument (argument just before cursor): */
+ p = buff;
+ xp->xp_pattern = p;
+! len = (int)STRLEN(buff);
+ while (*p && p < buff + len)
+ {
+ if (*p == ' ' || *p == TAB)
+*** ../vim-7.3.620/src/search.c 2012-07-29 12:55:21.000000000 +0200
+--- src/search.c 2012-08-02 21:20:02.000000000 +0200
+***************
+*** 4621,4627 ****
+ {
+ /* searching backwards, so set pos to last line and col */
+ pos.lnum = curwin->w_buffer->b_ml.ml_line_count;
+! pos.col = STRLEN(ml_get(curwin->w_buffer->b_ml.ml_line_count));
+ }
+ }
+
+--- 4621,4628 ----
+ {
+ /* searching backwards, so set pos to last line and col */
+ pos.lnum = curwin->w_buffer->b_ml.ml_line_count;
+! pos.col = (colnr_T)STRLEN(
+! ml_get(curwin->w_buffer->b_ml.ml_line_count));
+ }
+ }
+
+*** ../vim-7.3.620/src/version.c 2012-08-02 21:21:43.000000000 +0200
+--- src/version.c 2012-08-02 21:23:13.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 621,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+200. You really believe in the concept of a "paperless" office.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.622 b/source/ap/vim/patches/7.3.622
new file mode 100644
index 000000000..a2c260147
--- /dev/null
+++ b/source/ap/vim/patches/7.3.622
@@ -0,0 +1,56 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.622
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.622
+Problem: XPM library for Win32 can't be found.
+Solution: Suggest using the one from the Vim ftp site.
+Files: src/Make_mvc.mak
+
+
+*** ../vim-7.3.621/src/Make_mvc.mak 2012-08-02 21:21:43.000000000 +0200
+--- src/Make_mvc.mak 2012-08-02 21:45:52.000000000 +0200
+***************
+*** 281,287 ****
+
+ !ifdef XPM
+ # XPM - Include support for XPM signs
+! # you can get xpm.lib from http://iamphet.nm.ru/xpm or create it yourself
+ XPM_OBJ = $(OBJDIR)/xpm_w32.obj
+ XPM_DEFS = -DFEAT_XPM_W32
+ XPM_LIB = $(XPM)\lib\libXpm.lib
+--- 281,291 ----
+
+ !ifdef XPM
+ # XPM - Include support for XPM signs
+! # You need to download or build xpm.lib somehow.
+! # You can get the most recent version of libXpm-*.zip from
+! # http://cgit.freedesktop.org/xorg/lib/libXpm
+! # from which you must build xpm.lib yourself
+! # OR get and unpack: ftp://ftp.vim.org/pub/vim/pcextra/xpm.zip
+ XPM_OBJ = $(OBJDIR)/xpm_w32.obj
+ XPM_DEFS = -DFEAT_XPM_W32
+ XPM_LIB = $(XPM)\lib\libXpm.lib
+*** ../vim-7.3.621/src/version.c 2012-08-02 21:24:38.000000000 +0200
+--- src/version.c 2012-08-02 21:46:43.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 622,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+202. You're amazed to find out Spam is a food.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.623 b/source/ap/vim/patches/7.3.623
new file mode 100644
index 000000000..72aea71f6
--- /dev/null
+++ b/source/ap/vim/patches/7.3.623
@@ -0,0 +1,92 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.623
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.623
+Problem: Perl 5.14 commands crash Vim on MS-Windows.
+Solution: Use perl_get_sv() instead of GvSV(). (Raymond Ko)
+Files: src/if_perl.xs
+
+
+*** ../vim-7.3.622/src/if_perl.xs 2012-03-16 19:34:43.000000000 +0100
+--- src/if_perl.xs 2012-08-08 13:15:29.000000000 +0200
+***************
+*** 76,81 ****
+--- 76,87 ----
+ # define EXTERN_C
+ #endif
+
++ #if (PERL_REVISION == 5) && (PERL_VERSION >= 14) && defined(_MSC_VER)
++ /* Using PL_errgv to get the error message after perl_eval_sv() causes a crash
++ * with MSVC and Perl version 5.14. */
++ # define AVOID_PL_ERRGV
++ #endif
++
+ /* Compatibility hacks over */
+
+ static PerlInterpreter *perl_interp = NULL;
+***************
+*** 796,802 ****
+--- 802,812 ----
+
+ SvREFCNT_dec(sv);
+
++ #ifdef AVOID_PL_ERRGV
++ err = SvPV(perl_get_sv("@", GV_ADD), length);
++ #else
+ err = SvPV(GvSV(PL_errgv), length);
++ #endif
+
+ FREETMPS;
+ LEAVE;
+***************
+*** 866,872 ****
+--- 876,886 ----
+ sv_catpvn(sv, "}", 1);
+ perl_eval_sv(sv, G_DISCARD | G_NOARGS);
+ SvREFCNT_dec(sv);
++ #ifdef AVOID_PL_ERRGV
++ str = SvPV(perl_get_sv("@", GV_ADD), length);
++ #else
+ str = SvPV(GvSV(PL_errgv), length);
++ #endif
+ if (length)
+ goto err;
+
+***************
+*** 880,886 ****
+--- 894,904 ----
+ sv_setpv(GvSV(PL_defgv), (char *)ml_get(i));
+ PUSHMARK(sp);
+ perl_call_pv("VIM::perldo", G_SCALAR | G_EVAL);
++ #ifdef AVOID_PL_ERRGV
++ str = SvPV(perl_get_sv("@", GV_ADD), length);
++ #else
+ str = SvPV(GvSV(PL_errgv), length);
++ #endif
+ if (length)
+ break;
+ SPAGAIN;
+*** ../vim-7.3.622/src/version.c 2012-08-02 21:48:20.000000000 +0200
+--- src/version.c 2012-08-08 13:08:10.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 623,
+ /**/
+
+--
+Don't be humble ... you're not that great.
+ -- Golda Meir
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.624 b/source/ap/vim/patches/7.3.624
new file mode 100644
index 000000000..f1150b634
--- /dev/null
+++ b/source/ap/vim/patches/7.3.624
@@ -0,0 +1,52 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.624
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.624
+Problem: When cancelling input() it returns the third argument. That should
+ only happen for inputdialog().
+Solution: Check if inputdialog() was used. (Hirohito Higashi)
+Files: src/eval.c
+
+
+*** ../vim-7.3.623/src/eval.c 2012-07-25 16:46:59.000000000 +0200
+--- src/eval.c 2012-08-08 14:31:48.000000000 +0200
+***************
+*** 12966,12972 ****
+ rettv->vval.v_string =
+ getcmdline_prompt(inputsecret_flag ? NUL : '@', p, echo_attr,
+ xp_type, xp_arg);
+! if (rettv->vval.v_string == NULL
+ && argvars[1].v_type != VAR_UNKNOWN
+ && argvars[2].v_type != VAR_UNKNOWN)
+ rettv->vval.v_string = vim_strsave(get_tv_string_buf(
+--- 12966,12972 ----
+ rettv->vval.v_string =
+ getcmdline_prompt(inputsecret_flag ? NUL : '@', p, echo_attr,
+ xp_type, xp_arg);
+! if (inputdialog && rettv->vval.v_string == NULL
+ && argvars[1].v_type != VAR_UNKNOWN
+ && argvars[2].v_type != VAR_UNKNOWN)
+ rettv->vval.v_string = vim_strsave(get_tv_string_buf(
+*** ../vim-7.3.623/src/version.c 2012-08-08 13:17:26.000000000 +0200
+--- src/version.c 2012-08-08 14:28:46.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 624,
+ /**/
+
+--
+Your fault: core dumped
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.625 b/source/ap/vim/patches/7.3.625
new file mode 100644
index 000000000..5334bc8f9
--- /dev/null
+++ b/source/ap/vim/patches/7.3.625
@@ -0,0 +1,140 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.625
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.625
+Problem: "gn" does not handle zero-width matches correctly.
+Solution: Handle zero-width patterns specially. (Christian Brabandt)
+Files: src/search.c
+
+
+*** ../vim-7.3.624/src/search.c 2012-08-02 21:24:38.000000000 +0200
+--- src/search.c 2012-08-08 15:25:12.000000000 +0200
+***************
+*** 4546,4551 ****
+--- 4546,4554 ----
+ int visual_active = FALSE;
+ int flags = 0;
+ pos_T save_VIsual;
++ regmmatch_T regmatch;
++ int nmatched = 0;
++ int zerowidth = FALSE;
+
+
+ /* wrapping should not occur */
+***************
+*** 4581,4603 ****
+ orig_pos = pos = start_pos = curwin->w_cursor;
+
+ /*
+ * The trick is to first search backwards and then search forward again,
+ * so that a match at the current cursor position will be correctly
+ * captured.
+ */
+ for (i = 0; i < 2; i++)
+ {
+- if (i && count == 1)
+- flags = SEARCH_START;
+-
+ if (forward)
+ dir = i;
+ else
+ dir = !i;
+ result = searchit(curwin, curbuf, &pos, (dir ? FORWARD : BACKWARD),
+ spats[last_idx].pat, (long) (i ? count : 1),
+! SEARCH_KEEP | flags | (dir ? 0 : SEARCH_END),
+! RE_SEARCH, 0, NULL);
+
+ /* First search may fail, but then start searching from the
+ * beginning of the file (cursor might be on the search match)
+--- 4584,4625 ----
+ orig_pos = pos = start_pos = curwin->w_cursor;
+
+ /*
++ * Check for zero-width pattern.
++ */
++ if (search_regcomp(spats[last_idx].pat, RE_SEARCH, RE_SEARCH,
++ ((SEARCH_HIS + SEARCH_KEEP)), &regmatch) == FAIL)
++ return FAIL;
++
++ /* Zero-width pattern should match somewhere, then we can check if start
++ * and end are in the same position. */
++ nmatched = vim_regexec_multi(&regmatch, curwin, curbuf,
++ curwin->w_cursor.lnum, (colnr_T)0, NULL);
++ if (called_emsg)
++ return FAIL;
++ if (nmatched && regmatch.startpos[0].lnum == regmatch.endpos[0].lnum
++ && regmatch.endpos[0].col == regmatch.startpos[0].col)
++ zerowidth = TRUE;
++ vim_free(regmatch.regprog);
++
++ /*
+ * The trick is to first search backwards and then search forward again,
+ * so that a match at the current cursor position will be correctly
+ * captured.
+ */
+ for (i = 0; i < 2; i++)
+ {
+ if (forward)
+ dir = i;
+ else
+ dir = !i;
++
++ flags = 0;
++ if (!dir && !zerowidth)
++ flags = SEARCH_END;
++
+ result = searchit(curwin, curbuf, &pos, (dir ? FORWARD : BACKWARD),
+ spats[last_idx].pat, (long) (i ? count : 1),
+! SEARCH_KEEP | flags, RE_SEARCH, 0, NULL);
+
+ /* First search may fail, but then start searching from the
+ * beginning of the file (cursor might be on the search match)
+***************
+*** 4629,4638 ****
+ }
+
+ start_pos = pos;
+! flags = (forward ? SEARCH_END : 0);
+
+! /* move to match */
+! result = searchit(curwin, curbuf, &pos, (forward ? FORWARD : BACKWARD),
+ spats[last_idx].pat, 0L, flags | SEARCH_KEEP, RE_SEARCH, 0, NULL);
+
+ if (!VIsual_active)
+--- 4651,4662 ----
+ }
+
+ start_pos = pos;
+! flags = forward ? SEARCH_END : 0;
+
+! /* move to match, except for zero-width matches, in which case, we are
+! * already on the next match */
+! if (!zerowidth)
+! result = searchit(curwin, curbuf, &pos, (forward ? FORWARD : BACKWARD),
+ spats[last_idx].pat, 0L, flags | SEARCH_KEEP, RE_SEARCH, 0, NULL);
+
+ if (!VIsual_active)
+*** ../vim-7.3.624/src/version.c 2012-08-08 14:33:16.000000000 +0200
+--- src/version.c 2012-08-08 15:21:53.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 625,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+222. You send more than 20 personal e-mails a day.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.626 b/source/ap/vim/patches/7.3.626
new file mode 100644
index 000000000..33b154565
--- /dev/null
+++ b/source/ap/vim/patches/7.3.626
@@ -0,0 +1,49 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.626
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.626
+Problem: Python interface doesn't build with Python 2.4 or older.
+Solution: Define Py_ssize_t. (Benjamin Bannier)
+Files: src/if_py_both.h
+
+
+*** ../vim-7.3.625/src/if_py_both.h 2012-07-25 15:36:00.000000000 +0200
+--- src/if_py_both.h 2012-08-08 15:53:24.000000000 +0200
+***************
+*** 12,17 ****
+--- 12,21 ----
+ * Common code for if_python.c and if_python3.c.
+ */
+
++ #if PY_VERSION_HEX < 0x02050000
++ typedef int Py_ssize_t; /* Python 2.4 and earlier don't have this type. */
++ #endif
++
+ #ifdef FEAT_MBYTE
+ # define ENC_OPT p_enc
+ #else
+*** ../vim-7.3.625/src/version.c 2012-08-08 15:27:54.000000000 +0200
+--- src/version.c 2012-08-08 15:52:07.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 626,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+224. You set up your own Web page. You set up a Web page for each
+ of your kids... and your pets.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.627 b/source/ap/vim/patches/7.3.627
new file mode 100644
index 000000000..97a0298dc
--- /dev/null
+++ b/source/ap/vim/patches/7.3.627
@@ -0,0 +1,102 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.627
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.627
+Problem: When using the "n" flag with the ":s" command a \= substitution
+ will not be evaluated.
+Solution: Do perform the evaluation, so that a function can be invoked at
+ every matching position without changing the text. (Christian
+ Brabandt)
+Files: src/ex_cmds.c
+
+
+*** ../vim-7.3.626/src/ex_cmds.c 2012-07-10 15:18:18.000000000 +0200
+--- src/ex_cmds.c 2012-08-08 16:44:16.000000000 +0200
+***************
+*** 4264,4269 ****
+--- 4264,4272 ----
+ int endcolumn = FALSE; /* cursor in last column when done */
+ pos_T old_cursor = curwin->w_cursor;
+ int start_nsubs;
++ #ifdef FEAT_EVAL
++ int save_ma = 0;
++ #endif
+
+ cmd = eap->arg;
+ if (!global_busy)
+***************
+*** 4668,4674 ****
+ }
+ sub_nsubs++;
+ did_sub = TRUE;
+! goto skip;
+ }
+
+ if (do_ask)
+--- 4671,4682 ----
+ }
+ sub_nsubs++;
+ did_sub = TRUE;
+! #ifdef FEAT_EVAL
+! /* Skip the substitution, unless an expression is used,
+! * then it is evaluated in the sandbox. */
+! if (!(sub[0] == '\\' && sub[1] == '='))
+! #endif
+! goto skip;
+ }
+
+ if (do_ask)
+***************
+*** 4840,4849 ****
+--- 4848,4874 ----
+ /*
+ * 3. substitute the string.
+ */
++ #ifdef FEAT_EVAL
++ if (do_count)
++ {
++ /* prevent accidently changing the buffer by a function */
++ save_ma = curbuf->b_p_ma;
++ curbuf->b_p_ma = FALSE;
++ sandbox++;
++ }
++ #endif
+ /* get length of substitution part */
+ sublen = vim_regsub_multi(&regmatch,
+ sub_firstlnum - regmatch.startpos[0].lnum,
+ sub, sub_firstline, FALSE, p_magic, TRUE);
++ #ifdef FEAT_EVAL
++ if (do_count)
++ {
++ curbuf->b_p_ma = save_ma;
++ sandbox--;
++ goto skip;
++ }
++ #endif
+
+ /* When the match included the "$" of the last line it may
+ * go beyond the last line of the buffer. */
+*** ../vim-7.3.626/src/version.c 2012-08-08 16:05:03.000000000 +0200
+--- src/version.c 2012-08-08 16:48:45.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 627,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+225. You sign up for free subscriptions for all the computer magazines
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.628 b/source/ap/vim/patches/7.3.628
new file mode 100644
index 000000000..bab314796
--- /dev/null
+++ b/source/ap/vim/patches/7.3.628
@@ -0,0 +1,54 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.628
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.628
+Problem: ":open" does not allow for a !, which results in a confusing error
+ message. (Shawn Wilson)
+Solution: Allow ! on ":open". (Christian Brabandt)
+Files: src/ex_cmds.h
+
+
+*** ../vim-7.3.627/src/ex_cmds.h 2012-07-06 18:27:34.000000000 +0200
+--- src/ex_cmds.h 2012-08-08 17:15:45.000000000 +0200
+***************
+*** 662,668 ****
+ EX(CMD_nunmenu, "nunmenu", ex_menu,
+ EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
+ EX(CMD_open, "open", ex_open,
+! RANGE|EXTRA),
+ EX(CMD_oldfiles, "oldfiles", ex_oldfiles,
+ BANG|TRLBAR|SBOXOK|CMDWIN),
+ EX(CMD_omap, "omap", ex_map,
+--- 662,668 ----
+ EX(CMD_nunmenu, "nunmenu", ex_menu,
+ EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
+ EX(CMD_open, "open", ex_open,
+! RANGE|BANG|EXTRA),
+ EX(CMD_oldfiles, "oldfiles", ex_oldfiles,
+ BANG|TRLBAR|SBOXOK|CMDWIN),
+ EX(CMD_omap, "omap", ex_map,
+*** ../vim-7.3.627/src/version.c 2012-08-08 16:50:40.000000000 +0200
+--- src/version.c 2012-08-08 17:30:14.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 628,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+226. You sit down at the computer right after dinner and your spouse
+ says "See you in the morning."
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.629 b/source/ap/vim/patches/7.3.629
new file mode 100644
index 000000000..8e26dd49d
--- /dev/null
+++ b/source/ap/vim/patches/7.3.629
@@ -0,0 +1,437 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.629
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.629
+Problem: There is no way to make 'shiftwidth' follow 'tabstop'.
+Solution: When 'shiftwidth' is zero use the value of 'tabstop'. (Christian
+ Brabandt)
+Files: src/edit.c, src/ex_getln.c, src/fold.c, src/misc1.c, src/ops.c,
+ src/option.c, src/proto/option.pro
+
+
+*** ../vim-7.3.628/src/edit.c 2012-07-25 16:46:59.000000000 +0200
+--- src/edit.c 2012-08-08 17:55:37.000000000 +0200
+***************
+*** 8899,8907 ****
+
+ *inserted_space_p = FALSE;
+ if (p_sta && in_indent)
+! ts = curbuf->b_p_sw;
+ else
+! ts = curbuf->b_p_sts;
+ /* Compute the virtual column where we want to be. Since
+ * 'showbreak' may get in the way, need to get the last column of
+ * the previous character. */
+--- 8899,8907 ----
+
+ *inserted_space_p = FALSE;
+ if (p_sta && in_indent)
+! ts = (int)get_sw_value();
+ else
+! ts = (int)curbuf->b_p_sts;
+ /* Compute the virtual column where we want to be. Since
+ * 'showbreak' may get in the way, need to get the last column of
+ * the previous character. */
+***************
+*** 9589,9595 ****
+ * When nothing special, insert TAB like a normal character
+ */
+ if (!curbuf->b_p_et
+! && !(p_sta && ind && curbuf->b_p_ts != curbuf->b_p_sw)
+ && curbuf->b_p_sts == 0)
+ return TRUE;
+
+--- 9589,9595 ----
+ * When nothing special, insert TAB like a normal character
+ */
+ if (!curbuf->b_p_et
+! && !(p_sta && ind && curbuf->b_p_ts != get_sw_value())
+ && curbuf->b_p_sts == 0)
+ return TRUE;
+
+***************
+*** 9605,9611 ****
+ AppendToRedobuff((char_u *)"\t");
+
+ if (p_sta && ind) /* insert tab in indent, use 'shiftwidth' */
+! temp = (int)curbuf->b_p_sw;
+ else if (curbuf->b_p_sts > 0) /* use 'softtabstop' when set */
+ temp = (int)curbuf->b_p_sts;
+ else /* otherwise use 'tabstop' */
+--- 9605,9611 ----
+ AppendToRedobuff((char_u *)"\t");
+
+ if (p_sta && ind) /* insert tab in indent, use 'shiftwidth' */
+! temp = (int)get_sw_value();
+ else if (curbuf->b_p_sts > 0) /* use 'softtabstop' when set */
+ temp = (int)curbuf->b_p_sts;
+ else /* otherwise use 'tabstop' */
+*** ../vim-7.3.628/src/ex_getln.c 2012-06-29 13:44:37.000000000 +0200
+--- src/ex_getln.c 2012-08-08 17:39:40.000000000 +0200
+***************
+*** 2268,2277 ****
+
+ if (c1 == Ctrl_T)
+ {
+ p = (char_u *)line_ga.ga_data;
+ p[line_ga.ga_len] = NUL;
+ indent = get_indent_str(p, 8);
+! indent += curbuf->b_p_sw - indent % curbuf->b_p_sw;
+ add_indent:
+ while (get_indent_str(p, 8) < indent)
+ {
+--- 2268,2279 ----
+
+ if (c1 == Ctrl_T)
+ {
++ long sw = get_sw_value();
++
+ p = (char_u *)line_ga.ga_data;
+ p[line_ga.ga_len] = NUL;
+ indent = get_indent_str(p, 8);
+! indent += sw - indent % sw;
+ add_indent:
+ while (get_indent_str(p, 8) < indent)
+ {
+***************
+*** 2323,2329 ****
+ p[line_ga.ga_len] = NUL;
+ indent = get_indent_str(p, 8);
+ --indent;
+! indent -= indent % curbuf->b_p_sw;
+ }
+ while (get_indent_str(p, 8) > indent)
+ {
+--- 2325,2331 ----
+ p[line_ga.ga_len] = NUL;
+ indent = get_indent_str(p, 8);
+ --indent;
+! indent -= indent % get_sw_value();
+ }
+ while (get_indent_str(p, 8) > indent)
+ {
+*** ../vim-7.3.628/src/fold.c 2012-02-29 19:19:57.000000000 +0100
+--- src/fold.c 2012-08-08 17:40:11.000000000 +0200
+***************
+*** 3025,3031 ****
+ flp->lvl = -1;
+ }
+ else
+! flp->lvl = get_indent_buf(buf, lnum) / buf->b_p_sw;
+ if (flp->lvl > flp->wp->w_p_fdn)
+ {
+ flp->lvl = flp->wp->w_p_fdn;
+--- 3025,3031 ----
+ flp->lvl = -1;
+ }
+ else
+! flp->lvl = get_indent_buf(buf, lnum) / get_sw_value();
+ if (flp->lvl > flp->wp->w_p_fdn)
+ {
+ flp->lvl = flp->wp->w_p_fdn;
+*** ../vim-7.3.628/src/misc1.c 2012-07-25 16:09:59.000000000 +0200
+--- src/misc1.c 2012-08-08 17:43:07.000000000 +0200
+***************
+*** 1389,1397 ****
+ #ifdef FEAT_SMARTINDENT
+ if (did_si)
+ {
+ if (p_sr)
+! newindent -= newindent % (int)curbuf->b_p_sw;
+! newindent += (int)curbuf->b_p_sw;
+ }
+ #endif
+ /* Copy the indent */
+--- 1389,1399 ----
+ #ifdef FEAT_SMARTINDENT
+ if (did_si)
+ {
++ int sw = (int)get_sw_value();
++
+ if (p_sr)
+! newindent -= newindent % sw;
+! newindent += sw;
+ }
+ #endif
+ /* Copy the indent */
+***************
+*** 6461,6471 ****
+ int
+ get_c_indent()
+ {
+ /*
+ * spaces from a block's opening brace the prevailing indent for that
+ * block should be
+ */
+! int ind_level = curbuf->b_p_sw;
+
+ /*
+ * spaces from the edge of the line an open brace that's at the end of a
+--- 6463,6476 ----
+ int
+ get_c_indent()
+ {
++ int sw = (int)get_sw_value();
++
+ /*
+ * spaces from a block's opening brace the prevailing indent for that
+ * block should be
+ */
+!
+! int ind_level = sw;
+
+ /*
+ * spaces from the edge of the line an open brace that's at the end of a
+***************
+*** 6512,6523 ****
+ /*
+ * spaces from the switch() indent a "case xx" label should be located
+ */
+! int ind_case = curbuf->b_p_sw;
+
+ /*
+ * spaces from the "case xx:" code after a switch() should be located
+ */
+! int ind_case_code = curbuf->b_p_sw;
+
+ /*
+ * lineup break at end of case in switch() with case label
+--- 6517,6528 ----
+ /*
+ * spaces from the switch() indent a "case xx" label should be located
+ */
+! int ind_case = sw;
+
+ /*
+ * spaces from the "case xx:" code after a switch() should be located
+ */
+! int ind_case_code = sw;
+
+ /*
+ * lineup break at end of case in switch() with case label
+***************
+*** 6528,6572 ****
+ * spaces from the class declaration indent a scope declaration label
+ * should be located
+ */
+! int ind_scopedecl = curbuf->b_p_sw;
+
+ /*
+ * spaces from the scope declaration label code should be located
+ */
+! int ind_scopedecl_code = curbuf->b_p_sw;
+
+ /*
+ * amount K&R-style parameters should be indented
+ */
+! int ind_param = curbuf->b_p_sw;
+
+ /*
+ * amount a function type spec should be indented
+ */
+! int ind_func_type = curbuf->b_p_sw;
+
+ /*
+ * amount a cpp base class declaration or constructor initialization
+ * should be indented
+ */
+! int ind_cpp_baseclass = curbuf->b_p_sw;
+
+ /*
+ * additional spaces beyond the prevailing indent a continuation line
+ * should be located
+ */
+! int ind_continuation = curbuf->b_p_sw;
+
+ /*
+ * spaces from the indent of the line with an unclosed parentheses
+ */
+! int ind_unclosed = curbuf->b_p_sw * 2;
+
+ /*
+ * spaces from the indent of the line with an unclosed parentheses, which
+ * itself is also unclosed
+ */
+! int ind_unclosed2 = curbuf->b_p_sw;
+
+ /*
+ * suppress ignoring spaces from the indent of a line starting with an
+--- 6533,6577 ----
+ * spaces from the class declaration indent a scope declaration label
+ * should be located
+ */
+! int ind_scopedecl = sw;
+
+ /*
+ * spaces from the scope declaration label code should be located
+ */
+! int ind_scopedecl_code = sw;
+
+ /*
+ * amount K&R-style parameters should be indented
+ */
+! int ind_param = sw;
+
+ /*
+ * amount a function type spec should be indented
+ */
+! int ind_func_type = sw;
+
+ /*
+ * amount a cpp base class declaration or constructor initialization
+ * should be indented
+ */
+! int ind_cpp_baseclass = sw;
+
+ /*
+ * additional spaces beyond the prevailing indent a continuation line
+ * should be located
+ */
+! int ind_continuation = sw;
+
+ /*
+ * spaces from the indent of the line with an unclosed parentheses
+ */
+! int ind_unclosed = sw * 2;
+
+ /*
+ * spaces from the indent of the line with an unclosed parentheses, which
+ * itself is also unclosed
+ */
+! int ind_unclosed2 = sw;
+
+ /*
+ * suppress ignoring spaces from the indent of a line starting with an
+***************
+*** 6719,6730 ****
+ if (*options == 's') /* "2s" means two times 'shiftwidth' */
+ {
+ if (options == digits)
+! n = curbuf->b_p_sw; /* just "s" is one 'shiftwidth' */
+ else
+ {
+! n *= curbuf->b_p_sw;
+ if (divider)
+! n += (curbuf->b_p_sw * fraction + divider / 2) / divider;
+ }
+ ++options;
+ }
+--- 6724,6735 ----
+ if (*options == 's') /* "2s" means two times 'shiftwidth' */
+ {
+ if (options == digits)
+! n = sw; /* just "s" is one 'shiftwidth' */
+ else
+ {
+! n *= sw;
+ if (divider)
+! n += (sw * fraction + divider / 2) / divider;
+ }
+ ++options;
+ }
+*** ../vim-7.3.628/src/ops.c 2012-07-10 16:49:08.000000000 +0200
+--- src/ops.c 2012-08-08 17:34:28.000000000 +0200
+***************
+*** 332,338 ****
+ {
+ int count;
+ int i, j;
+! int p_sw = (int)curbuf->b_p_sw;
+
+ count = get_indent(); /* get current indent */
+
+--- 332,338 ----
+ {
+ int count;
+ int i, j;
+! int p_sw = (int)get_sw_value();
+
+ count = get_indent(); /* get current indent */
+
+***************
+*** 388,394 ****
+ int total;
+ char_u *newp, *oldp;
+ int oldcol = curwin->w_cursor.col;
+! int p_sw = (int)curbuf->b_p_sw;
+ int p_ts = (int)curbuf->b_p_ts;
+ struct block_def bd;
+ int incr;
+--- 388,394 ----
+ int total;
+ char_u *newp, *oldp;
+ int oldcol = curwin->w_cursor.col;
+! int p_sw = (int)get_sw_value();
+ int p_ts = (int)curbuf->b_p_ts;
+ struct block_def bd;
+ int incr;
+*** ../vim-7.3.628/src/option.c 2012-07-10 18:31:49.000000000 +0200
+--- src/option.c 2012-08-08 17:45:01.000000000 +0200
+***************
+*** 8125,8131 ****
+ need_mouse_correct = TRUE;
+ #endif
+
+! if (curbuf->b_p_sw <= 0)
+ {
+ errmsg = e_positive;
+ curbuf->b_p_sw = curbuf->b_p_ts;
+--- 8125,8131 ----
+ need_mouse_correct = TRUE;
+ #endif
+
+! if (curbuf->b_p_sw < 0)
+ {
+ errmsg = e_positive;
+ curbuf->b_p_sw = curbuf->b_p_ts;
+***************
+*** 11419,11421 ****
+--- 11419,11431 ----
+ {
+ return check_opt_strings(p, p_ff_values, FALSE);
+ }
++
++ /*
++ * Return the effective shiftwidth value for current buffer, using the
++ * 'tabstop' value when 'shiftwidth' is zero.
++ */
++ long
++ get_sw_value()
++ {
++ return curbuf->b_p_sw ? curbuf->b_p_sw : curbuf->b_p_ts;
++ }
+*** ../vim-7.3.628/src/proto/option.pro 2011-01-22 00:11:42.000000000 +0100
+--- src/proto/option.pro 2012-08-08 17:34:33.000000000 +0200
+***************
+*** 56,59 ****
+--- 56,60 ----
+ void save_file_ff __ARGS((buf_T *buf));
+ int file_ff_differs __ARGS((buf_T *buf, int ignore_empty));
+ int check_ff_value __ARGS((char_u *p));
++ long get_sw_value __ARGS((void));
+ /* vim: set ft=c : */
+*** ../vim-7.3.628/src/version.c 2012-08-08 17:31:36.000000000 +0200
+--- src/version.c 2012-08-08 17:57:48.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 629,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+228. You spend Saturday night making the counter on your home page
+ pass that 2000 mark.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.630 b/source/ap/vim/patches/7.3.630
new file mode 100644
index 000000000..d89cfbfe3
--- /dev/null
+++ b/source/ap/vim/patches/7.3.630
@@ -0,0 +1,48 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.630
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.630
+Problem: "|" does not behave correctly when 'virtualedit' is set.
+Solution: Call validate_virtcol(). (David Bürgin)
+Files: src/normal.c
+
+
+*** ../vim-7.3.629/src/normal.c 2012-07-29 12:55:21.000000000 +0200
+--- src/normal.c 2012-08-15 13:20:13.000000000 +0200
+***************
+*** 7786,7792 ****
+--- 7786,7795 ----
+ * virtualedit. Recalculate curwin->w_cursor to avoid bad hilighting.
+ */
+ if (c == Ctrl_V && (ve_flags & VE_BLOCK) && gchar_cursor() == TAB)
++ {
++ validate_virtcol();
+ coladvance(curwin->w_virtcol);
++ }
+ #endif
+ VIsual = curwin->w_cursor;
+
+*** ../vim-7.3.629/src/version.c 2012-08-08 18:01:00.000000000 +0200
+--- src/version.c 2012-08-15 13:30:30.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 630,
+ /**/
+
+--
+"Marriage is when a man and woman become as one; the trouble starts
+when they try to decide which one"
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.631 b/source/ap/vim/patches/7.3.631
new file mode 100644
index 000000000..b7bff4fc4
--- /dev/null
+++ b/source/ap/vim/patches/7.3.631
@@ -0,0 +1,322 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.631
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.631
+Problem: Cannot complete user names.
+Solution: Add user name completion. (Dominique Pelle)
+Files: runtime/doc/map.txt, src/auto/configure, src/config.h.in,
+ src/configure.in, src/ex_docmd.c, src/ex_getln.c,
+ src/misc1.c, src/misc2.c, src/proto/misc1.pro, src/vim.h
+
+
+*** ../vim-7.3.630/runtime/doc/map.txt 2012-04-30 18:48:38.000000000 +0200
+--- runtime/doc/map.txt 2012-08-15 13:46:34.000000000 +0200
+***************
+*** 1227,1232 ****
+--- 1244,1250 ----
+ -complete=syntax syntax file names |'syntax'|
+ -complete=tag tags
+ -complete=tag_listfiles tags, file names are shown when CTRL-D is hit
++ -complete=user user names
+ -complete=var user variables
+ -complete=custom,{func} custom completion, defined via {func}
+ -complete=customlist,{func} custom completion, defined via {func}
+*** ../vim-7.3.630/src/auto/configure 2012-07-25 16:32:03.000000000 +0200
+--- src/auto/configure 2012-08-15 13:48:06.000000000 +0200
+***************
+*** 10631,10637 ****
+ fi
+
+ for ac_func in bcmp fchdir fchown fsync getcwd getpseudotty \
+! getpwnam getpwuid getrlimit gettimeofday getwd lstat memcmp \
+ memset mkdtemp nanosleep opendir putenv qsort readlink select setenv \
+ setpgid setsid sigaltstack sigstack sigset sigsetjmp sigaction \
+ sigvec strcasecmp strerror strftime stricmp strncasecmp \
+--- 10631,10637 ----
+ fi
+
+ for ac_func in bcmp fchdir fchown fsync getcwd getpseudotty \
+! getpwent getpwnam getpwuid getrlimit gettimeofday getwd lstat memcmp \
+ memset mkdtemp nanosleep opendir putenv qsort readlink select setenv \
+ setpgid setsid sigaltstack sigstack sigset sigsetjmp sigaction \
+ sigvec strcasecmp strerror strftime stricmp strncasecmp \
+*** ../vim-7.3.630/src/config.h.in 2012-02-05 22:51:27.000000000 +0100
+--- src/config.h.in 2012-08-15 13:46:35.000000000 +0200
+***************
+*** 161,166 ****
+--- 161,167 ----
+ #undef HAVE_FSYNC
+ #undef HAVE_GETCWD
+ #undef HAVE_GETPSEUDOTTY
++ #undef HAVE_GETPWENT
+ #undef HAVE_GETPWNAM
+ #undef HAVE_GETPWUID
+ #undef HAVE_GETRLIMIT
+*** ../vim-7.3.630/src/configure.in 2012-07-25 16:32:03.000000000 +0200
+--- src/configure.in 2012-08-15 13:46:35.000000000 +0200
+***************
+*** 2994,3000 ****
+ dnl Check for functions in one big call, to reduce the size of configure.
+ dnl Can only be used for functions that do not require any include.
+ AC_CHECK_FUNCS(bcmp fchdir fchown fsync getcwd getpseudotty \
+! getpwnam getpwuid getrlimit gettimeofday getwd lstat memcmp \
+ memset mkdtemp nanosleep opendir putenv qsort readlink select setenv \
+ setpgid setsid sigaltstack sigstack sigset sigsetjmp sigaction \
+ sigvec strcasecmp strerror strftime stricmp strncasecmp \
+--- 2994,3000 ----
+ dnl Check for functions in one big call, to reduce the size of configure.
+ dnl Can only be used for functions that do not require any include.
+ AC_CHECK_FUNCS(bcmp fchdir fchown fsync getcwd getpseudotty \
+! getpwent getpwnam getpwuid getrlimit gettimeofday getwd lstat memcmp \
+ memset mkdtemp nanosleep opendir putenv qsort readlink select setenv \
+ setpgid setsid sigaltstack sigstack sigset sigsetjmp sigaction \
+ sigvec strcasecmp strerror strftime stricmp strncasecmp \
+*** ../vim-7.3.630/src/ex_docmd.c 2012-08-02 21:24:38.000000000 +0200
+--- src/ex_docmd.c 2012-08-15 13:54:29.000000000 +0200
+***************
+*** 3515,3520 ****
+--- 3515,3537 ----
+ #endif
+ }
+ }
++ #if defined(FEAT_CMDL_COMPL)
++ /* Check for user names */
++ if (*xp->xp_pattern == '~')
++ {
++ for (p = xp->xp_pattern + 1; *p != NUL && *p != '/'; ++p)
++ ;
++ /* Complete ~user only if it partially matches a user name.
++ * A full match ~user<Tab> will be replaced by user's home
++ * directory i.e. something like ~user<Tab> -> /home/user/ */
++ if (*p == NUL && p > xp->xp_pattern + 1
++ && match_user(xp->xp_pattern + 1) == 1)
++ {
++ xp->xp_context = EXPAND_USER;
++ ++xp->xp_pattern;
++ }
++ }
++ #endif
+ }
+
+ /*
+***************
+*** 5396,5401 ****
+--- 5413,5419 ----
+ #endif
+ {EXPAND_TAGS, "tag"},
+ {EXPAND_TAGS_LISTFILES, "tag_listfiles"},
++ {EXPAND_USER, "user"},
+ {EXPAND_USER_VARS, "var"},
+ {0, NULL}
+ };
+*** ../vim-7.3.630/src/ex_getln.c 2012-08-08 18:01:00.000000000 +0200
+--- src/ex_getln.c 2012-08-15 13:46:35.000000000 +0200
+***************
+*** 4336,4341 ****
+--- 4336,4342 ----
+ * EXPAND_EXPRESSION Complete internal or user defined function/variable
+ * names in expressions, eg :while s^I
+ * EXPAND_ENV_VARS Complete environment variable names
++ * EXPAND_USER Complete user names
+ */
+ static void
+ set_expand_context(xp)
+***************
+*** 4681,4686 ****
+--- 4682,4688 ----
+ {EXPAND_LOCALES, get_locales, TRUE, FALSE},
+ #endif
+ {EXPAND_ENV_VARS, get_env_name, TRUE, TRUE},
++ {EXPAND_USER, get_users, TRUE, FALSE},
+ };
+ int i;
+
+*** ../vim-7.3.630/src/misc1.c 2012-08-08 18:01:00.000000000 +0200
+--- src/misc1.c 2012-08-15 13:57:53.000000000 +0200
+***************
+*** 18,23 ****
+--- 18,28 ----
+ static char_u *remove_tail __ARGS((char_u *p, char_u *pend, char_u *name));
+ static int copy_indent __ARGS((int size, char_u *src));
+
++ /* All user names (for ~user completion as done by shell). */
++ #if defined(FEAT_CMDL_COMPL) || defined(PROTO)
++ static garray_T ga_users;
++ #endif
++
+ /*
+ * Count the size (in window cells) of the indent in the current line.
+ */
+***************
+*** 3782,3787 ****
+--- 3787,3800 ----
+ {
+ vim_free(homedir);
+ }
++
++ # ifdef FEAT_CMDL_COMPL
++ void
++ free_users()
++ {
++ ga_clear_strings(&ga_users);
++ }
++ # endif
+ #endif
+
+ /*
+***************
+*** 4451,4456 ****
+--- 4464,4543 ----
+ return name;
+ # endif
+ }
++
++ /*
++ * Find all user names for user completion.
++ * Done only once and then cached.
++ */
++ static void
++ init_users() {
++ static int lazy_init_done = FALSE;
++
++ if (lazy_init_done)
++ return;
++
++ lazy_init_done = TRUE;
++ ga_init2(&ga_users, sizeof(char_u *), 20);
++
++ # if defined(HAVE_GETPWENT) && defined(HAVE_PWD_H)
++ {
++ char_u* user;
++ struct passwd* pw;
++
++ setpwent();
++ while ((pw = getpwent()) != NULL)
++ /* pw->pw_name shouldn't be NULL but just in case... */
++ if (pw->pw_name != NULL)
++ {
++ if (ga_grow(&ga_users, 1) == FAIL)
++ break;
++ user = vim_strsave((char_u*)pw->pw_name);
++ if (user == NULL)
++ break;
++ ((char_u **)(ga_users.ga_data))[ga_users.ga_len++] = user;
++ }
++ endpwent();
++ }
++ # endif
++ }
++
++ /*
++ * Function given to ExpandGeneric() to obtain an user names.
++ */
++ char_u*
++ get_users(xp, idx)
++ expand_T *xp UNUSED;
++ int idx;
++ {
++ init_users();
++ if (idx < ga_users.ga_len)
++ return ((char_u **)ga_users.ga_data)[idx];
++ return NULL;
++ }
++
++ /*
++ * Check whether name matches a user name. Return:
++ * 0 if name does not match any user name.
++ * 1 if name partially matches the beginning of a user name.
++ * 2 is name fully matches a user name.
++ */
++ int match_user(name)
++ char_u* name;
++ {
++ int i;
++ int n = (int)STRLEN(name);
++ int result = 0;
++
++ init_users();
++ for (i = 0; i < ga_users.ga_len; i++)
++ {
++ if (STRCMP(((char_u **)ga_users.ga_data)[i], name) == 0)
++ return 2; /* full match */
++ if (STRNCMP(((char_u **)ga_users.ga_data)[i], name, n) == 0)
++ result = 1; /* partial match */
++ }
++ return result;
++ }
+ #endif
+
+ /*
+*** ../vim-7.3.630/src/misc2.c 2012-06-29 15:51:26.000000000 +0200
+--- src/misc2.c 2012-08-15 13:46:35.000000000 +0200
+***************
+*** 1110,1115 ****
+--- 1110,1118 ----
+ free_all_marks();
+ alist_clear(&global_alist);
+ free_homedir();
++ # if defined(FEAT_CMDL_COMPL)
++ free_users();
++ # endif
+ free_search_patterns();
+ free_old_sub();
+ free_last_insert();
+*** ../vim-7.3.630/src/proto/misc1.pro 2012-06-06 16:12:54.000000000 +0200
+--- src/proto/misc1.pro 2012-08-15 13:46:35.000000000 +0200
+***************
+*** 50,55 ****
+--- 50,56 ----
+ void vim_beep __ARGS((void));
+ void init_homedir __ARGS((void));
+ void free_homedir __ARGS((void));
++ void free_users __ARGS((void));
+ char_u *expand_env_save __ARGS((char_u *src));
+ char_u *expand_env_save_opt __ARGS((char_u *src, int one));
+ void expand_env __ARGS((char_u *src, char_u *dst, int dstlen));
+***************
+*** 57,62 ****
+--- 58,65 ----
+ char_u *vim_getenv __ARGS((char_u *name, int *mustfree));
+ void vim_setenv __ARGS((char_u *name, char_u *val));
+ char_u *get_env_name __ARGS((expand_T *xp, int idx));
++ char_u *get_users __ARGS((expand_T *xp, int idx));
++ int match_user __ARGS((char_u* name));
+ void home_replace __ARGS((buf_T *buf, char_u *src, char_u *dst, int dstlen, int one));
+ char_u *home_replace_save __ARGS((buf_T *buf, char_u *src));
+ int fullpathcmp __ARGS((char_u *s1, char_u *s2, int checkname));
+*** ../vim-7.3.630/src/vim.h 2012-07-10 17:14:50.000000000 +0200
+--- src/vim.h 2012-08-15 13:46:35.000000000 +0200
+***************
+*** 782,787 ****
+--- 782,788 ----
+ #define EXPAND_OWNSYNTAX 39
+ #define EXPAND_LOCALES 40
+ #define EXPAND_HISTORY 41
++ #define EXPAND_USER 42
+
+ /* Values for exmode_active (0 is no exmode) */
+ #define EXMODE_NORMAL 1
+*** ../vim-7.3.630/src/version.c 2012-08-15 13:30:55.000000000 +0200
+--- src/version.c 2012-08-15 14:01:12.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 631,
+ /**/
+
+--
+"Marriage is the process of finding out what kind of man your wife
+would have preferred"
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.632 b/source/ap/vim/patches/7.3.632
new file mode 100644
index 000000000..9e38969e6
--- /dev/null
+++ b/source/ap/vim/patches/7.3.632
@@ -0,0 +1,537 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.632
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.632
+Problem: Cannot select beyond 222 columns with the mouse in xterm.
+Solution: Add support for SGR mouse tracking. (Hayaki Saito)
+Files: runtime/doc/options.txt, src/feature.h, src/keymap.h, src/misc2.c,
+ src/option.h, src/os_unix.c, src/term.c, src/version.c
+
+
+*** ../vim-7.3.631/runtime/doc/options.txt 2012-07-10 16:49:08.000000000 +0200
+--- runtime/doc/options.txt 2012-08-15 16:04:26.000000000 +0200
+***************
+*** 7383,7388 ****
+--- 7424,7435 ----
+ jsbterm JSB term mouse handling.
+ *pterm-mouse*
+ pterm QNX pterm mouse handling.
++ *urxvt-mouse*
++ urxvt Mouse handling for the urxvt (rxvt-unicode) terminal.
++ *sgr-mouse*
++ sgr Mouse handling for the terminal that emits SGR-styled
++ mouse reporting. Works with xterm version 277 or
++ later.
+
+ The mouse handling must be enabled at compile time |+mouse_xterm|
+ |+mouse_dec| |+mouse_netterm|.
+***************
+*** 7395,7400 ****
+--- 7442,7448 ----
+ or "xterm2" already. The main use of this option is to set it to
+ "xterm", when the terminal name doesn't start with "xterm", but it can
+ handle xterm mouse codes.
++ The "sgr" value will be set if the xterm version is 277 or later.
+ The "xterm2" value will be set if the xterm version is reported to be
+ 95 or higher. This only works when compiled with the |+termresponse|
+ feature and if |t_RV| is set to the escape sequence to request the
+*** ../vim-7.3.631/src/feature.h 2012-04-25 16:50:44.000000000 +0200
+--- src/feature.h 2012-08-15 15:46:07.000000000 +0200
+***************
+*** 1056,1061 ****
+--- 1056,1064 ----
+ # ifdef FEAT_BIG
+ # define FEAT_MOUSE_URXVT
+ # endif
++ # ifdef FEAT_BIG
++ # define FEAT_MOUSE_SGR
++ # endif
+ # if defined(FEAT_NORMAL) && (defined(MSDOS) || defined(WIN3264))
+ # define DOS_MOUSE
+ # endif
+***************
+*** 1077,1082 ****
+--- 1080,1090 ----
+ # define FEAT_MOUSE_XTERM
+ #endif
+
++ /* sgr is a small variation of mouse_xterm, and shares its code */
++ #if defined(FEAT_MOUSE_SGR) && !defined(FEAT_MOUSE_XTERM)
++ # define FEAT_MOUSE_XTERM
++ #endif
++
+ /* Define FEAT_MOUSE when any of the above is defined or FEAT_GUI. */
+ #if !defined(FEAT_MOUSE_TTY) \
+ && (defined(FEAT_MOUSE_XTERM) \
+***************
+*** 1087,1093 ****
+ || defined(FEAT_MOUSE_JSB) \
+ || defined(FEAT_MOUSE_PTERM) \
+ || defined(FEAT_SYSMOUSE) \
+! || defined(FEAT_MOUSE_URXVT))
+ # define FEAT_MOUSE_TTY /* include non-GUI mouse support */
+ #endif
+ #if !defined(FEAT_MOUSE) && (defined(FEAT_MOUSE_TTY) || defined(FEAT_GUI))
+--- 1095,1102 ----
+ || defined(FEAT_MOUSE_JSB) \
+ || defined(FEAT_MOUSE_PTERM) \
+ || defined(FEAT_SYSMOUSE) \
+! || defined(FEAT_MOUSE_URXVT) \
+! || defined(FEAT_MOUSE_SGR))
+ # define FEAT_MOUSE_TTY /* include non-GUI mouse support */
+ #endif
+ #if !defined(FEAT_MOUSE) && (defined(FEAT_MOUSE_TTY) || defined(FEAT_GUI))
+*** ../vim-7.3.631/src/keymap.h 2012-01-20 17:15:47.000000000 +0100
+--- src/keymap.h 2012-08-15 15:46:07.000000000 +0200
+***************
+*** 110,115 ****
+--- 110,118 ----
+ /* Used for the urxvt mouse. */
+ #define KS_URXVT_MOUSE 238
+
++ /* Used for the sgr mouse. */
++ #define KS_SGR_MOUSE 237
++
+ /*
+ * Filler used after KS_SPECIAL and others
+ */
+***************
+*** 412,417 ****
+--- 415,421 ----
+ #define K_JSBTERM_MOUSE TERMCAP2KEY(KS_JSBTERM_MOUSE, KE_FILLER)
+ #define K_PTERM_MOUSE TERMCAP2KEY(KS_PTERM_MOUSE, KE_FILLER)
+ #define K_URXVT_MOUSE TERMCAP2KEY(KS_URXVT_MOUSE, KE_FILLER)
++ #define K_SGR_MOUSE TERMCAP2KEY(KS_SGR_MOUSE, KE_FILLER)
+
+ #define K_SELECT TERMCAP2KEY(KS_SELECT, KE_FILLER)
+ #define K_TEAROFF TERMCAP2KEY(KS_TEAROFF, KE_FILLER)
+*** ../vim-7.3.631/src/misc2.c 2012-08-15 14:04:50.000000000 +0200
+--- src/misc2.c 2012-08-15 15:46:07.000000000 +0200
+***************
+*** 2433,2438 ****
+--- 2433,2441 ----
+ #ifdef FEAT_MOUSE_URXVT
+ {K_URXVT_MOUSE, (char_u *)"UrxvtMouse"},
+ #endif
++ #ifdef FEAT_MOUSE_SGR
++ {K_SGR_MOUSE, (char_u *)"SgrMouse"},
++ #endif
+ {K_LEFTMOUSE, (char_u *)"LeftMouse"},
+ {K_LEFTMOUSE_NM, (char_u *)"LeftMouseNM"},
+ {K_LEFTDRAG, (char_u *)"LeftDrag"},
+*** ../vim-7.3.631/src/option.h 2012-07-10 16:49:08.000000000 +0200
+--- src/option.h 2012-08-15 15:46:07.000000000 +0200
+***************
+*** 822,828 ****
+ EXTERN char_u *p_ttym; /* 'ttymouse' */
+ EXTERN unsigned ttym_flags;
+ # ifdef IN_OPTION_C
+! static char *(p_ttym_values[]) = {"xterm", "xterm2", "dec", "netterm", "jsbterm", "pterm", "urxvt", NULL};
+ # endif
+ # define TTYM_XTERM 0x01
+ # define TTYM_XTERM2 0x02
+--- 822,828 ----
+ EXTERN char_u *p_ttym; /* 'ttymouse' */
+ EXTERN unsigned ttym_flags;
+ # ifdef IN_OPTION_C
+! static char *(p_ttym_values[]) = {"xterm", "xterm2", "dec", "netterm", "jsbterm", "pterm", "urxvt", "sgr", NULL};
+ # endif
+ # define TTYM_XTERM 0x01
+ # define TTYM_XTERM2 0x02
+***************
+*** 831,836 ****
+--- 831,837 ----
+ # define TTYM_JSBTERM 0x10
+ # define TTYM_PTERM 0x20
+ # define TTYM_URXVT 0x40
++ # define TTYM_SGR 0x80
+ #endif
+ EXTERN char_u *p_udir; /* 'undodir' */
+ EXTERN long p_ul; /* 'undolevels' */
+*** ../vim-7.3.631/src/os_unix.c 2012-04-20 15:55:10.000000000 +0200
+--- src/os_unix.c 2012-08-15 16:06:54.000000000 +0200
+***************
+*** 2159,2168 ****
+--- 2159,2171 ----
+ * Return 1 for "xterm".
+ * Return 2 for "xterm2".
+ * Return 3 for "urxvt".
++ * Return 4 for "sgr".
+ */
+ int
+ use_xterm_mouse()
+ {
++ if (ttym_flags == TTYM_SGR)
++ return 4;
+ if (ttym_flags == TTYM_URXVT)
+ return 3;
+ if (ttym_flags == TTYM_XTERM2)
+***************
+*** 3339,3345 ****
+ xterm_mouse_vers = use_xterm_mouse();
+
+ # ifdef FEAT_MOUSE_URXVT
+! if (ttym_flags == TTYM_URXVT) {
+ out_str_nf((char_u *)
+ (on
+ ? IF_EB("\033[?1015h", ESC_STR "[?1015h")
+--- 3342,3349 ----
+ xterm_mouse_vers = use_xterm_mouse();
+
+ # ifdef FEAT_MOUSE_URXVT
+! if (ttym_flags == TTYM_URXVT)
+! {
+ out_str_nf((char_u *)
+ (on
+ ? IF_EB("\033[?1015h", ESC_STR "[?1015h")
+***************
+*** 3348,3353 ****
+--- 3352,3368 ----
+ }
+ # endif
+
++ # ifdef FEAT_MOUSE_SGR
++ if (ttym_flags == TTYM_SGR)
++ {
++ out_str_nf((char_u *)
++ (on
++ ? IF_EB("\033[?1006h", ESC_STR "[?1006h")
++ : IF_EB("\033[?1006l", ESC_STR "[?1006l")));
++ ison = on;
++ }
++ # endif
++
+ if (xterm_mouse_vers > 0)
+ {
+ if (on) /* enable mouse events, use mouse tracking if available */
+***************
+*** 3577,3582 ****
+--- 3592,3618 ----
+ else
+ del_mouse_termcode(KS_URXVT_MOUSE);
+ # endif
++ # ifdef FEAT_MOUSE_SGR
++ /* same as the dec mouse */
++ if (use_xterm_mouse() == 4
++ # ifdef FEAT_GUI
++ && !gui.in_use
++ # endif
++ )
++ {
++ set_mouse_termcode(KS_SGR_MOUSE, (char_u *)(term_is_8bit(T_NAME)
++ ? IF_EB("\233<", CSI_STR "<")
++ : IF_EB("\033[<", ESC_STR "[<")));
++
++ if (*p_mouse != NUL)
++ {
++ mch_setmouse(FALSE);
++ setmouse();
++ }
++ }
++ else
++ del_mouse_termcode(KS_SGR_MOUSE);
++ # endif
+ }
+ #endif
+
+*** ../vim-7.3.631/src/term.c 2012-02-05 22:05:44.000000000 +0100
+--- src/term.c 2012-08-15 16:14:09.000000000 +0200
+***************
+*** 1997,2002 ****
+--- 1997,2003 ----
+ # define HMT_JSBTERM 8
+ # define HMT_PTERM 16
+ # define HMT_URXVT 32
++ # define HMT_SGR 64
+ static int has_mouse_termcode = 0;
+ # endif
+
+***************
+*** 2037,2042 ****
+--- 2038,2048 ----
+ has_mouse_termcode |= HMT_URXVT;
+ else
+ # endif
++ # ifdef FEAT_MOUSE_SGR
++ if (n == KS_SGR_MOUSE)
++ has_mouse_termcode |= HMT_SGR;
++ else
++ # endif
+ has_mouse_termcode |= HMT_NORMAL;
+ # endif
+ }
+***************
+*** 2079,2084 ****
+--- 2085,2095 ----
+ has_mouse_termcode &= ~HMT_URXVT;
+ else
+ # endif
++ # ifdef FEAT_MOUSE_SGR
++ if (n == KS_SGR_MOUSE)
++ has_mouse_termcode &= ~HMT_SGR;
++ else
++ # endif
+ has_mouse_termcode &= ~HMT_NORMAL;
+ # endif
+ }
+***************
+*** 4023,4029 ****
+ #ifdef FEAT_TERMRESPONSE
+ if (key_name[0] == NUL
+ /* URXVT mouse uses <ESC>[#;#;#M, but we are matching <ESC>[ */
+! || key_name[0] == KS_URXVT_MOUSE)
+ {
+ /* Check for xterm version string: "<Esc>[>{x};{vers};{y}c". Also
+ * eat other possible responses to t_RV, rxvt returns
+--- 4034,4041 ----
+ #ifdef FEAT_TERMRESPONSE
+ if (key_name[0] == NUL
+ /* URXVT mouse uses <ESC>[#;#;#M, but we are matching <ESC>[ */
+! || key_name[0] == KS_URXVT_MOUSE
+! || key_name[0] == KS_SGR_MOUSE)
+ {
+ /* Check for xterm version string: "<Esc>[>{x};{vers};{y}c". Also
+ * eat other possible responses to t_RV, rxvt returns
+***************
+*** 4061,4066 ****
+--- 4073,4088 ----
+
+ if (tp[1 + (tp[0] != CSI)] == '>' && j == 2)
+ {
++ # ifdef TTYM_SGR
++ if (extra >= 277
++ # ifdef TTYM_URXVT
++ && ttym_flags != TTYM_URXVT
++ # endif
++ )
++ set_option_value((char_u *)"ttym", 0L,
++ (char_u *)"sgr", 0);
++ else
++ # endif
+ /* if xterm version >= 95 use mouse dragging */
+ if (extra >= 95
+ # ifdef TTYM_URXVT
+***************
+*** 4147,4167 ****
+ /*
+ * If it is a mouse click, get the coordinates.
+ */
+! if (key_name[0] == (int)KS_MOUSE
+ # ifdef FEAT_MOUSE_JSB
+! || key_name[0] == (int)KS_JSBTERM_MOUSE
+ # endif
+ # ifdef FEAT_MOUSE_NET
+! || key_name[0] == (int)KS_NETTERM_MOUSE
+ # endif
+ # ifdef FEAT_MOUSE_DEC
+! || key_name[0] == (int)KS_DEC_MOUSE
+ # endif
+ # ifdef FEAT_MOUSE_PTERM
+! || key_name[0] == (int)KS_PTERM_MOUSE
+ # endif
+ # ifdef FEAT_MOUSE_URXVT
+! || key_name[0] == (int)KS_URXVT_MOUSE
+ # endif
+ )
+ {
+--- 4169,4192 ----
+ /*
+ * If it is a mouse click, get the coordinates.
+ */
+! if (key_name[0] == KS_MOUSE
+ # ifdef FEAT_MOUSE_JSB
+! || key_name[0] == KS_JSBTERM_MOUSE
+ # endif
+ # ifdef FEAT_MOUSE_NET
+! || key_name[0] == KS_NETTERM_MOUSE
+ # endif
+ # ifdef FEAT_MOUSE_DEC
+! || key_name[0] == KS_DEC_MOUSE
+ # endif
+ # ifdef FEAT_MOUSE_PTERM
+! || key_name[0] == KS_PTERM_MOUSE
+ # endif
+ # ifdef FEAT_MOUSE_URXVT
+! || key_name[0] == KS_URXVT_MOUSE
+! # endif
+! # ifdef FEAT_MOUSE_SGR
+! || key_name[0] == KS_SGR_MOUSE
+ # endif
+ )
+ {
+***************
+*** 4243,4250 ****
+ }
+ }
+
+! # ifdef FEAT_MOUSE_URXVT
+! if (key_name[0] == (int)KS_URXVT_MOUSE)
+ {
+ for (;;)
+ {
+--- 4268,4276 ----
+ }
+ }
+
+! # if defined(FEAT_MOUSE_URXVT) || defined(FEAT_MOUSE_SGR)
+! if (key_name[0] == KS_URXVT_MOUSE
+! || key_name[0] == KS_SGR_MOUSE)
+ {
+ for (;;)
+ {
+***************
+*** 4256,4261 ****
+--- 4282,4301 ----
+ * ^-- row
+ * ^----- column
+ * ^-------- code
++ *
++ * SGR 1006 mouse reporting mode:
++ * Almost identical to xterm mouse mode, except the values
++ * are decimal instead of bytes.
++ *
++ * \033[<%d;%d;%dM
++ * ^-- row
++ * ^----- column
++ * ^-------- code
++ *
++ * \033[<%d;%d;%dm : mouse release event
++ * ^-- row
++ * ^----- column
++ * ^-------- code
+ */
+ p = tp + slen;
+
+***************
+*** 4263,4294 ****
+ if (*p++ != ';')
+ return -1;
+
+ mouse_col = getdigits(&p) - 1;
+ if (*p++ != ';')
+ return -1;
+
+ mouse_row = getdigits(&p) - 1;
+! if (*p++ != 'M')
+ return -1;
+
+ slen += (int)(p - (tp + slen));
+
+ /* skip this one if next one has same code (like xterm
+ * case) */
+ j = termcodes[idx].len;
+! if (STRNCMP(tp, tp + slen, (size_t)j) == 0) {
+! /* check if the command is complete by looking for the
+! * M */
+ int slen2;
+ int cmd_complete = 0;
+! for (slen2 = slen; slen2 < len; slen2++) {
+! if (tp[slen2] == 'M') {
+ cmd_complete = 1;
+ break;
+ }
+ }
+ p += j;
+! if (cmd_complete && getdigits(&p) == mouse_code) {
+ slen += j; /* skip the \033[ */
+ continue;
+ }
+--- 4303,4348 ----
+ if (*p++ != ';')
+ return -1;
+
++ /* when mouse reporting is SGR, add 32 to mouse code */
++ if (key_name[0] == KS_SGR_MOUSE)
++ mouse_code += 32;
++
+ mouse_col = getdigits(&p) - 1;
+ if (*p++ != ';')
+ return -1;
+
+ mouse_row = getdigits(&p) - 1;
+! if (key_name[0] == KS_SGR_MOUSE && *p == 'm')
+! mouse_code |= MOUSE_RELEASE;
+! else if (*p != 'M')
+ return -1;
++ p++;
+
+ slen += (int)(p - (tp + slen));
+
+ /* skip this one if next one has same code (like xterm
+ * case) */
+ j = termcodes[idx].len;
+! if (STRNCMP(tp, tp + slen, (size_t)j) == 0)
+! {
+ int slen2;
+ int cmd_complete = 0;
+!
+! /* check if the command is complete by looking for the
+! * 'M' */
+! for (slen2 = slen; slen2 < len; slen2++)
+! {
+! if (tp[slen2] == 'M'
+! || (key_name[0] == KS_SGR_MOUSE
+! && tp[slen2] == 'm'))
+! {
+ cmd_complete = 1;
+ break;
+ }
+ }
+ p += j;
+! if (cmd_complete && getdigits(&p) == mouse_code)
+! {
+ slen += j; /* skip the \033[ */
+ continue;
+ }
+***************
+*** 4302,4307 ****
+--- 4356,4364 ----
+ #ifdef FEAT_MOUSE_URXVT
+ || key_name[0] == (int)KS_URXVT_MOUSE
+ #endif
++ #ifdef FEAT_MOUSE_SGR
++ || key_name[0] == KS_SGR_MOUSE
++ #endif
+ )
+ {
+ # if !defined(MSWIN) && !defined(MSDOS)
+*** ../vim-7.3.631/src/version.c 2012-08-15 14:04:50.000000000 +0200
+--- src/version.c 2012-08-15 15:47:30.000000000 +0200
+***************
+*** 384,389 ****
+--- 384,394 ----
+ # else
+ "-mouse_urxvt",
+ # endif
++ # ifdef FEAT_MOUSE_SGR
++ "+mouse_sgr",
++ # else
++ "-mouse_sgr",
++ # endif
+ #endif
+ #ifdef __QNX__
+ # ifdef FEAT_MOUSE_PTERM
+*** ../vim-7.3.631/src/version.c 2012-08-15 14:04:50.000000000 +0200
+--- src/version.c 2012-08-15 15:47:30.000000000 +0200
+***************
+*** 716,717 ****
+--- 721,724 ----
+ { /* Add new patch number below this line */
++ /**/
++ 632,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+243. You unsuccessfully try to download a pizza from www.dominos.com.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.633 b/source/ap/vim/patches/7.3.633
new file mode 100644
index 000000000..899ccb387
--- /dev/null
+++ b/source/ap/vim/patches/7.3.633
@@ -0,0 +1,81 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.633
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.633
+Problem: Selection remains displayed as selected after selecting another
+ text.
+Solution: Call xterm_update() before select(). (Andrew Pimlott)
+Files: src/os_unix.c
+
+
+*** ../vim-7.3.632/src/os_unix.c 2012-08-15 16:20:59.000000000 +0200
+--- src/os_unix.c 2012-08-15 17:15:58.000000000 +0200
+***************
+*** 5196,5201 ****
+--- 5196,5205 ----
+ FD_SET(ConnectionNumber(xterm_dpy), &rfds);
+ if (maxfd < ConnectionNumber(xterm_dpy))
+ maxfd = ConnectionNumber(xterm_dpy);
++
++ /* An event may have already been read but not handled. In
++ * particulary, XFlush may cause this. */
++ xterm_update();
+ }
+ # endif
+ # ifdef FEAT_MOUSE_GPM
+***************
+*** 5216,5229 ****
+ maxfd = xsmp_icefd;
+ }
+ # endif
+! #ifdef FEAT_NETBEANS_INTG
+ if (nb_fd != -1)
+ {
+ FD_SET(nb_fd, &rfds);
+ if (maxfd < nb_fd)
+ maxfd = nb_fd;
+ }
+! #endif
+
+ # ifdef OLD_VMS
+ /* Old VMS as v6.2 and older have broken select(). It waits more than
+--- 5220,5233 ----
+ maxfd = xsmp_icefd;
+ }
+ # endif
+! # ifdef FEAT_NETBEANS_INTG
+ if (nb_fd != -1)
+ {
+ FD_SET(nb_fd, &rfds);
+ if (maxfd < nb_fd)
+ maxfd = nb_fd;
+ }
+! # endif
+
+ # ifdef OLD_VMS
+ /* Old VMS as v6.2 and older have broken select(). It waits more than
+*** ../vim-7.3.632/src/version.c 2012-08-15 16:20:59.000000000 +0200
+--- src/version.c 2012-08-15 17:22:17.000000000 +0200
+***************
+*** 721,722 ****
+--- 721,724 ----
+ { /* Add new patch number below this line */
++ /**/
++ 633,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+245. You use Real Audio to listen to a radio station from a distant
+ city rather than turn on your stereo system.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.634 b/source/ap/vim/patches/7.3.634
new file mode 100644
index 000000000..3262bab3c
--- /dev/null
+++ b/source/ap/vim/patches/7.3.634
@@ -0,0 +1,57 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.634
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.634
+Problem: Month/Day format for undo is confusing. (Marcin Szamotulski)
+Solution: Always use Year/Month/Day, should work for everybody.
+Files: src/undo.c
+
+
+*** ../vim-7.3.633/src/undo.c 2012-06-01 13:46:06.000000000 +0200
+--- src/undo.c 2012-08-23 12:43:24.000000000 +0200
+***************
+*** 2880,2890 ****
+ if (time(NULL) - tt < (60L * 60L * 12L))
+ /* within 12 hours */
+ (void)strftime((char *)buf, buflen, "%H:%M:%S", curtime);
+- else if (time(NULL) - tt < (60L * 60L * 24L * 180L))
+- /* within 6 months */
+- (void)strftime((char *)buf, buflen, "%m/%d %H:%M:%S", curtime);
+ else
+! /* long ago */
+ (void)strftime((char *)buf, buflen, "%Y/%m/%d %H:%M:%S", curtime);
+ }
+ else
+--- 2880,2887 ----
+ if (time(NULL) - tt < (60L * 60L * 12L))
+ /* within 12 hours */
+ (void)strftime((char *)buf, buflen, "%H:%M:%S", curtime);
+ else
+! /* longer ago */
+ (void)strftime((char *)buf, buflen, "%Y/%m/%d %H:%M:%S", curtime);
+ }
+ else
+*** ../vim-7.3.633/src/version.c 2012-08-15 17:26:53.000000000 +0200
+--- src/version.c 2012-08-23 12:58:36.000000000 +0200
+***************
+*** 721,722 ****
+--- 721,724 ----
+ { /* Add new patch number below this line */
++ /**/
++ 634,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+10E. You start counting in hex.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.635 b/source/ap/vim/patches/7.3.635
new file mode 100644
index 000000000..4a677025f
--- /dev/null
+++ b/source/ap/vim/patches/7.3.635
@@ -0,0 +1,50 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.635
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.635
+Problem: Issue 21: System call during startup sets 'lines' to a wrong
+ value. (Karl Yngve)
+Solution: Don't set the shell size while the GUI is still starting up.
+ (Christian Brabandt)
+Files: src/ui.c
+
+
+*** ../vim-7.3.634/src/ui.c 2012-07-10 16:49:08.000000000 +0200
+--- src/ui.c 2012-08-23 13:25:26.000000000 +0200
+***************
+*** 298,303 ****
+--- 298,306 ----
+ int retval;
+
+ #ifdef FEAT_GUI
++ if (gui.starting)
++ /* possibly a system call during startup, check later */
++ return OK;
+ if (gui.in_use)
+ retval = gui_get_shellsize();
+ else
+*** ../vim-7.3.634/src/version.c 2012-08-23 12:58:56.000000000 +0200
+--- src/version.c 2012-08-23 13:27:00.000000000 +0200
+***************
+*** 721,722 ****
+--- 721,724 ----
+ { /* Add new patch number below this line */
++ /**/
++ 635,
+ /**/
+
+--
+ARTHUR: This new learning amazes me, Sir Bedevere. Explain again how sheep's
+ bladders may be employed to prevent earthquakes.
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.636 b/source/ap/vim/patches/7.3.636
new file mode 100644
index 000000000..453a7fc99
--- /dev/null
+++ b/source/ap/vim/patches/7.3.636
@@ -0,0 +1,148 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.636
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.636 (after 7.3.625)
+Problem: Not all zero-width matches handled correctly for "gn".
+Solution: Move zero-width detection to a separate function. (Christian
+ Brabandt)
+Files: src/search.c
+
+
+*** ../vim-7.3.635/src/search.c 2012-08-08 15:27:54.000000000 +0200
+--- src/search.c 2012-08-23 15:52:50.000000000 +0200
+***************
+*** 4526,4531 ****
+--- 4526,4533 ----
+ #endif /* FEAT_TEXTOBJ */
+
+ #if defined(FEAT_VISUAL) || defined(PROTO)
++ static int is_zerowidth __ARGS((char_u *pattern));
++
+ /*
+ * Find next search match under cursor, cursor at end.
+ * Used while an operator is pending, and in Visual mode.
+***************
+*** 4546,4556 ****
+ int visual_active = FALSE;
+ int flags = 0;
+ pos_T save_VIsual;
+- regmmatch_T regmatch;
+- int nmatched = 0;
+ int zerowidth = FALSE;
+
+-
+ /* wrapping should not occur */
+ p_ws = FALSE;
+
+--- 4548,4555 ----
+***************
+*** 4583,4606 ****
+ else
+ orig_pos = pos = start_pos = curwin->w_cursor;
+
+! /*
+! * Check for zero-width pattern.
+! */
+! if (search_regcomp(spats[last_idx].pat, RE_SEARCH, RE_SEARCH,
+! ((SEARCH_HIS + SEARCH_KEEP)), &regmatch) == FAIL)
+ return FAIL;
+
+- /* Zero-width pattern should match somewhere, then we can check if start
+- * and end are in the same position. */
+- nmatched = vim_regexec_multi(&regmatch, curwin, curbuf,
+- curwin->w_cursor.lnum, (colnr_T)0, NULL);
+- if (called_emsg)
+- return FAIL;
+- if (nmatched && regmatch.startpos[0].lnum == regmatch.endpos[0].lnum
+- && regmatch.endpos[0].col == regmatch.startpos[0].col)
+- zerowidth = TRUE;
+- vim_free(regmatch.regprog);
+-
+ /*
+ * The trick is to first search backwards and then search forward again,
+ * so that a match at the current cursor position will be correctly
+--- 4582,4592 ----
+ else
+ orig_pos = pos = start_pos = curwin->w_cursor;
+
+! /* Is the pattern is zero-width? */
+! zerowidth = is_zerowidth(spats[last_idx].pat);
+! if (zerowidth == -1)
+ return FAIL;
+
+ /*
+ * The trick is to first search backwards and then search forward again,
+ * so that a match at the current cursor position will be correctly
+***************
+*** 4693,4698 ****
+--- 4679,4721 ----
+
+ return OK;
+ }
++
++ /*
++ * Check if the pattern is zero-width.
++ * Returns TRUE, FALSE or -1 for failure.
++ */
++ static int
++ is_zerowidth(pattern)
++ char_u *pattern;
++ {
++ regmmatch_T regmatch;
++ int nmatched = 0;
++ int result = -1;
++ pos_T pos;
++
++ if (search_regcomp(pattern, RE_SEARCH, RE_SEARCH,
++ SEARCH_KEEP, &regmatch) == FAIL)
++ return -1;
++
++ /* move to match */
++ clearpos(&pos);
++ if (searchit(curwin, curbuf, &pos, FORWARD, spats[last_idx].pat, 1,
++ SEARCH_KEEP, RE_SEARCH, 0, NULL) != FAIL)
++ {
++ /* Zero-width pattern should match somewhere, then we can check if
++ * start and end are in the same position. */
++ nmatched = vim_regexec_multi(&regmatch, curwin, curbuf,
++ pos.lnum, (colnr_T)0, NULL);
++
++ if (!called_emsg)
++ result = (nmatched != 0
++ && regmatch.startpos[0].lnum == regmatch.endpos[0].lnum
++ && regmatch.startpos[0].col == regmatch.endpos[0].col);
++ }
++
++ vim_free(regmatch.regprog);
++ return result;
++ }
+ #endif /* FEAT_VISUAL */
+
+ #if defined(FEAT_LISP) || defined(FEAT_CINDENT) || defined(FEAT_TEXTOBJ) \
+*** ../vim-7.3.635/src/version.c 2012-08-23 13:28:50.000000000 +0200
+--- src/version.c 2012-08-23 15:25:23.000000000 +0200
+***************
+*** 721,722 ****
+--- 721,724 ----
+ { /* Add new patch number below this line */
++ /**/
++ 636,
+ /**/
+
+--
+Edison's greatest achievement came in 1879, when he invented the
+electric company. Edison's design was a brilliant adaptation of the
+simple electrical circuit: the electric company sends electricity
+through a wire to a customer, then immediately gets the electricity
+back through another wire
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.637 b/source/ap/vim/patches/7.3.637
new file mode 100644
index 000000000..f7f1d903a
--- /dev/null
+++ b/source/ap/vim/patches/7.3.637
@@ -0,0 +1,94 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.637
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.637
+Problem: Cannot catch the error caused by a foldopen when there is no fold.
+ (ZyX, Issue 48)
+Solution: Do not break out of the loop early when inside try/catch.
+ (Christian Brabandt) Except when there is a syntax error.
+Files: src/ex_docmd.c, src/globals.h
+
+
+*** ../vim-7.3.636/src/ex_docmd.c 2012-08-15 14:04:50.000000000 +0200
+--- src/ex_docmd.c 2012-08-23 18:39:08.000000000 +0200
+***************
+*** 1295,1301 ****
+ && cstack.cs_trylevel == 0
+ #endif
+ )
+! && !(did_emsg && used_getline
+ && (getline_equal(fgetline, cookie, getexmodeline)
+ || getline_equal(fgetline, cookie, getexline)))
+ && (next_cmdline != NULL
+--- 1295,1308 ----
+ && cstack.cs_trylevel == 0
+ #endif
+ )
+! && !(did_emsg
+! #ifdef FEAT_EVAL
+! /* Keep going when inside try/catch, so that the error can be
+! * dealth with, except when it is a syntax error, it may cause
+! * the :endtry to be missed. */
+! && (cstack.cs_trylevel == 0 || did_emsg_syntax)
+! #endif
+! && used_getline
+ && (getline_equal(fgetline, cookie, getexmodeline)
+ || getline_equal(fgetline, cookie, getexline)))
+ && (next_cmdline != NULL
+***************
+*** 1305,1310 ****
+--- 1312,1318 ----
+ || (flags & DOCMD_REPEAT)));
+
+ vim_free(cmdline_copy);
++ did_emsg_syntax = FALSE;
+ #ifdef FEAT_EVAL
+ free_cmdlines(&lines_ga);
+ ga_clear(&lines_ga);
+***************
+*** 2137,2142 ****
+--- 2145,2151 ----
+ if (!sourcing)
+ append_command(*cmdlinep);
+ errormsg = IObuff;
++ did_emsg_syntax = TRUE;
+ }
+ goto doend;
+ }
+*** ../vim-7.3.636/src/globals.h 2012-07-10 16:49:08.000000000 +0200
+--- src/globals.h 2012-08-23 18:29:09.000000000 +0200
+***************
+*** 183,188 ****
+--- 183,190 ----
+ #endif
+ EXTERN int did_emsg; /* set by emsg() when the message
+ is displayed or thrown */
++ EXTERN int did_emsg_syntax; /* did_emsg set because of a
++ syntax error */
+ EXTERN int called_emsg; /* always set by emsg() */
+ EXTERN int ex_exitval INIT(= 0); /* exit value for ex mode */
+ EXTERN int emsg_on_display INIT(= FALSE); /* there is an error message */
+*** ../vim-7.3.636/src/version.c 2012-08-23 15:53:00.000000000 +0200
+--- src/version.c 2012-08-23 17:59:12.000000000 +0200
+***************
+*** 721,722 ****
+--- 721,724 ----
+ { /* Add new patch number below this line */
++ /**/
++ 637,
+ /**/
+
+--
+GOD: That is your purpose Arthur ... the Quest for the Holy Grail ...
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.638 b/source/ap/vim/patches/7.3.638
new file mode 100644
index 000000000..f88a9399b
--- /dev/null
+++ b/source/ap/vim/patches/7.3.638
@@ -0,0 +1,55 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.638
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.638
+Problem: Unecessary redraw of the previous character.
+Solution: Check if the character is double-width. (Jon Long)
+Files: src/screen.c
+
+
+*** ../vim-7.3.637/src/screen.c 2012-07-10 16:49:08.000000000 +0200
+--- src/screen.c 2012-08-23 18:49:33.000000000 +0200
+***************
+*** 5332,5339 ****
+ && (ScreenLinesUC[off_from] != ScreenLinesUC[off_to]
+ || (ScreenLinesUC[off_from] != 0
+ && comp_char_differs(off_from, off_to))
+! || (cols > 1 && ScreenLines[off_from + 1]
+! != ScreenLines[off_to + 1])))
+ #endif
+ ))
+ return TRUE;
+--- 5332,5340 ----
+ && (ScreenLinesUC[off_from] != ScreenLinesUC[off_to]
+ || (ScreenLinesUC[off_from] != 0
+ && comp_char_differs(off_from, off_to))
+! || ((*mb_off2cells)(off_from, off_from + cols) > 1
+! && ScreenLines[off_from + 1]
+! != ScreenLines[off_to + 1])))
+ #endif
+ ))
+ return TRUE;
+*** ../vim-7.3.637/src/version.c 2012-08-23 18:43:06.000000000 +0200
+--- src/version.c 2012-08-23 18:47:11.000000000 +0200
+***************
+*** 721,722 ****
+--- 721,724 ----
+ { /* Add new patch number below this line */
++ /**/
++ 638,
+ /**/
+
+--
+There is a fine line between courage and foolishness.
+Unfortunately, it's not a fence.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.639 b/source/ap/vim/patches/7.3.639
new file mode 100644
index 000000000..359dc6d88
--- /dev/null
+++ b/source/ap/vim/patches/7.3.639
@@ -0,0 +1,846 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.639
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.639
+Problem: It's not easy to build Vim on Windows with XPM support.
+Solution: Include the required files, they are quite small. Update the
+ MSVC makefile to use them. Binary files are in the next patch.
+ (Sergey Khorev)
+Files: src/xpm/COPYRIGHT, src/xpm/README.txt, src/xpm/include/simx.h,
+ src/xpm/include/xpm.h, src/Make_mvc.mak, src/bigvim.bat,
+ src/bigvim64.bat, Filelist
+
+
+*** ../vim-7.3.638/src/xpm/COPYRIGHT 1970-01-01 01:00:00.000000000 +0100
+--- src/xpm/COPYRIGHT 1998-03-19 23:51:00.000000000 +0100
+***************
+*** 0 ****
+--- 1,31 ----
++ /*
++ * Copyright (C) 1989-95 GROUPE BULL
++ *
++ * Permission is hereby granted, free of charge, to any person obtaining a copy
++ * of this software and associated documentation files (the "Software"), to
++ * deal in the Software without restriction, including without limitation the
++ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
++ * sell copies of the Software, and to permit persons to whom the Software is
++ * furnished to do so, subject to the following conditions:
++ *
++ * The above copyright notice and this permission notice shall be included in
++ * all copies or substantial portions of the Software.
++ *
++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
++ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
++ * GROUPE BULL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
++ * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
++ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
++ *
++ * Except as contained in this notice, the name of GROUPE BULL shall not be
++ * used in advertising or otherwise to promote the sale, use or other dealings
++ * in this Software without prior written authorization from GROUPE BULL.
++ */
++
++ Arnaud LE HORS BULL Research FRANCE -- Koala Project
++ (XPM - X PixMap format version 2 & 3)
++ Internet: lehors@sophia.inria.fr
++ Surface Mail: Arnaud LE HORS, INRIA - Sophia Antipolis,
++ 2004, route des Lucioles, 06565 Valbonne Cedex -- FRANCE
++ Voice phone: (33) 93.65.77.71, Fax: (33) 93 65 77 66, Telex: 97 00 50 F
+*** ../vim-7.3.638/src/xpm/README.txt 1970-01-01 01:00:00.000000000 +0100
+--- src/xpm/README.txt 2012-08-29 13:29:17.000000000 +0200
+***************
+*** 0 ****
+--- 1,23 ----
++ This is XPM library compiled for Windows which is intended for use with Vim
++ 'signs' feature.
++
++ Libraries in x86 directory were compiled with MSVC6 and MinGW. Proposed
++ commands to compile Vim are:
++
++ Any version of MSVC starting from version 6.0:
++ nmake -f Make_mvc.mak GUI=yes CSCOPE=yes NETBEANS=yes XPM=e:\hg\xpm\x86
++
++ MinGW:
++ mingw32-make -f Make_ming.mak GUI=yes CSCOPE=yes XPM=e:/hg/xpm/x86
++
++ Microsoft Visual C++ on x64 (tested with versions 2008 and 2010):
++ nmake -f Make_mvc.mak GUI=yes CSCOPE=yes XPM=E:\HG\xpm\x64
++
++ To test, open some file in Vim and execute commands below:
++ :exe 'sign define vimxpm icon='.$VIMRUNTIME.'\\vim32x32.xpm'
++ :exe 'sign place 1 line=1 name=vimxpm file='.expand('%:p')
++
++
++ See COPYRIGHT for XPM licence.
++
++ If you have questions please email sergey.khorev@gmail.com.
+*** ../vim-7.3.638/src/xpm/include/simx.h 1970-01-01 01:00:00.000000000 +0100
+--- src/xpm/include/simx.h 1998-03-19 23:51:00.000000000 +0100
+***************
+*** 0 ****
+--- 1,139 ----
++ /*
++ * Copyright (C) 1989-95 GROUPE BULL
++ *
++ * Permission is hereby granted, free of charge, to any person obtaining a copy
++ * of this software and associated documentation files (the "Software"), to
++ * deal in the Software without restriction, including without limitation the
++ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
++ * sell copies of the Software, and to permit persons to whom the Software is
++ * furnished to do so, subject to the following conditions:
++ *
++ * The above copyright notice and this permission notice shall be included in
++ * all copies or substantial portions of the Software.
++ *
++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
++ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
++ * GROUPE BULL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
++ * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
++ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
++ *
++ * Except as contained in this notice, the name of GROUPE BULL shall not be
++ * used in advertising or otherwise to promote the sale, use or other dealings
++ * in this Software without prior written authorization from GROUPE BULL.
++ */
++
++ /*****************************************************************************\
++ * simx.h: 0.1a *
++ * *
++ * This emulates some Xlib functionality for MSW. It's not a general solution, *
++ * it is close related to XPM-lib. It is only intended to satisfy what is need *
++ * there. Thus allowing to read XPM files under MS windows. *
++ * *
++ * Developed by HeDu 3/94 (hedu@cul-ipn.uni-kiel.de) *
++ \*****************************************************************************/
++
++
++ #ifndef _SIMX_H
++ #define _SIMX_H
++
++ #ifdef FOR_MSW
++
++ #include "windows.h" /* MS windows GDI types */
++
++ /*
++ * minimal portability layer between ansi and KR C
++ */
++ /* this comes from xpm.h, and is here again, to avoid complicated
++ includes, since this is included from xpm.h */
++ /* these defines get undefed at the end of this file */
++ #if __STDC__ || defined(__cplusplus) || defined(c_plusplus)
++ /* ANSI || C++ */
++ #define FUNC(f, t, p) extern t f p
++ #define LFUNC(f, t, p) static t f p
++ #else /* k&R */
++ #define FUNC(f, t, p) extern t f()
++ #define LFUNC(f, t, p) static t f()
++ #endif
++
++
++ FUNC(boundCheckingMalloc, void *, (long s));
++ FUNC(boundCheckingCalloc, void *, (long num, long s));
++ FUNC(boundCheckingRealloc, void *, (void *p, long s));
++
++ /* define MSW types for X window types,
++ I don't know much about MSW, but the following defines do the job */
++
++ typedef HDC Display; /* this should be similar */
++ typedef void *Screen; /* not used */
++ typedef void *Visual; /* not used yet, is for GRAY, COLOR,
++ * MONO */
++
++ typedef void *Colormap; /* should be COLORPALETTE, not done
++ * yet */
++
++ typedef COLORREF Pixel;
++
++ #define PIXEL_ALREADY_TYPEDEFED /* to let xpm.h know about it */
++
++ typedef struct {
++ Pixel pixel;
++ BYTE red, green, blue;
++ } XColor;
++
++ typedef struct {
++ HBITMAP bitmap;
++ unsigned int width;
++ unsigned int height;
++ unsigned int depth;
++ } XImage;
++
++ #if defined(__cplusplus) || defined(c_plusplus)
++ extern "C" {
++ #endif
++ /* some replacements for X... functions */
++
++ /* XDefaultXXX */
++ FUNC(XDefaultVisual, Visual *, (Display *display, Screen *screen));
++ FUNC(XDefaultScreen, Screen *, (Display *d));
++ FUNC(XDefaultColormap, Colormap *, (Display *display, Screen *screen));
++ FUNC(XDefaultDepth, int, (Display *d, Screen *s));
++
++ /* color related */
++ FUNC(XParseColor, int, (Display *, Colormap *, char *, XColor *));
++ FUNC(XAllocColor, int, (Display *, Colormap *, XColor *));
++ FUNC(XQueryColors, void, (Display *display, Colormap *colormap,
++ XColor *xcolors, int ncolors));
++ FUNC(XFreeColors, int, (Display *d, Colormap cmap,
++ unsigned long pixels[],
++ int npixels, unsigned long planes));
++ /* XImage */
++ FUNC(XCreateImage, XImage *, (Display *, Visual *, int depth, int format,
++ int x, int y, int width, int height,
++ int pad, int foo));
++
++ /* free and destroy bitmap */
++ FUNC(XDestroyImage, void /* ? */ , (XImage *));
++ /* free only, bitmap remains */
++ FUNC(XImageFree, void, (XImage *));
++ #if defined(__cplusplus) || defined(c_plusplus)
++ } /* end of extern "C" */
++ #endif /* cplusplus */
++
++ #define ZPixmap 1 /* not really used */
++ #define XYBitmap 1 /* not really used */
++
++ #ifndef True
++ #define True 1
++ #define False 0
++ #endif
++ #ifndef Bool
++ typedef BOOL Bool; /* take MSW bool */
++ #endif
++ /* make these local here, simx.c gets the same from xpm.h */
++ #undef LFUNC
++ #undef FUNC
++
++ #endif /* def FOR_MSW */
++
++ #endif /* _SIMX_H */
+*** ../vim-7.3.638/src/xpm/include/xpm.h 1970-01-01 01:00:00.000000000 +0100
+--- src/xpm/include/xpm.h 1998-03-19 23:51:00.000000000 +0100
+***************
+*** 0 ****
+--- 1,501 ----
++ /*
++ * Copyright (C) 1989-95 GROUPE BULL
++ *
++ * Permission is hereby granted, free of charge, to any person obtaining a copy
++ * of this software and associated documentation files (the "Software"), to
++ * deal in the Software without restriction, including without limitation the
++ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
++ * sell copies of the Software, and to permit persons to whom the Software is
++ * furnished to do so, subject to the following conditions:
++ *
++ * The above copyright notice and this permission notice shall be included in
++ * all copies or substantial portions of the Software.
++ *
++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
++ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
++ * GROUPE BULL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
++ * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
++ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
++ *
++ * Except as contained in this notice, the name of GROUPE BULL shall not be
++ * used in advertising or otherwise to promote the sale, use or other dealings
++ * in this Software without prior written authorization from GROUPE BULL.
++ */
++
++ /*****************************************************************************\
++ * xpm.h: *
++ * *
++ * XPM library *
++ * Include file *
++ * *
++ * Developed by Arnaud Le Hors *
++ \*****************************************************************************/
++
++ /*
++ * The code related to FOR_MSW has been added by
++ * HeDu (hedu@cul-ipn.uni-kiel.de) 4/94
++ */
++
++ /*
++ * The code related to AMIGA has been added by
++ * Lorens Younes (d93-hyo@nada.kth.se) 4/96
++ */
++
++ #ifndef XPM_h
++ #define XPM_h
++
++ /*
++ * first some identification numbers:
++ * the version and revision numbers are determined with the following rule:
++ * SO Major number = LIB minor version number.
++ * SO Minor number = LIB sub-minor version number.
++ * e.g: Xpm version 3.2f
++ * we forget the 3 which is the format number, 2 gives 2, and f gives 6.
++ * thus we have XpmVersion = 2 and XpmRevision = 6
++ * which gives SOXPMLIBREV = 2.6
++ *
++ * Then the XpmIncludeVersion number is built from these numbers.
++ */
++ #define XpmFormat 3
++ #define XpmVersion 4
++ #define XpmRevision 11
++ #define XpmIncludeVersion ((XpmFormat * 100 + XpmVersion) * 100 + XpmRevision)
++
++ #ifndef XPM_NUMBERS
++
++ #ifdef FOR_MSW
++ # define SYSV /* uses memcpy string.h etc. */
++ # include <malloc.h>
++ # include "simx.h" /* defines some X stuff using MSW types */
++ #define NEED_STRCASECMP /* at least for MSVC++ */
++ #else /* FOR_MSW */
++ # ifdef AMIGA
++ # include "amigax.h"
++ # else /* not AMIGA */
++ # include <X11/Xlib.h>
++ # include <X11/Xutil.h>
++ # endif /* not AMIGA */
++ #endif /* FOR_MSW */
++
++ /* let's define Pixel if it is not done yet */
++ #if ! defined(_XtIntrinsic_h) && ! defined(PIXEL_ALREADY_TYPEDEFED)
++ typedef unsigned long Pixel; /* Index into colormap */
++ # define PIXEL_ALREADY_TYPEDEFED
++ #endif
++
++ /* make sure we know whether function prototypes are needed or not */
++ #ifndef NeedFunctionPrototypes
++ # if defined(__STDC__) || defined(__cplusplus) || defined(c_plusplus)
++ # define NeedFunctionPrototypes 1
++ # else
++ # define NeedFunctionPrototypes 0
++ # endif
++ #endif
++
++
++ /* Return ErrorStatus codes:
++ * null if full success
++ * positive if partial success
++ * negative if failure
++ */
++
++ #define XpmColorError 1
++ #define XpmSuccess 0
++ #define XpmOpenFailed -1
++ #define XpmFileInvalid -2
++ #define XpmNoMemory -3
++ #define XpmColorFailed -4
++
++ typedef struct {
++ char *name; /* Symbolic color name */
++ char *value; /* Color value */
++ Pixel pixel; /* Color pixel */
++ } XpmColorSymbol;
++
++ typedef struct {
++ char *name; /* name of the extension */
++ unsigned int nlines; /* number of lines in this extension */
++ char **lines; /* pointer to the extension array of strings */
++ } XpmExtension;
++
++ typedef struct {
++ char *string; /* characters string */
++ char *symbolic; /* symbolic name */
++ char *m_color; /* monochrom default */
++ char *g4_color; /* 4 level grayscale default */
++ char *g_color; /* other level grayscale default */
++ char *c_color; /* color default */
++ } XpmColor;
++
++ typedef struct {
++ unsigned int width; /* image width */
++ unsigned int height; /* image height */
++ unsigned int cpp; /* number of characters per pixel */
++ unsigned int ncolors; /* number of colors */
++ XpmColor *colorTable; /* list of related colors */
++ unsigned int *data; /* image data */
++ } XpmImage;
++
++ typedef struct {
++ unsigned long valuemask; /* Specifies which attributes are defined */
++ char *hints_cmt; /* Comment of the hints section */
++ char *colors_cmt; /* Comment of the colors section */
++ char *pixels_cmt; /* Comment of the pixels section */
++ unsigned int x_hotspot; /* Returns the x hotspot's coordinate */
++ unsigned int y_hotspot; /* Returns the y hotspot's coordinate */
++ unsigned int nextensions; /* number of extensions */
++ XpmExtension *extensions; /* pointer to array of extensions */
++ } XpmInfo;
++
++ typedef int (*XpmAllocColorFunc)(
++ #if NeedFunctionPrototypes
++ Display* /* display */,
++ Colormap /* colormap */,
++ char* /* colorname */,
++ XColor* /* xcolor */,
++ void* /* closure */
++ #endif
++ );
++
++ typedef int (*XpmFreeColorsFunc)(
++ #if NeedFunctionPrototypes
++ Display* /* display */,
++ Colormap /* colormap */,
++ Pixel* /* pixels */,
++ int /* npixels */,
++ void* /* closure */
++ #endif
++ );
++
++ typedef struct {
++ unsigned long valuemask; /* Specifies which attributes are
++ defined */
++
++ Visual *visual; /* Specifies the visual to use */
++ Colormap colormap; /* Specifies the colormap to use */
++ unsigned int depth; /* Specifies the depth */
++ unsigned int width; /* Returns the width of the created
++ pixmap */
++ unsigned int height; /* Returns the height of the created
++ pixmap */
++ unsigned int x_hotspot; /* Returns the x hotspot's
++ coordinate */
++ unsigned int y_hotspot; /* Returns the y hotspot's
++ coordinate */
++ unsigned int cpp; /* Specifies the number of char per
++ pixel */
++ Pixel *pixels; /* List of used color pixels */
++ unsigned int npixels; /* Number of used pixels */
++ XpmColorSymbol *colorsymbols; /* List of color symbols to override */
++ unsigned int numsymbols; /* Number of symbols */
++ char *rgb_fname; /* RGB text file name */
++ unsigned int nextensions; /* Number of extensions */
++ XpmExtension *extensions; /* List of extensions */
++
++ unsigned int ncolors; /* Number of colors */
++ XpmColor *colorTable; /* List of colors */
++ /* 3.2 backward compatibility code */
++ char *hints_cmt; /* Comment of the hints section */
++ char *colors_cmt; /* Comment of the colors section */
++ char *pixels_cmt; /* Comment of the pixels section */
++ /* end 3.2 bc */
++ unsigned int mask_pixel; /* Color table index of transparent
++ color */
++
++ /* Color Allocation Directives */
++ Bool exactColors; /* Only use exact colors for visual */
++ unsigned int closeness; /* Allowable RGB deviation */
++ unsigned int red_closeness; /* Allowable red deviation */
++ unsigned int green_closeness; /* Allowable green deviation */
++ unsigned int blue_closeness; /* Allowable blue deviation */
++ int color_key; /* Use colors from this color set */
++
++ Pixel *alloc_pixels; /* Returns the list of alloc'ed color
++ pixels */
++ int nalloc_pixels; /* Returns the number of alloc'ed
++ color pixels */
++
++ Bool alloc_close_colors; /* Specify whether close colors should
++ be allocated using XAllocColor
++ or not */
++ int bitmap_format; /* Specify the format of 1bit depth
++ images: ZPixmap or XYBitmap */
++
++ /* Color functions */
++ XpmAllocColorFunc alloc_color; /* Application color allocator */
++ XpmFreeColorsFunc free_colors; /* Application color de-allocator */
++ void *color_closure; /* Application private data to pass to
++ alloc_color and free_colors */
++
++ } XpmAttributes;
++
++ /* XpmAttributes value masks bits */
++ #define XpmVisual (1L<<0)
++ #define XpmColormap (1L<<1)
++ #define XpmDepth (1L<<2)
++ #define XpmSize (1L<<3) /* width & height */
++ #define XpmHotspot (1L<<4) /* x_hotspot & y_hotspot */
++ #define XpmCharsPerPixel (1L<<5)
++ #define XpmColorSymbols (1L<<6)
++ #define XpmRgbFilename (1L<<7)
++ /* 3.2 backward compatibility code */
++ #define XpmInfos (1L<<8)
++ #define XpmReturnInfos XpmInfos
++ /* end 3.2 bc */
++ #define XpmReturnPixels (1L<<9)
++ #define XpmExtensions (1L<<10)
++ #define XpmReturnExtensions XpmExtensions
++
++ #define XpmExactColors (1L<<11)
++ #define XpmCloseness (1L<<12)
++ #define XpmRGBCloseness (1L<<13)
++ #define XpmColorKey (1L<<14)
++
++ #define XpmColorTable (1L<<15)
++ #define XpmReturnColorTable XpmColorTable
++
++ #define XpmReturnAllocPixels (1L<<16)
++ #define XpmAllocCloseColors (1L<<17)
++ #define XpmBitmapFormat (1L<<18)
++
++ #define XpmAllocColor (1L<<19)
++ #define XpmFreeColors (1L<<20)
++ #define XpmColorClosure (1L<<21)
++
++
++ /* XpmInfo value masks bits */
++ #define XpmComments XpmInfos
++ #define XpmReturnComments XpmComments
++
++ /* XpmAttributes mask_pixel value when there is no mask */
++ #ifndef FOR_MSW
++ #define XpmUndefPixel 0x80000000
++ #else
++ /* int is only 16 bit for MSW */
++ #define XpmUndefPixel 0x8000
++ #endif
++
++ /*
++ * color keys for visual type, they must fit along with the number key of
++ * each related element in xpmColorKeys[] defined in XpmI.h
++ */
++ #define XPM_MONO 2
++ #define XPM_GREY4 3
++ #define XPM_GRAY4 3
++ #define XPM_GREY 4
++ #define XPM_GRAY 4
++ #define XPM_COLOR 5
++
++
++ /* macros for forward declarations of functions with prototypes */
++ #if NeedFunctionPrototypes
++ #define FUNC(f, t, p) extern t f p
++ #define LFUNC(f, t, p) static t f p
++ #else
++ #define FUNC(f, t, p) extern t f()
++ #define LFUNC(f, t, p) static t f()
++ #endif
++
++
++ /*
++ * functions declarations
++ */
++
++ #ifdef __cplusplus
++ extern "C" {
++ #endif
++
++ /* FOR_MSW, all ..Pixmap.. are excluded, only the ..XImage.. are used */
++ /* Same for Amiga! */
++
++ #if !defined(FOR_MSW) && !defined(AMIGA)
++ FUNC(XpmCreatePixmapFromData, int, (Display *display,
++ Drawable d,
++ char **data,
++ Pixmap *pixmap_return,
++ Pixmap *shapemask_return,
++ XpmAttributes *attributes));
++
++ FUNC(XpmCreateDataFromPixmap, int, (Display *display,
++ char ***data_return,
++ Pixmap pixmap,
++ Pixmap shapemask,
++ XpmAttributes *attributes));
++
++ FUNC(XpmReadFileToPixmap, int, (Display *display,
++ Drawable d,
++ char *filename,
++ Pixmap *pixmap_return,
++ Pixmap *shapemask_return,
++ XpmAttributes *attributes));
++
++ FUNC(XpmWriteFileFromPixmap, int, (Display *display,
++ char *filename,
++ Pixmap pixmap,
++ Pixmap shapemask,
++ XpmAttributes *attributes));
++ #endif
++
++ FUNC(XpmCreateImageFromData, int, (Display *display,
++ char **data,
++ XImage **image_return,
++ XImage **shapemask_return,
++ XpmAttributes *attributes));
++
++ FUNC(XpmCreateDataFromImage, int, (Display *display,
++ char ***data_return,
++ XImage *image,
++ XImage *shapeimage,
++ XpmAttributes *attributes));
++
++ FUNC(XpmReadFileToImage, int, (Display *display,
++ char *filename,
++ XImage **image_return,
++ XImage **shapeimage_return,
++ XpmAttributes *attributes));
++
++ FUNC(XpmWriteFileFromImage, int, (Display *display,
++ char *filename,
++ XImage *image,
++ XImage *shapeimage,
++ XpmAttributes *attributes));
++
++ FUNC(XpmCreateImageFromBuffer, int, (Display *display,
++ char *buffer,
++ XImage **image_return,
++ XImage **shapemask_return,
++ XpmAttributes *attributes));
++ #if !defined(FOR_MSW) && !defined(AMIGA)
++ FUNC(XpmCreatePixmapFromBuffer, int, (Display *display,
++ Drawable d,
++ char *buffer,
++ Pixmap *pixmap_return,
++ Pixmap *shapemask_return,
++ XpmAttributes *attributes));
++
++ FUNC(XpmCreateBufferFromImage, int, (Display *display,
++ char **buffer_return,
++ XImage *image,
++ XImage *shapeimage,
++ XpmAttributes *attributes));
++
++ FUNC(XpmCreateBufferFromPixmap, int, (Display *display,
++ char **buffer_return,
++ Pixmap pixmap,
++ Pixmap shapemask,
++ XpmAttributes *attributes));
++ #endif
++ FUNC(XpmReadFileToBuffer, int, (char *filename, char **buffer_return));
++ FUNC(XpmWriteFileFromBuffer, int, (char *filename, char *buffer));
++
++ FUNC(XpmReadFileToData, int, (char *filename, char ***data_return));
++ FUNC(XpmWriteFileFromData, int, (char *filename, char **data));
++
++ FUNC(XpmAttributesSize, int, ());
++ FUNC(XpmFreeAttributes, void, (XpmAttributes *attributes));
++ FUNC(XpmFreeExtensions, void, (XpmExtension *extensions,
++ int nextensions));
++
++ FUNC(XpmFreeXpmImage, void, (XpmImage *image));
++ FUNC(XpmFreeXpmInfo, void, (XpmInfo *info));
++ FUNC(XpmGetErrorString, char *, (int errcode));
++ FUNC(XpmLibraryVersion, int, ());
++
++ /* XpmImage functions */
++ FUNC(XpmReadFileToXpmImage, int, (char *filename,
++ XpmImage *image,
++ XpmInfo *info));
++
++ FUNC(XpmWriteFileFromXpmImage, int, (char *filename,
++ XpmImage *image,
++ XpmInfo *info));
++ #if !defined(FOR_MSW) && !defined(AMIGA)
++ FUNC(XpmCreatePixmapFromXpmImage, int, (Display *display,
++ Drawable d,
++ XpmImage *image,
++ Pixmap *pixmap_return,
++ Pixmap *shapemask_return,
++ XpmAttributes *attributes));
++ #endif
++ FUNC(XpmCreateImageFromXpmImage, int, (Display *display,
++ XpmImage *image,
++ XImage **image_return,
++ XImage **shapeimage_return,
++ XpmAttributes *attributes));
++
++ FUNC(XpmCreateXpmImageFromImage, int, (Display *display,
++ XImage *image,
++ XImage *shapeimage,
++ XpmImage *xpmimage,
++ XpmAttributes *attributes));
++ #if !defined(FOR_MSW) && !defined(AMIGA)
++ FUNC(XpmCreateXpmImageFromPixmap, int, (Display *display,
++ Pixmap pixmap,
++ Pixmap shapemask,
++ XpmImage *xpmimage,
++ XpmAttributes *attributes));
++ #endif
++ FUNC(XpmCreateDataFromXpmImage, int, (char ***data_return,
++ XpmImage *image,
++ XpmInfo *info));
++
++ FUNC(XpmCreateXpmImageFromData, int, (char **data,
++ XpmImage *image,
++ XpmInfo *info));
++
++ FUNC(XpmCreateXpmImageFromBuffer, int, (char *buffer,
++ XpmImage *image,
++ XpmInfo *info));
++
++ FUNC(XpmCreateBufferFromXpmImage, int, (char **buffer_return,
++ XpmImage *image,
++ XpmInfo *info));
++
++ FUNC(XpmGetParseError, int, (char *filename,
++ int *linenum_return,
++ int *charnum_return));
++
++ FUNC(XpmFree, void, (void *ptr));
++
++ #ifdef __cplusplus
++ } /* for C++ V2.0 */
++ #endif
++
++
++ /* backward compatibility */
++
++ /* for version 3.0c */
++ #define XpmPixmapColorError XpmColorError
++ #define XpmPixmapSuccess XpmSuccess
++ #define XpmPixmapOpenFailed XpmOpenFailed
++ #define XpmPixmapFileInvalid XpmFileInvalid
++ #define XpmPixmapNoMemory XpmNoMemory
++ #define XpmPixmapColorFailed XpmColorFailed
++
++ #define XpmReadPixmapFile(dpy, d, file, pix, mask, att) \
++ XpmReadFileToPixmap(dpy, d, file, pix, mask, att)
++ #define XpmWritePixmapFile(dpy, file, pix, mask, att) \
++ XpmWriteFileFromPixmap(dpy, file, pix, mask, att)
++
++ /* for version 3.0b */
++ #define PixmapColorError XpmColorError
++ #define PixmapSuccess XpmSuccess
++ #define PixmapOpenFailed XpmOpenFailed
++ #define PixmapFileInvalid XpmFileInvalid
++ #define PixmapNoMemory XpmNoMemory
++ #define PixmapColorFailed XpmColorFailed
++
++ #define ColorSymbol XpmColorSymbol
++
++ #define XReadPixmapFile(dpy, d, file, pix, mask, att) \
++ XpmReadFileToPixmap(dpy, d, file, pix, mask, att)
++ #define XWritePixmapFile(dpy, file, pix, mask, att) \
++ XpmWriteFileFromPixmap(dpy, file, pix, mask, att)
++ #define XCreatePixmapFromData(dpy, d, data, pix, mask, att) \
++ XpmCreatePixmapFromData(dpy, d, data, pix, mask, att)
++ #define XCreateDataFromPixmap(dpy, data, pix, mask, att) \
++ XpmCreateDataFromPixmap(dpy, data, pix, mask, att)
++
++ #endif /* XPM_NUMBERS */
++ #endif
+*** ../vim-7.3.638/src/Make_mvc.mak 2012-08-02 21:48:20.000000000 +0200
+--- src/Make_mvc.mak 2012-08-29 13:46:05.000000000 +0200
+***************
+*** 89,94 ****
+--- 89,96 ----
+ # Netbeans Support: NETBEANS=[yes or no] (default is yes if GUI is yes)
+ #
+ # XPM Image Support: XPM=[path to XPM directory]
++ # Default is "xpm", using the files included in the distribution.
++ # Use "no" to disable this feature.
+ #
+ # Optimization: OPTIMIZE=[SPACE, SPEED, MAXSPEED] (default is MAXSPEED)
+ #
+***************
+*** 279,295 ****
+ NETBEANS_LIB = WSock32.lib
+ !endif
+
+! !ifdef XPM
+ # XPM - Include support for XPM signs
+! # You need to download or build xpm.lib somehow.
+! # You can get the most recent version of libXpm-*.zip from
+! # http://cgit.freedesktop.org/xorg/lib/libXpm
+! # from which you must build xpm.lib yourself
+! # OR get and unpack: ftp://ftp.vim.org/pub/vim/pcextra/xpm.zip
+ XPM_OBJ = $(OBJDIR)/xpm_w32.obj
+ XPM_DEFS = -DFEAT_XPM_W32
+ XPM_LIB = $(XPM)\lib\libXpm.lib
+! XPM_INC = -I $(XPM)\include
+ !endif
+ !endif
+
+--- 281,301 ----
+ NETBEANS_LIB = WSock32.lib
+ !endif
+
+! !ifndef XPM
+! # XPM is not set, use the included xpm files, depending on the architecture.
+! !if ("$(CPU)" == "AMD64") || ("$(CPU)" == "IA64")
+! XPM = xpm\x64
+! !else
+! XPM = xpm\x86
+! !endif
+! !endif
+! !if "$(XPM)" != "no"
+ # XPM - Include support for XPM signs
+! # See the xpm directory for more information.
+ XPM_OBJ = $(OBJDIR)/xpm_w32.obj
+ XPM_DEFS = -DFEAT_XPM_W32
+ XPM_LIB = $(XPM)\lib\libXpm.lib
+! XPM_INC = -I $(XPM)\include -I $(XPM)\..\include
+ !endif
+ !endif
+
+*** ../vim-7.3.638/src/bigvim.bat 2010-08-15 21:57:29.000000000 +0200
+--- src/bigvim.bat 2012-08-29 13:46:18.000000000 +0200
+***************
+*** 1,3 ****
+ :: command to build big Vim with OLE, Perl, Python, Ruby and Tcl
+! nmake -f Make_mvc.mak GUI=yes OLE=yes PERL=E:\perl512 DYNAMIC_PERL=yes PERL_VER=512 PYTHON=e:\python27 DYNAMIC_PYTHON=yes PYTHON_VER=27 PYTHON3=e:\python31 DYNAMIC_PYTHON3=yes PYTHON3_VER=31 RUBY=e:\ruby191 DYNAMIC_RUBY=yes RUBY_VER=191 RUBY_VER_LONG=1.9.1 TCL=e:\tcl DYNAMIC_TCL=yes %1 IME=yes CSCOPE=yes XPM=e:\xpm
+
+--- 1,5 ----
+ :: command to build big Vim with OLE, Perl, Python, Ruby and Tcl
+! SET VCDIR="C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\bin\"
+! SET TOOLDIR=E:\
+! %VCDIR%nmake -f Make_mvc.mak GUI=yes OLE=yes PERL=E:\perl514 DYNAMIC_PERL=yes PERL_VER=514 PYTHON=%TOOLDIR%python27 DYNAMIC_PYTHON=yes PYTHON_VER=27 PYTHON3=%TOOLDIR%python32 DYNAMIC_PYTHON3=yes PYTHON3_VER=32 RUBY=%TOOLDIR%ruby192 DYNAMIC_RUBY=yes RUBY_VER=192 RUBY_VER_LONG=1.9.2 TCL=%TOOLDIR%tcl TCL_VER=85 TCL_VER_LONG=8.5 DYNAMIC_TCL=yes %1 IME=yes CSCOPE=yes
+
+*** ../vim-7.3.638/src/bigvim64.bat 2012-08-29 14:16:38.000000000 +0200
+--- src/bigvim64.bat 2012-08-29 13:46:35.000000000 +0200
+***************
+*** 0 ****
+--- 1,6 ----
++ :: command to build big Vim 64 bit with OLE, Perl, Python, Ruby and Tcl
++ :: First run: %VCDIR%\vcvarsall.bat x86_amd64
++ SET VCDIR="C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\"
++ SET TOOLDIR=E:\
++ %VCDIR%\bin\nmake -f Make_mvc.mak CPU=AMD64 GUI=yes OLE=yes PERL=E:\perl514 DYNAMIC_PERL=yes PERL_VER=514 PYTHON=%TOOLDIR%python27 DYNAMIC_PYTHON=yes PYTHON_VER=27 PYTHON3=%TOOLDIR%python32 DYNAMIC_PYTHON3=yes PYTHON3_VER=32 RUBY=%TOOLDIR%ruby192 DYNAMIC_RUBY=yes RUBY_VER=192 RUBY_VER_LONG=1.9.2 TCL=%TOOLDIR%tcl TCL_VER=85 TCL_VER_LONG=8.5 DYNAMIC_TCL=yes %1 IME=yes CSCOPE=yes
++
+*** ../vim-7.3.638/Filelist 2012-07-16 17:27:57.000000000 +0200
+--- Filelist 2012-08-29 13:53:52.000000000 +0200
+***************
+*** 349,354 ****
+--- 349,360 ----
+ src/vim*.ico \
+ src/vim.tlb \
+ src/vimtbar.lib \
++ src/xpm/COPYRIGHT \
++ src/xpm/README.txt \
++ src/xpm/include/*.h \
++ src/xpm/x64/lib/libXpm.lib \
++ src/xpm/x86/lib/libXpm.a \
++ src/xpm/x86/lib/libXpm.lib \
+ src/vimtbar.dll \
+ nsis/icons/*.bmp \
+ nsis/icons/*.ico \
+*** ../vim-7.3.638/src/version.c 2012-08-29 14:17:51.000000000 +0200
+--- src/version.c 2012-08-29 14:14:19.000000000 +0200
+***************
+*** 721,722 ****
+--- 721,724 ----
+ { /* Add new patch number below this line */
++ /**/
++ 639,
+ /**/
+
+--
+A successful man is one who makes more money than his wife can spend.
+A successful woman is one who can find such a man.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.640 b/source/ap/vim/patches/7.3.640
new file mode 100644
index 000000000..984df6400
--- /dev/null
+++ b/source/ap/vim/patches/7.3.640
Binary files differ
diff --git a/source/ap/vim/patches/7.3.641 b/source/ap/vim/patches/7.3.641
new file mode 100644
index 000000000..daacdb4ff
--- /dev/null
+++ b/source/ap/vim/patches/7.3.641
@@ -0,0 +1,68 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.641
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.641
+Problem: ":mkview" uses ":normal" instead of ":normal!" for folds. (Dan)
+Solution: Add the bang. (Christian Brabandt)
+Files: src/fold.c
+
+
+*** ../vim-7.3.640/src/fold.c 2012-08-08 18:01:00.000000000 +0200
+--- src/fold.c 2012-08-29 15:17:39.000000000 +0200
+***************
+*** 3373,3379 ****
+ /* open nested folds while this fold is open */
+ if (fprintf(fd, "%ld", fp->fd_top + off) < 0
+ || put_eol(fd) == FAIL
+! || put_line(fd, "normal zo") == FAIL)
+ return FAIL;
+ if (put_foldopen_recurse(fd, wp, &fp->fd_nested,
+ off + fp->fd_top)
+--- 3373,3379 ----
+ /* open nested folds while this fold is open */
+ if (fprintf(fd, "%ld", fp->fd_top + off) < 0
+ || put_eol(fd) == FAIL
+! || put_line(fd, "normal! zo") == FAIL)
+ return FAIL;
+ if (put_foldopen_recurse(fd, wp, &fp->fd_nested,
+ off + fp->fd_top)
+***************
+*** 3417,3423 ****
+ {
+ if (fprintf(fd, "%ld", fp->fd_top + off) < 0
+ || put_eol(fd) == FAIL
+! || fprintf(fd, "normal z%c",
+ fp->fd_flags == FD_CLOSED ? 'c' : 'o') < 0
+ || put_eol(fd) == FAIL)
+ return FAIL;
+--- 3417,3423 ----
+ {
+ if (fprintf(fd, "%ld", fp->fd_top + off) < 0
+ || put_eol(fd) == FAIL
+! || fprintf(fd, "normal! z%c",
+ fp->fd_flags == FD_CLOSED ? 'c' : 'o') < 0
+ || put_eol(fd) == FAIL)
+ return FAIL;
+*** ../vim-7.3.640/src/version.c 2012-08-29 14:23:06.000000000 +0200
+--- src/version.c 2012-08-29 15:18:26.000000000 +0200
+***************
+*** 721,722 ****
+--- 721,724 ----
+ { /* Add new patch number below this line */
++ /**/
++ 641,
+ /**/
+
+--
+You cannot propel yourself forward by patting yourself on the back.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.642 b/source/ap/vim/patches/7.3.642
new file mode 100644
index 000000000..ddc40321f
--- /dev/null
+++ b/source/ap/vim/patches/7.3.642
@@ -0,0 +1,55 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.642
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.642
+Problem: Segfault with specific autocommands. Was OK after 7.3.449 and
+ before 7.3.545. (Richard Brown)
+Solution: Pass TRUE for abort_if_last in the call to close_buffer().
+ (Christian Brabandt)
+Files: src/window.c
+
+
+*** ../vim-7.3.641/src/window.c 2012-07-19 18:05:40.000000000 +0200
+--- src/window.c 2012-08-29 15:42:15.000000000 +0200
+***************
+*** 2269,2275 ****
+ #ifdef FEAT_AUTOCMD
+ win->w_closing = TRUE;
+ #endif
+! close_buffer(win, win->w_buffer, free_buf ? DOBUF_UNLOAD : 0, FALSE);
+ #ifdef FEAT_AUTOCMD
+ if (win_valid(win))
+ win->w_closing = FALSE;
+--- 2269,2275 ----
+ #ifdef FEAT_AUTOCMD
+ win->w_closing = TRUE;
+ #endif
+! close_buffer(win, win->w_buffer, free_buf ? DOBUF_UNLOAD : 0, TRUE);
+ #ifdef FEAT_AUTOCMD
+ if (win_valid(win))
+ win->w_closing = FALSE;
+*** ../vim-7.3.641/src/version.c 2012-08-29 15:22:14.000000000 +0200
+--- src/version.c 2012-08-29 15:49:52.000000000 +0200
+***************
+*** 721,722 ****
+--- 721,724 ----
+ { /* Add new patch number below this line */
++ /**/
++ 642,
+ /**/
+
+--
+The psychic said, "God bless you." I said, "I didn't sneeze." She
+looked deep into my eyes and said, "You will, eventually." And, damn
+if she wasn't right. Two days later, I sneezed. --Ellen Degeneres
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.643 b/source/ap/vim/patches/7.3.643
new file mode 100644
index 000000000..c2f700c58
--- /dev/null
+++ b/source/ap/vim/patches/7.3.643
@@ -0,0 +1,73 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.643
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.643 (after 7.3.635)
+Problem: MS-Windows: When starting gvim maximized 'lines' and 'columns' are
+ wrong. (Christian Robinson)
+Solution: Move the check for gui.starting from ui_get_shellsize() to
+ check_shellsize().
+Files: src/ui.c, src/term.c
+
+
+*** ../vim-7.3.642/src/ui.c 2012-08-23 13:28:50.000000000 +0200
+--- src/ui.c 2012-08-29 16:20:04.000000000 +0200
+***************
+*** 298,306 ****
+ int retval;
+
+ #ifdef FEAT_GUI
+- if (gui.starting)
+- /* possibly a system call during startup, check later */
+- return OK;
+ if (gui.in_use)
+ retval = gui_get_shellsize();
+ else
+--- 298,303 ----
+*** ../vim-7.3.642/src/term.c 2012-08-15 16:20:59.000000000 +0200
+--- src/term.c 2012-08-29 16:22:25.000000000 +0200
+***************
+*** 3006,3012 ****
+ int old_Rows = Rows;
+ int old_Columns = Columns;
+
+! if (!exiting)
+ {
+ (void)ui_get_shellsize();
+ check_shellsize();
+--- 3006,3018 ----
+ int old_Rows = Rows;
+ int old_Columns = Columns;
+
+! if (!exiting
+! #ifdef FEAT_GUI
+! /* Do not get the size when executing a shell command during
+! * startup. */
+! && !gui.starting
+! #endif
+! )
+ {
+ (void)ui_get_shellsize();
+ check_shellsize();
+*** ../vim-7.3.642/src/version.c 2012-08-29 15:50:22.000000000 +0200
+--- src/version.c 2012-08-29 16:25:42.000000000 +0200
+***************
+*** 721,722 ****
+--- 721,724 ----
+ { /* Add new patch number below this line */
++ /**/
++ 643,
+ /**/
+
+--
+Eight Megabytes And Continually Swapping.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.644 b/source/ap/vim/patches/7.3.644
new file mode 100644
index 000000000..6f2630cc4
--- /dev/null
+++ b/source/ap/vim/patches/7.3.644
@@ -0,0 +1,72 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.644
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.644
+Problem: Dead code for BeOS GUI.
+Solution: Remove unused __BEOS__ stuff.
+Files: src/gui.c
+
+
+*** ../vim-7.3.643/src/gui.c 2012-07-10 16:49:08.000000000 +0200
+--- src/gui.c 2012-08-29 16:28:46.000000000 +0200
+***************
+*** 37,44 ****
+ static void gui_set_bg_color __ARGS((char_u *name));
+ static win_T *xy2win __ARGS((int x, int y));
+
+! #if defined(UNIX) && !defined(__BEOS__) && !defined(MACOS_X) \
+! && !defined(__APPLE__)
+ # define MAY_FORK
+ static void gui_do_fork __ARGS((void));
+
+--- 37,43 ----
+ static void gui_set_bg_color __ARGS((char_u *name));
+ static win_T *xy2win __ARGS((int x, int y));
+
+! #if defined(UNIX) && !defined(MACOS_X) && !defined(__APPLE__)
+ # define MAY_FORK
+ static void gui_do_fork __ARGS((void));
+
+***************
+*** 784,794 ****
+ gui_exit(rc)
+ int rc;
+ {
+- #ifndef __BEOS__
+ /* don't free the fonts, it leads to a BUS error
+ * richard@whitequeen.com Jul 99 */
+ free_highlight_fonts();
+- #endif
+ gui.in_use = FALSE;
+ gui_mch_exit(rc);
+ }
+--- 783,791 ----
+*** ../vim-7.3.643/src/version.c 2012-08-29 16:26:01.000000000 +0200
+--- src/version.c 2012-08-29 16:33:30.000000000 +0200
+***************
+*** 721,722 ****
+--- 721,724 ----
+ { /* Add new patch number below this line */
++ /**/
++ 644,
+ /**/
+
+--
+E M A C S
+s e l o h
+c t t n i
+a a t f
+p r t
+e o
+ l
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/source/ap/vim/patches/7.3.645 b/source/ap/vim/patches/7.3.645
new file mode 100644
index 000000000..40d8ee0b8
--- /dev/null
+++ b/source/ap/vim/patches/7.3.645
@@ -0,0 +1,118 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.645
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.645
+Problem: No tests for patch 7.3.625 and 7.3.637.
+Solution: Add more tests for the "gn" command and try/catch. (Christian
+ Brabandt)
+Files: src/testdir/test53.in, src/testdir/test53.ok,
+ src/testdir/test55.in, src/testdir/test55.ok
+
+
+*** ../vim-7.3.644/src/testdir/test53.in 2012-07-25 15:06:20.000000000 +0200
+--- src/testdir/test53.in 2012-08-29 16:37:44.000000000 +0200
+***************
+*** 34,40 ****
+ gnd
+ /[a]bcdx
+ :1
+! 2gnd
+ :/^start:/,/^end:/wq! test.out
+ ENDTEST
+
+--- 34,46 ----
+ gnd
+ /[a]bcdx
+ :1
+! 2gnd/join
+! /$
+! 0gnd
+! /\>\zs
+! 0gnd/^
+! gnd$h/\zs
+! gnd
+ :/^start:/,/^end:/wq! test.out
+ ENDTEST
+
+***************
+*** 57,60 ****
+--- 63,70 ----
+ one
+ two
+ abcdx | abcdx | abcdx
++ join
++ lines
++ zero width pattern
++ delete first and last chars
+ end:
+*** ../vim-7.3.644/src/testdir/test53.ok 2012-07-25 15:06:20.000000000 +0200
+--- src/testdir/test53.ok 2012-08-29 16:37:48.000000000 +0200
+***************
+*** 21,24 ****
+--- 21,27 ----
+ SEARCH:
+ searchmatch
+ abcdx | | abcdx
++ join lines
++ zerowidth pattern
++ elete first and last char
+ end:
+*** ../vim-7.3.644/src/testdir/test55.in 2012-05-18 12:06:58.000000000 +0200
+--- src/testdir/test55.in 2012-08-29 16:50:51.000000000 +0200
+***************
+*** 378,383 ****
+--- 378,393 ----
+ :unlet dict
+ :call garbagecollect(1)
+ :"
++ :" test for patch 7.3.637
++ :let a = 'No error caught'
++ :try|foldopen|catch|let a = matchstr(v:exception,'^[^ ]*')|endtry
++ o=a :"
++ :lang C
++ :redir => a
++ :try|foobar|catch|let a = matchstr(v:exception,'^[^ ]*')|endtry
++ :redir END
++ o=a :"
++ :"
+ :/^start:/,$wq! test.out
+ ENDTEST
+
+*** ../vim-7.3.644/src/testdir/test55.ok 2012-05-18 12:06:58.000000000 +0200
+--- src/testdir/test55.ok 2012-08-29 16:51:15.000000000 +0200
+***************
+*** 115,117 ****
+--- 115,123 ----
+ {'a': {'b': 'B'}}
+ Vim(call):E737: a
+ {'a': {'b': 'B'}}
++ Vim(foldopen):E490:
++
++
++ Error detected while processing :
++ E492: Not an editor command: foobar|catch|let a = matchstr(v:exception,'^[^ ]*')|endtry
++
+*** ../vim-7.3.644/src/version.c 2012-08-29 16:34:23.000000000 +0200
+--- src/version.c 2012-08-29 16:37:20.000000000 +0200
+***************
+*** 721,722 ****
+--- 721,724 ----
+ { /* Add new patch number below this line */
++ /**/
++ 645,
+ /**/
+
+--
+TALL KNIGHT OF NI: Ni!
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///