comparison runtime/plugin/netrw.vim @ 24:8ff7fd162d3c v7.0016

updated for version 7.0016
author vimboss
date Mon, 13 Sep 2004 20:26:32 +0000
parents cc049b00ee70
children 404aac550f35
comparison
equal deleted inserted replaced
23:3f44e9abe4ec 24:8ff7fd162d3c
1 " netrw.vim: Handles file transfer and remote directory listing across a network 1 " netrw.vim: Handles file transfer and remote directory listing across a network
2 " Last Change: Aug 27, 2004 2 " Last Change: Sep 10, 2004
3 " Maintainer: Charles E. Campbell, Jr. PhD <drchipNOSPAM at campbellfamily.biz> 3 " Maintainer: Charles E. Campbell, Jr. PhD <drchipNOSPAM at campbellfamily.biz>
4 " Version: 47 4 " Version: 48
5 " License: Vim License (see vim's :help license) 5 " License: Vim License (see vim's :help license)
6 " 6 "
7 " But be doers of the word, and not only hearers, deluding your own selves 7 " But be doers of the Word, and not only hearers, deluding your own selves
8 " (James 1:22 RSV) 8 " (James 1:22 RSV)
9 " =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 9 " =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
10 " GetLatestVimScripts: 1075 1 :AutoInstall: netrw.vim 10 " GetLatestVimScripts: 1075 1 :AutoInstall: netrw.vim
11 11
12 " --------------------------------------------------------------------- 12 " ---------------------------------------------------------------------
13 " Prevent Reloading: {{{1 13 " Prevent Reloading: {{{1
14 if exists("loaded_netrw") || &cp 14 if exists("g:loaded_netrw") || &cp
15 finish 15 finish
16 endif 16 endif
17 let loaded_netrw = "v47" 17 let g:loaded_netrw = "v48"
18 let s:save_cpo = &cpo 18 let s:save_cpo = &cpo
19 let loaded_explorer = 1 19 let loaded_explorer = 1
20 set cpo&vim 20 set cpo&vim
21 21
22 " --------------------------------------------------------------------- 22 " ---------------------------------------------------------------------
41 else 41 else
42 " call Decho("ssh is not executable, can't do remote directory exploring") 42 " call Decho("ssh is not executable, can't do remote directory exploring")
43 let g:netrw_list_cmd= "" 43 let g:netrw_list_cmd= ""
44 endif 44 endif
45 endif 45 endif
46 if !exists("g:netrw_ftp_list_cmd")
47 if has("unix") || exists("g:netrw_cygwin")
48 let g:netrw_ftp_list_cmd= "ls -lF"
49 else
50 let g:netrw_ftp_list_cmd= "dir"
51 endif
52 endif
46 if !exists("g:netrw_rm_cmd") 53 if !exists("g:netrw_rm_cmd")
47 let g:netrw_rm_cmd = "ssh HOSTNAME rm" 54 let g:netrw_rm_cmd = "ssh HOSTNAME rm"
48 endif 55 endif
49 if !exists("g:netrw_rmf_cmd") 56 if !exists("g:netrw_rmf_cmd")
50 let g:netrw_rmf_cmd = "ssh HOSTNAME rm -f" 57 let g:netrw_rmf_cmd = "ssh HOSTNAME rm -f"
109 endif 116 endif
110 if !exists("g:netrw_ftp_browse_reject") 117 if !exists("g:netrw_ftp_browse_reject")
111 let g:netrw_ftp_browse_reject='^total\s\+\d\+$\|^Trying\s\+\d\+.*$\|^KERBEROS_V\d rejected\|^Security extensions not' 118 let g:netrw_ftp_browse_reject='^total\s\+\d\+$\|^Trying\s\+\d\+.*$\|^KERBEROS_V\d rejected\|^Security extensions not'
112 endif 119 endif
113 if !exists("g:netrw_keepdir") 120 if !exists("g:netrw_keepdir")
114 let g:netrw_keepdir= 0 121 let g:netrw_keepdir= 1
115 endif 122 endif
116 if !exists("s:netrw_cd_escape") 123 if !exists("s:netrw_cd_escape")
117 if has("win32") || has("win95") || has("win64") || has("win16") 124 if has("win32") || has("win95") || has("win64") || has("win16")
118 let s:netrw_cd_escape="#% " 125 let s:netrw_cd_escape="#% "
119 else 126 else
120 let s:netrw_cd_escape="*$%'\" ?`" 127 let s:netrw_cd_escape="[]#*$%'\" ?`!&();<>\\"
121 endif 128 endif
122 endif 129 endif
123 if !exists("s:netrw_glob_escape") 130 if !exists("s:netrw_glob_escape")
124 if has("win32") || has("win95") || has("win64") || has("win16") 131 if has("win32") || has("win95") || has("win64") || has("win16")
125 let s:netrw_glob_escape= "" 132 let s:netrw_glob_escape= ""
126 else 133 else
127 let s:netrw_glob_escape= '[]*?`{~' 134 let s:netrw_glob_escape= '[]*?`{~$'
128 endif 135 endif
136 endif
137 if !exists("g:netrw_alto")
138 let g:netrw_alto= 0
139 endif
140 if !exists("g:netrw_altv")
141 let g:netrw_altv= 0
129 endif 142 endif
130 143
131 " BufEnter event ignored by decho when following variable is true 144 " BufEnter event ignored by decho when following variable is true
132 " Has a side effect that doau BufReadPost doesn't work, so 145 " Has a side effect that doau BufReadPost doesn't work, so
133 " files read by network transfer aren't appropriately highlighted. 146 " files read by network transfer aren't appropriately highlighted.
284 exe "let choice= a:" . ichoice 297 exe "let choice= a:" . ichoice
285 " call Decho("no lastfile: choice<" . choice . ">") 298 " call Decho("no lastfile: choice<" . choice . ">")
286 299
287 if match(choice,"?") == 0 300 if match(choice,"?") == 0
288 " give help 301 " give help
289 echo 'NetRead Usage:' 302 echomsg 'NetRead Usage:'
290 echo ':Nread machine:path uses rcp' 303 echomsg ':Nread machine:path uses rcp'
291 echo ':Nread "machine path" uses ftp with <.netrc>' 304 echomsg ':Nread "machine path" uses ftp with <.netrc>'
292 echo ':Nread "machine id password path" uses ftp' 305 echomsg ':Nread "machine id password path" uses ftp'
293 echo ':Nread dav://machine[:port]/path uses cadaver' 306 echomsg ':Nread dav://machine[:port]/path uses cadaver'
294 echo ':Nread fetch://machine/path uses fetch' 307 echomsg ':Nread fetch://machine/path uses fetch'
295 echo ':Nread ftp://[user@]machine[:port]/path uses ftp autodetects <.netrc>' 308 echomsg ':Nread ftp://[user@]machine[:port]/path uses ftp autodetects <.netrc>'
296 echo ':Nread http://[user@]machine/path uses http wget' 309 echomsg ':Nread http://[user@]machine/path uses http wget'
297 echo ':Nread rcp://[user@]machine/path uses rcp' 310 echomsg ':Nread rcp://[user@]machine/path uses rcp'
298 echo ':Nread rsync://machine[:port]/path uses rsync' 311 echomsg ':Nread rsync://machine[:port]/path uses rsync'
299 echo ':Nread scp://[user@]machine[[:#]port]/path uses scp' 312 echomsg ':Nread scp://[user@]machine[[:#]port]/path uses scp'
300 echo ':Nread sftp://[user@]machine[[:#]port]/path uses sftp' 313 echomsg ':Nread sftp://[user@]machine[[:#]port]/path uses sftp'
301 break 314 break
302 315
303 elseif match(choice,"^\"") != -1 316 elseif match(choice,"^\"") != -1
304 " Reconstruct Choice if choice starts with '"' 317 " Reconstruct Choice if choice starts with '"'
305 " call Decho("reconstructing choice") 318 " call Decho("reconstructing choice")
313 326
314 while match(choice,"\"$") == -1 327 while match(choice,"\"$") == -1
315 let wholechoice = wholechoice . " " . choice 328 let wholechoice = wholechoice . " " . choice
316 let ichoice = ichoice + 1 329 let ichoice = ichoice + 1
317 if ichoice > a:0 330 if ichoice > a:0
318 echoerr "Unbalanced string in filename '". wholechoice ."'" 331 if !exists("g:netrw_quiet")
332 echoerr "Unbalanced string in filename '". wholechoice ."'"
333 endif
319 " call Dret("NetRead") 334 " call Dret("NetRead")
320 return 335 return
321 endif 336 endif
322 let choice= a:{ichoice} 337 let choice= a:{ichoice}
323 endwhile 338 endwhile
395 else 410 else
396 " call Decho("executing: %!".g:netrw_ftp_cmd." -i ".g:netrw_machine) 411 " call Decho("executing: %!".g:netrw_ftp_cmd." -i ".g:netrw_machine)
397 exe g:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i ".g:netrw_machine 412 exe g:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i ".g:netrw_machine
398 endif 413 endif
399 " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar) 414 " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar)
400 if getline(1) !~ "^$" 415 if getline(1) !~ "^$" && !exists("g:netrw_quiet")
401 let debugkeep= &debug 416 let debugkeep= &debug
402 set debug=msg 417 set debug=msg
403 echoerr getline(1) 418 echoerr getline(1)
404 exe "echomsg '".getline(1)."'"
405 let &debug= debugkeep 419 let &debug= debugkeep
406 endif 420 endif
407 bd! 421 bd!
408 let result = s:NetGetFile(readcmd, tmpfile, b:netrw_method) 422 let result = s:NetGetFile(readcmd, tmpfile, b:netrw_method)
409 let b:netrw_lastfile = choice 423 let b:netrw_lastfile = choice
443 " call Decho("executing: %!".g:netrw_ftp_cmd." -i -n") 457 " call Decho("executing: %!".g:netrw_ftp_cmd." -i -n")
444 exe g:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i -n" 458 exe g:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i -n"
445 " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar) 459 " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar)
446 if getline(1) !~ "^$" 460 if getline(1) !~ "^$"
447 " call Decho("error<".getline(1).">") 461 " call Decho("error<".getline(1).">")
448 echoerr getline(1) 462 if !exists("g:netrw_quiet")
463 echoerr getline(1)
464 endif
449 endif 465 endif
450 bd! 466 bd!
451 let result = s:NetGetFile(readcmd, tmpfile, b:netrw_method) 467 let result = s:NetGetFile(readcmd, tmpfile, b:netrw_method)
452 let b:netrw_lastfile = choice 468 let b:netrw_lastfile = choice
453 469
473 489
474 "......................................... 490 ".........................................
475 elseif b:netrw_method == 5 " read with http (wget) 491 elseif b:netrw_method == 5 " read with http (wget)
476 " call Decho("read via http (method #5)") 492 " call Decho("read via http (method #5)")
477 if g:netrw_http_cmd == "" 493 if g:netrw_http_cmd == ""
478 echoerr "neither wget nor fetch command is available" 494 if !exists("g:netrw_quiet")
495 echoerr "neither wget nor fetch command is available"
496 endif
479 exit 497 exit
480 endif 498 endif
481 499
482 if match(b:netrw_fname,"#") == -1 500 if match(b:netrw_fname,"#") == -1
483 " simple wget 501 " simple wget
548 "......................................... 566 ".........................................
549 " fetch: NetRead Method #8 567 " fetch: NetRead Method #8
550 " fetch://[user@]host[:http]/path 568 " fetch://[user@]host[:http]/path
551 elseif b:netrw_method == 8 " read with fetch 569 elseif b:netrw_method == 8 " read with fetch
552 if g:netrw_fetch_cmd == "" 570 if g:netrw_fetch_cmd == ""
553 echoerr "fetch command not available" 571 if !exists("g:netrw_quiet")
572 echoerr "fetch command not available"
573 endif
554 exit 574 exit
555 endif 575 endif
556 if exists("g:netrw_option") && g:netrw_option == ":http" 576 if exists("g:netrw_option") && g:netrw_option == ":http"
557 let netrw_option= "http" 577 let netrw_option= "http"
558 else 578 else
747 else 767 else
748 exe "let choice= a:" . ichoice 768 exe "let choice= a:" . ichoice
749 769
750 " Reconstruct Choice if choice starts with '"' 770 " Reconstruct Choice if choice starts with '"'
751 if match(choice,"?") == 0 771 if match(choice,"?") == 0
752 echo 'NetWrite Usage:"' 772 echomsg 'NetWrite Usage:"'
753 echo ':Nwrite machine:path uses rcp' 773 echomsg ':Nwrite machine:path uses rcp'
754 echo ':Nwrite "machine path" uses ftp with <.netrc>' 774 echomsg ':Nwrite "machine path" uses ftp with <.netrc>'
755 echo ':Nwrite "machine id password path" uses ftp' 775 echomsg ':Nwrite "machine id password path" uses ftp'
756 echo ':Nwrite dav://[user@]machine/path uses cadaver' 776 echomsg ':Nwrite dav://[user@]machine/path uses cadaver'
757 echo ':Nwrite fetch://[user@]machine/path uses fetch' 777 echomsg ':Nwrite fetch://[user@]machine/path uses fetch'
758 echo ':Nwrite ftp://machine[#port]/path uses ftp (autodetects <.netrc>)' 778 echomsg ':Nwrite ftp://machine[#port]/path uses ftp (autodetects <.netrc>)'
759 echo ':Nwrite rcp://machine/path uses rcp' 779 echomsg ':Nwrite rcp://machine/path uses rcp'
760 echo ':Nwrite rsync://[user@]machine/path uses rsync' 780 echomsg ':Nwrite rsync://[user@]machine/path uses rsync'
761 echo ':Nwrite scp://[user@]machine[[:#]port]/path uses scp' 781 echomsg ':Nwrite scp://[user@]machine[[:#]port]/path uses scp'
762 echo ':Nwrite sftp://[user@]machine/path uses sftp' 782 echomsg ':Nwrite sftp://[user@]machine/path uses sftp'
763 break 783 break
764 784
765 elseif match(choice,"^\"") != -1 785 elseif match(choice,"^\"") != -1
766 if match(choice,"\"$") != -1 786 if match(choice,"\"$") != -1
767 " case "..." 787 " case "..."
773 793
774 while match(choice,"\"$") == -1 794 while match(choice,"\"$") == -1
775 let wholechoice= wholechoice . " " . choice 795 let wholechoice= wholechoice . " " . choice
776 let ichoice = ichoice + 1 796 let ichoice = ichoice + 1
777 if choice > a:0 797 if choice > a:0
778 echoerr "Unbalanced string in filename '". wholechoice ."'" 798 if !exists("g:netrw_quiet")
799 echoerr "Unbalanced string in filename '". wholechoice ."'"
800 endif
779 " call Dret("NetWrite") 801 " call Dret("NetWrite")
780 return 802 return
781 endif 803 endif
782 let choice= a:{ichoice} 804 let choice= a:{ichoice}
783 endwhile 805 endwhile
841 " call Decho("executing: %!".g:netrw_ftp_cmd." -i ".g:netrw_machine) 863 " call Decho("executing: %!".g:netrw_ftp_cmd." -i ".g:netrw_machine)
842 exe g:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i ".g:netrw_machine 864 exe g:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i ".g:netrw_machine
843 endif 865 endif
844 " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar) 866 " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar)
845 if getline(1) !~ "^$" 867 if getline(1) !~ "^$"
846 echoerr getline(1) 868 if !exists("g:netrw_quiet")
869 echoerr getline(1)
870 endif
847 let mod=1 871 let mod=1
848 endif 872 endif
849 bd! 873 bd!
850 let b:netrw_lastfile = choice 874 let b:netrw_lastfile = choice
851 875
878 norm! 1Gdd 902 norm! 1Gdd
879 " call Decho("executing: %!".g:netrw_ftp_cmd." -i -n") 903 " call Decho("executing: %!".g:netrw_ftp_cmd." -i -n")
880 exe g:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i -n" 904 exe g:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i -n"
881 " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar) 905 " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar)
882 if getline(1) !~ "^$" 906 if getline(1) !~ "^$"
883 echoerr getline(1) 907 if !exists("g:netrw_quiet")
908 echoerr getline(1)
909 endif
884 let mod=1 910 let mod=1
885 endif 911 endif
886 bd! 912 bd!
887 913
888 "......................................... 914 ".........................................
904 let b:netrw_lastfile = choice 930 let b:netrw_lastfile = choice
905 931
906 "......................................... 932 ".........................................
907 " http: NetWrite Method #5 933 " http: NetWrite Method #5
908 elseif b:netrw_method == 5 934 elseif b:netrw_method == 5
909 echoerr "***warning*** currently <netrw.vim> does not support writing using http:" 935 if !exists("g:netrw_quiet")
936 echoerr "***warning*** currently <netrw.vim> does not support writing using http:"
937 endif
910 938
911 "......................................... 939 ".........................................
912 " dav: NetWrite Method #6 940 " dav: NetWrite Method #6
913 elseif b:netrw_method == 6 " write with cadaver 941 elseif b:netrw_method == 6 " write with cadaver
914 " call Decho("write via cadaver (method #6)") 942 " call Decho("write via cadaver (method #6)")
995 " with the requested remote hostname first. 1023 " with the requested remote hostname first.
996 fun! <SID>NetBrowse(dirname) 1024 fun! <SID>NetBrowse(dirname)
997 " call Dfunc("NetBrowse(dirname<".a:dirname.">) longlist=".g:netrw_longlist) 1025 " call Dfunc("NetBrowse(dirname<".a:dirname.">) longlist=".g:netrw_longlist)
998 1026
999 " sanity check 1027 " sanity check
1000 if exists("b:netrw_method") && (b:netrw_method =~ '[23]' && !executable("ftp")) 1028 if exists("b:netrw_method") && b:netrw_method =~ '[23]'
1001 echoerr "***netrw*** this system doesn't support remote directory listing via ftp" 1029 if !executable("ftp")
1002 " call Dret("NetBrowse") 1030 if !exists("g:netrw_quiet")
1003 return 1031 echoerr "***netrw*** this system doesn't support remote directory listing via ftp"
1032 endif
1033 " call Dret("NetBrowse")
1034 return
1035 endif
1004 elseif !exists("g:netrw_list_cmd") || g:netrw_list_cmd == '' 1036 elseif !exists("g:netrw_list_cmd") || g:netrw_list_cmd == ''
1005 echoerr "***netrw*** this system doesn't support remote directory listing via ssh" 1037 if !exists("g:netrw_quiet")
1038 echoerr "***netrw*** this system doesn't support remote directory listing via ssh"
1039 endif
1006 " call Dret("NetBrowse") 1040 " call Dret("NetBrowse")
1007 return 1041 return
1008 endif 1042 endif
1009 1043
1010 " make this buffer modifiable 1044 " make this buffer modifiable
1012 1046
1013 " analyze a:dirname and g:netrw_list_cmd 1047 " analyze a:dirname and g:netrw_list_cmd
1014 let dirpat = '^\(\w\{-}\)://\(\w\+@\)\=\([^/]\+\)/\(.*\)$' 1048 let dirpat = '^\(\w\{-}\)://\(\w\+@\)\=\([^/]\+\)/\(.*\)$'
1015 " call Decho("dirpat<".dirpat.">") 1049 " call Decho("dirpat<".dirpat.">")
1016 if a:dirname !~ dirpat 1050 if a:dirname !~ dirpat
1017 echoerr "NetBrowse: I don't understand your dirname<".a:dirname.">" 1051 if !exists("g:netrw_quiet")
1052 echoerr "NetBrowse: I don't understand your dirname<".a:dirname.">"
1053 endif
1018 " call Dret("NetBrowse : badly formatted dirname<".a:dirname.">") 1054 " call Dret("NetBrowse : badly formatted dirname<".a:dirname.">")
1019 return 1055 return
1020 endif 1056 endif
1021 1057
1022 let method = substitute(a:dirname,dirpat,'\1','') 1058 let method = substitute(a:dirname,dirpat,'\1','')
1029 " call Decho("set up machine<".machine.">") 1065 " call Decho("set up machine<".machine.">")
1030 " call Decho("set up path <".path .">") 1066 " call Decho("set up path <".path .">")
1031 " call Decho("set up fname <".fname .">") 1067 " call Decho("set up fname <".fname .">")
1032 1068
1033 if method == "ftp" 1069 if method == "ftp"
1034 let listcmd = "-lF" 1070 let listcmd = g:netrw_ftp_list_cmd
1035 else 1071 else
1036 let listcmd = substitute(g:netrw_list_cmd,'\<HOSTNAME\>',user.machine,'') 1072 let listcmd = substitute(g:netrw_list_cmd,'\<HOSTNAME\>',user.machine,'')
1037 endif 1073 endif
1038 if exists("b:netrw_method") 1074 if exists("b:netrw_method")
1039 " call Decho("setting s:netrw_method<".b:netrw_method.">") 1075 " call Decho("setting s:netrw_method<".b:netrw_method.">")
1040 let s:netrw_method= b:netrw_method 1076 let s:netrw_method= b:netrw_method
1041 endif 1077 endif
1042 1078
1043 " optionally sort by time (-t) or by size (-S) 1079 " optionally sort by time (-t) or by size (-S)
1044 if g:netrw_sort_by =~ "^t" 1080 if listcmd == "dir" && g:netrw_sort_by =~ "^[ts]"
1045 let listcmd= listcmd."t" 1081 echoerr "***warning*** windows' ftp doesn't support time/size sorts (get cygwin, set g:netrw_cygwin)"
1046 elseif g:netrw_sort_by =~ "^s" 1082 else
1047 let listcmd= listcmd."S" 1083 if g:netrw_sort_by =~ "^t"
1048 endif 1084 let listcmd= listcmd."t"
1049 " optionally sort in reverse 1085 elseif g:netrw_sort_by =~ "^s"
1050 if g:netrw_sort_direction =~ "^r" 1086 let listcmd= listcmd."S"
1051 let listcmd= listcmd."r" 1087 endif
1088 " optionally sort in reverse
1089 if g:netrw_sort_direction =~ "^r" && listcmd == "dir"
1090 let listcmd= listcmd."r"
1091 endif
1052 endif 1092 endif
1053 1093
1054 " call Decho("set up listcmd<".listcmd.">") 1094 " call Decho("set up listcmd<".listcmd.">")
1055 if fname =~ '@$' && fname !~ '^"' 1095 if fname =~ '@$' && fname !~ '^"'
1056 " call Decho("attempt transfer of symlink as file") 1096 " call Decho("attempt transfer of symlink as file")
1069 let path= substitute(path,'[*=@|]$','','e') 1109 let path= substitute(path,'[*=@|]$','','e')
1070 " call Decho("new path<".path.">") 1110 " call Decho("new path<".path.">")
1071 1111
1072 " remote-read the requested file into current buffer 1112 " remote-read the requested file into current buffer
1073 enew! 1113 enew!
1114 " call Decho("exe file .method."://".user.machine."/".escape(path,s:netrw_cd_escape))
1074 exe "file ".method."://".user.machine."/".escape(path,s:netrw_cd_escape) 1115 exe "file ".method."://".user.machine."/".escape(path,s:netrw_cd_escape)
1075 exe "silent doau BufReadPre ".fname 1116 exe "silent doau BufReadPre ".fname
1076 silent call s:NetRead(method."://".user.machine."/".path) 1117 silent call s:NetRead(method."://".user.machine."/".path)
1077 exe "silent doau BufReadPost ".fname 1118 exe "silent doau BufReadPost ".fname
1078 keepjumps 1d 1119 keepjumps 1d
1085 " --------------------------------------------------------------------- 1126 " ---------------------------------------------------------------------
1086 " Perform Directory Listing: 1127 " Perform Directory Listing:
1087 " call Decho("Perform directory listing...") 1128 " call Decho("Perform directory listing...")
1088 " set up new buffer and map 1129 " set up new buffer and map
1089 let bufname = method.'://'.user.machine.'/'.path 1130 let bufname = method.'://'.user.machine.'/'.path
1090 let bufnamenr = bufexists(bufname) 1131 let bufnamenr = bufnr(bufname.'$')
1091 " call Decho("bufname<".bufname."> bufnamenr=".bufnamenr) 1132 " call Decho("bufname<".bufname."> bufnamenr=".bufnamenr)
1092 if bufnamenr != 0 1133 if bufnamenr != -1
1093 " buffer already exists, switch to it! 1134 " buffer already exists, switch to it!
1094 " call Decho("buffer already exists, switching to it") 1135 " call Decho("buffer already exists, switching to it")
1095 exe "b ".bufnamenr 1136 exe "b ".bufnamenr
1096 if line("$") >= 5 1137 if line("$") >= 5
1097 " call Dret("NetBrowse") 1138 " call Dret("NetBrowse")
1102 enew! 1143 enew!
1103 endif 1144 endif
1104 1145
1105 " rename file to reflect where its from 1146 " rename file to reflect where its from
1106 setlocal ts=32 bt=nofile bh=wipe nobl 1147 setlocal ts=32 bt=nofile bh=wipe nobl
1148 " call Decho("exe file ".escape(bufname,s:netrw_cd_escape))
1107 exe 'file '.escape(bufname,s:netrw_cd_escape) 1149 exe 'file '.escape(bufname,s:netrw_cd_escape)
1108 " call Decho("renaming file to bufname<".bufname.">") 1150 " call Decho("renaming file to bufname<".bufname.">")
1109 setlocal bt=nowrite bh=hide nobl 1151 setlocal bt=nowrite bh=hide nobl
1110 1152
1111 " set up buffer-local mappings 1153 " set up buffer-local mappings
1112 " call Decho("set up buffer-local mappings") 1154 " call Decho("set up buffer-local mappings")
1113 nnoremap <buffer> <silent> <cr> :exe "norm! 0"<bar>call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),<SID>NetGetWord()))<cr> 1155 nnoremap <buffer> <silent> <cr> :exe "norm! 0"<bar>call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),<SID>NetGetWord()))<cr>
1114 nnoremap <buffer> <silent> <c-l> :exe "norm! 0"<bar>call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),'./'))<cr> 1156 nnoremap <buffer> <silent> <c-l> :exe "norm! 0"<bar>call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),'./'))<cr>
1115 nnoremap <buffer> <silent> - :exe "norm! 0"<bar>call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),'../'))<cr> 1157 nnoremap <buffer> <silent> - :exe "norm! 0"<bar>call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),'../'))<cr>
1116 nnoremap <buffer> <silent> a :let g:netrw_hide=!g:netrw_hide<bar>exe "norm! 0"<bar>call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),'./'))<cr> 1158 nnoremap <buffer> <silent> a :let g:netrw_hide=(g:netrw_hide+1)%3<bar>exe "norm! 0"<bar>call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),'./'))<cr>
1117 nnoremap <buffer> <silent> b :<c-u>call <SID>NetBookmarkDir(0,expand("%"))<cr> 1159 nnoremap <buffer> <silent> b :<c-u>call <SID>NetBookmarkDir(0,expand("%"))<cr>
1118 nnoremap <buffer> <silent> B :<c-u>call <SID>NetBookmarkDir(1,expand("%"))<cr> 1160 nnoremap <buffer> <silent> B :<c-u>call <SID>NetBookmarkDir(1,expand("%"))<cr>
1119 nnoremap <buffer> <silent> <c-h> :call <SID>NetHideEdit(0)<cr> 1161 nnoremap <buffer> <silent> <c-h> :call <SID>NetHideEdit(0)<cr>
1120 nnoremap <buffer> <silent> i :call <SID>NetLongList(0)<cr> 1162 nnoremap <buffer> <silent> i :call <SID>NetLongList(0)<cr>
1121 nnoremap <buffer> <silent> o :exe g:netrw_winsize."wincmd s"<bar>exe "norm! 0"<bar>call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),<SID>NetGetWord()))<cr> 1163 nnoremap <buffer> <silent> o :exe (g:netrw_alto? "bel " : "abo ").g:netrw_winsize."wincmd s"<bar>exe "norm! 0"<bar>call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),<SID>NetGetWord()))<cr>
1122 nnoremap <buffer> <silent> q :<c-u>call <SID>NetBookmarkDir(2,expand("%"))<cr> 1164 nnoremap <buffer> <silent> q :<c-u>call <SID>NetBookmarkDir(2,expand("%"))<cr>
1123 nnoremap <buffer> <silent> r :let g:netrw_sort_direction= (g:netrw_sort_direction =~ 'n')? 'r' : 'n'<bar>exe "norm! 0"<bar>call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),'./'))<cr> 1165 nnoremap <buffer> <silent> r :let g:netrw_sort_direction= (g:netrw_sort_direction =~ 'n')? 'r' : 'n'<bar>exe "norm! 0"<bar>call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),'./'))<cr>
1124 nnoremap <buffer> <silent> s :call <SID>NetSaveWordPosn()<bar>let g:netrw_sort_by= (g:netrw_sort_by =~ 'n')? 'time' : (g:netrw_sort_by =~ 't')? 'size' : 'name'<bar>exe "norm! 0"<bar>call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),'./'))<bar>call <SID>NetRestoreWordPosn()<cr> 1166 nnoremap <buffer> <silent> s :call <SID>NetSaveWordPosn()<bar>let g:netrw_sort_by= (g:netrw_sort_by =~ 'n')? 'time' : (g:netrw_sort_by =~ 't')? 'size' : 'name'<bar>exe "norm! 0"<bar>call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),'./'))<bar>call <SID>NetRestoreWordPosn()<cr>
1125 nnoremap <buffer> <silent> S :call <SID>NetSortSequence(0)<cr> 1167 nnoremap <buffer> <silent> S :call <SID>NetSortSequence(0)<cr>
1126 nnoremap <buffer> <silent> v :exe g:netrw_winsize."wincmd v"<bar>exe "norm! 0"<bar>call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),<SID>NetGetWord()))<cr> 1168 nnoremap <buffer> <silent> v :exe (g:netrw_altv? "rightb " : "lefta ").g:netrw_winsize."wincmd v"<bar>exe "norm! 0"<bar>call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),<SID>NetGetWord()))<cr>
1127 nnoremap <buffer> <silent> x :exe "norm! 0"<bar>call <SID>NetBrowseX(<SID>NetBrowseChgDir(expand("%"),<SID>NetGetWord()),1)<cr> 1169 nnoremap <buffer> <silent> x :exe "norm! 0"<bar>call <SID>NetBrowseX(<SID>NetBrowseChgDir(expand("%"),<SID>NetGetWord()),1)<cr>
1128 nnoremap <buffer> <silent> <2-leftmouse> :exe "norm! 0"<bar>call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),<SID>NetGetWord()))<cr> 1170 nnoremap <buffer> <silent> <2-leftmouse> :exe "norm! 0"<bar>call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),<SID>NetGetWord()))<cr>
1129 exe 'nnoremap <buffer> <silent> <del> :exe "norm! 0"<bar>call <SID>NetBrowseRm("'.user.machine.'","'.path.'")<cr>' 1171 exe 'nnoremap <buffer> <silent> <del> :exe "norm! 0"<bar>call <SID>NetBrowseRm("'.user.machine.'","'.path.'")<cr>'
1130 exe 'vnoremap <buffer> <silent> <del> :call <SID>NetBrowseRm("'.user.machine.'","'.path.'")<cr>' 1172 exe 'vnoremap <buffer> <silent> <del> :call <SID>NetBrowseRm("'.user.machine.'","'.path.'")<cr>'
1131 exe 'nnoremap <buffer> <silent> d :call <SID>NetMakeDir("'.user.machine.'")<cr>' 1173 exe 'nnoremap <buffer> <silent> d :call <SID>NetMakeDir("'.user.machine.'")<cr>'
1155 else 1197 else
1156 " sorted by size or date 1198 " sorted by size or date
1157 keepjumps put ='\" Sorted by '.sortby 1199 keepjumps put ='\" Sorted by '.sortby
1158 endif 1200 endif
1159 if g:netrw_list_hide != "" && g:netrw_hide 1201 if g:netrw_list_hide != "" && g:netrw_hide
1160 keepjumps put ='\" Hiding: '.g:netrw_list_hide 1202 if g:netrw_hide == 1
1203 keepjumps put ='\" Hiding: '.g:netrw_list_hide
1204 else
1205 keepjumps put ='\" Showing: '.g:netrw_list_hide
1206 endif
1161 let s:netrw_bannercnt= s:netrw_bannercnt + 1 1207 let s:netrw_bannercnt= s:netrw_bannercnt + 1
1162 endif 1208 endif
1163 keepjumps put ='\" Quick Help: ?:help -:go up dir D:delete R:rename s:sort-by x:exec' 1209 keepjumps put ='\" Quick Help: ?:help -:go up dir D:delete R:rename s:sort-by x:exec'
1164 keepjumps put ='\" ===========================================================================' 1210 keepjumps put ='\" ==========================================================================='
1165 1211
1166 " remote read the requested directory listing 1212 " remote read the requested directory listing
1167 " Use ftp if that was the file-transfer method selected, otherwise use ssh 1213 " Use ftp if that was the file-transfer method selected, otherwise use ssh
1168 " Note that not all ftp servers honor the options for ls 1214 " Note that not all ftp servers honor the options for ls
1169 if method == "ftp" 1215 if method == "ftp"
1170 call NetBrowseFtpCmd(path,"ls ".listcmd) 1216 " use ftp to get remote file listing
1217 " call Decho("use ftp to get remote file listing")
1218 call NetBrowseFtpCmd(path,listcmd)
1219
1171 keepjumps 1d 1220 keepjumps 1d
1172 1221
1173 if !g:netrw_longlist 1222 if !g:netrw_longlist
1223 " shorten the listing
1174 " call Decho("generate short listing") 1224 " call Decho("generate short listing")
1175 " shorten the listing
1176 exe "keepjumps ".s:netrw_bannercnt 1225 exe "keepjumps ".s:netrw_bannercnt
1177 " cleanup 1226 " cleanup
1178 while getline(".") =~ g:netrw_ftp_browse_reject 1227 while getline(".") =~ g:netrw_ftp_browse_reject
1179 keepjumps d 1228 keepjumps d
1180 endwhile 1229 endwhile
1181 keepjumps put='../' 1230
1182 keepjumps put='./' 1231 " if there's no ../ listed, then put ./ and ../ in
1232 let line1= line(".")
1233 keepjumps 1
1234 silent keepjumps call search('^\.\.\/\%(\s\|$\)','W')
1235 let line2= line(".")
1236 if line2 == 0
1237 keepjumps put='../'
1238 keepjumps put='./'
1239 endif
1240 exe "keepjumps ".line1
1241 keepjumps norm! 0
1242
1243 " more cleanup
1183 exe 'keepjumps silent '.s:netrw_bannercnt.',$s/^\(\%(\S\+\s\+\)\{7}\S\+\)\s\+\(\S.*\)$/\2/e' 1244 exe 'keepjumps silent '.s:netrw_bannercnt.',$s/^\(\%(\S\+\s\+\)\{7}\S\+\)\s\+\(\S.*\)$/\2/e'
1184 exe "keepjumps silent ".s:netrw_bannercnt.',$g/ -> /s# -> .*/$#/#' 1245 exe "keepjumps silent ".s:netrw_bannercnt.',$g/ -> /s# -> .*/$#/#'
1185 exe "keepjumps silent ".s:netrw_bannercnt.',$g/ -> /s# -> .*$#/#' 1246 exe "keepjumps silent ".s:netrw_bannercnt.',$g/ -> /s# -> .*$#/#'
1186 endif 1247 endif
1187 1248
1188 else 1249 else
1189 " call Decho("use ssh") 1250 " use ssh to get remote file listing
1251 " call Decho("use ssh to get remote file listing")
1190 let shq= &shq? &shq : ( &sxq? &sxq : "'") 1252 let shq= &shq? &shq : ( &sxq? &sxq : "'")
1191 " call Decho("exe silent r! ".listcmd." ".shq.escape(path,s:netrw_cd_escape).shq) 1253 " call Decho("exe silent r! ".listcmd." ".shq.escape(path,s:netrw_cd_escape).shq)
1192 exe "silent r! ".listcmd." ".shq.escape(path,s:netrw_cd_escape).shq 1254 exe "silent r! ".listcmd." ".shq.escape(path,s:netrw_cd_escape).shq
1193 keepjumps 1d 1255 keepjumps 1d
1194 endif 1256 endif
1208 " cleanup 1270 " cleanup
1209 exe "keepjumps ".s:netrw_bannercnt 1271 exe "keepjumps ".s:netrw_bannercnt
1210 while getline(".") =~ '^total\s\+\d\+$' || getline(".") =~ 'Trying\s\+\d\+.*$' 1272 while getline(".") =~ '^total\s\+\d\+$' || getline(".") =~ 'Trying\s\+\d\+.*$'
1211 keepjumps d 1273 keepjumps d
1212 endwhile 1274 endwhile
1213 exe 'keepjumps '.s:netrw_bannercnt."put='./'" 1275 " if there's no ../ listed, then put ./ and ../ in
1214 exe 'keepjumps '.s:netrw_bannercnt."put='../'" 1276 let line1= line(".")
1277 keepjumps 1
1278 silent keepjumps call search('^\.\.\/\%(\s\|$\)','W')
1279 let line2= line(".")
1280 if line2 == 0
1281 exe 'keepjumps '.s:netrw_bannercnt."put='./'"
1282 exe 'keepjumps '.s:netrw_bannercnt."put='../'"
1283 endif
1284 exe "keepjumps ".line1
1285 keepjumps norm! 0
1215 endif 1286 endif
1216 1287
1217 exe 'keepjumps silent '.s:netrw_bannercnt.',$s/ -> .*$//e' 1288 exe 'keepjumps silent '.s:netrw_bannercnt.',$s/ -> .*$//e'
1218 exe 'keepjumps silent '.s:netrw_bannercnt.',$s/^\(\%(\S\+\s\+\)\{7}\S\+\)\s\+\(\S.*\)$/\2\t\1/e' 1289 exe 'keepjumps silent '.s:netrw_bannercnt.',$s/^\(\%(\S\+\s\+\)\{7}\S\+\)\s\+\(\S.*\)$/\2\t\1/e'
1219 exe s:netrw_bannercnt 1290 exe s:netrw_bannercnt
1227 if g:netrw_longlist 1298 if g:netrw_longlist
1228 " shorten the list to keep its width <= 80 characters 1299 " shorten the list to keep its width <= 80 characters
1229 exe "keepjumps silent ".s:netrw_bannercnt.',$s/\t[-dstrwx]\+/\t/e' 1300 exe "keepjumps silent ".s:netrw_bannercnt.',$s/\t[-dstrwx]\+/\t/e'
1230 endif 1301 endif
1231 endif 1302 endif
1303 exe "keepjumps ".s:netrw_bannercnt
1232 setlocal nomod 1304 setlocal nomod
1233 setlocal noma 1305 setlocal noma
1234 1306
1235 " call Dret("NetBrowse") 1307 " call Dret("NetBrowse")
1236 return 1308 return
1264 let dirname= dirname.'../' 1336 let dirname= dirname.'../'
1265 1337
1266 else 1338 else
1267 " strip off a directory name from dirname 1339 " strip off a directory name from dirname
1268 let dirname= substitute(dirname,'^\(.*/\)[^/]\+/','\1','') 1340 let dirname= substitute(dirname,'^\(.*/\)[^/]\+/','\1','')
1341 exe "silent! keepjumps ".curline.",$d"
1269 endif 1342 endif
1270 " call Decho("go up one dir: dirname<".dirname."> trailer<".trailer.">") 1343 " call Decho("go up one dir: dirname<".dirname."> trailer<".trailer.">")
1271 1344
1272 else 1345 else
1273 " go down one directory 1346 " go down one directory
1281 1354
1282 " --------------------------------------------------------------------- 1355 " ---------------------------------------------------------------------
1283 " NetGetWord: it gets the directory named under the cursor 1356 " NetGetWord: it gets the directory named under the cursor
1284 fun! <SID>NetGetWord() 1357 fun! <SID>NetGetWord()
1285 " call Dfunc("NetGetWord() line#".line(".")) 1358 " call Dfunc("NetGetWord() line#".line("."))
1286 let dirname= getline(".") 1359 if line(".") < s:netrw_bannercnt
1287 if dirname =~ '\t' 1360 let dirname= "./"
1288 let dirname= substitute(dirname,'\t.*$','','e') 1361 else
1362 let dirname= getline(".")
1363 if dirname =~ '\t'
1364 let dirname= substitute(dirname,'\t.*$','','e')
1365 endif
1289 endif 1366 endif
1290 " call Dret("NetGetWord <".dirname.">") 1367 " call Dret("NetGetWord <".dirname.">")
1291 return dirname 1368 return dirname
1292 endfun 1369 endfun
1293 1370
1297 " call Dfunc("NetBrowseRm(usrhost<".a:usrhost."> path<".a:path.">)") 1374 " call Dfunc("NetBrowseRm(usrhost<".a:usrhost."> path<".a:path.">)")
1298 " call Decho("firstline=".a:firstline." lastline=".a:lastline) 1375 " call Decho("firstline=".a:firstline." lastline=".a:lastline)
1299 1376
1300 " preparation for removing multiple files/directories 1377 " preparation for removing multiple files/directories
1301 let ctr= a:firstline 1378 let ctr= a:firstline
1379 let all= 0
1302 1380
1303 " remove multiple files and directories 1381 " remove multiple files and directories
1304 while ctr <= a:lastline 1382 while ctr <= a:lastline
1305 exe ctr 1383 exe ctr
1306 1384
1308 let rmfile= s:NetGetWord() 1386 let rmfile= s:NetGetWord()
1309 " call Decho("rmfile<".rmfile.">") 1387 " call Decho("rmfile<".rmfile.">")
1310 1388
1311 if rmfile !~ '^"' && (rmfile =~ '@$' || rmfile !~ '/$') 1389 if rmfile !~ '^"' && (rmfile =~ '@$' || rmfile !~ '/$')
1312 " attempt to remove file 1390 " attempt to remove file
1313 call inputsave() 1391 if !all
1314 let ok= input("Confirm deletion of file<".rmfile."> ","y") 1392 echohl Statement
1315 call inputrestore() 1393 call inputsave()
1316 1394 let ok= input("Confirm deletion of file<".rmfile."> ","[{y(es)},n(o),a(ll),q(uit)] ")
1317 if ok == "y" 1395 call inputrestore()
1396 echohl NONE
1397 let ok= substitute(ok,'\[{y(es)},n(o),a(ll),q(uit)]\s*','','e')
1398 if ok =~ 'a\%[ll]'
1399 let all= 1
1400 endif
1401 endif
1402
1403 if all || ok =~ 'y\%[es]' || ok == ""
1318 if exists("s:netrw_method") && (s:netrw_method == 2 || s:netrw_method == 3) 1404 if exists("s:netrw_method") && (s:netrw_method == 2 || s:netrw_method == 3)
1319 silent! keepjumps .,$d 1405 silent! keepjumps .,$d
1320 call NetBrowseFtpCmd(a:path,"delete ".rmfile) 1406 call NetBrowseFtpCmd(a:path,"delete ".rmfile)
1321 else 1407 else
1322 let netrw_rm_cmd= substitute(g:netrw_rm_cmd,'HOSTNAME',a:usrhost,'').' "'.escape(a:path.rmfile,s:netrw_cd_escape).'"' 1408 let netrw_rm_cmd= substitute(g:netrw_rm_cmd,'HOSTNAME',a:usrhost,'').' "'.escape(a:path.rmfile,s:netrw_cd_escape).'"'
1323 " call Decho("attempt to remove file: system(".netrw_rm_cmd.")") 1409 " call Decho("attempt to remove file: system(".netrw_rm_cmd.")")
1324 let ret= system(netrw_rm_cmd) 1410 let ret= system(netrw_rm_cmd)
1325 " call Decho("returned=".ret." errcode=".v:shell_error) 1411 " call Decho("returned=".ret." errcode=".v:shell_error)
1326 endif 1412 endif
1413 elseif ok =~ 'q\%[uit]'
1414 break
1327 endif 1415 endif
1328 1416
1329 else 1417 else
1330 " attempt to remove directory 1418 " attempt to remove directory
1331 call inputsave() 1419 if !all
1332 let ok= input("Confirm deletion of directory<".rmfile."> ","y") 1420 call inputsave()
1333 call inputrestore() 1421 let ok= input("Confirm deletion of directory<".rmfile."> ","[{y(es)},n(o),a(ll),q(uit)] ")
1334 1422 call inputrestore()
1335 if ok == "y" 1423 let ok= substitute(ok,'\[{y(es)},n(o),a(ll),q(uit)]\s*','','e')
1424 if ok =~ 'a\%[ll]'
1425 let all= 1
1426 endif
1427 endif
1428
1429 if all || ok =~ 'y\%[es]' || ok == ""
1336 if exists("s:netrw_method") && (s:netrw_method == 2 || s:netrw_method == 3) 1430 if exists("s:netrw_method") && (s:netrw_method == 2 || s:netrw_method == 3)
1337 call NetBrowseFtpCmd(a:path,"rmdir ".rmfile) 1431 call NetBrowseFtpCmd(a:path,"rmdir ".rmfile)
1338 else 1432 else
1339 let rmfile = a:path.rmfile 1433 let rmfile = a:path.rmfile
1340 let netrw_rmdir_cmd= substitute(g:netrw_rmdir_cmd,'HOSTNAME',a:usrhost,'').' '."'".'"'.rmfile.'"'."'" 1434 let netrw_rmdir_cmd= substitute(g:netrw_rmdir_cmd,'HOSTNAME',a:usrhost,'').' '."'".'"'.rmfile.'"'."'"
1346 let netrw_rmf_cmd= substitute(g:netrw_rmf_cmd,'HOSTNAME',a:usrhost,'').' '.substitute(rmfile,'/$','','e') 1440 let netrw_rmf_cmd= substitute(g:netrw_rmf_cmd,'HOSTNAME',a:usrhost,'').' '.substitute(rmfile,'/$','','e')
1347 " call Decho("2nd attempt to remove dir: system(".netrw_rmf_cmd.")") 1441 " call Decho("2nd attempt to remove dir: system(".netrw_rmf_cmd.")")
1348 let ret= system(netrw_rmf_cmd) 1442 let ret= system(netrw_rmf_cmd)
1349 " call Decho("returned=".ret." errcode=".v:shell_error) 1443 " call Decho("returned=".ret." errcode=".v:shell_error)
1350 1444
1351 if v:shell_error != 0 1445 if v:shell_error != 0 && !exists("g:netrw_quiet")
1352 echoerr "unable to remove directory<".rmfile."> -- is it empty?" 1446 echoerr "unable to remove directory<".rmfile."> -- is it empty?"
1353 endif 1447 endif
1354 endif 1448 endif
1355 endif 1449 endif
1450
1451 elseif ok =~ 'q\%[uit]'
1452 break
1356 endif 1453 endif
1357 endif 1454 endif
1358 1455
1359 let ctr= ctr + 1 1456 let ctr= ctr + 1
1360 endwhile 1457 endwhile
1412 " NetBrowseX: allows users to write custom functions to operate on {{{2 1509 " NetBrowseX: allows users to write custom functions to operate on {{{2
1413 " files given their extension. Passes 0=local, 1=remote 1510 " files given their extension. Passes 0=local, 1=remote
1414 fun! <SID>NetBrowseX(fname,remote) 1511 fun! <SID>NetBrowseX(fname,remote)
1415 " call Dfunc("NetBrowseX(".a:fname." remote=".a:remote.")") 1512 " call Dfunc("NetBrowseX(".a:fname." remote=".a:remote.")")
1416 1513
1514 " set up the filename
1515 " (lower case the extension, make a local copy of a remote file)
1417 let exten= substitute(a:fname,'.*\.\(.\{-}\)','\1','e') 1516 let exten= substitute(a:fname,'.*\.\(.\{-}\)','\1','e')
1418 if has("win32") || has("win95") || has("win64") || has("win16") 1517 if has("win32") || has("win95") || has("win64") || has("win16")
1419 let exten= substitute(exten,'^.*$','\L&\E','') 1518 let exten= substitute(exten,'^.*$','\L&\E','')
1420 endif 1519 endif
1520 let fname= escape(a:fname,"%#")
1521 " call Decho("fname<".fname."> after escape()")
1522
1523 if a:remote == 1
1524 " create a local copy
1525 let fname= tempname().".".exten
1526 " call Decho("create a local copy of <".a:fname."> as <".fname.">")
1527 exe "keepjumps silent bot 1new ".a:fname
1528 let eikeep= &ei
1529 set ei=all bh=delete
1530 exe "w! ".fname
1531 let &ei= eikeep
1532 q
1533 endif
1421 " call Decho("exten<".exten."> "."NetrwFileHandler_".exten."():exists=".exists("*NetrwFileHandler_".exten)) 1534 " call Decho("exten<".exten."> "."NetrwFileHandler_".exten."():exists=".exists("*NetrwFileHandler_".exten))
1422 if exten != "" && exists("*NetrwFileHandler_".exten) 1535
1423 1536 " set up redirection
1424 let fname= a:fname 1537 if &srr =~ "%s"
1425 if a:remote == 1 1538 let redir= substitute(&srr,"%s","/dev/null"."")
1426 " create a local copy 1539 else
1427 let fname= tempname().".".exten 1540 let redir= &srr . "/dev/null"
1428 " call Decho("create a local copy of <".a:fname."> as <".fname.">") 1541 endif
1429 exe "keepjumps silent bot 1new ".a:fname 1542 " call Decho("redir:".redir.":")
1430 let eikeep= &ei 1543
1431 set ei=all bh=delete 1544 " execute the file handler
1432 exe "w! ".fname 1545 if has("win32") || has("win64")
1433 let &ei= eikeep 1546 " call Decho('exe silent !start rundll32 url.dll,FileProtocolHandler "'.escape(fname, '%#').'"')
1434 q 1547 exe 'silent !start rundll32 url.dll,FileProtocolHandler "'.escape(fname, '%#').'"'
1435 endif 1548 let ret= v:shell_error
1436 1549
1550 elseif has("unix") && executable("kfmclient")
1551 " call Decho("exe silent !kfmclient exec '".escape(fname,'%#')."' ".redir)
1552 exe "silent !kfmclient exec '".escape(fname,'%#')."' ".redir
1553 let ret= v:shell_error
1554
1555 elseif has("unix") && executable("gnome-open")
1556 " call Decho("exe silent !gnome-open '".escape(fname,'%#')."' ".redir)
1557 exe "silent !gnome-open '".escape(fname,'%#')."'".redir
1558 let ret= v:shell_error
1559
1560 elseif exten != "" && exists("*NetrwFileHandler_".exten)
1561 " call Decho("let ret= NetrwFileHandler_".exten.'("'.fname.'")')
1437 exe "let ret= NetrwFileHandler_".exten.'("'.fname.'")' 1562 exe "let ret= NetrwFileHandler_".exten.'("'.fname.'")'
1438 redraw! 1563 endif
1439 1564 redraw!
1440 " cleanup: remove temporary file, 1565
1441 " delete current buffer if success with handler, 1566 " cleanup: remove temporary file,
1442 " return to prior buffer (directory listing) 1567 " delete current buffer if success with handler,
1443 if a:remote == 1 && fname != a:fname 1568 " return to prior buffer (directory listing)
1444 " call Decho("deleting temporary file<".fname.">") 1569 if a:remote == 1 && fname != a:fname
1445 call delete(fname) 1570 " call Decho("deleting temporary file<".fname.">")
1446 endif 1571 call delete(fname)
1447 if ret != 0 1572 endif
1448 let eikeep= &ei 1573
1449 set ei=all bh=delete bt=nofile 1574 if a:remote == 1
1450 exe "norm! \<c-o>" 1575 let eikeep= &ei
1451 let &ei= eikeep 1576 set ei=all bh=delete bt=nofile
1452 redraw! 1577 exe "norm! \<c-o>"
1453 endif 1578 let &ei= eikeep
1579 redraw!
1454 endif 1580 endif
1455 1581
1456 " call Dret("NetBrowseX") 1582 " call Dret("NetBrowseX")
1457 endfun 1583 endfun
1458 1584
1480 if a:path != "" 1606 if a:path != ""
1481 put ='cd '.a:path 1607 put ='cd '.a:path
1482 endif 1608 endif
1483 exe "put ='".a:cmd."'" 1609 exe "put ='".a:cmd."'"
1484 1610
1611
1612 " redraw!|call inputsave()|call input("Pausing...")|call inputrestore() "Decho
1485 if exists("g:netrw_port") && g:netrw_port != "" 1613 if exists("g:netrw_port") && g:netrw_port != ""
1486 " call Decho("exe ".g:netrw_silentxfer.curline.",$!".g:netrw_ftp_cmd." -i ".g:netrw_machine." ".g:netrw_port) 1614 " call Decho("exe ".g:netrw_silentxfer.curline.",$!".g:netrw_ftp_cmd." -i ".g:netrw_machine." ".g:netrw_port)
1487 exe g:netrw_silentxfer.curline.",$!".g:netrw_ftp_cmd." -i ".g:netrw_machine." ".g:netrw_port 1615 exe g:netrw_silentxfer.curline.",$!".g:netrw_ftp_cmd." -i ".g:netrw_machine." ".g:netrw_port
1488 else 1616 else
1489 " call Decho("exe ".g:netrw_silentxfer.curline.",$!".g:netrw_ftp_cmd." -i ".g:netrw_machine) 1617 " call Decho("exe ".g:netrw_silentxfer.curline.",$!".g:netrw_ftp_cmd." -i ".g:netrw_machine)
1522 "......................................... 1650 ".........................................
1523 else 1651 else
1524 echo "***warning*** unable to comply with your request<" . choice . ">" 1652 echo "***warning*** unable to comply with your request<" . choice . ">"
1525 endif 1653 endif
1526 1654
1655 " cleanup for Windows
1656 if has("win32") || has("win95") || has("win64") || has("win16")
1657 keepjumps silent! %s/\r$//
1658 endif
1659 if a:cmd == "dir"
1660 " infer directory/link based on the file permission string
1661 keepjumps silent g/d\%([-r][-w][-x]\)\{3}/s@$@/@
1662 keepjumps silent g/l\%([-r][-w][-x]\)\{3}/s/$/@/
1663 if !g:netrw_longlist
1664 exe "keepjumps silent ".curline.',$s/^\%(\S\+\s\+\)\{8}//'
1665 endif
1666 endif
1667
1527 " restore settings 1668 " restore settings
1528 let &ff= ffkeep 1669 let &ff= ffkeep
1529 " call Dret("NetBrowseFtpCmd") 1670 " call Dret("NetBrowseFtpCmd")
1530 endfun 1671 endfun
1531 1672
1542 let listhide = substitute(listhide,'^.\{-},\(.*\)$','\1','e') 1683 let listhide = substitute(listhide,'^.\{-},\(.*\)$','\1','e')
1543 else 1684 else
1544 let hide = listhide 1685 let hide = listhide
1545 let listhide= "" 1686 let listhide= ""
1546 endif 1687 endif
1688
1689 " Prune the list by hiding any files which match
1547 " call Decho("pruning <".hide."> listhide<".listhide.">") 1690 " call Decho("pruning <".hide."> listhide<".listhide.">")
1548 exe 'keepjumps silent '.s:netrw_bannercnt.',$g~'.hide.'~d' 1691 if g:netrw_hide == 1
1692 exe 'keepjumps silent '.s:netrw_bannercnt.',$g~'.hide.'~d'
1693 elseif g:netrw_hide == 2
1694 exe 'keepjumps silent '.s:netrw_bannercnt.',$v~'.hide.'~d'
1695 endif
1549 endwhile 1696 endwhile
1550 1697
1551 " call Dret("NetrwListHide") 1698 " call Dret("NetrwListHide")
1552 endfun 1699 endfun
1553 1700
1660 " Local mkdir: 1807 " Local mkdir:
1661 " sanity checks 1808 " sanity checks
1662 let fullnewdir= b:netrw_curdir.'/'.newdirname 1809 let fullnewdir= b:netrw_curdir.'/'.newdirname
1663 " call Decho("fullnewdir<".fullnewdir.">") 1810 " call Decho("fullnewdir<".fullnewdir.">")
1664 if isdirectory(fullnewdir) 1811 if isdirectory(fullnewdir)
1665 echoerr "***warning*** <".newdirname."> is already a directory!" 1812 if !exists("g:netrw_quiet")
1813 echoerr "***warning*** <".newdirname."> is already a directory!"
1814 endif
1666 " call Dret("NetMakeDir : directory<".newdirname."> exists previously") 1815 " call Dret("NetMakeDir : directory<".newdirname."> exists previously")
1667 return 1816 return
1668 endif 1817 endif
1669 if filereadable(fullnewdir) 1818 if filereadable(fullnewdir)
1670 echoerr "***warning*** <".newdirname."> is already a file!" 1819 if !exists("g:netrw_quiet")
1820 echoerr "***warning*** <".newdirname."> is already a file!"
1821 endif
1671 " call Dret("NetMakeDir : file<".newdirname."> exists previously") 1822 " call Dret("NetMakeDir : file<".newdirname."> exists previously")
1672 return 1823 return
1673 endif 1824 endif
1674 let netrw_origdir= s:NetGetcwd(1) 1825 let netrw_origdir= s:NetGetcwd(1)
1675 exe 'cd '.b:netrw_curdir 1826 exe 'cd '.b:netrw_curdir
1685 norm! H0 1836 norm! H0
1686 let hline = line(".") 1837 let hline = line(".")
1687 call s:LocalBrowse(s:LocalBrowseChgDir(b:netrw_curdir,'./')) 1838 call s:LocalBrowse(s:LocalBrowseChgDir(b:netrw_curdir,'./'))
1688 exe "norm! ".hline."G0z\<CR>" 1839 exe "norm! ".hline."G0z\<CR>"
1689 exe linenum 1840 exe linenum
1690 else 1841 elseif !exists("g:netrw_quiet")
1691 echoerr "***warning*** unable to make directory<".newdirname.">" 1842 echoerr "***warning*** unable to make directory<".newdirname.">"
1692 endif 1843 endif
1693 redraw! 1844 redraw!
1694 1845
1695 else 1846 else
1704 norm! H0 1855 norm! H0
1705 let hline = line(".") 1856 let hline = line(".")
1706 call s:NetBrowse(s:NetBrowseChgDir(expand("%"),'./')) 1857 call s:NetBrowse(s:NetBrowseChgDir(expand("%"),'./'))
1707 exe "norm! ".hline."G0z\<CR>" 1858 exe "norm! ".hline."G0z\<CR>"
1708 exe linenum 1859 exe linenum
1709 else 1860 elseif !exists("g:netrw_quiet")
1710 echoerr "***warning*** unable to make directory<".newdirname.">" 1861 echoerr "***warning*** unable to make directory<".newdirname.">"
1711 endif 1862 endif
1712 redraw! 1863 redraw!
1713 endif 1864 endif
1714 1865
1773 " call Dfunc("LocalBrowse(dirname<".a:dirname.">) buf#".bufnr("%")." winnr=".winnr()) 1924 " call Dfunc("LocalBrowse(dirname<".a:dirname.">) buf#".bufnr("%")." winnr=".winnr())
1774 " call Decho("winbufnr1=".winbufnr(1)." winbufnr2=".winbufnr(2)." winbufnr3=".winbufnr(3)) 1925 " call Decho("winbufnr1=".winbufnr(1)." winbufnr2=".winbufnr(2)." winbufnr3=".winbufnr(3))
1775 " call Dredir("ls!") 1926 " call Dredir("ls!")
1776 1927
1777 if v:version < 603 1928 if v:version < 603
1778 echoerr "vim version<".v:version."> too old for browsing with netrw" 1929 if !exists("g:netrw_quiet")
1930 echoerr "vim version<".v:version."> too old for browsing with netrw"
1931 endif
1779 " call Dret("LocalBrowse : vim version<".v:version."> too old") 1932 " call Dret("LocalBrowse : vim version<".v:version."> too old")
1780 return 1933 return
1781 endif 1934 endif
1782 1935
1783 " record and change current directory 1936 " record and change current directory
1794 " call Decho("Perform directory listing...") 1947 " call Decho("Perform directory listing...")
1795 " set up new buffer and map 1948 " set up new buffer and map
1796 " remove the trailing "/" 1949 " remove the trailing "/"
1797 let dirnamens= substitute(dirname,'/$','','e') 1950 let dirnamens= substitute(dirname,'/$','','e')
1798 let dirnamenr= bufnr(dirnamens.'$') 1951 let dirnamenr= bufnr(dirnamens.'$')
1799 " call Decho("dirnamenr= bufnr(".dirnamens.")=".dirnamenr) 1952 " call Decho("dirnamenr= bufnr(".dirnamens.")=".dirnamenr." bufname(".dirnamenr.")=".bufname(dirnamenr))
1800 1953
1801 if dirnamenr != 0 && bufname(dirnamenr) != dirnamens 1954 if dirnamenr != 0 && bufname(dirnamenr) != dirnamens
1802 " try keeping the trailing slash 1955 " try keeping the trailing slash
1803 let dirnamenr = bufnr(dirname.'$') 1956 let dirnamenr = bufnr(dirname.'$')
1804 " call Decho("retry: dirnamenr= bufnr(".dirname.")=".dirnamenr) 1957 " call Decho("dirnamenr= bufnr(".dirname.")=".dirnamenr." bufname(".dirnamenr.")=".bufname(dirnamenr)." (retry with /)")
1805 endif 1958 endif
1806 " call Decho("bufnr(dirname<".dirname.">)=".dirnamenr)
1807 1959
1808 if dirnamenr != -1 1960 if dirnamenr != -1
1809 " buffer already exists (hidden), so switch to it! 1961 " buffer already exists (hidden), so switch to it!
1810 " call Decho("buffer already exists: dirnamenr=".dirnamenr." dirname<".dirname."> pre-exists") 1962 " call Decho("buffer already exists: dirnamenr=".dirnamenr." dirname<".dirname."> pre-exists")
1811 " call Dredir("ls!") 1963 " call Dredir("ls!")
1812 exe "b ".dirnamenr 1964 exe "b ".dirnamenr
1813 exe 'silent! cd '.escape(substitute(a:dirname,'\\','/','ge'),s:netrw_cd_escape) 1965 exe 'silent! cd '.escape(substitute(a:dirname,'\\','/','ge'),s:netrw_cd_escape)
1814 " call Decho("changed directory to<".dirname.">") 1966 " call Decho("changed directory to<".dirname.">")
1815 if a:dirname != "." && line("$") >= 5 1967 if a:dirname != "." && line("$") >= 5 && exists("b:netrw_curdir")
1816 " call Dret("LocalBrowse : buffer already exists with info, #".dirnamenr) 1968 if b:netrw_curdir == dirname
1817 if g:netrw_keepdir | exe 'keepjumps cd '.netrw_origdir | endif 1969 " call Dret("LocalBrowse : buffer already exists with info, #".dirnamenr)
1818 return 1970 if g:netrw_keepdir | exe 'keepjumps cd '.netrw_origdir | endif
1819 endif 1971 return
1820 " call Decho("buffer already exists, but needs listing (buf#".dirnamenr.")") 1972 endif
1973 endif
1974 " call Decho("buffer already exists, but needs re-listing (buf#".dirnamenr.")")
1821 setlocal ma 1975 setlocal ma
1822 keepjumps %d 1976 keepjumps %d
1823 if expand("%:p") != dirname 1977 if expand("%:p") != dirname
1824 exe 'silent! file '.escape(dirname,s:netrw_cd_escape) 1978 exe 'silent! file '.escape(dirname,s:netrw_cd_escape)
1825 " call Decho("renamed file to<".escape(dirname,' #').">") 1979 " call Decho("renamed file to<".escape(dirname,' #').">")
1837 " call Decho("Setting up local browser maps") 1991 " call Decho("Setting up local browser maps")
1838 let b:netrw_curdir= s:NetGetcwd(1) 1992 let b:netrw_curdir= s:NetGetcwd(1)
1839 nnoremap <buffer> <silent> <cr> :exe "norm! 0"<bar>call <SID>LocalBrowse(<SID>LocalBrowseChgDir(b:netrw_curdir,<SID>NetGetWord()))<cr> 1993 nnoremap <buffer> <silent> <cr> :exe "norm! 0"<bar>call <SID>LocalBrowse(<SID>LocalBrowseChgDir(b:netrw_curdir,<SID>NetGetWord()))<cr>
1840 nnoremap <buffer> <silent> <c-l> :exe "norm! 0"<bar>call <SID>LocalBrowse(<SID>LocalBrowseChgDir(b:netrw_curdir,'./'))<cr> 1994 nnoremap <buffer> <silent> <c-l> :exe "norm! 0"<bar>call <SID>LocalBrowse(<SID>LocalBrowseChgDir(b:netrw_curdir,'./'))<cr>
1841 nnoremap <buffer> <silent> - :exe "norm! 0"<bar>call <SID>LocalBrowse(<SID>LocalBrowseChgDir(b:netrw_curdir,'../'))<cr> 1995 nnoremap <buffer> <silent> - :exe "norm! 0"<bar>call <SID>LocalBrowse(<SID>LocalBrowseChgDir(b:netrw_curdir,'../'))<cr>
1842 nnoremap <buffer> <silent> a :let g:netrw_hide=!g:netrw_hide<bar>exe "norm! 0"<bar>call <SID>LocalBrowse(<SID>LocalBrowseChgDir(b:netrw_curdir,'./'))<cr> 1996 nnoremap <buffer> <silent> a :let g:netrw_hide=(g:netrw_hide+1)%3<bar>exe "norm! 0"<bar>call <SID>LocalBrowse(<SID>LocalBrowseChgDir(b:netrw_curdir,'./'))<cr>
1843 nnoremap <buffer> <silent> b :<c-u>call <SID>NetBookmarkDir(0,b:netrw_curdir)<cr> 1997 nnoremap <buffer> <silent> b :<c-u>call <SID>NetBookmarkDir(0,b:netrw_curdir)<cr>
1844 nnoremap <buffer> <silent> B :<c-u>call <SID>NetBookmarkDir(1,b:netrw_curdir)<cr> 1998 nnoremap <buffer> <silent> B :<c-u>call <SID>NetBookmarkDir(1,b:netrw_curdir)<cr>
1845 nnoremap <buffer> <silent> c :exe "cd ".b:netrw_curdir<cr> 1999 nnoremap <buffer> <silent> c :exe "cd ".b:netrw_curdir<cr>
1846 nnoremap <buffer> <silent> d :call <SID>NetMakeDir("")<cr> 2000 nnoremap <buffer> <silent> d :call <SID>NetMakeDir("")<cr>
1847 nnoremap <buffer> <silent> <c-h> :call <SID>NetHideEdit(1)<cr> 2001 nnoremap <buffer> <silent> <c-h> :call <SID>NetHideEdit(1)<cr>
1848 nnoremap <buffer> <silent> i :call <SID>NetLongList(1)<cr> 2002 nnoremap <buffer> <silent> i :call <SID>NetLongList(1)<cr>
1849 nnoremap <buffer> <silent> o :exe g:netrw_winsize."wincmd s"<bar>exe "norm! 0"<bar>call <SID>LocalBrowse(<SID>LocalBrowseChgDir(b:netrw_curdir,<SID>NetGetWord()))<cr> 2003 nnoremap <buffer> <silent> o :exe (g:netrw_alto? "bel " : "abo ").g:netrw_winsize."wincmd s"<bar>exe "norm! 0"<bar>call <SID>LocalBrowse(<SID>LocalBrowseChgDir(b:netrw_curdir,<SID>NetGetWord()))<cr>
2004 nnoremap <buffer> <silent> p :exe "norm! 0"<bar>call <SID>LocalPreview(<SID>LocalBrowseChgDir(b:netrw_curdir,<SID>NetGetWord(),1))<cr>
1850 nnoremap <buffer> <silent> q :<c-u>call <SID>NetBookmarkDir(2,b:netrw_curdir)<cr> 2005 nnoremap <buffer> <silent> q :<c-u>call <SID>NetBookmarkDir(2,b:netrw_curdir)<cr>
1851 nnoremap <buffer> <silent> r :let g:netrw_sort_direction= (g:netrw_sort_direction =~ 'n')? 'r' : 'n'<bar>exe "norm! 0"<bar>call <SID>LocalBrowse(<SID>LocalBrowseChgDir(b:netrw_curdir,'./'))<cr> 2006 nnoremap <buffer> <silent> r :let g:netrw_sort_direction= (g:netrw_sort_direction =~ 'n')? 'r' : 'n'<bar>exe "norm! 0"<bar>call <SID>LocalBrowse(<SID>LocalBrowseChgDir(b:netrw_curdir,'./'))<cr>
1852 nnoremap <buffer> <silent> s :call <SID>NetSaveWordPosn()<bar>let g:netrw_sort_by= (g:netrw_sort_by =~ 'n')? 'time' : (g:netrw_sort_by =~ 't')? 'size' : 'name'<bar>exe "norm! 0"<bar>call <SID>LocalBrowse(<SID>LocalBrowseChgDir(b:netrw_curdir,'./'))<bar>call <SID>NetRestoreWordPosn()<cr> 2007 nnoremap <buffer> <silent> s :call <SID>NetSaveWordPosn()<bar>let g:netrw_sort_by= (g:netrw_sort_by =~ 'n')? 'time' : (g:netrw_sort_by =~ 't')? 'size' : 'name'<bar>exe "norm! 0"<bar>call <SID>LocalBrowse(<SID>LocalBrowseChgDir(b:netrw_curdir,'./'))<bar>call <SID>NetRestoreWordPosn()<cr>
1853 nnoremap <buffer> <silent> S :call <SID>NetSortSequence(1)<cr> 2008 nnoremap <buffer> <silent> S :call <SID>NetSortSequence(1)<cr>
1854 nnoremap <buffer> <silent> v :exe g:netrw_winsize."wincmd v"<bar>exe "norm! 0"<bar>call <SID>LocalBrowse(<SID>LocalBrowseChgDir(b:netrw_curdir,<SID>NetGetWord()))<cr> 2009 nnoremap <buffer> <silent> v :exe (g:netrw_altv? "rightb " : "lefta ").g:netrw_winsize."wincmd v"<bar>exe "norm! 0"<bar>call <SID>LocalBrowse(<SID>LocalBrowseChgDir(b:netrw_curdir,<SID>NetGetWord()))<cr>
1855 nnoremap <buffer> <silent> x :exe "norm! 0"<bar>call <SID>NetBrowseX(<SID>LocalBrowseChgDir(b:netrw_curdir,<SID>NetGetWord(),0),0)<cr> 2010 nnoremap <buffer> <silent> x :exe "norm! 0"<bar>call <SID>NetBrowseX(<SID>LocalBrowseChgDir(b:netrw_curdir,<SID>NetGetWord(),0),0)<cr>
1856 nnoremap <buffer> <silent> <2-leftmouse> :exe "norm! 0"<bar>call <SID>LocalBrowse(<SID>LocalBrowseChgDir(b:netrw_curdir,<SID>NetGetWord()))<cr> 2011 nnoremap <buffer> <silent> <2-leftmouse> :exe "norm! 0"<bar>call <SID>LocalBrowse(<SID>LocalBrowseChgDir(b:netrw_curdir,<SID>NetGetWord()))<cr>
1857 exe 'nnoremap <buffer> <silent> <del> :exe "norm! 0"<bar>call <SID>LocalBrowseRm("'.b:netrw_curdir.'")<cr>' 2012 exe 'nnoremap <buffer> <silent> <del> :exe "norm! 0"<bar>call <SID>LocalBrowseRm("'.b:netrw_curdir.'")<cr>'
1858 exe 'vnoremap <buffer> <silent> <del> :call <SID>LocalBrowseRm("'.b:netrw_curdir.'")<cr>' 2013 exe 'vnoremap <buffer> <silent> <del> :call <SID>LocalBrowseRm("'.b:netrw_curdir.'")<cr>'
1859 exe 'nnoremap <buffer> <silent> D :exe "norm! 0"<bar>call <SID>LocalBrowseRm("'.b:netrw_curdir.'")<cr>' 2014 exe 'nnoremap <buffer> <silent> D :exe "norm! 0"<bar>call <SID>LocalBrowseRm("'.b:netrw_curdir.'")<cr>'
1886 " call Decho("directories will be sorted by size or date") 2041 " call Decho("directories will be sorted by size or date")
1887 " sorted by size or date 2042 " sorted by size or date
1888 keepjumps put ='\" Sorted by '.sortby 2043 keepjumps put ='\" Sorted by '.sortby
1889 endif 2044 endif
1890 if g:netrw_list_hide != "" && g:netrw_hide 2045 if g:netrw_list_hide != "" && g:netrw_hide
1891 keepjumps put ='\" Hiding: '.g:netrw_list_hide 2046 if g:netrw_hide == 1
2047 keepjumps put ='\" Hiding: '.g:netrw_list_hide
2048 else
2049 keepjumps put ='\" Showing: '.g:netrw_list_hide
2050 endif
1892 let s:netrw_bannercnt= s:netrw_bannercnt + 1 2051 let s:netrw_bannercnt= s:netrw_bannercnt + 1
1893 endif 2052 endif
1894 keepjumps put ='\" Quick Help: ?:help -:go up dir D:delete R:rename s:sort-by x:exec' 2053 keepjumps put ='\" Quick Help: ?:help -:go up dir D:delete R:rename s:sort-by x:exec'
1895 keepjumps put ='\" ============================================================================' 2054 keepjumps put ='\" ============================================================================'
1896 2055
1923 " --------------------------------------------------------------------- 2082 " ---------------------------------------------------------------------
1924 " LocalBrowseList: does the job of "ls" for local directories {{{2 2083 " LocalBrowseList: does the job of "ls" for local directories {{{2
1925 fun! LocalBrowseList(dirname) 2084 fun! LocalBrowseList(dirname)
1926 " call Dfunc("LocalBrowseList(dirname<".a:dirname.">)") 2085 " call Dfunc("LocalBrowseList(dirname<".a:dirname.">)")
1927 2086
2087 " get the list of files contained in the current directory
1928 let dirname = escape(a:dirname,s:netrw_glob_escape) 2088 let dirname = escape(a:dirname,s:netrw_glob_escape)
1929 let dirnamelen = strlen(a:dirname) 2089 let dirnamelen = strlen(a:dirname)
1930 let filelist = glob(dirname."*") 2090 let filelist = glob(dirname."*")
2091 " call Decho("glob(dirname<".dirname.">,*)=".filelist)
1931 if filelist != "" 2092 if filelist != ""
1932 let filelist= filelist."\n" 2093 let filelist= filelist."\n"
1933 endif 2094 endif
1934 let filelist= filelist.glob(dirname.".*") 2095 let filelist= filelist.glob(dirname.".*")
2096 " call Decho("glob(dirname<".dirname.">,.*)=".glob(dirname.".*"))
2097
2098 " if the directory name includes a "$", and possibly other characters,
2099 " the glob() doesn't include "." and ".." entries.
2100 if filelist !~ '[\\/]\.[\\/]\=\(\n\|$\)'
2101 " call Decho("forcibly tacking on .")
2102 if filelist == ""
2103 let filelist= dirname."."
2104 else
2105 let filelist= filelist."\n".a:dirname."."
2106 endif
2107 " call Decho("filelist<".filelist.">")
2108 endif
2109 if filelist !~ '[\\/]\.\.[\\/]\=\(\n\|$\)'
2110 " call Decho("forcibly tacking on ..")
2111 let filelist= filelist."\n".a:dirname.".."
2112 " call Decho("filelist<".filelist.">")
2113 endif
2114 let filelist= substitute(filelist,'\n\{2,}','\n','ge')
2115
1935 " call Decho("dirname<".dirname.">") 2116 " call Decho("dirname<".dirname.">")
1936 " call Decho("dirnamelen<".dirnamelen.">") 2117 " call Decho("dirnamelen<".dirnamelen.">")
1937 " call Decho("filelist<".filelist.">") 2118 " call Decho("filelist<".filelist.">")
1938 2119
1939 while filelist != "" 2120 while filelist != ""
1945 let filelist= "" 2126 let filelist= ""
1946 endif 2127 endif
1947 let pfile= file 2128 let pfile= file
1948 if isdirectory(file) 2129 if isdirectory(file)
1949 let pfile= file."/" 2130 let pfile= file."/"
2131 endif
2132 if pfile =~ '//$'
2133 let pfile= substitute(pfile,'//$','/','e')
1950 endif 2134 endif
1951 let pfile= strpart(pfile,dirnamelen) 2135 let pfile= strpart(pfile,dirnamelen)
1952 if g:netrw_longlist 2136 if g:netrw_longlist
1953 let sz = getfsize(file) 2137 let sz = getfsize(file)
1954 let fsz = strpart(" ",1,15-strlen(sz)).sz 2138 let fsz = strpart(" ",1,15-strlen(sz)).sz
2038 " preparation for removing multiple files/directories 2222 " preparation for removing multiple files/directories
2039 let ctr = a:firstline 2223 let ctr = a:firstline
2040 let ret = 0 2224 let ret = 0
2041 let netrw_origdir = s:NetGetcwd(1) 2225 let netrw_origdir = s:NetGetcwd(1)
2042 exe 'cd '.b:netrw_curdir 2226 exe 'cd '.b:netrw_curdir
2227 let all= 0
2043 2228
2044 " remove multiple files and directories 2229 " remove multiple files and directories
2045 while ctr <= a:lastline 2230 while ctr <= a:lastline
2046 exe "keepjumps ".ctr 2231 exe "keepjumps ".ctr
2047 2232
2060 let rmfile= a:path.curword 2245 let rmfile= a:path.curword
2061 " call Decho("rmfile<".rmfile.">") 2246 " call Decho("rmfile<".rmfile.">")
2062 2247
2063 if rmfile !~ '^"' && (rmfile =~ '@$' || rmfile !~ '/$') 2248 if rmfile !~ '^"' && (rmfile =~ '@$' || rmfile !~ '/$')
2064 " attempt to remove file 2249 " attempt to remove file
2065 call inputsave() 2250 if !all
2066 let ok= input("Confirm deletion of file<".rmfile."> ","y") 2251 echohl Statement
2067 call inputrestore() 2252 call inputsave()
2068 if ok == "y" 2253 let ok= input("Confirm deletion of file<".rmfile."> ","[{y(es)},n(o),a(ll),q(uit)] ")
2254 call inputrestore()
2255 echohl NONE
2256 let ok= substitute(ok,'\[{y(es)},n(o),a(ll),q(uit)]\s*','','e')
2257 if ok =~ 'a\%[ll]'
2258 let all= 1
2259 endif
2260 endif
2261
2262 if all || ok =~ 'y\%[es]' || ok == ""
2069 let ret= delete(rmfile) 2263 let ret= delete(rmfile)
2070 " call Decho("errcode=".v:shell_error." ret=".ret) 2264 " call Decho("errcode=".v:shell_error." ret=".ret)
2265 elseif ok =~ 'q\%[uit]'
2266 break
2071 endif 2267 endif
2072 2268
2073 else 2269 else
2074 " attempt to remove directory 2270 " attempt to remove directory
2075 call inputsave() 2271 if !all
2076 let ok= input("Confirm deletion of directory<".rmfile."> ","y") 2272 echohl Statement
2077 call inputrestore() 2273 call inputsave()
2274 let ok= input("Confirm deletion of directory<".rmfile."> ","[{y(es)},n(o),a(ll),q(uit)] ")
2275 call inputrestore()
2276 let ok= substitute(ok,'\[{y(es)},n(o),a(ll),q(uit)]\s*','','e')
2277 if ok =~ 'a\%[ll]'
2278 let all= 1
2279 endif
2280 endif
2078 let rmfile= substitute(rmfile,'/$','','e') 2281 let rmfile= substitute(rmfile,'/$','','e')
2079 2282
2080 if ok == "y" 2283 if all || ok =~ 'y\%[es]' || ok == ""
2081 " call Decho("1st attempt: system(".g:netrw_local_rmdir.' "'.rmfile.'")') 2284 " call Decho("1st attempt: system(".g:netrw_local_rmdir.' "'.rmfile.'")')
2082 call system(g:netrw_local_rmdir.' "'.rmfile.'"') 2285 call system(g:netrw_local_rmdir.' "'.rmfile.'"')
2083 " call Decho("v:shell_error=".v:shell_error) 2286 " call Decho("v:shell_error=".v:shell_error)
2084 2287
2085 if v:shell_error != 0 2288 if v:shell_error != 0
2089 2292
2090 if errcode != 0 2293 if errcode != 0
2091 if has("unix") 2294 if has("unix")
2092 " call Decho("3rd attempt to remove directory<".rmfile.">") 2295 " call Decho("3rd attempt to remove directory<".rmfile.">")
2093 call system("rm ".rmfile) 2296 call system("rm ".rmfile)
2094 if v:shell_error != 0 2297 if v:shell_error != 0 && !exists("g:netrw_quiet")
2095 echoerr "unable to remove directory<".rmfile."> -- is it empty?" 2298 echoerr "unable to remove directory<".rmfile."> -- is it empty?"
2096 endif 2299 endif
2097 else 2300 elseif !exist("g:netrw_quiet")s
2098 echoerr "unable to remove directory<".rmfile."> -- is it empty?" 2301 echoerr "unable to remove directory<".rmfile."> -- is it empty?"
2099 endif 2302 endif
2100 endif 2303 endif
2101 endif 2304 endif
2305
2306 elseif ok =~ 'q\%[uit]'
2307 break
2102 endif 2308 endif
2103 endif 2309 endif
2104 2310
2105 let ctr= ctr + 1 2311 let ctr= ctr + 1
2106 endwhile 2312 endwhile
2159 exe "keepjumps ".curline 2365 exe "keepjumps ".curline
2160 " call Dret("LocalBrowseRename") 2366 " call Dret("LocalBrowseRename")
2161 endfun 2367 endfun
2162 2368
2163 " --------------------------------------------------------------------- 2369 " ---------------------------------------------------------------------
2164 " NetGetcwd: get the current directory. 2370 " LocalPreview: {{{2
2371 fun! <SID>LocalPreview(path) range
2372 " call Dfunc("LocalPreview(path<".a:path.">)")
2373 if has("quickfix")
2374 if !isdirectory(a:path)
2375 exe "pedit ".a:path
2376 elseif !exist("g:netrw_quiet")s
2377 echoerr "sorry, cannot preview a directory such as <".a:path.">"
2378 endif
2379 elseif !exist("g:netrw_quiet")s
2380 echoerr "sorry, to preview your vim needs the quickfix feature compiled in"
2381 endif
2382 " call Dret("LocalPreview")
2383 endfun
2384
2385 " ---------------------------------------------------------------------
2386 " NetGetcwd: get the current directory. {{{2
2165 " Change backslashes to forward slashes, if any. 2387 " Change backslashes to forward slashes, if any.
2166 " If doesc is true, escape certain troublesome characters 2388 " If doesc is true, escape certain troublesome characters
2167 fun! <SID>NetGetcwd(doesc) 2389 fun! <SID>NetGetcwd(doesc)
2168 " call Dfunc("NetGetcwd(doesc=".a:doesc.")") 2390 " call Dfunc("NetGetcwd(doesc=".a:doesc.")")
2169 let curdir= substitute(getcwd(),'\\','/','ge') 2391 let curdir= substitute(getcwd(),'\\','/','ge')
2352 " don't let PCs try <.netrc> 2574 " don't let PCs try <.netrc>
2353 let b:netrw_method = 3 2575 let b:netrw_method = 3
2354 endif 2576 endif
2355 2577
2356 else 2578 else
2357 echoerr "***error*** cannot determine method" 2579 if !exists("g:netrw_quiet")
2580 echoerr "***error*** cannot determine method"
2581 endif
2358 let b:netrw_method = -1 2582 let b:netrw_method = -1
2359 endif 2583 endif
2360 2584
2361 " call Decho("a:choice <".a:choice.">") 2585 " call Decho("a:choice <".a:choice.">")
2362 " call Decho("b:netrw_method <".b:netrw_method.">") 2586 " call Decho("b:netrw_method <".b:netrw_method.">")