comparison runtime/plugin/netrw.vim @ 15:631143ac4a01 v7.0007

updated for version 7.0007
author vimboss
date Sat, 10 Jul 2004 09:47:34 +0000
parents bdeee1504ac1
children db5102f7e29f
comparison
equal deleted inserted replaced
14:946da5994c01 15:631143ac4a01
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: Jun 30, 2004 2 " Last Change: Jul 08, 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: 47g ASTRO-ONLY 4 " Version: 47l ASTRO-ONLY
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 10
11 " Exit quickly when already loaded or when 'compatible' is set. {{{1 11 " Exit quickly when already loaded or when 'compatible' is set. {{{1
12 if exists("loaded_netrw") || &cp 12 if exists("loaded_netrw") || &cp
13 finish 13 finish
14 endif 14 endif
15 let loaded_netrw = "v47g ASTRO-ONLY" 15 let loaded_netrw = "v47l ASTRO-ONLY"
16 let s:save_cpo = &cpo 16 let s:save_cpo = &cpo
17 let loaded_explorer = 1
17 set cpo&vim 18 set cpo&vim
18 19
19 " --------------------------------------------------------------------- 20 " ---------------------------------------------------------------------
20 " Default values for global netrw variables {{{1 21 " Default values for global netrw variables {{{1
21 if !exists("g:netrw_ftpmode") 22 if !exists("g:netrw_ftpmode")
72 endif 73 endif
73 if !exists("g:netrw_sort_direction") 74 if !exists("g:netrw_sort_direction")
74 " alternative: reverse (z y x ...) 75 " alternative: reverse (z y x ...)
75 let g:netrw_sort_direction= "normal" 76 let g:netrw_sort_direction= "normal"
76 endif 77 endif
78 if !exists("g:netrw_longlist") || g:netrw_longlist == 0
79 let g:netrw_longlist= 0
80 else
81 let g:netrw_longlist= 1
82 let g:netrw_list_cmd= "ssh HOSTNAME ls -FLa -l"
83 endif
84 if !exists("g:netrw_timefmt")
85 let g:netrw_timefmt= "%c"
86 endif
87 if !exists("g:netrw_local_rmdir")
88 let g:netrw_local_rmdir= "rmdir"
89 endif
90 if !exists("g:netrw_local_rename")
91 if has("win32")
92 let g:netrw_local_rename= "ren"
93 elseif has("unix")
94 let g:netrw_local_rename= "mv"
95 endif
96 endif
97 if !exists("g:netrw_local_mkdir")
98 let g:netrw_local_mkdir= "mkdir"
99 endif
100 if !exists("g:netrw_mkdir_cmd")
101 let g:netrw_mkdir_cmd= "ssh HOSTNAME mkdir"
102 endif
103
104 " BufEnter event ignored by decho when following variable is true
105 " Has a side effect that doau BufReadPost doesn't work, so
106 " files read by network transfer aren't appropriately highlighted.
107 "let g:decho_bufenter = 1 "Decho
77 108
78 " --------------------------------------------------------------------- 109 " ---------------------------------------------------------------------
79 " Default values for global protocol variables {{{1 110 " Default values for global protocol variables {{{1
80 if !exists("g:netrw_rcp_cmd") 111 if !exists("g:netrw_rcp_cmd")
81 let g:netrw_rcp_cmd = "rcp" 112 let g:netrw_rcp_cmd = "rcp"
123 let s:netrw_rcpmode = '' 154 let s:netrw_rcpmode = ''
124 endif 155 endif
125 156
126 " --------------------------------------------------------------------- 157 " ---------------------------------------------------------------------
127 " Transparency Support: {{{1 158 " Transparency Support: {{{1
128 " Auto-detection for ftp://*, rcp://*, scp://*, sftp://*, http://*, dav://*, 159 " File Explorer: {{{2
129 " and rsync://*
130 " Should make file transfers across networks transparent. Currently I haven't
131 " supported appends. Hey, gotta leave something for a future <netrw.vim>!
132 if version >= 600 160 if version >= 600
161 augroup FileExplorer
162 au!
163 au BufEnter * call <SID>LocalBrowse(expand("<afile>"))
164 augroup END
165 " Network Handler: {{{2
133 augroup Network 166 augroup Network
134 au! 167 au!
135 if has("win32") 168 if has("win32")
136 au BufReadCmd file://* exe "silent doau BufReadPre ".expand("<afile>")|exe 'e '.substitute(expand("<afile>"),"file:/*","","")|exe "silent doau BufReadPost ".expand("<afile>") 169 au BufReadCmd file://* exe "silent doau BufReadPre ".expand("<afile>")|exe 'e '.substitute(expand("<afile>"),"file:/*","","")|exe "silent doau BufReadPost ".expand("<afile>")
137 else 170 else
326 " ftp + <.netrc>: NetRead Method #2 359 " ftp + <.netrc>: NetRead Method #2
327 elseif b:netrw_method == 2 " read with ftp + <.netrc> 360 elseif b:netrw_method == 2 " read with ftp + <.netrc>
328 " call Decho("read via ftp+.netrc (method #2)") 361 " call Decho("read via ftp+.netrc (method #2)")
329 let netrw_fname= b:netrw_fname 362 let netrw_fname= b:netrw_fname
330 new 363 new
331 set ff=unix 364 setlocal ff=unix
332 exe "put ='".g:netrw_ftpmode."'" 365 exe "put ='".g:netrw_ftpmode."'"
333 exe "put ='get ".netrw_fname." ".tmpfile."'" 366 exe "put ='get ".netrw_fname." ".tmpfile."'"
334 if exists("g:netrw_port") && g:netrw_port != "" 367 if exists("g:netrw_port") && g:netrw_port != ""
335 " call Decho("executing: %!".g:netrw_ftp_cmd." -i ".g:netrw_machine." ".g:netrw_port) 368 " call Decho("executing: %!".g:netrw_ftp_cmd." -i ".g:netrw_machine." ".g:netrw_port)
336 exe g:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i ".g:netrw_machine." ".g:netrw_port 369 exe g:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i ".g:netrw_machine." ".g:netrw_port
351 elseif b:netrw_method == 3 " read with ftp + machine, id, passwd, and fname 384 elseif b:netrw_method == 3 " read with ftp + machine, id, passwd, and fname
352 " Construct execution string (four lines) which will be passed through filter 385 " Construct execution string (four lines) which will be passed through filter
353 " call Decho("read via ftp+mipf (method #3)") 386 " call Decho("read via ftp+mipf (method #3)")
354 let netrw_fname= b:netrw_fname 387 let netrw_fname= b:netrw_fname
355 new 388 new
356 set ff=unix 389 setlocal ff=unix
357 if exists("g:netrw_port") && g:netrw_port != "" 390 if exists("g:netrw_port") && g:netrw_port != ""
358 put ='open '.g:netrw_machine.' '.g:netrw_port 391 put ='open '.g:netrw_machine.' '.g:netrw_port
359 else 392 else
360 put ='open '.g:netrw_machine 393 put ='open '.g:netrw_machine
361 endif 394 endif
442 " call Decho("read via cadaver (method #6)") 475 " call Decho("read via cadaver (method #6)")
443 476
444 " Construct execution string (four lines) which will be passed through filter 477 " Construct execution string (four lines) which will be passed through filter
445 let netrw_fname= b:netrw_fname 478 let netrw_fname= b:netrw_fname
446 new 479 new
447 set ff=unix 480 setlocal ff=unix
448 if exists("g:netrw_port") && g:netrw_port != "" 481 if exists("g:netrw_port") && g:netrw_port != ""
449 put ='open '.g:netrw_machine.' '.g:netrw_port 482 put ='open '.g:netrw_machine.' '.g:netrw_port
450 else 483 else
451 put ='open '.g:netrw_machine 484 put ='open '.g:netrw_machine
452 endif 485 endif
536 unlet b:netrw_method 569 unlet b:netrw_method
537 unlet g:netrw_machine 570 unlet g:netrw_machine
538 unlet b:netrw_fname 571 unlet b:netrw_fname
539 endif 572 endif
540 call s:NetOptionRestore() 573 call s:NetOptionRestore()
541 574
542 " call Dret("NetRead") 575 " call Dret("NetRead")
543 endfun 576 endfun
544 " end of NetRead 577 " end of NetRead
545 578
546 " ------------------------------------------------------------------------ 579 " ------------------------------------------------------------------------
612 " the ":f newname" apparently leaves the temporary file as the alternate 645 " the ":f newname" apparently leaves the temporary file as the alternate
613 " file in the buffer list (see :ls!). The following command wipes it out. 646 " file in the buffer list (see :ls!). The following command wipes it out.
614 exe bufnr("#")."bwipe!" 647 exe bufnr("#")."bwipe!"
615 else 648 else
616 let oldul= &ul 649 let oldul= &ul
617 set ul=-1 650 setlocal ul=-1
618 exe a:readcmd." ".v:cmdarg." ".fname 651 exe a:readcmd." ".v:cmdarg." ".fname
619 if delline > 0 652 if delline > 0
620 " wipe out last line, which should be a blank line anyway 653 " wipe out last line, which should be a blank line anyway
621 $del 654 $del
622 endif 655 endif
638 else 671 else
639 let line2= line("$") - line2 672 let line2= line("$") - line2
640 endif 673 endif
641 " call Decho("calling NetReadFixup(method<".a:method."> line1=".line1." line2=".line2.")") 674 " call Decho("calling NetReadFixup(method<".a:method."> line1=".line1." line2=".line2.")")
642 call NetReadFixup(a:method, line1, line2) 675 call NetReadFixup(a:method, line1, line2)
676 endif
677
678 " update the Buffers menu
679 if has("gui") && has("gui_running")
680 silent! emenu Buffers.Refresh\ menu
643 endif 681 endif
644 682
645 " call Decho("readcmd<".a:readcmd."> cmdarg<".v:cmdarg."> fname<".a:fname."> readable=".filereadable(a:fname)) 683 " call Decho("readcmd<".a:readcmd."> cmdarg<".v:cmdarg."> fname<".a:fname."> readable=".filereadable(a:fname))
646 684
647 " insure that we have the right filetype and that its being displayed 685 " insure that we have the right filetype and that its being displayed
761 "......................................... 799 ".........................................
762 " ftp + <.netrc>: NetWrite Method #2 800 " ftp + <.netrc>: NetWrite Method #2
763 elseif b:netrw_method == 2 " write with ftp + <.netrc> 801 elseif b:netrw_method == 2 " write with ftp + <.netrc>
764 let netrw_fname = b:netrw_fname 802 let netrw_fname = b:netrw_fname
765 new 803 new
766 set ff=unix 804 setlocal ff=unix
767 exe "put ='".g:netrw_ftpmode."'" 805 exe "put ='".g:netrw_ftpmode."'"
768 " call Decho(" NetWrite: put ='".g:netrw_ftpmode."'") 806 " call Decho(" NetWrite: put ='".g:netrw_ftpmode."'")
769 exe "put ='put ".tmpfile." ".netrw_fname."'" 807 exe "put ='put ".tmpfile." ".netrw_fname."'"
770 " call Decho("put ='put ".tmpfile." ".netrw_fname."'") 808 " call Decho("put ='put ".tmpfile." ".netrw_fname."'")
771 if exists("g:netrw_port") && g:netrw_port != "" 809 if exists("g:netrw_port") && g:netrw_port != ""
786 "......................................... 824 ".........................................
787 " ftp + machine, id, passwd, filename: NetWrite Method #3 825 " ftp + machine, id, passwd, filename: NetWrite Method #3
788 elseif b:netrw_method == 3 " write with ftp + machine, id, passwd, and fname 826 elseif b:netrw_method == 3 " write with ftp + machine, id, passwd, and fname
789 let netrw_fname= b:netrw_fname 827 let netrw_fname= b:netrw_fname
790 new 828 new
791 set ff=unix 829 setlocal ff=unix
792 if exists("g:netrw_port") && g:netrw_port != "" 830 if exists("g:netrw_port") && g:netrw_port != ""
793 put ='open '.g:netrw_machine.' '.g:netrw_port 831 put ='open '.g:netrw_machine.' '.g:netrw_port
794 else 832 else
795 put ='open '.g:netrw_machine 833 put ='open '.g:netrw_machine
796 endif 834 endif
848 " call Decho("write via cadaver (method #6)") 886 " call Decho("write via cadaver (method #6)")
849 887
850 " Construct execution string (four lines) which will be passed through filter 888 " Construct execution string (four lines) which will be passed through filter
851 let netrw_fname= b:netrw_fname 889 let netrw_fname= b:netrw_fname
852 new 890 new
853 set ff=unix 891 setlocal ff=unix
854 if exists("g:netrw_port") && g:netrw_port != "" 892 if exists("g:netrw_port") && g:netrw_port != ""
855 put ='open '.g:netrw_machine.' '.g:netrw_port 893 put ='open '.g:netrw_machine.' '.g:netrw_port
856 else 894 else
857 put ='open '.g:netrw_machine 895 put ='open '.g:netrw_machine
858 endif 896 endif
893 let uid_machine = g:netrw_uid .'@'. g:netrw_machine 931 let uid_machine = g:netrw_uid .'@'. g:netrw_machine
894 else 932 else
895 let uid_machine = g:netrw_machine 933 let uid_machine = g:netrw_machine
896 endif 934 endif
897 new 935 new
898 set ff=unix 936 setlocal ff=unix
899 put ='put '.tmpfile.' '.netrw_fname 937 put ='put '.tmpfile.' '.netrw_fname
900 norm 1Gdd 938 norm 1Gdd
901 " call Decho("executing: %!".g:netrw_sftp_cmd.' '.uid_machine) 939 " call Decho("executing: %!".g:netrw_sftp_cmd.' '.uid_machine)
902 exe g:netrw_silentxfer."%!".g:netrw_sftp_cmd.' '.uid_machine 940 exe g:netrw_silentxfer."%!".g:netrw_sftp_cmd.' '.uid_machine
903 bd! 941 bd!
957 " call Decho("set up user <".user .">") 995 " call Decho("set up user <".user .">")
958 " call Decho("set up machine<".machine.">") 996 " call Decho("set up machine<".machine.">")
959 " call Decho("set up path <".path .">") 997 " call Decho("set up path <".path .">")
960 " call Decho("set up fname <".fname .">") 998 " call Decho("set up fname <".fname .">")
961 999
962 let listcmd = substitute(g:netrw_list_cmd,'\<HOSTNAME\>',user.machine,'') 1000 let listcmd = substitute(g:netrw_list_cmd,'\<HOSTNAME\>',user.machine,'')
963 1001
964 " optionally sort by time (-t) or by size (-S) 1002 " optionally sort by time (-t) or by size (-S)
965 if g:netrw_sort_by =~ "^t" 1003 if g:netrw_sort_by =~ "^t"
966 let listcmd= listcmd."t" 1004 let listcmd= listcmd."t"
967 elseif g:netrw_sort_by =~ "^s" 1005 elseif g:netrw_sort_by =~ "^s"
968 let listcmd= listcmd."S" 1006 let listcmd= listcmd."S"
969 endif 1007 endif
970 " optionally sort in reverse 1008 " optionally sort in reverse
971 if g:netrw_sort_direction =~ "^r" 1009 if g:netrw_sort_direction =~ "^r"
972 let listcmd= listcmd."r" 1010 let listcmd= listcmd."r"
973 endif 1011 endif
974 1012
975 " call Decho("set up listcmd<".listcmd.">") 1013 " call Decho("set up listcmd<".listcmd.">")
976 1014
977 if fname =~ '@$' && fname !~ '^"' 1015 if fname =~ '@$' && fname !~ '^"'
978 " call Decho("attempt transfer of symlink as file") 1016 " call Decho("attempt transfer of symlink as file")
991 let path= substitute(path,'[*=@|]$','','e') 1029 let path= substitute(path,'[*=@|]$','','e')
992 " call Decho("new path<".path.">") 1030 " call Decho("new path<".path.">")
993 1031
994 " remote-read the requested file into current buffer 1032 " remote-read the requested file into current buffer
995 enew! 1033 enew!
996 exe "file ".method."://".user.machine."/".path 1034 exe "file ".method."://".user.machine."/".escape(path,' ')
997 exe "silent doau BufReadPre ".fname 1035 exe "silent doau BufReadPre ".fname
998 silent call s:NetRead(method."://".user.machine."/".path) 1036 silent call s:NetRead(method."://".user.machine."/".path)
999 exe "silent doau BufReadPost ".fname 1037 exe "silent doau BufReadPost ".fname
1000 1d 1038 keepjumps 1d
1001 set nomod 1039 setlocal nomod
1002 1040
1003 " call Dret("NetBrowse 0 : file<".fname.">") 1041 " call Dret("NetBrowse 0 : file<".fname.">")
1004 return 0 1042 return 0
1005 endif 1043 endif
1006 1044
1019 return 1 1057 return 1
1020 endif 1058 endif
1021 else 1059 else
1022 enew! 1060 enew!
1023 endif 1061 endif
1024 setlocal bt=nofile bh=wipe nobl 1062 setlocal ts=32 bt=nofile bh=wipe nobl
1025 exe 'file '.bufname 1063 exe 'file '.escape(bufname,' ')
1026 set bt=nowrite bh=hide nobl 1064 setlocal bt=nowrite bh=hide nobl
1027 nnoremap <buffer> <silent> <cr> :exe "norm! 0"<bar>call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),expand("<cWORD>")))<cr> 1065 nnoremap <buffer> <silent> <cr> :exe "norm! 0"<bar>call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),<SID>NetGetDir()))<cr>
1028 nnoremap <buffer> <silent> <c-l> :exe "norm! 0"<bar>call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),'./'))<cr> 1066 nnoremap <buffer> <silent> <c-l> :exe "norm! 0"<bar>call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),'./'))<cr>
1029 nnoremap <buffer> <silent> - :exe "norm! 0"<bar>call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),'../'))<cr> 1067 nnoremap <buffer> <silent> - :exe "norm! 0"<bar>call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),'../'))<cr>
1030 nnoremap <buffer> <silent> a :let g:netrw_list_showall=1<bar>exe "norm! 0"<bar>call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),'./'))<cr> 1068 nnoremap <buffer> <silent> a :let g:netrw_list_showall=1<bar>exe "norm! 0"<bar>call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),'./'))<cr>
1031 nnoremap <buffer> <silent> h :call <SID>NetHideEdit()<cr> 1069 nnoremap <buffer> <silent> <Leader>H :call <SID>NetHideEdit(0)<cr>
1032 nnoremap <buffer> <silent> o :exe g:netrw_winsize."wincmd s"<bar>exe "norm! 0"<bar>call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),expand("<cWORD>")))<cr> 1070 nnoremap <buffer> <silent> i :call <SID>NetLongList(0)<cr>
1033 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("%"),expand("<cWORD>")))<cr> 1071 nnoremap <buffer> <silent> o :exe g:netrw_winsize."wincmd s"<bar>exe "norm! 0"<bar>call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),<SID>NetGetDir()))<cr>
1072 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("%"),<SID>NetGetDir()))<cr>
1034 nnoremap <buffer> <silent> s :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("%"),'./'))<cr> 1073 nnoremap <buffer> <silent> s :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("%"),'./'))<cr>
1035 nnoremap <buffer> <silent> v :exe g:netrw_winsize."wincmd v"<bar>exe "norm! 0"<bar>call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),expand("<cWORD>")))<cr> 1074 nnoremap <buffer> <silent> v :exe g:netrw_winsize."wincmd v"<bar>exe "norm! 0"<bar>call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),<SID>NetGetDir()))<cr>
1036 nnoremap <buffer> <silent> x :exe "norm! 0"<bar>call <SID>NetBrowseX(<SID>NetBrowseChgDir(expand("%"),expand("<cWORD>")))<cr> 1075 nnoremap <buffer> <silent> x :exe "norm! 0"<bar>call <SID>NetBrowseX(<SID>NetBrowseChgDir(expand("%"),<SID>NetGetDir()),1)<cr>
1037 nnoremap <buffer> <silent> <2-leftmouse> :exe "norm! 0"<bar>call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),expand("<cWORD>")))<cr> 1076 nnoremap <buffer> <silent> <2-leftmouse> :exe "norm! 0"<bar>call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),<SID>NetGetDir()))<cr>
1038 exe 'nnoremap <buffer> <silent> <del> :exe "norm! 0"<bar>call <SID>NetBrowseRm("'.user.machine.'","'.path.'")<cr>' 1077 exe 'nnoremap <buffer> <silent> <del> :exe "norm! 0"<bar>call <SID>NetBrowseRm("'.user.machine.'","'.path.'")<cr>'
1039 exe 'vnoremap <buffer> <silent> <del> :call <SID>NetBrowseRm("'.user.machine.'","'.path.'")<cr>' 1078 exe 'vnoremap <buffer> <silent> <del> :call <SID>NetBrowseRm("'.user.machine.'","'.path.'")<cr>'
1040 exe 'nnoremap <buffer> <silent> D :exe "norm! 0"<bar>call <SID>NetBrowseRm("'.user.machine.'","'.path.'")<cr>' 1079 exe 'nnoremap <buffer> <silent> D :exe "norm! 0"<bar>call <SID>NetBrowseRm("'.user.machine.'","'.path.'")<cr>'
1041 exe 'vnoremap <buffer> <silent> D :call <SID>NetBrowseRm("'.user.machine.'","'.path.'")<cr>' 1080 exe 'vnoremap <buffer> <silent> D :call <SID>NetBrowseRm("'.user.machine.'","'.path.'")<cr>'
1042 exe 'nnoremap <buffer> <silent> R :exe "norm! 0"<bar>call <SID>NetBrowseRename("'.user.machine.'","'.path.'")<cr>' 1081 exe 'nnoremap <buffer> <silent> R :exe "norm! 0"<bar>call <SID>NetBrowseRename("'.user.machine.'","'.path.'")<cr>'
1043 nnoremap <buffer> ? :he netrw-dir<cr> 1082 exe 'nnoremap <buffer> <silent> <Leader>M :call <SID>NetMakeDir("'.user.machine.'")<cr>'
1083 nnoremap <buffer> ? :he netrw-browse-cmds<cr>
1044 setlocal ma 1084 setlocal ma
1045 1085
1046 " Set up the banner 1086 " Set up the banner
1047 " call Decho("executing: r! ".listcmd." '".path."'") 1087 " call Decho("executing: r! ".listcmd." '".path."'")
1048 keepjumps put ='\" ==============================' 1088 keepjumps put ='\" =============================='
1067 " remote read the requested directory 1107 " remote read the requested directory
1068 exe "silent r! ".listcmd." '".path."'" 1108 exe "silent r! ".listcmd." '".path."'"
1069 keepjumps 1d 1109 keepjumps 1d
1070 1110
1071 " manipulate the directory listing (hide, sort) 1111 " manipulate the directory listing (hide, sort)
1072 set ft=netrwlist 1112 setlocal ft=netrwlist
1073 if line("$") >= g:netrw_bannercnt 1113 if line("$") >= g:netrw_bannercnt
1074 if !exists("g:netrw_list_showall") 1114 if !exists("g:netrw_list_showall")
1075 if g:netrw_list_hide != "" 1115 if g:netrw_list_hide != ""
1076 call s:NetrwListHide() 1116 call s:NetrwListHide()
1077 endif 1117 endif
1078 else 1118 else
1079 unlet g:netrw_list_showall 1119 unlet g:netrw_list_showall
1080 endif 1120 endif
1121 if g:netrw_longlist
1122 " do a long listing; these substitutions need to be done prior to sorting
1123 keepjumps silent /^total\s*\d\+$/d
1124 exe 'keepjumps silent '.g:netrw_bannercnt.',$s/ -> .*$//e'
1125 exe 'keepjumps silent '.g:netrw_bannercnt.',$s/\(\S\+\s\+\S\+\s\+\S\+\s\+\S\+\s\+\S\+\s\+\S\+\s\+\S\+\s\+\S\+\)\s\+\(\S\+\)$/\2\t\1/e'
1126 exe g:netrw_bannercnt
1127 endif
1081 if g:netrw_sort_by =~ "^n" 1128 if g:netrw_sort_by =~ "^n"
1082 call s:SetSort() 1129 call s:SetSort()
1083 exe 'keepjumps silent '.g:netrw_bannercnt.',$call s:NetSort()' 1130 exe 'keepjumps silent '.g:netrw_bannercnt.',$call s:NetSort()'
1084 exe 'keepjumps silent '.g:netrw_bannercnt.',$s/^\d\{3}\///e' 1131 exe 'keepjumps silent '.g:netrw_bannercnt.',$s/^\d\{3}\///e'
1085 endif 1132 endif
1109 " call Decho("handling a file: dirname<".dirname.">") 1156 " call Decho("handling a file: dirname<".dirname.">")
1110 1157
1111 elseif newdir == './' 1158 elseif newdir == './'
1112 " refresh the directory list 1159 " refresh the directory list
1113 " call Decho("refresh directory listing") 1160 " call Decho("refresh directory listing")
1114 set ma 1161 setlocal ma
1115 %d 1162 %d
1116 1163
1117 elseif newdir == '../' 1164 elseif newdir == '../'
1118 " go up one directory 1165 " go up one directory
1119 let trailer= substitute(a:dirname,'^\(\w\+://\%(\w\+@\)\=\w\+/\)\(.*\)$','\2','') 1166 let trailer= substitute(a:dirname,'^\(\w\+://\%(\w\+@\)\=\w\+/\)\(.*\)$','\2','')
1133 let dirname= dirname.newdir 1180 let dirname= dirname.newdir
1134 " call Decho("go down one dir: dirname<".dirname."> newdir<".newdir.">") 1181 " call Decho("go down one dir: dirname<".dirname."> newdir<".newdir.">")
1135 endif 1182 endif
1136 1183
1137 " call Dret("NetBrowseChgDir <".dirname.">") 1184 " call Dret("NetBrowseChgDir <".dirname.">")
1185 return dirname
1186 endfun
1187
1188 " ---------------------------------------------------------------------
1189 " NetGetDir: it gets the directory named under the cursor
1190 fun! <SID>NetGetDir()
1191 " call Dfunc("NetGetDir()")
1192 let dirname= getline(".")
1193 if dirname =~ '\t'
1194 let dirname= substitute(dirname,'\t.*$','','e')
1195 endif
1196 " call Dret("NetGetDir <".dirname.">")
1138 return dirname 1197 return dirname
1139 endfun 1198 endfun
1140 1199
1141 " --------------------------------------------------------------------- 1200 " ---------------------------------------------------------------------
1142 " NetBrowseRm: remove a remote file or directory {{{2 1201 " NetBrowseRm: remove a remote file or directory {{{2
1213 let ctr = a:firstline 1272 let ctr = a:firstline
1214 let rename_cmd = substitute(g:netrw_rename_cmd,'\<HOSTNAME\>',a:usrhost,'') 1273 let rename_cmd = substitute(g:netrw_rename_cmd,'\<HOSTNAME\>',a:usrhost,'')
1215 1274
1216 " attempt to rename files/directories 1275 " attempt to rename files/directories
1217 while ctr <= a:lastline 1276 while ctr <= a:lastline
1218 exe ctr 1277 exe "keepjumps ".ctr
1219 1278
1220 norm! 0 1279 norm! 0
1221 let oldname= a:path.expand("<cWORD>") 1280 let oldname= a:path.expand("<cWORD>")
1222 " call Decho("oldname<".oldname.">") 1281 " call Decho("oldname<".oldname.">")
1223 1282
1232 endwhile 1291 endwhile
1233 1292
1234 " refresh the directory 1293 " refresh the directory
1235 let curline= line(".") 1294 let curline= line(".")
1236 call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),'./')) 1295 call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),'./'))
1237 exe curline 1296 exe "keepjumps ".curline
1238 " call Dret("NetBrowseRename") 1297 " call Dret("NetBrowseRename")
1239 endfun 1298 endfun
1240 1299
1241 " --------------------------------------------------------------------- 1300 " ---------------------------------------------------------------------
1242 " NetBrowseX: allows users to write custom functions to operate on {{{2 1301 " NetBrowseX: allows users to write custom functions to operate on {{{2
1243 " files given their extension 1302 " files given their extension. Passes 0=local, 1=remote
1244 fun! <SID>NetBrowseX(fname) 1303 fun! <SID>NetBrowseX(fname,remote)
1245 " call Dfunc("NetBrowseX(".a:fname.")") 1304 " call Dfunc("NetBrowseX(".a:fname." remote=".a:remote.")")
1246 1305
1247 let exten= substitute(a:fname,'.*\.\(.\{-}\)','\1','e') 1306 let exten= substitute(a:fname,'.*\.\(.\{-}\)','\1','e')
1248 " call Decho("exten<".exten."> "."NetrwFileHandler_".exten."():exists=".exists("*NetrwFileHandler_".exten)) 1307 " call Decho("exten<".exten."> "."NetrwFileHandler_".exten."():exists=".exists("*NetrwFileHandler_".exten))
1249 if exten != "" && exists("*NetrwFileHandler_".exten) 1308 if exten != "" && exists("*NetrwFileHandler_".exten)
1250 exe "call NetrwFileHandler_".exten.'("'.a:fname.'")' 1309
1251 endif 1310 let fname= a:fname
1311 if a:remote == 1
1312 " create a local copy
1313 let fname= tempname().".".exten
1314 " call Decho("create a local copy of <".a:fname."> as <".fname.">")
1315 exe "keepjumps silent bot 1new ".a:fname
1316 let eikeep= &ei
1317 set ei=all bh=delete
1318 exe "w! ".fname
1319 let &ei= eikeep
1320 q
1321 endif
1322
1323 exe "let ret= NetrwFileHandler_".exten.'("'.fname.'")'
1324 redraw!
1325
1326 " cleanup: remove temporary file,
1327 " delete current buffer if success with handler,
1328 " return to prior buffer (directory listing)
1329 if a:remote == 1 && fname != a:fname
1330 " call Decho("deleting temporary file<".fname.">")
1331 call delete(fname)
1332 endif
1333 if ret != 0
1334 let eikeep= &ei
1335 set ei=all bh=delete bt=nofile
1336 exe "norm! \<c-o>"
1337 let &ei= eikeep
1338 redraw!
1339 endif
1340 endif
1341
1252 " call Dret("NetBrowseX") 1342 " call Dret("NetBrowseX")
1253 endfun 1343 endfun
1254 1344
1255 " --------------------------------------------------------------------- 1345 " ---------------------------------------------------------------------
1256 " NetrwListHide: uses [range]g~...~d to delete files that match comma {{{2 1346 " NetrwListHide: uses [range]g~...~d to delete files that match comma {{{2
1274 " call Dret("NetrwListHide") 1364 " call Dret("NetrwListHide")
1275 endfun 1365 endfun
1276 1366
1277 " --------------------------------------------------------------------- 1367 " ---------------------------------------------------------------------
1278 " NetHideEdit: allows user to edit the file/directory hiding list 1368 " NetHideEdit: allows user to edit the file/directory hiding list
1279 fun! <SID>NetHideEdit() 1369 fun! <SID>NetHideEdit(mode)
1280 " call Dfunc("NetHideEdit()") 1370 " call Dfunc("NetHideEdit(mode=".a:mode.")")
1281 1371
1282 call inputsave() 1372 call inputsave()
1283 let newhide= input("Edit Hiding List: ",g:netrw_list_hide) 1373 let newhide= input("Edit Hiding List: ",g:netrw_list_hide)
1284 call inputrestore() 1374 call inputrestore()
1285 1375
1286 " refresh the listing 1376 " refresh the listing
1287 let g:netrw_list_hide= newhide 1377 let g:netrw_list_hide= newhide
1288 silent call s:NetBrowse(s:NetBrowseChgDir(expand("%"),'./')) 1378 if a:mode == 0
1379 silent call s:NetBrowse(s:NetBrowseChgDir(expand("%"),'./'))
1380 else
1381 silent call s:LocalBrowse(s:NetBrowseChgDir(expand("%"),'./'))
1382 endif
1289 1383
1290 " call Dret("NetHideEdit") 1384 " call Dret("NetHideEdit")
1291 endfun 1385 endfun
1292 1386
1293 " ------------------------------------------------------------------------ 1387 " ---------------------------------------------------------------------
1388 " NetLongList: {{{2
1389 fun! <SID>NetLongList(mode)
1390 " call Dfunc("NetLongList(mode=".a:mode.") netrw_longlist=".g:netrw_longlist)
1391
1392 if g:netrw_longlist != 0
1393 " turn long listing off
1394 let g:netrw_longlist = 0
1395 let g:netrw_list_cmd = substitute(g:netrw_list_cmd,' -l','','ge')
1396
1397 else
1398 " turn long listing on
1399 let g:netrw_longlist = 1
1400 let g:netrw_list_cmd = g:netrw_list_cmd." -l"
1401 endif
1402
1403 " refresh the listing
1404 if a:mode == 0
1405 silent call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),"./"))
1406 else
1407 silent call <SID>LocalBrowse(<SID>LocalBrowseChgDir(expand("%"),"./"))
1408 endif
1409
1410 " call Dret("NetLongList : g:netrw_longlist=".g:netrw_longlist)
1411 endfun
1412
1413 " ---------------------------------------------------------------------
1414 " NetMakeDir: this function makes a directory (both local and remote)
1415 fun! <SID>NetMakeDir(usrhost)
1416 " call Dfunc("NetMakeDir(usrhost<".a:usrhost.">)")
1417
1418 " get name of new directory from user. A bare <CR> will skip.
1419 " if its currently a directory, also request will be skipped, but with
1420 " a message.
1421 call inputsave()
1422 let newdirname= input("Please give directory name: ")
1423 call inputrestore()
1424
1425 if newdirname == ""
1426 " call Dret("NetMakeDir : user aborted with bare <cr>")
1427 return
1428 endif
1429
1430 if a:usrhost == ""
1431
1432 " Local mkdir:
1433 " sanity checks
1434 if isdirectory(newdirname)
1435 echoerr "***warning*** <".newdirname."> is already a directory!"
1436 " call Dret("NetMakeDir : directory<".newdirname."> exists previously")
1437 return
1438 endif
1439 if filereadable(newdirname)
1440 echoerr "***warning*** <".newdirname."> is already a file!"
1441 " call Dret("NetMakeDir : file<".newdirname."> exists previously")
1442 return
1443 endif
1444 exe "silent! !".g:netrw_local_mkdir." ".newdirname
1445 if v:shell_error == 0
1446 " refresh listing
1447 call s:LocalBrowse(".")
1448 else
1449 echoerr "***warning*** unable to make directory<".newdirname.">"
1450 endif
1451 redraw!
1452
1453 else
1454 " Remote mkdir:
1455 let mkdircmd = substitute(g:netrw_mkdir_cmd,'\<HOSTNAME\>',a:usrhost,'')
1456 let newdirname= substitute(expand("%"),'^\%(.\{-}/\)\{3}\(.*\)$','\1','').newdirname
1457 " call Decho("exe silent! !".mkdircmd." ".newdirname)
1458 exe "silent! !".mkdircmd." ".newdirname
1459 if v:shell_error == 0
1460 " refresh listing
1461 call s:NetBrowse(s:NetBrowseChgDir(expand("%"),'./'))
1462 else
1463 echoerr "***warning*** unable to make directory<".newdirname.">"
1464 endif
1465 redraw!
1466 endif
1467
1468 " call Dret("NetMakeDir")
1469 endfun
1470
1471 " ---------------------------------------------------------------------
1472 " Browsing Support For Local Directories And Files: {{{1
1473
1474 " ---------------------------------------------------------------------
1475 " LocalBrowse: supports local file/directory browsing {{{2
1476 fun! <SID>LocalBrowse(dirname)
1477
1478 " let dirname= (a:dirname == "")? expand("%:p") : a:dirname
1479 if !isdirectory(a:dirname)
1480 " not a directory, ignore it
1481 return
1482 endif
1483
1484 " " unfortunate interaction -- when putting Dfunc/Dret above
1485 " one can no longer enter the DBG buffer.
1486 " call Dfunc("LocalBrowse(dirname<".a:dirname.">)")
1487
1488 exe 'cd '.escape(a:dirname,' ')
1489 let dirname= getcwd()."/"
1490 " call Decho("dirname<".dirname.">")
1491
1492 " make this buffer modifiable
1493 setlocal ma
1494
1495 " ---------------------------------------------------------------------
1496 " Perform Directory Listing:
1497 " call Decho("Perform directory listing...")
1498 " set up new buffer and map
1499 let dirnamenr = bufnr(dirname)
1500 if dirnamenr != -1 && bufname(dirnamenr) != dirname
1501 " try removing the trailing "/"
1502 let dirnamenr= bufnr(substitute(dirname,'/$','','e'))
1503 endif
1504 " call Decho("bufnr(dirname<".dirname.">)=".dirnamenr)
1505
1506 if dirnamenr != -1 && bufexists(dirname)
1507 " buffer already exists (hidden), so switch to it!
1508 exe "b ".dirnamenr
1509 exe 'cd '.escape(dirname,' ')
1510 " call Decho("changed directory to<".dirname.">")
1511 if a:dirname != "." && line("$") >= 5
1512 " call Dret("LocalBrowse : buffer already exists with info")
1513 return
1514 endif
1515 " call Decho("buffer already exists, but needs listing (buf#".dirnamenr.")")
1516 keepjumps %d
1517 else
1518 " call Dredir("ls!")
1519 " call Decho("generate new buffer named<".dirname.">")
1520 silent! enew!
1521 exe 'silent! file '.escape(dirname,' ')
1522 endif
1523 " set standard browser options on buffer
1524 setlocal ts=32 bt=nowrite bh=hide nobl
1525
1526 " set up all the maps
1527 nnoremap <buffer> <silent> <cr> :exe "norm! 0"<bar>call <SID>LocalBrowse(<SID>LocalBrowseChgDir(expand("%:p"),<SID>NetGetDir()))<cr>
1528 nnoremap <buffer> <silent> <c-l> :exe "norm! 0"<bar>call <SID>LocalBrowse(<SID>LocalBrowseChgDir(expand("%:p"),'./'))<cr>
1529 nnoremap <buffer> <silent> - :exe "norm! 0"<bar>call <SID>LocalBrowse(<SID>LocalBrowseChgDir(expand("%:p"),'../'))<cr>
1530 nnoremap <buffer> <silent> a :let g:netrw_list_showall=1<bar>exe "norm! 0"<bar>call <SID>LocalBrowse(<SID>LocalBrowseChgDir(expand("%:p"),'./'))<cr>
1531 nnoremap <buffer> <silent> <Leader>H :call <SID>NetHideEdit(1)<cr>
1532 nnoremap <buffer> <silent> <Leader>M :call <SID>NetMakeDir("")<cr>
1533 nnoremap <buffer> <silent> i :call <SID>NetLongList(1)<cr>
1534 nnoremap <buffer> <silent> o :exe g:netrw_winsize."wincmd s"<bar>exe "norm! 0"<bar>call <SID>LocalBrowse(<SID>LocalBrowseChgDir(expand("%:p"),<SID>NetGetDir()))<cr>
1535 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(expand("%:p"),<SID>NetGetDir()))<cr>
1536 nnoremap <buffer> <silent> s :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(expand("%:p"),'./'))<cr>
1537 nnoremap <buffer> <silent> v :exe g:netrw_winsize."wincmd v"<bar>exe "norm! 0"<bar>call <SID>LocalBrowse(<SID>LocalBrowseChgDir(expand("%:p"),<SID>NetGetDir()))<cr>
1538 nnoremap <buffer> <silent> x :exe "norm! 0"<bar>call <SID>NetBrowseX(<SID>LocalBrowseChgDir(expand("%:p"),<SID>NetGetDir()),0)<cr>
1539 nnoremap <buffer> <silent> <2-leftmouse> :exe "norm! 0"<bar>call <SID>LocalBrowse(<SID>LocalBrowseChgDir(expand("%:p"),<SID>NetGetDir()))<cr>
1540 exe 'nnoremap <buffer> <silent> <del> :exe "norm! 0"<bar>call <SID>LocalBrowseRm("'.expand("%:p").<SID>NetGetDir().'")<cr>'
1541 exe 'vnoremap <buffer> <silent> <del> :call <SID>LocalBrowseRm("'.expand("%:p").<SID>NetGetDir().'")<cr>'
1542 exe 'nnoremap <buffer> <silent> D :exe "norm! 0"<bar>call <SID>LocalBrowseRm("'.expand("%:p").<SID>NetGetDir().'")<cr>'
1543 exe 'vnoremap <buffer> <silent> D :call <SID>LocalBrowseRm("'.expand("%:p").<SID>NetGetDir().'")<cr>'
1544 exe 'nnoremap <buffer> <silent> R :exe "norm! 0"<bar>call <SID>LocalBrowseRename("'.expand("%:p").<SID>NetGetDir().'")<cr>'
1545 nnoremap <buffer> ? :he netrw-dir<cr>
1546
1547 " Set up the banner
1548 keepjumps put ='\" ================='
1549 keepjumps 1d
1550 keepjumps put ='\" Directory Listing'
1551 keepjumps put ='\" '.dirname
1552 let g:netrw_bannercnt= 6
1553 if g:netrw_sort_by =~ "^n"
1554 " sorted by name
1555 let g:netrw_bannercnt= g:netrw_bannercnt + 1
1556 keepjumps put ='\" Sorted by '.g:netrw_sort_by
1557 keepjumps put ='\" Sort sequence: '.g:netrw_sort_sequence
1558 else
1559 " sorted by size or date
1560 keepjumps put ='\" Sorted by '.g:netrw_sort_by
1561 endif
1562 if g:netrw_list_hide != "" && !exists("g:netrw_list_showall")
1563 keepjumps put ='\" Hiding: '.g:netrw_list_hide
1564 let g:netrw_bannercnt= g:netrw_bannercnt + 1
1565 endif
1566 keepjumps put ='\" ================='
1567
1568 " generate the requested directory listing
1569 call LocalBrowseList(dirname)
1570
1571 " manipulate the directory listing (hide, sort)
1572 setlocal ft=netrwlist
1573 if line("$") >= g:netrw_bannercnt
1574 if !exists("g:netrw_list_showall")
1575 if g:netrw_list_hide != ""
1576 call s:NetrwListHide()
1577 endif
1578 else
1579 unlet g:netrw_list_showall
1580 endif
1581 if g:netrw_sort_by =~ "^n"
1582 call s:SetSort()
1583 exe 'keepjumps silent '.g:netrw_bannercnt.',$call s:NetSort()'
1584 exe 'keepjumps silent '.g:netrw_bannercnt.',$s/^\d\{3}\///e'
1585 else
1586 exe 'keepjumps silent '.g:netrw_bannercnt.',$call s:NetSort()'
1587 exe 'keepjumps silent '.g:netrw_bannercnt.',$s/^\d\{-}\///e'
1588 endif
1589 endif
1590 exe g:netrw_bannercnt
1591 try
1592 exe 'cd '.escape(substitute(dirname,'/$','','e'),' ')
1593 " call Decho("changed directory to<".dirname.">")
1594 catch
1595 echoerr "Not a directory: <".dirname.">"
1596 endtry
1597
1598 setlocal noma nomod
1599
1600 " call Dret("LocalBrowse")
1601 endfun
1602
1603 " ---------------------------------------------------------------------
1604 " LocalBrowseList: does the job of "ls" for local directories {{{2
1605 fun! LocalBrowseList(dirname)
1606 " call Dfunc("LocalBrowseList(dirname<".a:dirname.">)")
1607
1608 let dirnamelen = strlen(a:dirname)
1609 let filelist = glob(a:dirname."*")."\n".glob(a:dirname.".*")
1610 " call Decho("filelist<".filelist.">")
1611
1612 while filelist != ""
1613 if filelist =~ '\n'
1614 let file = substitute(filelist,'\n.*$','','e')
1615 let filelist = substitute(filelist,'^.\{-}\n\(.*\)$','\1','e')
1616 else
1617 let file = filelist
1618 let filelist= ""
1619 endif
1620 let pfile= file
1621 if isdirectory(file)
1622 let pfile= file."/"
1623 endif
1624 let pfile= strpart(pfile,dirnamelen)
1625 if g:netrw_longlist
1626 let pfile= pfile."\t".getfsize(file)."\t".strftime(g:netrw_timefmt,getftime(file))
1627 endif
1628 if g:netrw_sort_by =~ "^t"
1629 " sort by time (handles time up to 1 quintillion seconds, US)
1630 " call Decho("getftime(".file.")=".getftime(file))
1631 let t = getftime(file)
1632 let ft = strpart("000000000000000000",1,18-strlen(t)).t
1633 " call Decho("exe keepjumps put ='".ft.'/'.file."'")
1634 exe "keepjumps put ='".ft.'/'.pfile."'"
1635 elseif g:netrw_sort_by =~ "^s"
1636 " sort by size (handles file sizes up to 1 quintillion bytes, US)
1637 " call Decho("getfsize(".file.")=".getfsize(file))
1638 let sz = getfsize(file)
1639 let fsz = strpart("000000000000000000",1,18-strlen(sz)).sz
1640 " call Decho("exe keepjumps put ='".fsz.'/'.file."'")
1641 exe "keepjumps put ='".fsz.'/'.pfile."'"
1642 else
1643 " sort by name
1644 " call Decho("exe keepjumps put ='".file."'")
1645 exe "keepjumps put ='".pfile."'"
1646 endif
1647 endwhile
1648
1649 " call Dret("LocalBrowseList")
1650 endfun
1651
1652 " ---------------------------------------------------------------------
1653 " LocalBrowseChgDir: constructs a new directory based on the current {{{2
1654 " directory and a new directory name
1655 fun! <SID>LocalBrowseChgDir(dirname,newdir)
1656 " call Dfunc("LocalBrowseChgDir(dirname<".a:dirname."> newdir<".a:newdir.">)")
1657
1658 let dirname= a:dirname
1659 let newdir = a:newdir
1660
1661 if dirname !~ '/$'
1662 " apparently vim is "recognizing" that it is in the home directory and
1663 " is removing the "/". Bad idea, so I have to put it back.
1664 let dirname= dirname.'/'
1665 " call Decho("adjusting dirname<".dirname.">")
1666 endif
1667
1668 if newdir !~ '/$'
1669 " handling a file
1670 let dirname= dirname.newdir
1671 " call Decho("handling a file: dirname<".dirname.">")
1672 exe "e ".dirname
1673
1674 elseif newdir == './'
1675 " refresh the directory list
1676 " call Decho("refresh directory listing")
1677 setlocal ma
1678 %d
1679
1680 elseif newdir == '../'
1681 " go up one directory
1682 let dirname= substitute(dirname,'^\(.*/\)\([^/]\+/$\)','\1','e')
1683 " call Decho("go up one dir: dirname<".dirname.">")
1684
1685 else
1686 " go down one directory
1687 let dirname= dirname.newdir
1688 " call Decho("go down one dir: dirname<".dirname."> newdir<".newdir.">")
1689 endif
1690
1691 " call Dret("LocalBrowseChgDir <".dirname.">")
1692 return dirname
1693 endfun
1694
1695 " ---------------------------------------------------------------------
1696 " LocalBrowseRm:
1697 fun! <SID>LocalBrowseRm(path) range
1698 " call Dfunc("LocalBrowseRm(path<".a:path.">)")
1699 " call Decho("firstline=".a:firstline." lastline=".a:lastline)
1700
1701 " preparation for removing multiple files/directories
1702 let ctr= a:firstline
1703
1704 " remove multiple files and directories
1705 while ctr <= a:lastline
1706 exe ctr
1707
1708 norm! 0
1709 let rmfile= a:path.expand("<cWORD>")
1710 " call Decho("rmfile<".rmfile.">")
1711
1712 if rmfile !~ '^"' && (rmfile =~ '@$' || rmfile !~ '/$')
1713 " attempt to remove file
1714 call inputsave()
1715 let ok= input("Confirm deletion of file<".rmfile."> ","y")
1716 call inputrestore()
1717 if ok == "y"
1718 call delete(rmfile)
1719 " call Decho("errcode=".v:shell_error)
1720 endif
1721
1722 else
1723 " attempt to remove directory
1724 call inputsave()
1725 let ok= input("Confirm deletion of directory<".rmfile."> ","y")
1726 call inputrestore()
1727 let rmfile= substitute(rmfile,'/$','','e')
1728
1729 if ok == "y"
1730 call system(g:netrw_local_rmdir." ".rmfile)
1731 " call Decho("v:shell_error=".v:shell_error)
1732
1733 if v:shell_error != 0
1734 " call Decho("2nd attempt to remove directory<".rmfile.">")
1735 let errcode= delete(rmfile)
1736 " call Decho("errcode=".errcode)
1737
1738 if errcode != 0
1739 if has("unix")
1740 " call Decho("3rd attempt to remove directory<".rmfile.">")
1741 call system("rm ".rmfile)
1742 if v:shell_error != 0
1743 echoerr "unable to remove directory<".rmfile."> -- is it empty?"
1744 endif
1745 else
1746 echoerr "unable to remove directory<".rmfile."> -- is it empty?"
1747 endif
1748 endif
1749 endif
1750 endif
1751 endif
1752
1753 let ctr= ctr + 1
1754 endwhile
1755
1756 " refresh the directory
1757 let curline= line(".")-1
1758 " call Decho("refresh the directory")
1759 call <SID>LocalBrowse(<SID>LocalBrowseChgDir(expand("%"),'./'))
1760 exe curline
1761
1762 " call Dret("LocalBrowseRm")
1763 endfun
1764
1765 " ---------------------------------------------------------------------
1766 " LocalBrowseRename: rename a remote file or directory {{{2
1767 fun! <SID>LocalBrowseRename(path)
1768 " call Dfunc("LocalBrowseRename(path<".a:path.">)")
1769
1770 " preparation for removing multiple files/directories
1771 let ctr= a:firstline
1772
1773 " attempt to rename files/directories
1774 while ctr <= a:lastline
1775 exe "keepjumps ".ctr
1776
1777 norm! 0
1778 let oldname= a:path.expand("<cWORD>")
1779 " call Decho("oldname<".oldname.">")
1780
1781 call inputsave()
1782 let newname= input("Moving ".oldname." to : ",oldname)
1783 call inputrestore()
1784
1785 let ret= system(g:netrw_local_rename." ".oldname." ".newname)
1786 " call Decho("executing system(".g:netrw_local_rename." ".oldname." ".newname)
1787
1788 let ctr= ctr + 1
1789 endwhile
1790
1791 " refresh the directory
1792 let curline= line(".")
1793 call <SID>LocalBrowse(<SID>LocalBrowseChgDir(expand("%"),'./'))
1794 exe "keepjumps ".curline
1795 " call Dret("LocalBrowseRename")
1796 endfun
1797
1798 " ---------------------------------------------------------------------
1294 " NetMethod: determine method of transfer {{{1 1799 " NetMethod: determine method of transfer {{{1
1295 " method == 1: rcp 1800 " method == 1: rcp
1296 " 2: ftp + <.netrc> 1801 " 2: ftp + <.netrc>
1297 " 3: ftp + machine, id, password, and [path]filename 1802 " 3: ftp + machine, id, password, and [path]filename
1298 " 4: scp 1803 " 4: scp
1529 let s:comkeep = &com 2034 let s:comkeep = &com
1530 let s:cpokeep = &cpo 2035 let s:cpokeep = &cpo
1531 let s:dirkeep = getcwd() 2036 let s:dirkeep = getcwd()
1532 let s:gdkeep = &gd 2037 let s:gdkeep = &gd
1533 let s:twkeep = &tw 2038 let s:twkeep = &tw
1534 set cino = 2039 setlocal cino =
1535 set com = 2040 setlocal com =
1536 set cpo -=aA 2041 setlocal cpo -=aA
1537 set nocin noai 2042 setlocal nocin noai
1538 set tw =0 2043 setlocal tw =0
1539 if has("win32") && !has("win95") 2044 if has("win32") && !has("win95")
1540 let s:swfkeep= &swf 2045 let s:swfkeep= &swf
1541 set noswf 2046 setlocal noswf
1542 " call Decho("setting s:swfkeep to <".&swf.">") 2047 " call Decho("setting s:swfkeep to <".&swf.">")
1543 endif 2048 endif
1544 2049
1545 " call Dret("NetOptionSave") 2050 " call Dret("NetOptionSave")
1546 endfun 2051 endfun
1593 endif 2098 endif
1594 2099
1595 " --------------------------------------------------------------------- 2100 " ---------------------------------------------------------------------
1596 " NetSort: Piet Delport's BISort2() function, modified to take a range {{{1 2101 " NetSort: Piet Delport's BISort2() function, modified to take a range {{{1
1597 fun! <SID>NetSort() range 2102 fun! <SID>NetSort() range
2103 " call Dfunc("NetSort()")
2104
1598 let i = a:firstline + 1 2105 let i = a:firstline + 1
1599 while i <= a:lastline 2106 while i <= a:lastline
1600 " find insertion point via binary search 2107 " find insertion point via binary search
1601 let i_val = getline(i) 2108 let i_val = getline(i)
1602 let lo = a:firstline 2109 let lo = a:firstline
1627 exe 'keepjumps '.i.'d_' 2134 exe 'keepjumps '.i.'d_'
1628 keepjumps call append(lo - 1, i_val) 2135 keepjumps call append(lo - 1, i_val)
1629 endif 2136 endif
1630 let i = i + 1 2137 let i = i + 1
1631 endwhile 2138 endwhile
2139
2140 " call Dret("NetSort")
1632 endfun 2141 endfun
1633 2142
1634 " --------------------------------------------------------------------- 2143 " ---------------------------------------------------------------------
1635 " SetSort: sets up the sort based on the g:netrw_sort_sequence 2144 " SetSort: sets up the sort based on the g:netrw_sort_sequence {{{1
2145 " What this function does is to compute a priority for the patterns
2146 " in the g:netrw_sort_sequence. It applies a substitute to any
2147 " "files" that satisfy each pattern, putting the priority / in
2148 " front. An "*" pattern handles the default priority.
1636 fun! <SID>SetSort() 2149 fun! <SID>SetSort()
1637 " call Dfunc("SetSort() bannercnt=".g:netrw_bannercnt) 2150 " call Dfunc("SetSort() bannercnt=".g:netrw_bannercnt)
1638 let seqlist = g:netrw_sort_sequence 2151 if g:netrw_longlist
2152 let seqlist = substitute(g:netrw_sort_sequence,'\$','\\%(\t\\|\$\\)','ge')
2153 else
2154 let seqlist = g:netrw_sort_sequence
2155 endif
2156 " sanity check -- insure that * appears somewhere
2157 if seqlist == ""
2158 let seqlist= '*'
2159 elseif seqlist !~ '\*'
2160 let seqlist= seqlist.',*'
2161 endif
1639 let priority = 1 2162 let priority = 1
1640 while seqlist != "" 2163 while seqlist != ""
1641 if seqlist =~ ',' 2164 if seqlist =~ ','
1642 let seq = substitute(seqlist,',.*$','','e') 2165 let seq = substitute(seqlist,',.*$','','e')
1643 let seqlist = substitute(seqlist,'^.\{-},\(.*\)$','\1','e') 2166 let seqlist = substitute(seqlist,'^.\{-},\(.*\)$','\1','e')