Commits

khorser committed 2bc3d83 Merge

update to 7.3.715

  • Participants
  • Parent commits da53b57, c53344b

Comments (0)

Files changed (421)

 *.suo
 *.res
 *.RES
+src/if_perl.c
 src/pathdef.c
 src/Obj*/pathdef.c
 gvimext.dll
 *.mo
 *.swp
 *~
+src/po/vim.pot
 
 # Generated by "make test"
 src/po/*.ck 
 src/testdir/mbyte.vim 
 src/testdir/mzscheme.vim 
+src/testdir/lua.vim 
 src/testdir/small.vim 
 src/testdir/tiny.vim 
 src/testdir/test*.out
 214c7ec1c8f995664d5684da8cbeaaa86850468f v7-3-492
 bf5960ec253293b7240f59a7682f2e862dacd205 v7-3-493
 5240610f277823478983e3f04abfbed4e85141cf v7-3-494
+27f6a22ff88eea07f24163fe470b7335f3c1b32b v7-3-495
+3daba355b0c15ef66a9d2810ae7c7cc534dccf62 v7-3-496
+e34c620007be9fd805556c43fe848de521f3b64c v7-3-497
+b1a42d2522fb4ff627a0c381e994e2a598f7bbbb v7-3-498
+4a2cb025b6417b00f2ced076eb79739e03acd7d4 v7-3-499
+b36640b2f671c006fe26b573fd42347227efbfa8 v7-3-500
+d7b335626ddc7a61667cb3e23ecadfe399b676fb v7-3-501
+1d1cce57421c78884cff2d3234d3759bc858d6fb v7-3-502
+65d036fd449e488303e78d2c6679a736551c39a6 v7-3-503
+17bfcb054cb770ac685acaa349165f210bdd36ca v7-3-504
+fe7bf24804e195209bef4cd008f0bac7eec7fc60 v7-3-505
+982f84487daf102f1203977a09f2c6c76d1ed3d5 v7-3-506
+f9a865d97614940f817b76642282d966781296e5 v7-3-507
+2722f11ddc998ac7c578c68c0248b58468179418 v7-3-508
+8101253704f6504bed3f0209e9a6fcae3966c6e7 v7-3-509
+53786601213cd9f86db8714f7b0e077b05e2704f v7-3-510
+b782e2f9e6892116ae5d068249b5198bbe0042c6 v7-3-511
+454646820185cbe13e1f2e4f7533b984d3b07b18 v7-3-512
+75037f9bc97ad76bca58dbbc0ddac69cc7f5d9ac v7-3-513
+7e4428115d2cea86fcfa980097c98c11380ae196 v7-3-514
+6c318419e3310fb9658ee6ead6b4ea33def8cb6d v7-3-515
+02440d1fcc9aa953ebb7c0719405ccf2525f2777 v7-3-516
+9a1dba1f969ac4cb2477626cd79a7a6b0bea1894 v7-3-517
+ec4ab9d832b0f5308c861423d99253fa496b3a3b v7-3-518
+ebec52bc2800b8e51e522425fdca5c252e6d4f8e v7-3-519
+7bafe52b6245761a242321352daca224e6b9df78 v7-3-520
+b14842cf382bd3f99ca090c985609c6dead5f9e0 v7-3-521
+e4899d2ff5d8e552ace52b7eafe02b2c5dcdb409 v7-3-522
+d8ce4a2eb44e3e3d56db5e26d9982aeb48d7814b v7-3-523
+ae1641c4fbcc8c25d27802d6048cb0767c4021d1 v7-3-524
+ac2e00f917df566b81b9e33891b102cba5b390e0 v7-3-525
+257c2878e0fcabd5504dcfed910287374405440a v7-3-526
+a17918b76ca1296f63db0e81dea0e37b8b880150 v7-3-527
+fa17c8646feb4719639150f1c301ce6c1557afb7 v7-3-528
+d83218a156dd8258a5f2f3ae019c56f3e8851d48 v7-3-529
+81d5f3a3e27fff9188ae34c41b939fc88c9837de v7-3-530
+c44f0f7424b98d321d90994198374628911623ce v7-3-531
+9755d151c7492a5f1d0e77a2d3c9e414f20f3b4e v7-3-532
+74d51b51f3e69df7d3295255ee10391b3409055b v7-3-533
+65f905eb14cd373e205ff4c8a53027514e96d819 v7-3-534
+f52d2ea0f81c20e6f026d74cec66b135d5470d2d v7-3-535
+a8897fd5d074d7baaba692013521304b13beb784 v7-3-536
+96715c3a905faa1bbdc50b16b0f57671b4758e0c v7-3-537
+bbf1fbbe4ab45442f8876790004805503e25f563 v7-3-538
+7a710cf51d73cb3c3c76fcea34ee706443800c54 v7-3-539
+af083cb521bcb69aae315654a3873c488dc58c43 v7-3-540
+5c1aaf9b4b1bc2d14d627fe22d414f3a2525c50b v7-3-541
+8d1b63e6d3173625324f4adfe733efc8091f9422 v7-3-542
+ce7bd50bafa74f4da979f27c4e5fa9a47e69d739 v7-3-543
+09d0bda69df0c5eb505a02e37a978e92fbc89332 v7-3-544
+e7ff3251dfa157284a48c5322783499d079e3eb0 v7-3-545
+0a364618c0e59fa777f526c99bee608bb5cf55ce v7-3-546
+4f4db5d661c4fae42f2d917c09549d58a2f4d05f v7-3-547
+8625e38066dbf6a4d5e2563fbe191c3910681d2e v7-3-548
+c0c935956ac3b7c706043e5c7c0ba840636fb10f v7-3-549
+297771eff080ed3bcfb2ade57c2dcab34bac5de8 v7-3-550
+e83c5dcea112a44f9a7b06042b52798e32d96541 v7-3-551
+443c50cd3e8811b58a4ca131ab21abd18aea9489 v7-3-552
+583e46e4a56c40fa1a7336be85eaec93f6800edf v7-3-553
+a967a979c37f458bd4d164afb8a6192a5b4a6fde v7-3-554
+8fb7bd9dfb2b26b43725c90e042d2089762466a6 v7-3-555
+b8924014a03991b79947d735a894e2c2e8f94980 v7-3-556
+a220dd97b5c7218558eaea27d301af2ed4f9ec2d v7-3-557
+34724dc5172bb81a9e670c5bd23edbe6a124fd28 v7-3-558
+74adc9f7e15b8c088abd04de35615cad6c83a811 v7-3-559
+0abd38ba64557c4a6d62575aaa3fc7ab6482d747 v7-3-560
+a1de7928a7aba45240c85a2bc8d70adadc49e4dc v7-3-561
+b2763055bdf26e1f11bf8cfb0601fefbefb34e0d v7-3-562
+02c86cdcf9a23f092400c7631e5906cb9053703b v7-3-563
+683de93060968ed4e9dfb7992910c75f479471ec v7-3-564
+5f811338b1186e1aef683d03fa05a8026d30e9f1 v7-3-565
+18c6b1752d0baab043792d3f6267ec393f7a11e1 v7-3-566
+f90bb88c261582fef85c16009f19168b38debd74 v7-3-567
+3b5f541269e2d9e57b82ea1ec89c6747e2003434 v7-3-568
+c052f3b79b9948e7072580e7db42f90c92eb40af v7-3-569
+4f1c511e71f851c4f1c14e950f95ebd6967c6ed1 v7-3-570
+43fd3896fab7be5ad01deed2960d37d91ba65691 v7-3-571
+3ae387af405f46e200fdf9bc204d0a251864abb9 v7-3-572
+802b1a1b275f5c8f95724d50d53642f221621d79 v7-3-573
+3ac005f02cf015b3aa246482c6331bd61c08d91a v7-3-574
+79ae10bd056520fb6367247804af22e52d2de8b8 v7-3-575
+7e3fedfc3d08d020e3ce047ec1a1cfd195af9ed7 v7-3-576
+286ba0251c0aff1a664a481846c1f4107fae0c11 v7-3-577
+0e9b2622c94a8edf906d6c44831c1cded7184d13 v7-3-578
+80ed6aa7b9eb18058a0b105af2ecd7b213891be2 v7-3-579
+f02b6ad168ae82ead0286b64627762ab2343ee96 v7-3-580
+96249a1803e28e6173faed53f8687334aa63360c v7-3-581
+d383bc2ba8112103389a44c2c747eaa1016da935 v7-3-582
+a69b1d711ff9d8b227acff694c53310cf237933f v7-3-583
+2d107086903af80afee524549e57d3ba016b3f12 v7-3-584
+d258a0c5c38a6a604b983b6499a0f02bc061c816 v7-3-585
+8393a16069fb5f7b22ab766167b698e4dc129911 v7-3-586
+a34fb0a077c9c26946727a25222e0a99dc08db0d v7-3-587
+e92cc285632dc29d932061970e43b53cdbb3460d v7-3-588
+e82937b753a8ca6705bf55dbf258f077746ec428 v7-3-589
+bdf7f3e4c763f2a038c397af8eb6b8950e58db6b v7-3-590
+e5b925ae56e36e86eb2ff059aa28d6a2dd332845 v7-3-591
+0e06193d4bd7be03924dd9c6251a64c6c6adf78d v7-3-592
+46896c29edd74418c665af7c1ed685aa52a41e1a v7-3-593
+5e7b500dbb7e9e964457d300b536aeba9771af6c v7-3-594
+928e7cef8836d13d4f2a17234e127b928ee63ff4 v7-3-595
+5aad2c444a00a2309e6e373b6bcb5441669ba126 v7-3-596
+b9aa7fb4a9281b87a651251f799e049409634757 v7-3-597
+f0747581607924c30530687fa88ebaa57602eb5f v7-3-598
+b06578f1390fea339a2d9d18e12758ec1dbcc279 v7-3-599
+8f98038a0bf34310a8224a569eacd539b7b8b649 v7-3-600
+c1780b4cb9955fc113c3c993c18c139e06425ef5 v7-3-601
+5cacdf56c94b6fa1992f7e9c07c95bfe52bcccec v7-3-602
+085f14642fe828b1cbae5706ca87f2932cebeb75 v7-3-603
+acd91c9741a6d0185b7c63db412888de4f904118 v7-3-604
+4873d9c4ad3b7214d3ea8af9712a87ff69948380 v7-3-605
+c612d154bcdd642e4097ae88526a81ed7868c184 v7-3-606
+002f2c5de317aaedb93bd2e506a295efe2d552ce v7-3-607
+d47e6222d1cde1caf08fa63104375f5750c25d90 v7-3-608
+d29aa05b7e311bc05491521f4059ca2b625c5550 v7-3-609
+9f48a54329975434d73ddfc19e33c343653d5c73 v7-3-610
+e13f2f3568e1e21fbd223a1c0627605e2b670c53 v7-3-611
+2b4b6185054ff05fb6ee3ab1bcde47409bf2ebe0 v7-3-612
+c03b6363492b26c02b4f8a725a91849a1a5cf548 v7-3-613
+2bb51730ef4bb0824658f7507edad165e194dd45 v7-3-614
+169ccc471a8a947c046b7ff41023b9045beb3496 v7-3-615
+baba6286c91e63dd42039206e3e0990fb0ac346f v7-3-616
+73db39ca1877a07008310a2ec98a2220e50c52f1 v7-3-617
+0b1cb3f839c48daaccbb3abcbd5f1c394c57cb10 v7-3-618
+27ecf0c87bd20140d9e85d4fd581332e0916191e v7-3-619
+a6ebae140d89f35876628cde44f0e7ee5a0ae1d2 v7-3-620
+ac13ea2b098d98e62408ec2d88026f690f68f940 v7-3-621
+52247eb615118965bb6a949307e9abfd378cd088 v7-3-622
+a46a101bfddd4fcf30759f3847fa1e18546907f4 v7-3-623
+06749e351b1c030acf50cf8c469f8973aff4a96a v7-3-624
+f43ffd820a46bf47b3e55b56d3e5334302383757 v7-3-625
+956b1ed19282518e0287891d4e7b2b8a3f850402 v7-3-626
+dc65e6429d2c1b79719455d7303f3f95c5897965 v7-3-627
+1ed93878d6e224d46a7c125a82e52338b9bf0f6b v7-3-628
+7de7ef01288db1abc944293a28aac13ddd87879e v7-3-629
+3416ac23d0758528919aaffbe02cecc6420b8aac v7-3-630
+99f076ca8d846d553aefd7e626ca938bcf93f259 v7-3-631
+44038a9777aaf0e6502e0eb57b8f7ccf31798ec4 v7-3-632
+ad5fbf3596e0a8ad15c260c5b529efc5ac689e13 v7-3-633
+b7eea24095073d55ac3c59664466b78a0525bebc v7-3-634
+f7f68f83fc335379bc9e3371c5118b8f81c8d5bc v7-3-635
+616bc1ad4f12be0ef37fe67d2f6ed7535f20e515 v7-3-636
+3b62d8f36cdf709d4e0575d63486ebe57ce7150c v7-3-637
+c0256c4bd91ed7b806aab002e4a45e440dd00343 v7-3-638
+1ec385a8faf4002fa300caf370ef2ac380d9702a v7-3-639
+c2c3577021ed4e354853d330e5fc60691d8750c5 v7-3-640
+c068389057c9a89fa351678b5f5776278971dabe v7-3-641
+79ac6744237ce5076a6d2e2b21198dfddc2cc9dd v7-3-642
+fdac34e3afa5f0dea26dba5e96932e3b9a0be50a v7-3-643
+fb7c028dcac7555fee78096813e3846d157cc91b v7-3-644
+1810ee914648ef3e16a8cf866299a32c4a9a00cb v7-3-645
+e70485d3f81df4d72cb40d6fa4ad4218cf1e8392 v7-3-646
+29fe4e5c1db17a62b16a95fdda84f08cd05c27b5 v7-3-647
+76c099d45772a233982c39a29510d89eaa4d5a1c v7-3-648
+063765c3cebbd6040dc091b8c1ba28739fef9118 v7-3-649
+a638ae0f1b0cc41d8d753d79503238f11215f3ea v7-3-650
+ece544e85821a6118da55dad1538ea4c3625bd1c v7-3-651
+5edf3c51aa93110e57fcd0428c30e5bed149df34 v7-3-652
+fd0c7452fa51118d8f6557b34b4cc96e830ef6c7 v7-3-653
+73557eda70271b49015265b7147562b63a7a094d v7-3-654
+0d3238b54963c4b1358a1f33221f75e067c1613f v7-3-655
+a2f61b2b8e770bb8d233ce50c8c7508508578a8b v7-3-656
+3958b0e672d676a310d756bff1b9c629a7b0142f v7-3-657
+15cdcb8ddcfb848c929cc37e239d5da8fe48a8d9 v7-3-658
+e75da4a3225d48e59ee321411134cf9999348b7d v7-3-659
+8fdadfccd184b7de73811a3a18dc8815b7eb3434 v7-3-660
+5e909c379a1e87491bfa95ba1a37b39d0725933b v7-3-661
+87afa95a2992a31b1937def0e1db4a193b0ab32f v7-3-662
+2a200527131fac8f50487790ec201badbccdaf0e v7-3-663
+f86619764a1e0338ef9e14c653a5909847304b8b v7-3-664
+35939e1e25ff5a3862b83248f8039971c81936d0 v7-3-665
+1e22adc6176ec07f52102f383a9c3c414d43f9c2 v7-3-666
+cd36c0fed43e63a94d6e87b5c5c0b4d95628da27 v7-3-667
+dde6d0216a08a5554f3c351e519134c386d14232 v7-3-668
+2b3b7b48370848149c8b831b2b7aee9b7f4f88bb v7-3-669
+2bf8c00741f7f07d9b58596764236a92eaeca862 v7-3-670
+530f5a9030315f984e096794938c61f9d3562e22 v7-3-671
+fd6ef931aa77239804860b74ed2362b29c1a6d4a v7-3-672
+ca1c025079b11c98363e11576d903af756a593fc v7-3-673
+4da6003f0f0eee0f3908f8627af6d13a94c10cc6 v7-3-674
+9963f7a9b41b555a0660288dd94df44b6dee7c2e v7-3-675
+5309996ddcedd7e2dcc8c46624348405290b8940 v7-3-676
+8115f449a574bc146f75449161f1757aaa5bbb66 v7-3-677
+de253f606048a2862a338190b071e5e3c7de7a41 v7-3-678
+dd0f25ede9a8322b5b638961835cc4743cd479a2 v7-3-679
+52acec46b75ecf24d044982d4cc067ef7890e7d6 v7-3-680
+a2fe24ec6a0d06d0af286b9fee9e307c33f27cca v7-3-681
+8eb5b61161b4c56b378ec829e360204102d22db4 v7-3-682
+0f5ee262963528ddccfa1f54b83696f939d21b53 v7-3-683
+1cc37b8cfaa1c670e442e2f9444feeb1820228bc v7-3-684
+34aa94a421b7a03a71013ddbb92937dbaf83b1aa v7-3-685
+ba9c9d0c4ff4cf56c3c5d2dec2da71decbbe9f6a v7-3-686
+0545dab1517f8ce2b8319c02572e4bb357567034 v7-3-687
+2696da84d37093da0dea419878e4241385eb515b v7-3-688
+3c072c1cb87372f3ebd345463abbc451e80143e2 v7-3-689
+caa0ca9ad06cb515b7e6d2e4410e03802b58e167 v7-3-690
+7f10daa706bb6ed0c39f1d2905cd78368a98d19f v7-3-691
+337a4368fd2b68b9822b94e595d77b4d6773bfa4 v7-3-692
+fd96b3cc88ed71d4c4d24c6ac67c9d3a68ae6e6b v7-3-693
+8235ccf121bb241f8105d0ba6e1c92e9f8b04555 v7-3-694
+cd6c420e31d6843fa1231e1cf7a3d9eff0ad4e07 v7-3-695
+447c688b82eb4a5eb7cd0e16521094b77160fd0f v7-3-696
+7c72b5f7ada1f4a028315aa50f8739e0e83c2e74 v7-3-697
+b5b892472ecb1a10cce1709e41700b264b6485d2 v7-3-698
+4ffb6f9b58e0b51923fe6a71e6af158b6e3f7864 v7-3-699
+c656847932d33b5d68394ae1ea3153dbdba4d3ff v7-3-700
+48af8656094539f8f71dc51e0a6aa14d48ddffd0 v7-3-701
+916b5c11a13e9978c85f9742546e70d614116883 v7-3-702
+f69321485951a3c9bd0e9e7484a1901b94cae726 v7-3-703
+be8ad9c9b973a4d87b9bcfee2b6a8de1f6d3e071 v7-3-704
+0aa74f2f50a8333fd5544f5d4b383132be41704c v7-3-705
+d0ae72c2f5f94e2483ab0979eec652b1289679a8 v7-3-706
+d24d309c365fc5c6a9324a6183d7b927d9f5132f v7-3-707
+64427849c1582299f2af389c6225eead529f0329 v7-3-708
+fb7dec372910b61478abdd7f79871724153ebfdd v7-3-709
+906eb5c0ef129b6876fa9c6c5a13e44807f7a503 v7-3-710
+2a7b2943be22c27edb3c0334423c1b17275f18fb v7-3-711
+557ef119999ea687ccb84eddca295755c24989da v7-3-712
+f15769bce0b811fc840fd455035270288e8d744d v7-3-713
+9ea14f097855e0929f86c86d405725717efb044d v7-3-714
+4f0ddf4137eeb08753f2593a32b42a1dcb1e6f4c v7-3-715
 		src/Make_mvc.mak \
 		src/Make_w16.mak \
 		src/bigvim.bat \
+		src/bigvim64.bat \
 		src/msvcsetup.bat \
 		src/msvc2008.bat \
 		src/msvc2010.bat \
 		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.a \
+		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 \
 		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 \
 
 # 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 \
 		runtime/tutor/Makefile \
 		runtime/tutor/tutor.utf-8 \
 		runtime/tutor/tutor.?? \
-		runtime/tutor/tutor.??.* \
+		runtime/tutor/tutor.??.utf-8 \
+		runtime/tutor/tutor.??.euc \
+		runtime/tutor/tutor.??.sjis \
+		runtime/tutor/tutor.??.iso9 \
+		runtime/tutor/tutor.??.big5 \
+		runtime/tutor/tutor.??.cp1250 \
+		runtime/tutor/tutor.??.cp1251 \
+		runtime/tutor/tutor.??.cp737 \
+		runtime/tutor/tutor.??_??.utf-8 \
 		runtime/tutor/tutor.bar \
-		runtime/tutor/tutor.bar.* \
+		runtime/tutor/tutor.bar.utf-8 \
 		runtime/spell/README.txt \
 		runtime/spell/??/*.diff \
 		runtime/spell/??/main.aap \

File runtime/autoload/ada.vim

 if version < 700
    finish
 endif 
+let s:keepcpo= &cpo
+set cpo&vim
 
 " Section: Constants {{{1
 "
 lockvar! g:ada#Keywords
 lockvar! g:ada#Ctags_Kinds
 
+let &cpo = s:keepcpo
+unlet s:keepcpo
+
 finish " 1}}}
 
 "------------------------------------------------------------------------------

File runtime/autoload/ccomplete.vim

 " Vim completion script
 " Language:	C
 " Maintainer:	Bram Moolenaar <Bram@vim.org>
-" Last Change:	2011 Dec 30
+" Last Change:	2012 Jun 20
 
 let s:cpo_save = &cpo
 set cpo&vim
   endif
   if !cached
     while 1
-      exe 'silent! ' . n . 'vimgrep /\t' . typename . '\(\t\|$\)/j ' . fnames
+      exe 'silent! keepj noautocmd ' . n . 'vimgrep /\t' . typename . '\(\t\|$\)/j ' . fnames
 
       let qflist = getqflist()
       if len(qflist) > 0 || match(typename, "::") < 0

File runtime/autoload/netrw.vim

 " netrw.vim: Handles file transfer and remote directory listing across
 "            AUTOLOAD SECTION
-" Date:		Apr 05, 2012
-" Version:	145
+" Date:		Oct 25, 2012
+" Version:	146
 " Maintainer:	Charles E Campbell, Jr <NdrOchip@ScampbellPfamily.AbizM-NOSPAM>
 " GetLatestVimScripts: 1075 1 :AutoInstall: netrw.vim
-" Copyright:    Copyright (C) 1999-2010 Charles E. Campbell, Jr. {{{1
+" Copyright:    Copyright (C) 1999-2012 Charles E. Campbell, Jr. {{{1
 "               Permission is hereby granted to use and distribute this code,
 "               with or without modifications, provided that this copyright
 "               notice is copied with it. Like anything else that's free,
 if &cp || exists("g:loaded_netrw")
   finish
 endif
-let g:loaded_netrw = "v145"
+let g:loaded_netrw = "v146"
 if v:version < 702
  echohl WarningMsg
  echo "***warning*** this version of netrw needs vim 7.2"
 "   0=note     = s:NOTE
 "   1=warning  = s:WARNING
 "   2=error    = s:ERROR
-"  Apr 05, 2012 : max errnum currently is 88
+"  Oct 24, 2012 : max errnum currently is 91
 fun! netrw#ErrorMsg(level,msg,errnum)
 "  call Dfunc("netrw#ErrorMsg(level=".a:level." msg<".a:msg."> errnum=".a:errnum.") g:netrw_use_errorwindow=".g:netrw_use_errorwindow)
 
   if a:level < g:netrw_errorlvl
-   call Dret("netrw#ErrorMsg : suppressing level=".a:level." since g;netrw_errorlvl=".g:netrw_errorlvl)
+"   call Dret("netrw#ErrorMsg : suppressing level=".a:level." since g;netrw_errorlvl=".g:netrw_errorlvl)
    return
   endif
 
 " Cygwin Detection ------- {{{3
 if !exists("g:netrw_cygwin")
  if has("win32") || has("win95") || has("win64") || has("win16")
-  if &shell =~ '\%(\<bash\>\|\<zsh\>\)\%(\.exe\)\=$'
+  if  has("win32unix") && &shell =~ '\%(\<bash\>\|\<zsh\>\)\%(\.exe\)\=$'
    let g:netrw_cygwin= 1
   else
    let g:netrw_cygwin= 0
  let g:netrw_localcopycmd= g:netrw_local_copycmd"
  call netrw#ErrorMsg(s:NOTE,"g:netrw_local_copycmd is deprecated in favor of g:netrw_localcopycmd",84)
 endif
+if !exists("g:netrw_localcmdshell")
+ let g:netrw_localcmdshell= ""
+endif
 if !exists("g:netrw_localcopycmd")
  if has("win32") || has("win95") || has("win64") || has("win16")
   if g:netrw_cygwin
    let g:netrw_localcopycmd= "cp"
   else
-   let g:netrw_localcopycmd= "copy"
+   let g:netrw_localcopycmd= "cmd /c copy"
   endif
  elseif has("unix") || has("macunix")
   let g:netrw_localcopycmd= "cp"
  else
   let g:netrw_localcopycmd= ""
  endif
- if !executable(g:netrw_localcopycmd)
-  call netrw#ErrorMsg(s:NOTE,"consider setting g:netrw_localcopycmd<".g:netrw_localcopycmd."> to something that works",80)
- endif
 endif
 if exists("g:netrw_local_mkdir")
- let g:netrw_localmkdir= g:netrw_local_mkdir"
+ let g:netrw_localmkdir= g:netrw_local_mkdir
  call netrw#ErrorMsg(s:NOTE,"g:netrw_local_mkdir is deprecated in favor of g:netrw_localmkdir",87)
 endif
 call s:NetrwInit("g:netrw_localmkdir","mkdir")
-if !executable(g:netrw_localmkdir)
- call netrw#ErrorMsg(s:NOTE,"consider setting g:netrw_localmkdir<".g:netrw_localmkdir."> to something that works",80)
-endif
-endif
 call s:NetrwInit("g:netrw_remote_mkdir","mkdir")
 if exists("g:netrw_local_movecmd")
  let g:netrw_localmovecmd= g:netrw_local_movecmd"
   if g:netrw_cygwin
    let g:netrw_localmovecmd= "mv"
   else
-   let g:netrw_localmovecmd= "move"
+   let g:netrw_localmovecmd= "cmd /c move"
   endif
  elseif has("unix") || has("macunix")
   let g:netrw_localmovecmd= "mv"
  else
   let g:netrw_localmovecmd= ""
  endif
- if !executable(g:netrw_localmkdir)
-  call netrw#ErrorMsg(s:NOTE,"consider setting g:netrw_localmkdir<".g:netrw_localmkdir."> to something that works",81)
- endif
 endif
 call s:NetrwInit("g:netrw_localrmdir", "rmdir")
 if exists("g:netrw_local_rmdir")
  let g:netrw_localrmdir= g:netrw_local_rmdir"
  call netrw#ErrorMsg(s:NOTE,"g:netrw_local_rmdir is deprecated in favor of g:netrw_localrmdir",86)
 endif
-if !executable(g:netrw_localrmdir)
- call netrw#ErrorMsg(s:NOTE,"consider setting g:netrw_localrmdir<".g:netrw_localrmdir."> to something that works",82)
-endif
 call s:NetrwInit("g:netrw_liststyle"  , s:THINLIST)
 " sanity checks
 if g:netrw_liststyle < 0 || g:netrw_liststyle >= s:MAXLIST
   if exists("{a:vt}netrw_rokeep")   |let &l:ro     = {a:vt}netrw_rokeep      |unlet {a:vt}netrw_rokeep   |endif
   if exists("{a:vt}netrw_selkeep")  |let &l:sel    = {a:vt}netrw_selkeep     |unlet {a:vt}netrw_selkeep  |endif
   if exists("{a:vt}netrw_spellkeep")|let &l:spell  = {a:vt}netrw_spellkeep   |unlet {a:vt}netrw_spellkeep|endif
-  if exists("{a:vt}netrw_tskeep")   |let &l:ts     = {a:vt}netrw_tskeep      |unlet {a:vt}netrw_tskeep   |endif
+  " Problem: start with liststyle=0; press <i> : result, following line resets l:ts.
+"  if exists("{a:vt}netrw_tskeep")   |let &l:ts     = {a:vt}netrw_tskeep      |unlet {a:vt}netrw_tskeep   |endif
   if exists("{a:vt}netrw_twkeep")   |let &l:tw     = {a:vt}netrw_twkeep      |unlet {a:vt}netrw_twkeep   |endif
   if exists("{a:vt}netrw_wigkeep")  |let &l:wig    = {a:vt}netrw_wigkeep     |unlet {a:vt}netrw_wigkeep  |endif
   if exists("{a:vt}netrw_wrapkeep") |let &l:wrap   = {a:vt}netrw_wrapkeep    |unlet {a:vt}netrw_wrapkeep |endif
 "  call Decho("(NetrwOptionRestore) fo=".&fo.(exists("&acd")? " acd=".&acd : " acd doesn't exist"))
 "  call Decho("(NetrwOptionRestore) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)")
 "  call Decho("(NetrwOptionRestore) diff=".&l:diff." win#".winnr()." w:netrw_diffkeep=".(exists("w:netrw_diffkeep")? w:netrw_diffkeep : "doesn't exist"))
+"  call Decho("(NetrwOptionRestore) ts=".&l:ts)
 "  call Dret("s:NetrwOptionRestore : tab#".tabpagenr()." win#".winnr()." buf#".bufnr("%")."<".bufname("%")."> modified=".&modified." modifiable=".&modifiable." readonly=".&readonly)
 endfun
 
 "     call Decho("filter input: ".getline('.'))
     endif
 
-    if exists("g:netrw_uid" && g:netrw_uid != ""
+    if exists("g:netrw_uid") && g:netrw_uid != ""
      if exists("g:netrw_ftp") && g:netrw_ftp == 1
       keepj put =g:netrw_uid
 "       call Decho("filter input: ".getline('.'))
    ".........................................
    " NetWrite: (sftp) NetWrite Method #9 {{{3
    elseif     b:netrw_method == 9
-"    call Decho("read via sftp (method #9)")
+"    call Decho("write via sftp (method #9)")
     let netrw_fname= escape(b:netrw_fname,g:netrw_fname_escape)
     if exists("g:netrw_uid") &&  ( g:netrw_uid != "" )
      let uid_machine = g:netrw_uid .'@'. g:netrw_machine
     call setline(1,'put "'.escape(tmpfile,'\').'" '.netrw_fname)
 "    call Decho("filter input: ".getline('.'))
 "    call Decho("executing: %!".g:netrw_sftp_cmd.' '.shellescape(uid_machine,1))
-    exe s:netrw_silentxfer."%!".g:netrw_sftp_cmd.' '.shellescape(uid_machine,1)
+    let sftpcmd= substitute(g:netrw_sftp_cmd,"%TEMPFILE%",escape(tmpfile,'\'),"g")
+    exe s:netrw_silentxfer."%!".sftpcmd.' '.shellescape(uid_machine,1)
     let filtbuf= bufnr("%")
     exe curbuf."b!"
     let &l:bh            = bhkeep
 "   call Decho("exe sil! keepalt file ".fnameescape(rfile))
    exe "sil! keepj keepalt file ".fnameescape(rfile)
 
-   " detect filetype of local version of remote file
+   " Detect filetype of local version of remote file.
    " Note that isk must not include a "/" for scripts.vim
    " to process this detection correctly.
 "   call Decho("detect filetype of local version of remote file")
-   let iskkeep= &isk
-   set isk-=/
+   let iskkeep= &l:isk
+   setl isk-=/
    filetype detect
-   let &isk= iskkeep
+   let &l:isk= iskkeep
 "   call Dredir("renamed buffer back to remote filename<".rfile."> : expand(%)<".expand("%").">","ls!")
    let line1 = 1
    let line2 = line("$")
  endif
 
  if a:0 == 0
+  " case: no input arguments
+
+  " change host and username if not previously entered; get new password
+  if !exists("g:netrw_machine")
+   let g:netrw_machine= input('Enter hostname: ')
+  endif
   if !exists("g:netrw_uid") || g:netrw_uid == ""
-   " get uid via prompt
+   " get username (user-id) via prompt
    let g:netrw_uid= input('Enter username: ')
   endif
-  " get password via prompt
+  " get password via prompting
   let s:netrw_passwd= inputsecret("Enter Password: ")
 
   " set up hup database
   let s:netrw_hup[host].passwd = s:netrw_passwd
 
  elseif a:0 == 1
+  " case: one input argument
 
   if a:1 =~ '^ftp:'
+   " get host from ftp:... url
    " access userid and password from hup (host-user-passwd) dictionary
    let host = substitute(a:1,'^ftp:','','')
    let host = substitute(host,'\..*','','')
     let g:netrw_uid    = input("Enter UserId: ")
     let s:netrw_passwd = inputsecret("Enter Password: ")
    endif
+
   else
-   " set userid, prompt for password
-"   call Decho("set g:netrw_uid= <".a:1.">")
+   " case: one input argument, not an url.  Using it as a new user-id.
    if exists("g:netrw_machine")
     let host= substitute(g:netrw_machine,'\..*$','','')
-   endif
-   let g:netrw_uid    = a:1
-   let s:netrw_passwd = inputsecret("Enter Password: ")
+   else
+    let g:netrw_machine= input('Enter hostname: ')
+   endif
+   let g:netrw_uid = a:1
+"   call Decho("set g:netrw_uid= <".g:netrw_uid.">")
+   if exists("g:netrw_passwd")
+    " ask for password if one not previously entered
+    let s:netrw_passwd= g:netrw_passwd
+   else
+    let s:netrw_passwd = inputsecret("Enter Password: ")
+   endif
   endif
 
 "  call Decho("host<".host.">")
    nnoremap <buffer> <silent> U		:<c-u>call <SID>NetrwBookHistHandler(5,expand("%"))<cr>
    nnoremap <buffer> <silent> v		:call <SID>NetrwSplit(5)<cr>
    nnoremap <buffer> <silent> x		:call netrw#NetrwBrowseX(<SID>NetrwBrowseChgDir(1,<SID>NetrwGetWord(),0),0)"<cr>
+   nnoremap <buffer> <silent> X		:call <SID>NetrwLocalExecute(expand("<cword>"))"<cr>
    " local insert-mode maps
    inoremap <buffer> <silent> a		<c-o>:call <SID>NetrwHide(1)<cr>
    inoremap <buffer> <silent> c		<c-o>:exe "keepjumps lcd ".fnameescape(b:netrw_curdir)<cr>
    nnoremap <buffer> <silent> mx	:<c-u>call <SID>NetrwMarkFileExe(0)<cr>
    nnoremap <buffer> <silent> mX	:<c-u>call <SID>NetrwMarkFileVimCmd(0)<cr>
    nnoremap <buffer> <silent> mz	:<c-u>call <SID>NetrwMarkFileCompress(0)<cr>
-   nnoremap <buffer> <silent> gb	:<c-u>call <SID>NetrwBookHistHandler(1,b:netrw_cur)<cr>
+   nnoremap <buffer> <silent> gb	:<c-u>call <SID>NetrwBookHistHandler(1,b:netrw_curdir)<cr>
    nnoremap <buffer> <silent> gd	:<c-u>call <SID>NetrwForceChgDir(0,<SID>NetrwGetWord())<cr>
    nnoremap <buffer> <silent> gf	:<c-u>call <SID>NetrwForceFile(0,<SID>NetrwGetWord())<cr>
    nnoremap <buffer> <silent> gh	:<c-u>call <SID>NetrwHidden(0)<cr>
    inoremap <buffer> <silent> mx	<c-o>:<c-u>call <SID>NetrwMarkFileExe(0)<cr>
    inoremap <buffer> <silent> mX	<c-o>:<c-u>call <SID>NetrwMarkFileVimCmd(0)<cr>
    inoremap <buffer> <silent> mz	<c-o>:<c-u>call <SID>NetrwMarkFileCompress(0)<cr>
-   inoremap <buffer> <silent> gb	<c-o>:<c-u>call <SID>NetrwBookHistHandler(1,b:netrw_cur)<cr>
+   inoremap <buffer> <silent> gb	<c-o>:<c-u>call <SID>NetrwBookHistHandler(1,b:netrw_curdir)<cr>
    inoremap <buffer> <silent> gh	<c-o>:<c-u>call <SID>NetrwHidden(0)<cr>
    inoremap <buffer> <silent> gp	<c-o>:<c-u>call <SID>NetrwChgPerm(0,b:netrw_curdir)<cr>
    inoremap <buffer> <silent> C		<c-o>:let g:netrw_chgwin= winnr()<cr>
 fun! s:NetrwBookHistHandler(chg,curdir)
 "  call Dfunc("s:NetrwBookHistHandler(chg=".a:chg." curdir<".a:curdir.">) cnt=".v:count." histcnt=".g:netrw_dirhist_cnt." histmax=".g:netrw_dirhistmax)
 
+  let ykeep= @@
   if a:chg == 0
    " bookmark the current directory
 "   call Decho("(user: <b>) bookmark the current directory")
    keepj call remove(g:netrw_bookmarklist,v:count-1)
   endif
   call s:NetrwBookmarkMenu()
+  let @@= ykeep
 "  call Dret("s:NetrwBookHistHandler")
 endfun
 
 "                      Sister function: s:NetrwBookHistSave()
 fun! s:NetrwBookHistRead()
 "  call Dfunc("s:NetrwBookHistRead()")
+  let ykeep= @@
   if !exists("s:netrw_initbookhist")
    let home    = s:NetrwHome()
    let savefile= home."/.netrwbook"
     au VimLeave * call s:NetrwBookHistSave()
    endif
   endif
+  let @@= ykeep
 "  call Dret("s:NetrwBookHistRead")
 endfun
 
 "  call Dfunc("s:NetrwBrowse(islocal=".a:islocal." dirname<".a:dirname.">) liststyle=".w:netrw_liststyle." ".g:loaded_netrw." buf#".bufnr("%")."<".bufname("%")."> win#".winnr())
 "  call Decho("tab#".tabpagenr()." win#".winnr()." buf#".bufnr("%")." modified=".&modified." modifiable=".&modifiable." readonly=".&readonly)
 "  call Dredir("ls!")
+  " s:NetrwBrowse: initialize history {{{3
   if !exists("s:netrw_initbookhist")
    keepj call s:NetrwBookHistRead()
   endif
 
-  " simplify the dirname (especially for ".."s in dirnames)
+  " s:NetrwBrowse: simplify the dirname (especially for ".."s in dirnames) {{{3
   if a:dirname !~ '^\a\+://'
    let dirname= simplify(a:dirname)
   else
 "   call Dret("s:NetrwBrowse : s:netrw_skipbrowse=".s:netrw_skipbrowse)
    return
   endif
+
+  " s:NetrwBrowse: sanity checks: {{{3
   if !exists("*shellescape")
    keepj call netrw#ErrorMsg(s:ERROR,"netrw can't run -- your vim is missing shellescape()",69)
 "   call Dret("s:NetrwBrowse : missing shellescape()")
    return
   endif
 
+  " s:NetrwBrowse: save options: {{{3
   call s:NetrwOptionSave("w:")                                                                                                            
 
-  " re-instate any marked files
+  " s:NetrwBrowse: re-instate any marked files {{{3
   if exists("s:netrwmarkfilelist_{bufnr('%')}")
 "   call Decho("clearing marked files")
    exe "2match netrwMarkFile /".s:netrwmarkfilemtch_{bufnr("%")}."/"
   endif
 
   if a:islocal && exists("w:netrw_acdkeep") && w:netrw_acdkeep
+   " s:NetrwBrowse: set up "safe" options for local directory/file {{{3
 "   call Decho("handle w:netrw_acdkeep:")
 "   call Decho("keepjumps lcd ".fnameescape(dirname)." (due to w:netrw_acdkeep=".w:netrw_acdkeep." - acd=".&acd.")")
    exe 'keepj lcd '.fnameescape(dirname)
 "   call Decho("getcwd<".getcwd().">")
 
   elseif !a:islocal && dirname !~ '[\/]$' && dirname !~ '^"'
-   " looks like a regular file, attempt transfer
+   " s:NetrwBrowse: looks like a remote regular file, attempt transfer {{{3
 "   call Decho("attempt transfer as regular file<".dirname.">")
 
-   " remove any filetype indicator from end of dirname, except for the {{{3
+   " remove any filetype indicator from end of dirname, except for the
    " "this is a directory" indicator (/).
    " There shouldn't be one of those here, anyway.
    let path= substitute(dirname,'[*=@|]\r\=$','','e')
 "   call Decho("new path<".path.">")
    call s:RemotePathAnalysis(dirname)
 
-   " remote-read the requested file into current buffer {{{3
+   " s:NetrwBrowse: remote-read the requested file into current buffer {{{3
    keepj mark '
    call s:NetrwEnew(dirname)
    call s:NetrwSafeOptions()
     exe "sil keepj keepalt doau BufReadPost ".fnameescape(s:fname)
    endif
 
-   " save certain window-oriented variables into buffer-oriented variables {{{3
+   " s:NetrwBrowse: save certain window-oriented variables into buffer-oriented variables {{{3
    call s:SetBufWinVars()
    call s:NetrwOptionRestore("w:")
 "   call Decho("setl ma nomod")
   " set up menu {{{3
   keepj call s:NetrwMenu(1)
 
-  " set up buffer {{{3
+  " get/set-up buffer {{{3
   let reusing= s:NetrwGetBuffer(a:islocal,dirname)
   " maintain markfile highlighting
   if exists("s:netrwmarkfilemtch_{bufnr('%')}") && s:netrwmarkfilemtch_{bufnr("%")} != ""
   else
 "   call Decho("remote only:")
 
-   " analyze dirname and g:netrw_list_cmd {{{4
+   " analyze dirname and g:netrw_list_cmd {{{3
 "   call Decho("b:netrw_curdir<".(exists("b:netrw_curdir")? b:netrw_curdir : "doesn't exist")."> dirname<".dirname.">")
    if dirname =~ "^NetrwTreeListing\>"
     let dirname= b:netrw_curdir
-"    call Decho("(dirname was ".dirname.") dirname<".dirname.">")
+"    call Decho("(dirname was <NetrwTreeListing>) dirname<".dirname.">")
    elseif exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && exists("b:netrw_curdir")
     let dirname= substitute(b:netrw_curdir,'\\','/','g')
     if dirname !~ '/$'
 " s:NetrwFileInfo: supports qf (query for file information) {{{2
 fun! s:NetrwFileInfo(islocal,fname)
 "  call Dfunc("s:NetrwFileInfo(islocal=".a:islocal." fname<".a:fname.">)")
+  let ykeep= @@
   if a:islocal
    if (has("unix") || has("macunix")) && executable("/bin/ls")
     if exists("b:netrw_curdir")
   else
    echo "sorry, \"qf\" not supported yet for remote files"
   endif
+  let @@= ykeep
 "  call Dret("s:NetrwFileInfo")
 endfun
 
 "  call Decho("--re-use a buffer if possible--")
   if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST
    " find NetrwTreeList buffer if there is one
-"   call Decho("find NetrwTreeList buffer if there is one")
+"   call Decho("case liststyle=treelist: find NetrwTreeList buffer if there is one")
    if exists("w:netrw_treebufnr") && w:netrw_treebufnr > 0
 "    call Decho("  re-use w:netrw_treebufnr=".w:netrw_treebufnr)
     let eikeep= &ei
     set ei=all
     exe "sil! b ".w:netrw_treebufnr
     let &ei= eikeep
-"    call Dret("s:NetrwGetBuffer : bufnum#".w:netrw_treebufnr."<NetrwTreeListing>")
-    return
+"    call Dret("s:NetrwGetBuffer 1<buffer not cleared> : bufnum#".w:netrw_treebufnr."<NetrwTreeListing>")
+    return 1
    endif
    let bufnum= -1
 "   call Decho("  liststyle=TREE but w:netrw_treebufnr doesn't exist")
 
   else
    " find buffer number of buffer named precisely the same as dirname {{{3
-"   call Decho("--find buffer numnber of buffer named precisely the same as dirname--")
+"   call Decho("case listtyle not treelist: find buffer numnber of buffer named precisely the same as dirname--")
 "   call Dredir("ls!")
 
    " get dirname and associated buffer number
    " note: !~ was used just below, but that means using ../ to go back would match (ie. abc/def/  and abc/ matches)
    if bufnum > 0 && bufname(bufnum) != dirname && bufname(bufnum) != '.'
     " handle approximate matches
-"    call Decho("  handling approx match: bufnum#".bufnum."<".bufname(bufnum)."> approx-dirname<".dirname.">")
+"    call Decho("  handling approx match: bufnum#".bufnum.">0 AND bufname<".bufname(bufnum).">!=dirname<".dirname."> AND bufname(".bufnum.")!='.'")
     let ibuf    = 1
     let buflast = bufnr("$")
 "    call Decho("  findbuf2: buflast=bufnr($)=".buflast)
   endif
 
   " get enew buffer and name it -or- re-use buffer {{{3
+"  call Decho("  get enew buffer and name it OR re-use buffer")
   sil! keepj mark '
   if bufnum < 0 || !bufexists(bufnum)
-"   call Decho("--get enew buffer and name it (bufexists([bufnum=".bufnum."])=".bufexists(bufnum).")")
+"   call Decho("--get enew buffer and name it  (bufnum#".bufnum."<0 OR bufexists(".bufnum.")=".bufexists(bufnum)."==0)")
    call s:NetrwEnew(dirname)
 "   call Decho("  got enew buffer#".bufnr("%")." (altbuf<".expand("#").">)")
    " name the buffer
 "   call Decho("  named enew buffer#".bufnr("%")."<".bufname("%").">")
 
   else " Re-use the buffer
-"   call Decho("--re-use buffer#".bufnum." (bufexists([bufnum=".bufnum."])=".bufexists(bufnum).")")
+"   call Decho("--re-use buffer#".bufnum." (bufnum#".bufnum.">=0 AND bufexists(".bufnum.")=".bufexists(bufnum)."!=0)")
    let eikeep= &ei
    set ei=all
    if getline(2) =~ '^" Netrw Directory Listing'
-"    call Decho("  re-use buffer#".bufnum."<".((bufnum > 0)? bufname(bufnum) : "")."> using:  keepalt b ".bufnum)
+"    call Decho("  getline(2)<".getline(2).'> matches "Netrw Directory Listing" : using keepalt b '.bufnum)
     exe "sil! keepalt b ".bufnum
    else
-"    call Decho("  reusing buffer#".bufnum."<".((bufnum > 0)? bufname(bufnum) : "")."> using:  b ".bufnum)
+"    call Decho("  getline(2)<".getline(2).'> does not match "Netrw Directory Listing" : using b '.bufnum)
     exe "sil! b ".bufnum
    endif
    if bufname("%") == '.'
    let &ei= eikeep
    if line("$") <= 1
     keepj call s:NetrwListSettings(a:islocal)
-"    call Dret("s:NetrwGetBuffer 0 : re-using buffer#".bufnr("%").", but its empty, so refresh it")
+"    call Dret("s:NetrwGetBuffer 0<buffer empty> : re-using buffer#".bufnr("%").", but its empty, so refresh it")
+    return 0
+   elseif g:netrw_fastbrowse == 0 || (a:islocal && g:netrw_fastbrowse == 1)
+    keepj call s:NetrwListSettings(a:islocal)
+    sil keepj %d
+"    call Dret("s:NetrwGetBuffer 0<cleared buffer> : re-using buffer#".bufnr("%").", but refreshing due to g:netrw_fastbrowse=".g:netrw_fastbrowse)
     return 0
    elseif exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST
 "    call Decho("--re-use tree listing--")
 "    call Decho("  clear buffer<".expand("%")."> with :%d")
     sil keepj %d
     keepj call s:NetrwListSettings(a:islocal)
-"    call Dret("s:NetrwGetBuffer 0 : re-using buffer#".bufnr("%").", but treelist mode always needs a refresh")
+"    call Dret("s:NetrwGetBuffer 0<cleared buffer> : re-using buffer#".bufnr("%").", but treelist mode always needs a refresh")
     return 0
    else
-"    call Dret("s:NetrwGetBuffer 1 : buf#".bufnr("%"))
+"    call Dret("s:NetrwGetBuffer 1<buffer not cleared> : buf#".bufnr("%"))
     return 1
    endif
   endif
 "  call Decho("  clear buffer<".expand("%")."> with :%d")
   sil! keepalt keepj %d
 
-"  call Dret("s:NetrwGetBuffer 0 : tab#".tabpagenr()." win#".winnr()." buf#".bufnr("%")."<".bufname("%")."> modified=".&modified." modifiable=".&modifiable." readonly=".&readonly)
+"  call Dret("s:NetrwGetBuffer 0<cleared buffer> : tab#".tabpagenr()." win#".winnr()." buf#".bufnr("%")."<".bufname("%")."> modified=".&modified." modifiable=".&modifiable." readonly=".&readonly)
   return 0
 endfun
 
    setlocal noswf
   endif
 "  call Dredir("ls!")
-"  call Decho("exe setlocal ts=".g:netrw_maxfilenamelen)
-  exe "setlocal ts=".g:netrw_maxfilenamelen
+"  call Decho("(LocalListing) exe setl ts=".(g:netrw_maxfilenamelen+1))
+  exe "setl ts=".(g:netrw_maxfilenamelen+1)
   setlocal isk+=.,~,-
   if g:netrw_fastbrowse > a:islocal
    setlocal bh=hide
 "         =1: local browsing
 fun! s:NetrwListStyle(islocal)
 "  call Dfunc("NetrwListStyle(islocal=".a:islocal.") w:netrw_liststyle=".w:netrw_liststyle)
+  let ykeep             = @@
   let fname             = s:NetrwGetWord()
   if !exists("w:netrw_liststyle")|let w:netrw_liststyle= g:netrw_liststyle|endif
   let w:netrw_liststyle = (w:netrw_liststyle + 1) % s:MAXLIST
   if result <= 0 && exists("w:netrw_bannercnt")
    exe "sil! keepj ".w:netrw_bannercnt
   endif
+  let @@= ykeep
 
 "  call Dret("NetrwListStyle".(exists("w:netrw_liststyle")? ' : w:netrw_liststyle='.w:netrw_liststyle : ""))
 endfun
 fun! s:NetrwBannerCtrl(islocal)
 "  call Dfunc("s:NetrwBannerCtrl(islocal=".a:islocal.") g:netrw_banner=".g:netrw_banner)
 
+  let ykeep= @@
   " toggle the banner (enable/suppress)
   let g:netrw_banner= !g:netrw_banner
 
   if result <= 0 && exists("w:netrw_bannercnt")
    exe "keepj ".w:netrw_bannercnt
   endif
+  let @@= ykeep
 "  call Dret("s:NetrwBannerCtrl : g:netrw_banner=".g:netrw_banner)
 endfun
 
 fun! s:NetrwBrowseChgDir(islocal,newdir,...)
 "  call Dfunc("s:NetrwBrowseChgDir(islocal=".a:islocal."> newdir<".a:newdir.">) a:0=".a:0." curpos<".string(getpos("."))."> b:netrw_curdir<".(exists("b:netrw_curdir")? b:netrw_curdir : "").">")
 
+  let ykeep= @@
   if !exists("b:netrw_curdir")
    " Don't try to change-directory: this can happen, for example, when netrw#ErrorMsg has been called
    " and the current window is the NetrwMessage window.
+   let @@= ykeep
 "   call Decho("(NetrwBrowseChgDir) b:netrw_curdir doesn't exist!")
 "   call Decho("(NetrwBrowseChgDir) getcwd<".getcwd().">")
 "   call Dredir("ls!")
    return
   endif
 
+  " NetrwBrowseChgDir: save options and initialize {{{3
   keepj call s:NetrwOptionSave("s:")
   keepj call s:NetrwSafeOptions()
   let nbcd_curpos                = netrw#NetrwSavePosn()
   endif
 
   if newdir !~ dirpat
-   " ------------
-   " edit a file:
-   " ------------
+   " ------------------------------
+   " NetrwBrowseChgDir: edit a file {{{3
+   " ------------------------------
 "   call Decho('(NetrwBrowseChgDir) case "handling a file": newdir<'.newdir.'> !~ dirpat<'.dirpat.">")
 
-  " save position for benefit of Rexplore
-  let s:rexposn_{bufnr("%")}= netrw#NetrwSavePosn()
-
-"  call Decho("(NetrwBrowseChgDir) setting s:rexposn_".bufnr("%")." to SavePosn")
+   " save position for benefit of Rexplore
+   let s:rexposn_{bufnr("%")}= netrw#NetrwSavePosn()
+
+"   call Decho("(NetrwBrowseChgDir) setting s:rexposn_".bufnr("%")." to SavePosn")
    if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && exists("w:netrw_treedict") && newdir !~ '^\(/\|\a:\)'
     let dirname= s:NetrwTreeDir()
     if dirname =~ '/$'
 "    call Decho("(NetrwBrowseChgDir) set up windows for editing<".fnameescape(dirname).">  didsplit=".(exists("s:didsplit")? s:didsplit : "doesn't exist"))
     keepj call s:NetrwOptionRestore("s:")
     if !exists("s:didsplit")
+"     call Decho("s:didsplit does not exist; g:netrw_browse_split=".g:netrw_browse_split." win#".winnr())
      if     g:netrw_browse_split == 1
+      " horizontally splitting the window first
       new
       if !&ea
        wincmd _
       endif
      elseif g:netrw_browse_split == 2
+      " vertically splitting the window first
       rightb vert new
       if !&ea
        wincmd |
       endif
      elseif g:netrw_browse_split == 3
+      " open file in new tab
       tabnew
      elseif g:netrw_browse_split == 4
+      " act like "P" (ie. open previous window)
       if s:NetrwPrevWinOpen(2) == 3
+       let @@= ykeep
 "       call Dret("s:NetrwBrowseChgDir")
        return
       endif
     if a:islocal
 "     call Decho("(NetrwBrowseChgDir) edit local file: exe e! ".fnameescape(dirname))
      exe "e! ".fnameescape(dirname)
+     call s:NetrwCursor()
     else
 "     call Decho("(NetrwBrowseChgDir) remote file: NetrwBrowse will edit it")
     endif
    endif
 
   elseif newdir =~ '^/'
-   " ---------------------------------
-   " just go to the new directory spec
-   " ---------------------------------
+   " ----------------------------------------------------
+   " NetrwBrowseChgDir: just go to the new directory spec {{{3
+   " ----------------------------------------------------
 "   call Decho('(NetrwBrowseChgDir) case "just go to new directory spec": newdir<'.newdir.'>')
-   let dirname= newdir
+   let dirname    = newdir
    keepj call s:SetRexDir(a:islocal,dirname)
    keepj call s:NetrwOptionRestore("s:")
 
   elseif newdir == './'
-   " --------------------------
-   " refresh the directory list
-   " --------------------------
+   " ---------------------------------------------
+   " NetrwBrowseChgDir: refresh the directory list {{{3
+   " ---------------------------------------------
 "   call Decho('(NetrwBrowseChgDir) case "refresh directory listing": newdir == "./"')
    keepj call s:SetRexDir(a:islocal,dirname)
 
   elseif newdir == '../'
-   " -------------------
-   " go up one directory
-   " -------------------
+   " --------------------------------------
+   " NetrwBrowseChgDir: go up one directory {{{3
+   " --------------------------------------
 "   call Decho('(NetrwBrowseChgDir) case "go up one directory": newdir == "../"')
 
    if w:netrw_liststyle == s:TREELIST && exists("w:netrw_treedict")
    keepj call s:SetRexDir(a:islocal,dirname)
 
   elseif exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && exists("w:netrw_treedict")
+   " --------------------------------------
+   " NetrwBrowseChgDir: Handle Tree Listing {{{3
+   " --------------------------------------
 "   call Decho('(NetrwBrowseChgDir) case liststyle is TREELIST and w:netrw_treedict exists')
    " force a refresh (for TREELIST, wait for NetrwTreeDir() to force the refresh)
 "   call Decho("(NetrwBrowseChgDir) setl noro ma")
    let s:treeforceredraw = 1
 
   else
-   " go down one directory
-   let dirname= s:ComposePath(dirname,newdir)
+   " ----------------------------------------
+   " NetrwBrowseChgDir: Go down one directory {{{3
+   " ----------------------------------------
+   let dirname    = s:ComposePath(dirname,newdir)
 "   call Decho("(NetrwBrowseChgDir) go down one dir: dirname<".dirname."> newdir<".newdir.">")
    keepj call s:SetRexDir(a:islocal,dirname)
   endif
 
+ " --------------------------------------
+ " NetrwBrowseChgDir: Restore and Cleanup {{{3
+ " --------------------------------------
   keepj call s:NetrwOptionRestore("s:")
   if dolockout
 "   call Decho("(NetrwBrowseChgDir) filewritable(dirname<".dirname.">)=".filewritable(dirname))
 "    call Decho("(NetrwBrowseChgDir) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)")
    endif
   endif
+  let @@= ykeep
 
 "  call Dret("s:NetrwBrowseChgDir <".dirname."> : curpos<".string(getpos(".")).">")
   return dirname
 fun! netrw#NetrwBrowseX(fname,remote)
 "  call Dfunc("NetrwBrowseX(fname<".a:fname."> remote=".a:remote.")")
 
+  let ykeep      = @@
+  let screenposn = netrw#NetrwSavePosn()
+
   " special core dump handler
   if a:fname =~ '/core\(\.\d\+\)\=$'
    if exists("g:Netrw_corehandler")
       endif
      endfor
     endif
+    call netrw#NetrwRestorePosn(screenposn)
+    let @@= ykeep
 "    call Dret("NetrwBrowseX : coredump handler invoked")
     return
    endif
   " gnome-open's subsidiary display tools are largely absent.  Kde systems
   " usually have "kdeinit" running, though...  (tnx Mikolaj Machowski)
   if !exists("s:haskdeinit")
-   if has("unix")
+   if has("unix") && executable("ps") && !has("win32unix")
     let s:haskdeinit= system("ps -e") =~ 'kdeinit' 
     if v:shell_error
      let s:haskdeinit = 0
 
   if a:remote == 1
    " create a local copy
-"   call Decho("a:remote=".a:remote.": create a local copy of <".a:fname.">")
+"   call Decho("(remote) a:remote=".a:remote.": create a local copy of <".a:fname.">")
    setlocal bh=delete
    call netrw#NetRead(3,a:fname)
    " attempt to rename tempfile
    let basename= substitute(a:fname,'^\(.*\)/\(.*\)\.\([^.]*\)$','\2','')
-   let newname= substitute(s:netrw_tmpfile,'^\(.*\)/\(.*\)\.\([^.]*\)$','\1/'.basename.'.\3','')
+   let newname = substitute(s:netrw_tmpfile,'^\(.*\)/\(.*\)\.\([^.]*\)$','\1/'.basename.'.\3','')
 "   call Decho("basename<".basename.">")
 "   call Decho("newname <".newname.">")
    if rename(s:netrw_tmpfile,newname) == 0
     let fname= s:netrw_tmpfile
    endif
   else
+"   call Decho("(local) a:remote=".a:remote.": handling local copy of <".a:fname.">")
    let fname= a:fname
    " special ~ handler for local
    if fname =~ '^\~' && expand("$HOME") != ""
   else
    let redir= &srr . "/dev/null"
   endif
-"  call Decho("redir{".redir."} srr{".&srr."}")
+"  call Decho("set up redirection: redir{".redir."} srr{".&srr."}")
 
   " extract any viewing options.  Assumes that they're set apart by quotes.
+"  call Decho("extract any viewing options")
   if exists("g:netrw_browsex_viewer")
 "   call Decho("g:netrw_browsex_viewer<".g:netrw_browsex_viewer.">")
    if g:netrw_browsex_viewer =~ '\s'
   endif
 
   " execute the file handler
+"  call Decho("execute the file handler (if any)")
   if exists("g:netrw_browsex_viewer") && g:netrw_browsex_viewer == '-'
 "   call Decho("g:netrw_browsex_viewer<".g:netrw_browsex_viewer.">")
    let ret= netrwFileHandlers#Invoke(exten,fname)
    let ret= v:shell_error
 
   elseif has("win32") || has("win64")
+"   call Decho("windows")
    if executable("start")
 "    call Decho('exe sil !start rundll32 url.dll,FileProtocolHandler '.shellescape(fname,1))
     exe 'sil !start rundll32 url.dll,FileProtocolHandler '.shellescape(fname,1)
    call inputsave()|call input("Press <cr> to continue")|call inputrestore()
    let ret= v:shell_error
 
-  elseif has("unix") && executable("gnome-open") && !s:haskdeinit
-"   call Decho("exe sil !gnome-open ".shellescape(fname,1)." ".redir)
-   exe "sil !gnome-open ".shellescape(fname,1).redir
+  elseif has("win32unix")
+   let winfname= 'c:\cygwin'.substitute(fname,'/','\\','g')
+"   call Decho("cygwin: winfname<".shellescape(winfname,1).">")
+   if executable("start")
+"    call Decho('exe sil !start rundll32 url.dll,FileProtocolHandler '.shellescape(winfname,1))
+    exe 'sil !start rundll32 url.dll,FileProtocolHandler '.shellescape(winfname,1)
+   elseif executable("rundll32")
+"    call Decho('exe sil !rundll32 url.dll,FileProtocolHandler '.shellescape(winfname,1))
+    exe 'sil !rundll32 url.dll,FileProtocolHandler '.shellescape(winfname,1)
+   else
+    call netrw#ErrorMsg(s:WARNING,"rundll32 not on path",74)
+   endif
+   call inputsave()|call input("Press <cr> to continue")|call inputrestore()
    let ret= v:shell_error
 
+  elseif has("unix") && executable("xdg-open") && !s:haskdeinit
+"   call Decho("unix and xdg-open")
+"   call Decho("exe sil !xdg-open ".shellescape(fname,1)." ".redir)
+   exe "sil !xdg-open ".shellescape(fname,1).redir
+   let ret= v:shell_error
+
   elseif has("unix") && executable("kfmclient") && s:haskdeinit
+"   call Decho("unix and kfmclient")
 "   call Decho("exe sil !kfmclient exec ".shellescape(fname,1)." ".redir)
    exe "sil !kfmclient exec ".shellescape(fname,1)." ".redir
    let ret= v:shell_error
 
   elseif has("macunix") && executable("open")
+"   call Decho("macunix and open")
 "   call Decho("exe sil !open ".shellescape(fname,1)." ".redir)
    exe "sil !open ".shellescape(fname,1)." ".redir
    let ret= v:shell_error
   "          Feb 12, 2008: had to de-activiate removal of
   "          temporary file because it wasn't getting seen.
 "  if a:remote == 1 && fname != a:fname
-"   call Decho("deleting temporary file<".fname.">")
+""   call Decho("deleting temporary file<".fname.">")
 "   call s:NetrwDelete(fname)
 "  endif
 
    exe "sil! keepj norm! \<c-o>"
 "   redraw!
   endif
+  call netrw#NetrwRestorePosn(screenposn)
+  let @@= ykeep
 
 "  call Dret("NetrwBrowseX")
 endfun
 " s:NetrwChgPerm: (implements "gp") change file permission {{{2
 fun! s:NetrwChgPerm(islocal,curdir)
 "  call Dfunc("s:NetrwChgPerm(islocal=".a:islocal." curdir<".a:curdir.">)")
+  let ykeep  = @@
   call inputsave()
   let newperm= input("Enter new permission: ")
   call inputrestore()
   if a:islocal
    keepj call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
   endif
+  let @@= ykeep
 "  call Dret("s:NetrwChgPerm")
 endfun
 
 " s:NetrwForceChgDir: (gd support) Force treatment as a directory {{{2
 fun! s:NetrwForceChgDir(islocal,newdir)
 "  call Dfunc("s:NetrwForceChgDir(islocal=".a:islocal." newdir<".a:newdir.">)")
+  let ykeep= @@
   if a:newdir !~ '/$'
    " ok, looks like force is needed to get directory-style treatment
    if a:newdir =~ '@$'
    " should already be getting treatment as a directory
    let newdir= a:newdir
   endif
-  call s:NetrwBrowseChgDir(a:islocal,newdir)
+  let newdir= s:NetrwBrowseChgDir(a:islocal,newdir)
   call s:NetrwBrowse(a:islocal,newdir)
+  let @@= ykeep
 "  call Dret("s:NetrwForceChgDir")
 endfun
 
 "                           2: show hidden files only
 fun! s:NetrwHide(islocal)
 "  call Dfunc("NetrwHide(islocal=".a:islocal.") g:netrw_hide=".g:netrw_hide)
+  let ykeep= @@
   let svpos= netrw#NetrwSavePosn()
 
   if exists("s:netrwmarkfilelist_{bufnr('%')}")
    exe "keepj norm! 0"
    if g:netrw_hide && g:netrw_list_hide == ""
     keepj call netrw#ErrorMsg(s:WARNING,"your hiding list is empty!",49)
+    let @@= ykeep
 "    call Dret("NetrwHide")
     return
    endif
 
   keepj call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
   keepj call netrw#NetrwRestorePosn(svpos)
+  let @@= ykeep
 "  call Dret("NetrwHide")
 endfun
 
 " s:NetrwHidden: invoked by "gh" {{{2
 fun! s:NetrwHidden(islocal)
 "  call Dfunc("s:NetrwHidden()")
+  let ykeep= @@
   "  save current position
   let svpos= netrw#NetrwSavePosn()
 
   " refresh screen and return to saved position
   keepj call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
   keepj call netrw#NetrwRestorePosn(svpos)
+  let @@= ykeep
 "  call Dret("s:NetrwHidden")
 endfun
 
 fun! s:NetrwLeftmouse(islocal)
 "  call Dfunc("s:NetrwLeftmouse(islocal=".a:islocal.")")
 
+  let ykeep= @@
   " check if the status bar was clicked on instead of a file/directory name
   while getchar(0) != 0
    "clear the input stream
 "  call Decho("v:mouse_col =".v:mouse_col."     col=".col(".")."  wincol =".wincol()." winwidth   =".winwidth(0))
   if mouse_lnum >= wlastline + 1 || v:mouse_win != winnr()
    " appears to be a status bar leftmouse click
+   let @@= ykeep
 "   call Dret("s:NetrwLeftmouse : detected a status bar leftmouse click")
    return
   endif
   if v:mouse_col != col('.')
+   let @@= ykeep
 "   call Dret("s:NetrwLeftmouse : detected a vertical separator bar leftmouse click")
    return
   endif
     keepj call s:NetrwBrowse(0,s:NetrwBrowseChgDir(0,s:NetrwGetWord()))
    endif
   endif
+  let @@= ykeep
 "  call Dret("s:NetrwLeftmouse")
 endfun
 
 " separated patterns given in g:netrw_list_hide
 fun! s:NetrwListHide()
 "  call Dfunc("NetrwListHide() g:netrw_hide=".g:netrw_hide." g:netrw_list_hide<".g:netrw_list_hide.">")
+  let ykeep= @@
 
   " find a character not in the "hide" string to use as a separator for :g and :v commands
   " How-it-works: take the hiding command, convert it into a range.  Duplicate
    " Prune the list by hiding any files which match
    if g:netrw_hide == 1
 "    call Decho("hiding<".hide."> listhide<".listhide.">")
-    exe 'sil keepj '.w:netrw_bannercnt.',$g'.sep.hide.sep.'d'
+    exe 'sil! keepj '.w:netrw_bannercnt.',$g'.sep.hide.sep.'d'
    elseif g:netrw_hide == 2
 "    call Decho("showing<".hide."> listhide<".listhide.">")
-    exe 'sil keepj '.w:netrw_bannercnt.',$g'.sep.hide.sep.'s@^@ /-KEEP-/ @'
+    exe 'sil! keepj '.w:netrw_bannercnt.',$g'.sep.hide.sep.'s@^@ /-KEEP-/ @'
    endif
   endwhile
   if g:netrw_hide == 2
-   exe 'sil keepj '.w:netrw_bannercnt.',$v@^ /-KEEP-/ @d'
-   exe 'sil keepj '.w:netrw_bannercnt.',$s@^\%( /-KEEP-/ \)\+@@e'
+   exe 'sil! keepj '.w:netrw_bannercnt.',$v@^ /-KEEP-/ @d'
+   exe 'sil! keepj '.w:netrw_bannercnt.',$s@^\%( /-KEEP-/ \)\+@@e'
   endif
 
   " remove any blank lines that have somehow remained.
   " This seems to happen under Windows.
   exe 'sil! keepj 1,$g@^\s*$@d'
 
+  let @@= ykeep
 "  call Dret("NetrwListHide")
 endfun
 
 fun! s:NetrwHideEdit(islocal)
 "  call Dfunc("NetrwHideEdit(islocal=".a:islocal.")")
 
+  let ykeep= @@
   " save current cursor position
   let svpos= netrw#NetrwSavePosn()
 
 
   " restore cursor position
   call netrw#NetrwRestorePosn(svpos)
+  let @@= ykeep
 
 "  call Dret("NetrwHideEdit")
 endfun
 fun! s:NetSortSequence(islocal)
 "  call Dfunc("NetSortSequence(islocal=".a:islocal.")")
 
+  let ykeep= @@
   let svpos= netrw#NetrwSavePosn()
   call inputsave()
   let newsortseq= input("Edit Sorting Sequence: ",g:netrw_sort_sequence)
   let g:netrw_sort_sequence= newsortseq
   keepj call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
   keepj call netrw#NetrwRestorePosn(svpos)
+  let @@= ykeep
 
 "  call Dret("NetSortSequence")
 endfun
 fun! s:NetrwMakeDir(usrhost)
 "  call Dfunc("NetrwMakeDir(usrhost<".a:usrhost.">)")
 
+  let ykeep= @@
   " get name of new directory from user.  A bare <CR> will skip.
   " if its currently a directory, also request will be skipped, but with
   " a message.
 "  call Decho("newdirname<".newdirname.">")
 
   if newdirname == ""
+   let @@= ykeep
 "   call Dret("NetrwMakeDir : user aborted with bare <cr>")
    return
   endif
     if !exists("g:netrw_quiet")
      keepj call netrw#ErrorMsg(s:WARNING,"<".newdirname."> is already a directory!",24)
     endif
+    let @@= ykeep
 "    call Dret("NetrwMakeDir : directory<".newdirname."> exists previously")
     return
    endif
     if !exists("g:netrw_quiet")
      keepj call netrw#ErrorMsg(s:WARNING,"<".newdirname."> is already a file!",25)
     endif
+    let @@= ykeep
 "    call Dret("NetrwMakeDir : file<".newdirname."> exists previously")
     return
    endif
 "    call Decho("netrw_origdir<".netrw_origdir.">: lcd b:netrw_curdir<".fnameescape(b:netrw_curdir).">")
 "    call Decho("exe sil! !".g:netrw_localmkdir.' '.shellescape(newdirname,1))
     exe "sil! !".g:netrw_localmkdir.' '.shellescape(newdirname,1)
+    if v:shell_error != 0
+     let @@= ykeep
+     call netrw#ErrorMsg(s:ERROR,"consider setting g:netrw_localmkdir<".g:netrw_localmkdir."> to something that works",80)
+"     call Dret("NetrwMakeDir : failed: sil! !".g:netrw_localmkdir.' '.shellescape(newdirname,1))
+     return
+    endif
     if !g:netrw_keepdir
      exe 'keepj lcd '.fnameescape(netrw_origdir)
 "     call Decho("netrw_keepdir=".g:netrw_keepdir.": keepjumps lcd ".fnameescape(netrw_origdir)." getcwd<".getcwd().">")
    keepj call netrw#NetrwRestorePosn(svpos)
   endif
 
+  let @@= ykeep
 "  call Dret("NetrwMakeDir")
 endfun
 
 "    b:netrw_islocal
 fun! s:NetrwMarkFile(islocal,fname)
 "  call Dfunc("s:NetrwMarkFile(islocal=".a:islocal." fname<".a:fname.">)")
+  let ykeep   = @@
   let curbufnr= bufnr("%")
   let curdir  = b:netrw_curdir
-  let trailer = '[@=|\/\*]\=\>'
+  let trailer = '[@=|\/\*]\=\ze\%(  \|\t\|$\)'
 
   if exists("s:netrwmarkfilelist_{curbufnr}")
    " markfile list pre-exists
 "   call Decho("2match none")
    2match none
   endif
+  let @@= ykeep
 "  call Dret("s:NetrwMarkFile : s:netrwmarkfilelist_".curbufnr."<".(exists("s:netrwmarkfilelist_{curbufnr}")? string(s:netrwmarkfilelist_{curbufnr}) : " doesn't exist").">")
 endfun
 
   if      a:islocal &&  s:netrwmftgt_islocal
    " Copy marked files, local directory to local directory
 "   call Decho("copy from local to local")
+   if !executable(g:netrw_localcopycmd) && g:netrw_localcopycmd !~ '^cmd '
+    call netrw#ErrorMsg(s:ERROR,"g:netrw_localcopycmd<".g:netrw_localcopycmd."> not executable on your system, aborting",91)
+"    call Dfunc("s:NetrwMarkFileMove : g:netrw_localcopycmd<".g:netrw_localcopycmd."> n/a!")
+    return
+   endif
    let args= join(map(deepcopy(s:netrwmarkfilelist_{bufnr('%')}),"shellescape(b:netrw_curdir.\"/\".v:val)"))
 "   call Decho("system(".g:netrw_localcopycmd." ".args." ".shellescape(s:netrwmftgt).")")
    call system(netrw#WinPath(g:netrw_localcopycmd)." ".args." ".shellescape(s:netrwmftgt))
+   if v:shell_error != 0
+    call netrw#ErrorMsg(s:WARNING,"consider setting g:netrw_localcopycmd<".g:netrw_localcopycmd."> to something that works",80)
+"    call Dret("s:NetrwMarkFileCopy 0 : failed: system(".g:netrw_localcopycmd." ".args." ".shellescape(s:netrwmftgt))
+    return 0
+   endif
 
   elseif  a:islocal && !s:netrwmftgt_islocal
    " Copy marked files, local directory to remote directory
     call mkdir(tmpdir)
    else
     exe "sil! !".g:netrw_localmkdir.' '.shellescape(tmpdir,1)
+    if v:shell_error != 0
+     call netrw#ErrorMsg(s:WARNING,"consider setting g:netrw_localmkdir<".g:netrw_localmkdir."> to something that works",80)
+"     call Dret("s:NetrwMarkFileCopy : failed: sil! !".g:netrw_localmkdir.' '.shellescape(tmpdir,1) )
+     return
+    endif
    endif
    if isdirectory(tmpdir)
     exe "keepj lcd ".fnameescape(tmpdir)
      endfor
      exe "keepj lcd ".fnameescape(curdir)
      exe "sil !".g:netrw_localrmdir." ".shellescape(tmpdir,1)
+     if v:shell_error != 0
+      call netrw#ErrorMsg(s:WARNING,"consider setting g:netrw_localrmdir<".g:netrw_localrmdir."> to something that works",80)
+"      call Dret("s:NetrwMarkFileCopy : failed: sil !".g:netrw_localrmdir." ".shellescape(tmpdir,1) )
+      return
+     endif
     else
      exe "keepj lcd ".fnameescape(curdir)
     endif
    try
     exe "keepj noautocmd vimgrep".pat." ".netrwmarkfilelist
     catch /^Vim\%((\a\+)\)\=:E480/
-     keepj call netrw#ErrorMsg(s:WARNING,"no match with pattern<".pattern.">",76)
-"     call Dret("s:NetrwMarkFileGrep : unable to find pattern<".pattern.">")
-     return
+    keepj call netrw#ErrorMsg(s:WARNING,"no match with pattern<".pattern.">",76)
+"    call Dret("s:NetrwMarkFileGrep : unable to find pattern<".pattern.">")
+    return
    endtry
 
    2match none
    " move: local -> local
 "   call Decho("move from local to local")
 "   call Decho("(s:NetrwMarkFileMove) local to local move")
-   if executable(g:netrw_localmovecmd)
-    for fname in s:netrwmarkfilelist_{bufnr("%")}
-"     call Decho("system(".g:netrw_localmovecmd." ".shellescape(fname)." ".shellescape(s:netrwmftgt).")")
-     let ret= system(g:netrw_localmovecmd." ".shellescape(fname)." ".shellescape(s:netrwmftgt))
-     if v:shell_error < 0
-      call netrw#ErrorMsg(s:ERROR,"command<".g:netrw_localmovecmd."> failed, aborting",54)
-      break
-     endif
-    endfor
-   else
-    keepj call netrw#ErrorMsg(s:ERROR,"command<".g:netrw_localmovecmd."> is not executable!",57)
-   endif
+   if !executable(g:netrw_localmovecmd) && g:netrw_localmovecmd !~ '^cmd '
+    call netrw#ErrorMsg(s:ERROR,"g:netrw_localmovecmd<".g:netrw_localmovecmd."> not executable on your system, aborting",90)
+"    call Dfunc("s:NetrwMarkFileMove : g:netrw_localmovecmd<".g:netrw_localmovecmd."> n/a!")
+    return
+   endif
+   for fname in s:netrwmarkfilelist_{bufnr("%")}
+"    call Decho("system(".g:netrw_localmovecmd." ".shellescape(fname)." ".shellescape(s:netrwmftgt).")")
+    let ret= system(g:netrw_localmovecmd." ".shellescape(fname)." ".shellescape(s:netrwmftgt))
+    if v:shell_error < 0
+     call netrw#ErrorMsg(s:ERROR,"command<".g:netrw_localmovecmd."> failed, aborting",54)
+     break
+    endif
+   endfor
 
   elseif  a:islocal && !s:netrwmftgt_islocal
    " move: local -> remote
 " s:NetrwOpenFile: query user for a filename and open it {{{2
 fun! s:NetrwOpenFile(islocal)
 "  call Dfunc("s:NetrwOpenFile(islocal=".a:islocal.")")
+  let ykeep= @@
   call inputsave()
   let fname= input("Enter filename: ")
   call inputrestore()
   else
    exe "e ".fnameescape(fname)
   endif
+  let @@= ykeep
 "  call Dret("s:NetrwOpenFile")
 endfun
 
 fun! s:NetrwObtain(islocal)
 "  call Dfunc("NetrwObtain(islocal=".a:islocal.")")
 
+  let ykeep= @@
   if exists("s:netrwmarkfilelist_{bufnr('%')}")