comparison runtime/autoload/netrw.vim @ 1668:0b796e045c42 v7.2b.000

updated for version 7.2b-000
author vimboss
date Sun, 13 Jul 2008 17:41:49 +0000
parents 82b5078be2dd
children f4f8014d516e
comparison
equal deleted inserted replaced
1667:131dbd3d2a4b 1668:0b796e045c42
1 " netrw.vim: Handles file transfer and remote directory listing across 1 " netrw.vim: Handles file transfer and remote directory listing across
2 " AUTOLOAD SECTION 2 " AUTOLOAD SECTION
3 " Date: Jun 12, 2008 3 " Date: Jul 12, 2008
4 " Version: 125 4 " Version: 127
5 " Maintainer: Charles E Campbell, Jr <NdrOchip@ScampbellPfamily.AbizM-NOSPAM> 5 " Maintainer: Charles E Campbell, Jr <NdrOchip@ScampbellPfamily.AbizM-NOSPAM>
6 " GetLatestVimScripts: 1075 1 :AutoInstall: netrw.vim 6 " GetLatestVimScripts: 1075 1 :AutoInstall: netrw.vim
7 " Copyright: Copyright (C) 1999-2008 Charles E. Campbell, Jr. {{{1 7 " Copyright: Copyright (C) 1999-2008 Charles E. Campbell, Jr. {{{1
8 " Permission is hereby granted to use and distribute this code, 8 " Permission is hereby granted to use and distribute this code,
9 " with or without modifications, provided that this copyright 9 " with or without modifications, provided that this copyright
25 if !exists("s:NOTE") 25 if !exists("s:NOTE")
26 let s:NOTE = 0 26 let s:NOTE = 0
27 let s:WARNING = 1 27 let s:WARNING = 1
28 let s:ERROR = 2 28 let s:ERROR = 2
29 endif 29 endif
30 let g:loaded_netrw = "v125" 30 let g:loaded_netrw = "v127"
31 31
32 " sanity checks 32 " sanity checks
33 if v:version < 700 33 if v:version < 700
34 call netrw#ErrorMsg(s:WARNING,"you need vim version 7.0 or later for version ".g:loaded_netrw." of netrw",1) 34 call netrw#ErrorMsg(s:WARNING,"you need vim version 7.0 or later for version ".g:loaded_netrw." of netrw",1)
35 finish 35 finish
36 endif
37 if !exists("*shellescape")
38 call netrw#ErrorMsg(s:ERROR,"you need to upgade your vim so that it has shellescape()",64)
39 endif
40 if !exists("*fnameescape")
41 call netrw#ErrorMsg(s:ERROR,"you need to upgade your vim so that it has fnameescape()",65)
42 endif 36 endif
43 37
44 let s:keepcpo= &cpo 38 let s:keepcpo= &cpo
45 setlocal cpo&vim 39 setlocal cpo&vim
46 "DechoTabOn 40 "DechoTabOn
310 endif 304 endif
311 if !exists("g:netrw_sort_by") 305 if !exists("g:netrw_sort_by")
312 " alternatives: date size 306 " alternatives: date size
313 let g:netrw_sort_by= "name" 307 let g:netrw_sort_by= "name"
314 endif 308 endif
309 if !exists("g:netrw_sort_options")
310 let g:netrw_sort_options= ""
311 endif
315 if !exists("g:netrw_sort_direction") 312 if !exists("g:netrw_sort_direction")
316 " alternative: reverse (z y x ...) 313 " alternative: reverse (z y x ...)
317 let g:netrw_sort_direction= "normal" 314 let g:netrw_sort_direction= "normal"
318 endif 315 endif
319 if !exists("g:netrw_sort_sequence") 316 if !exists("g:netrw_sort_sequence")
413 let {a:vt}netrw_repkeep = &l:report 410 let {a:vt}netrw_repkeep = &l:report
414 let {a:vt}netrw_spellkeep = &l:spell 411 let {a:vt}netrw_spellkeep = &l:spell
415 let {a:vt}netrw_twkeep = &l:tw " textwidth 412 let {a:vt}netrw_twkeep = &l:tw " textwidth
416 let {a:vt}netrw_wigkeep = &l:wig " wildignore 413 let {a:vt}netrw_wigkeep = &l:wig " wildignore
417 if has("win32") && !has("win95") 414 if has("win32") && !has("win95")
418 let {a:vt}netrw_swfkeep= &l:swf " swapfile 415 let {a:vt}netrw_swfkeep = &l:swf " swapfile
419 endif 416 endif
420 if &go =~ 'a' | silent! let {a:vt}netrw_regstar = @* | endif 417 if &go =~ 'a' | silent! let {a:vt}netrw_regstar = @* | endif
421 silent! let {a:vt}netrw_regslash= @/ 418 silent! let {a:vt}netrw_regslash= @/
422 419
423 " call Dret("s:NetrwOptionSave : win#".winnr()." buf#".bufnr("%")) 420 " call Dret("s:NetrwOptionSave : win#".winnr()." buf#".bufnr("%"))
426 " ------------------------------------------------------------------------ 423 " ------------------------------------------------------------------------
427 " s:NetrwOptionRestore: restore options {{{2 424 " s:NetrwOptionRestore: restore options {{{2
428 fun! s:NetrwOptionRestore(vt) 425 fun! s:NetrwOptionRestore(vt)
429 " call Dfunc("s:NetrwOptionRestore(vt<".a:vt.">) win#".winnr()." buf#".bufnr("%")) 426 " call Dfunc("s:NetrwOptionRestore(vt<".a:vt.">) win#".winnr()." buf#".bufnr("%"))
430 if !exists("{a:vt}netrw_optionsave") 427 if !exists("{a:vt}netrw_optionsave")
431 " call Decho("ro=".&ro." ma=".&ma." mod=".&mod." wrap=".&wrap) 428 " call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap)
432 " call Dret("s:NetrwOptionRestore : ".a:vt."netrw_optionsave doesn't exist") 429 " call Dret("s:NetrwOptionRestore : ".a:vt."netrw_optionsave doesn't exist")
433 return 430 return
434 endif 431 endif
435 unlet {a:vt}netrw_optionsave 432 unlet {a:vt}netrw_optionsave
436 433
490 if exists("{a:vt}netrw_regstar") |silent! let @*= {a:vt}netrw_regstar |unlet {a:vt}netrw_regstar |endif 487 if exists("{a:vt}netrw_regstar") |silent! let @*= {a:vt}netrw_regstar |unlet {a:vt}netrw_regstar |endif
491 if exists("{a:vt}netrw_regslash")|silent! let @/= {a:vt}netrw_regslash|unlet {a:vt}netrw_regslash|endif 488 if exists("{a:vt}netrw_regslash")|silent! let @/= {a:vt}netrw_regslash|unlet {a:vt}netrw_regslash|endif
492 489
493 " call Decho("g:netrw_keepdir=".g:netrw_keepdir.": getcwd<".getcwd()."> acd=".&acd) 490 " call Decho("g:netrw_keepdir=".g:netrw_keepdir.": getcwd<".getcwd()."> acd=".&acd)
494 " call Decho("fo=".&fo.(exists("&acd")? " acd=".&acd : " acd doesn't exist")) 491 " call Decho("fo=".&fo.(exists("&acd")? " acd=".&acd : " acd doesn't exist"))
495 " call Decho("ro=".&ro." ma=".&ma." mod=".&mod." wrap=".&wrap) 492 " call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap)
496 " call Dret("s:NetrwOptionRestore : win#".winnr()." buf#".bufnr("%")) 493 " call Dret("s:NetrwOptionRestore : win#".winnr()." buf#".bufnr("%"))
497 endfun 494 endfun
498 495
499 " --------------------------------------------------------------------- 496 " ---------------------------------------------------------------------
500 " s:NetrwSafeOptions: sets options to help netrw do its job {{{2 497 " s:NetrwSafeOptions: sets options to help netrw do its job {{{2
534 531
535 if choice == 1 532 if choice == 1
536 for dir in split(&rtp,',') 533 for dir in split(&rtp,',')
537 if filereadable(dir."/plugin/netrwPlugin.vim") 534 if filereadable(dir."/plugin/netrwPlugin.vim")
538 " call Decho("removing netrw-related files from ".dir) 535 " call Decho("removing netrw-related files from ".dir)
539 if s:System("delete",dir."/plugin/netrwPlugin.vim") |call netrw#ErrorMsg(1,"unable to remove ".dir."/plugin/netrwPlugin.vim",55) |endif 536 if s:NetrwDelete(dir."/plugin/netrwPlugin.vim") |call netrw#ErrorMsg(1,"unable to remove ".dir."/plugin/netrwPlugin.vim",55) |endif
540 if s:System("delete",dir."/autoload/netrwFileHandlers.vim")|call netrw#ErrorMsg(1,"unable to remove ".dir."/autoload/netrwFileHandlers.vim",55)|endif 537 if s:NetrwDelete(dir."/autoload/netrwFileHandlers.vim")|call netrw#ErrorMsg(1,"unable to remove ".dir."/autoload/netrwFileHandlers.vim",55)|endif
541 if s:System("delete",dir."/autoload/netrwSettings.vim") |call netrw#ErrorMsg(1,"unable to remove ".dir."/autoload/netrwSettings.vim",55) |endif 538 if s:NetrwDelete(dir."/autoload/netrwSettings.vim") |call netrw#ErrorMsg(1,"unable to remove ".dir."/autoload/netrwSettings.vim",55) |endif
542 if s:System("delete",dir."/autoload/netrw.vim") |call netrw#ErrorMsg(1,"unable to remove ".dir."/autoload/netrw.vim",55) |endif 539 if s:NetrwDelete(dir."/autoload/netrw.vim") |call netrw#ErrorMsg(1,"unable to remove ".dir."/autoload/netrw.vim",55) |endif
543 if s:System("delete",dir."/syntax/netrw.vim") |call netrw#ErrorMsg(1,"unable to remove ".dir."/syntax/netrw.vim",55) |endif 540 if s:NetrwDelete(dir."/syntax/netrw.vim") |call netrw#ErrorMsg(1,"unable to remove ".dir."/syntax/netrw.vim",55) |endif
544 if s:System("delete",dir."/syntax/netrwlist.vim") |call netrw#ErrorMsg(1,"unable to remove ".dir."/syntax/netrwlist.vim",55) |endif 541 if s:NetrwDelete(dir."/syntax/netrwlist.vim") |call netrw#ErrorMsg(1,"unable to remove ".dir."/syntax/netrwlist.vim",55) |endif
545 let diddir= dir 542 let diddir= dir
546 let diddel= diddel + 1 543 let diddel= diddel + 1
547 if !a:sys|break|endif 544 if !a:sys|break|endif
548 endif 545 endif
549 endfor 546 endfor
702 let uid_machine = g:netrw_uid .'@'. g:netrw_machine 699 let uid_machine = g:netrw_uid .'@'. g:netrw_machine
703 else 700 else
704 let uid_machine = g:netrw_machine 701 let uid_machine = g:netrw_machine
705 endif 702 endif
706 endif 703 endif
707 " call Decho("executing: !".g:netrw_rcp_cmd." ".s:netrw_rcpmode." ".shellescape(uid_machine.":".escape(b:netrw_fname,' ?&;')." ".tmpfile) 704 " call Decho("executing: !".g:netrw_rcp_cmd." ".s:netrw_rcpmode." ".shellescape(uid_machine.":".b:netrw_fname,1)." ".shellescape(tmpfile,1))
708 exe s:netrw_silentxfer."!".g:netrw_rcp_cmd." ".s:netrw_rcpmode." ".shellescape(uid_machine.":".escape(b:netrw_fname,' ?&;')." ".tmpfile) 705 exe s:netrw_silentxfer."!".g:netrw_rcp_cmd." ".s:netrw_rcpmode." ".shellescape(uid_machine.":".b:netrw_fname,1)." ".shellescape(tmpfile,1))
709 let result = s:NetrwGetFile(readcmd, tmpfile, b:netrw_method) 706 let result = s:NetrwGetFile(readcmd, tmpfile, b:netrw_method)
710 let b:netrw_lastfile = choice 707 let b:netrw_lastfile = choice
711 708
712 "......................................... 709 ".........................................
713 " ftp + <.netrc>: NetRead Method #2 {{{3 710 " ftp + <.netrc>: NetRead Method #2 {{{3
723 " call Decho("filter input: ".getline('.')) 720 " call Decho("filter input: ".getline('.'))
724 endif 721 endif
725 exe "put ='".'get \"'.netrw_fname.'\" '.tmpfile."'" 722 exe "put ='".'get \"'.netrw_fname.'\" '.tmpfile."'"
726 " call Decho("filter input: ".getline('.')) 723 " call Decho("filter input: ".getline('.'))
727 if exists("g:netrw_port") && g:netrw_port != "" 724 if exists("g:netrw_port") && g:netrw_port != ""
728 " call Decho("executing: %!".g:netrw_ftp_cmd." -i ".g:netrw_machine." ".g:netrw_port) 725 " call Decho("executing: %!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine." ".g:netrw_port,1))
729 exe s:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i ".g:netrw_machine." ".g:netrw_port 726 exe s:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine." ".g:netrw_port,1)
730 else 727 else
731 " call Decho("executing: %!".g:netrw_ftp_cmd." -i ".g:netrw_machine) 728 " call Decho("executing: %!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1))
732 exe s:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i ".g:netrw_machine 729 exe s:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)
733 endif 730 endif
734 " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar) 731 " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar)
735 if getline(1) !~ "^$" && !exists("g:netrw_quiet") && getline(1) !~ '^Trying ' 732 if getline(1) !~ "^$" && !exists("g:netrw_quiet") && getline(1) !~ '^Trying '
736 let debugkeep= &debug 733 let debugkeep = &debug
737 setlocal debug=msg 734 setlocal debug=msg
738 call netrw#ErrorMsg(s:ERROR,getline(1),4) 735 call netrw#ErrorMsg(s:ERROR,getline(1),4)
739 let &debug= debugkeep 736 let &debug = debugkeep
740 endif 737 endif
741 call s:SaveBufVars()|bd!|call s:RestoreBufVars() 738 call s:SaveBufVars()|bd!|call s:RestoreBufVars()
742 let result = s:NetrwGetFile(readcmd, tmpfile, b:netrw_method) 739 let result = s:NetrwGetFile(readcmd, tmpfile, b:netrw_method)
743 let b:netrw_lastfile = choice 740 let b:netrw_lastfile = choice
744 741
804 if exists("g:netrw_port") && g:netrw_port != "" 801 if exists("g:netrw_port") && g:netrw_port != ""
805 let useport= " ".g:netrw_scpport." ".g:netrw_port 802 let useport= " ".g:netrw_scpport." ".g:netrw_port
806 else 803 else
807 let useport= "" 804 let useport= ""
808 endif 805 endif
809 " call Decho("exe s:netrw_silentxfer.!".g:netrw_scp_cmd.useport." ".shellescape(g:netrw_machine.":".escape(b:netrw_fname,g:netrw_fname_escape))." ".tmpfile) 806 " call Decho("exe s:netrw_silentxfer.!".g:netrw_scp_cmd.useport." ".shellescape(g:netrw_machine.":".b:netrw_fname,1)." ".shellescape(tmpfile,1))
810 exe s:netrw_silentxfer."!".g:netrw_scp_cmd.useport." ".shellescape(g:netrw_machine.":".escape(b:netrw_fname,g:netrw_fname_escape))." ".tmpfile 807 exe s:netrw_silentxfer."!".g:netrw_scp_cmd.useport." ".shellescape(g:netrw_machine.":".b:netrw_fname,1)." ".shellescape(tmpfile,1)
811 let result = s:NetrwGetFile(readcmd, tmpfile, b:netrw_method) 808 let result = s:NetrwGetFile(readcmd, tmpfile, b:netrw_method)
812 let b:netrw_lastfile = choice 809 let b:netrw_lastfile = choice
813 810
814 "......................................... 811 ".........................................
815 " http: NetRead Method #5 (wget) {{{3 812 " http: NetRead Method #5 (wget) {{{3
821 endif 818 endif
822 " call Dret("netrw#NetRead :4 getcwd<".getcwd().">") 819 " call Dret("netrw#NetRead :4 getcwd<".getcwd().">")
823 return 820 return
824 endif 821 endif
825 822
826 let netrw_fname= escape(b:netrw_fname,g:netrw_fname_escape)
827 if match(b:netrw_fname,"#") == -1 823 if match(b:netrw_fname,"#") == -1
828 " simple wget 824 " using g:netrw_http_cmd (usually wget or curl)
829 " call Decho('using simple wget (# not in b:netrw_fname<'.b:netrw_fname.">)") 825 " call Decho('using '.g:netrw_http_cmd.' (# not in b:netrw_fname<'.b:netrw_fname.">)")
830 " call Decho("exe ".s:netrw_silentxfer."!".g:netrw_http_cmd." ".shellescape(tmpfile)." ".shellescape("http://".g:netrw_machine.netrw_fname)) 826 " call Decho("exe ".s:netrw_silentxfer."!".g:netrw_http_cmd." ".shellescape(tmpfile,1)." ".shellescape("http://".g:netrw_machine.netrw_fname,1))
831 exe s:netrw_silentxfer."!".g:netrw_http_cmd." ".shellescape(tmpfile)." ".shellescape("http://".g:netrw_machine.netrw_fname) 827 exe s:netrw_silentxfer."!".g:netrw_http_cmd." ".shellescape(tmpfile,1)." ".shellescape("http://".g:netrw_machine.b:netrw_fname,1)
832 let result = s:NetrwGetFile(readcmd, tmpfile, b:netrw_method) 828 let result = s:NetrwGetFile(readcmd, tmpfile, b:netrw_method)
833 829
834 else 830 else
835 " wget plus a jump to an in-page marker (ie. http://abc/def.html#aMarker) 831 " wget/curl plus a jump to an in-page marker (ie. http://abc/def.html#aMarker)
836 " call Decho(("wget/curl plus jump (# in b:netrw_fname<".b:netrw_fname.">)") 832 " call Decho(("wget/curl plus jump (# in b:netrw_fname<".b:netrw_fname.">)")
837 let netrw_html= substitute(netrw_fname,"#.*$","","") 833 let netrw_html= substitute(b:netrw_fname,"#.*$","","")
838 let netrw_tag = substitute(netrw_fname,"^.*#","","") 834 let netrw_tag = substitute(b:netrw_fname,"^.*#","","")
839 " call Decho("netrw_html<".netrw_html.">") 835 " call Decho("netrw_html<".netrw_html.">")
840 " call Decho("netrw_tag <".netrw_tag.">") 836 " call Decho("netrw_tag <".netrw_tag.">")
841 " call Decho("exe ".s:netrw_silentxfer."!".g:netrw_http_cmd." ".shellescape(tmpfile)." ".shellescape("http://".g:netrw_machine.netrw_html)) 837 " call Decho("exe ".s:netrw_silentxfer."!".g:netrw_http_cmd." ".shellescape(tmpfile,1)." ".shellescape("http://".g:netrw_machine.netrw_html,1))
842 exe s:netrw_silentxfer."!".g:netrw_http_cmd." ".shellescape(tmpfile)." ".shellescape("http://".g:netrw_machine.netrw_html) 838 exe s:netrw_silentxfer."!".g:netrw_http_cmd." ".shellescape(tmpfile,1)." ".shellescape("http://".g:netrw_machine.netrw_html,1)
843 let result = s:NetrwGetFile(readcmd, tmpfile, b:netrw_method) 839 let result = s:NetrwGetFile(readcmd, tmpfile, b:netrw_method)
844 " call Decho('<\s*a\s*name=\s*"'.netrw_tag.'"/') 840 " call Decho('<\s*a\s*name=\s*"'.netrw_tag.'"/')
845 exe 'norm! 1G/<\s*a\s*name=\s*"'.netrw_tag.'"/'."\<CR>" 841 exe 'norm! 1G/<\s*a\s*name=\s*"'.netrw_tag.'"/'."\<CR>"
846 endif 842 endif
847 let b:netrw_lastfile = choice 843 let b:netrw_lastfile = choice
875 871
876 "......................................... 872 ".........................................
877 " rsync: NetRead Method #7 {{{3 873 " rsync: NetRead Method #7 {{{3
878 elseif b:netrw_method == 7 874 elseif b:netrw_method == 7
879 " call Decho("read via rsync (method #7)") 875 " call Decho("read via rsync (method #7)")
880 let netrw_fname= escape(b:netrw_fname,g:netrw_fname_escape) 876 " call Decho("exe ".s:netrw_silentxfer."!".g:netrw_rsync_cmd." ".shellescape(g:netrw_machine.":".b:netrw_fname,1)." ".shellescape(tmpfile,1))
881 " call Decho("exe ".s:netrw_silentxfer."!".g:netrw_rsync_cmd." ".shellescape(g:netrw_machine.":".netrw_fname)." ".tmpfile) 877 exe s:netrw_silentxfer."!".g:netrw_rsync_cmd." ".shellescape(g:netrw_machine.":".b:netrw_fname,1)." ".shellescape(tmpfile,1)
882 exe s:netrw_silentxfer."!".g:netrw_rsync_cmd." ".shellescape(g:netrw_machine.":".netrw_fname)." ".tmpfile
883 let result = s:NetrwGetFile(readcmd,tmpfile, b:netrw_method) 878 let result = s:NetrwGetFile(readcmd,tmpfile, b:netrw_method)
884 let b:netrw_lastfile = choice 879 let b:netrw_lastfile = choice
885 880
886 "......................................... 881 ".........................................
887 " fetch: NetRead Method #8 {{{3 882 " fetch: NetRead Method #8 {{{3
888 " fetch://[user@]host[:http]/path 883 " fetch://[user@]host[:http]/path
889 elseif b:netrw_method == 8 884 elseif b:netrw_method == 8
890 " call Decho("read via fetch (method #8)") 885 " call Decho("read via fetch (method #8)")
891 let netrw_fname= escape(b:netrw_fname,g:netrw_fname_escape)
892 if g:netrw_fetch_cmd == "" 886 if g:netrw_fetch_cmd == ""
893 if !exists("g:netrw_quiet") 887 if !exists("g:netrw_quiet")
894 call netrw#ErrorMsg(s:ERROR,"fetch command not available",7) 888 call netrw#ErrorMsg(s:ERROR,"fetch command not available",7)
895 endif 889 endif
896 " call Dret("NetRead") 890 " call Dret("NetRead")
901 let netrw_option= "ftp" 895 let netrw_option= "ftp"
902 endif 896 endif
903 " call Decho("read via fetch for ".netrw_option) 897 " call Decho("read via fetch for ".netrw_option)
904 898
905 if exists("g:netrw_uid") && g:netrw_uid != "" && exists("s:netrw_passwd") && s:netrw_passwd != "" 899 if exists("g:netrw_uid") && g:netrw_uid != "" && exists("s:netrw_passwd") && s:netrw_passwd != ""
906 " call Decho("exe ".s:netrw_silentxfer."!".g:netrw_fetch_cmd." ".tmpfile." ".shellescape(netrw_option."://".g:netrw_uid.':'.s:netrw_passwd.'@'.g:netrw_machine."/".netrw_fname)) 900 " call Decho("exe ".s:netrw_silentxfer."!".g:netrw_fetch_cmd." ".shellescape(tmpfile,1)." ".shellescape(netrw_option."://".g:netrw_uid.':'.s:netrw_passwd.'@'.g:netrw_machine."/".b:netrw_fname,1))
907 exe s:netrw_silentxfer."!".g:netrw_fetch_cmd." ".tmpfile." ".shellescape(netrw_option."://".g:netrw_uid.':'.s:netrw_passwd.'@'.g:netrw_machine."/".netrw_fname) 901 exe s:netrw_silentxfer."!".g:netrw_fetch_cmd." ".shellescape(tmpfile,1)." ".shellescape(netrw_option."://".g:netrw_uid.':'.s:netrw_passwd.'@'.g:netrw_machine."/".b:netrw_fname,1)
908 else 902 else
909 " call Decho("exe ".s:netrw_silentxfer."!".g:netrw_fetch_cmd." ".tmpfile." ".shellescape(netrw_option."://".g:netrw_machine."/".netrw_fname)) 903 " call Decho("exe ".s:netrw_silentxfer."!".g:netrw_fetch_cmd." ".shellescape(tmpfile,1)." ".shellescape(netrw_option."://".g:netrw_machine."/".b:netrw_fname,1))
910 exe s:netrw_silentxfer."!".g:netrw_fetch_cmd." ".tmpfile." ".shellescape(netrw_option."://".g:netrw_machine."/".netrw_fname) 904 exe s:netrw_silentxfer."!".g:netrw_fetch_cmd." ".shellescape(tmpfile,1)." ".shellescape(netrw_option."://".g:netrw_machine."/".b:netrw_fname,1)
911 endif 905 endif
912 906
913 let result = s:NetrwGetFile(readcmd,tmpfile, b:netrw_method) 907 let result = s:NetrwGetFile(readcmd,tmpfile, b:netrw_method)
914 let b:netrw_lastfile = choice 908 let b:netrw_lastfile = choice
915 setlocal ro 909 setlocal ro
916 910
917 "......................................... 911 ".........................................
918 " sftp: NetRead Method #9 {{{3 912 " sftp: NetRead Method #9 {{{3
919 elseif b:netrw_method == 9 913 elseif b:netrw_method == 9
920 " call Decho("read via sftp (method #9)") 914 " call Decho("read via sftp (method #9)")
921 let netrw_fname= escape(b:netrw_fname,g:netrw_fname_escape) 915 " call Decho("exe ".s:netrw_silentxfer."!".g:netrw_sftp_cmd." ".shellescape(g:netrw_machine.":".b:netrw_fname,1)." ".tmpfile)
922 " call Decho("exe ".s:netrw_silentxfer."!".g:netrw_sftp_cmd." ".shellescape(g:netrw_machine.":".netrw_fname)." ".tmpfile) 916 exe s:netrw_silentxfer."!".g:netrw_sftp_cmd." ".shellescape(g:netrw_machine.":".b:netrw_fname,1)." ".tmpfile
923 exe s:netrw_silentxfer."!".g:netrw_sftp_cmd." ".shellescape(g:netrw_machine.":".netrw_fname)." ".tmpfile
924 let result = s:NetrwGetFile(readcmd, tmpfile, b:netrw_method) 917 let result = s:NetrwGetFile(readcmd, tmpfile, b:netrw_method)
925 let b:netrw_lastfile = choice 918 let b:netrw_lastfile = choice
926 919
927 "......................................... 920 ".........................................
928 " Complain {{{3 921 " Complain {{{3
937 unlet b:netrw_method 930 unlet b:netrw_method
938 unlet b:netrw_fname 931 unlet b:netrw_fname
939 endif 932 endif
940 if s:FileReadable(tmpfile) && tmpfile !~ '.tar.bz2$' && tmpfile !~ '.tar.gz$' && tmpfile !~ '.zip' && tmpfile !~ '.tar' && readcmd != 't' 933 if s:FileReadable(tmpfile) && tmpfile !~ '.tar.bz2$' && tmpfile !~ '.tar.gz$' && tmpfile !~ '.zip' && tmpfile !~ '.tar' && readcmd != 't'
941 " call Decho("cleanup by deleting tmpfile<".tmpfile.">") 934 " call Decho("cleanup by deleting tmpfile<".tmpfile.">")
942 call s:System("delete",fnameescape(tmpfile)) 935 call s:NetrwDelete(fnameescape(tmpfile))
943 endif 936 endif
944 call s:NetrwOptionRestore("w:") 937 call s:NetrwOptionRestore("w:")
945 938
946 " call Dret("netrw#NetRead :5 getcwd<".getcwd().">") 939 " call Dret("netrw#NetRead :5 getcwd<".getcwd().">")
947 endfun 940 endfun
973 " call Decho("curbufname<".curbufname.">") 966 " call Decho("curbufname<".curbufname.">")
974 if &binary 967 if &binary
975 " For binary writes, always write entire file. 968 " For binary writes, always write entire file.
976 " (line numbers don't really make sense for that). 969 " (line numbers don't really make sense for that).
977 " Also supports the writing of tar and zip files. 970 " Also supports the writing of tar and zip files.
978 " call Decho("(write entire file) silent exe w! ".v:cmdarg." ".tmpfile) 971 " call Decho("(write entire file) silent exe w! ".fnameescape(v:cmdarg)." ".fnameescape(tmpfile))
979 silent exe "w! ".v:cmdarg." ".tmpfile 972 silent exe "w! ".fnameescape(v:cmdarg)." ".fnameescape(tmpfile)
980 elseif g:netrw_cygwin 973 elseif g:netrw_cygwin
981 " write (selected portion of) file to temporary 974 " write (selected portion of) file to temporary
982 let cygtmpfile= substitute(tmpfile,'/cygdrive/\(.\)','\1:','') 975 let cygtmpfile= substitute(tmpfile,'/cygdrive/\(.\)','\1:','')
983 " call Decho("(write selected portion) silent exe ".a:firstline."," . a:lastline . "w! ".v:cmdarg." ".cygtmpfile) 976 " call Decho("(write selected portion) silent exe ".a:firstline."," . a:lastline . "w! ".fnameescape(v:cmdarg)." ".fnameescape(cygtmpfile))
984 silent exe a:firstline."," . a:lastline . "w! ".v:cmdarg." ".cygtmpfile 977 silent exe a:firstline."," . a:lastline . "w! ".fnameescape(v:cmdarg)." ".fnameescape(cygtmpfile)
985 else 978 else
986 " write (selected portion of) file to temporary 979 " write (selected portion of) file to temporary
987 " call Decho("(write selected portion) silent exe ".a:firstline."," . a:lastline . "w! ".v:cmdarg." ".tmpfile) 980 " call Decho("(write selected portion) silent exe ".a:firstline."," . a:lastline . "w! ".fnameescape(v:cmdarg)." ".fnameescape(tmpfile))
988 silent exe a:firstline."," . a:lastline . "w! ".v:cmdarg." ".tmpfile 981 silent exe a:firstline."," . a:lastline . "w! ".fnameescape(v:cmdarg)." ".fnameescape(tmpfile)
989 endif 982 endif
990 983
991 if curbufname == "" 984 if curbufname == ""
992 " if the file is [No Name], and one attempts to Nwrite it, the buffer takes 985 " if the file is [No Name], and one attempts to Nwrite it, the buffer takes
993 " on the temporary file's name. Deletion of the temporary file during 986 " on the temporary file's name. Deletion of the temporary file during
1077 let uid_machine = g:netrw_uid .'@'. g:netrw_machine 1070 let uid_machine = g:netrw_uid .'@'. g:netrw_machine
1078 else 1071 else
1079 let uid_machine = g:netrw_machine 1072 let uid_machine = g:netrw_machine
1080 endif 1073 endif
1081 endif 1074 endif
1082 let netrw_fname= escape(b:netrw_fname,g:netrw_fname_escape) 1075 " call Decho("executing: !".g:netrw_rcp_cmd." ".s:netrw_rcpmode." ".shellescape(tmpfile,1)." ".shellescape(uid_machine.":".b:netrw_fname,1))
1083 " call Decho("executing: !".g:netrw_rcp_cmd." ".s:netrw_rcpmode." ".shellescape(tmpfile)." ".shellescape(uid_machine.":".netrw_fname)) 1076 exe s:netrw_silentxfer."!".g:netrw_rcp_cmd." ".s:netrw_rcpmode." ".shellescape(tmpfile,1)." ".shellescape(uid_machine.":".b:netrw_fname,1)
1084 exe s:netrw_silentxfer."!".g:netrw_rcp_cmd." ".s:netrw_rcpmode." ".shellescape(tmpfile)." ".shellescape(uid_machine.":".netrw_fname)
1085 let b:netrw_lastfile = choice 1077 let b:netrw_lastfile = choice
1086 1078
1087 "......................................... 1079 ".........................................
1088 " ftp + <.netrc>: NetWrite Method #2 {{{4 1080 " ftp + <.netrc>: NetWrite Method #2 {{{4
1089 elseif b:netrw_method == 2 1081 elseif b:netrw_method == 2
1099 " call Decho("filter input: ".getline('.')) 1091 " call Decho("filter input: ".getline('.'))
1100 endif 1092 endif
1101 exe "put ='".'put \"'.tmpfile.'\" \"'.netrw_fname.'\"'."'" 1093 exe "put ='".'put \"'.tmpfile.'\" \"'.netrw_fname.'\"'."'"
1102 " call Decho("filter input: ".getline('.')) 1094 " call Decho("filter input: ".getline('.'))
1103 if exists("g:netrw_port") && g:netrw_port != "" 1095 if exists("g:netrw_port") && g:netrw_port != ""
1104 " call Decho("executing: %!".g:netrw_ftp_cmd." -i ".g:netrw_machine." ".g:netrw_port) 1096 " call Decho("executing: %!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)." ".shellescape(g:netrw_port,1))
1105 exe s:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i ".g:netrw_machine." ".g:netrw_port 1097 exe s:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)." ".shellescape(g:netrw_port,1)
1106 else 1098 else
1107 " call Decho("filter input window#".winnr()) 1099 " call Decho("filter input window#".winnr())
1108 " call Decho("executing: %!".g:netrw_ftp_cmd." -i ".g:netrw_machine) 1100 " call Decho("executing: %!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1))
1109 exe s:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i ".g:netrw_machine 1101 exe s:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)
1110 endif 1102 endif
1111 " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar) 1103 " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar)
1112 if getline(1) !~ "^$" 1104 if getline(1) !~ "^$"
1113 if !exists("g:netrw_quiet") 1105 if !exists("g:netrw_quiet")
1114 call netrw#ErrorMsg(s:ERROR,getline(1),14) 1106 call netrw#ErrorMsg(s:ERROR,getline(1),14)
1165 1157
1166 "......................................... 1158 ".........................................
1167 " scp: NetWrite Method #4 {{{4 1159 " scp: NetWrite Method #4 {{{4
1168 elseif b:netrw_method == 4 1160 elseif b:netrw_method == 4
1169 " call Decho("write via scp (method #4)") 1161 " call Decho("write via scp (method #4)")
1170 let netrw_fname= escape(b:netrw_fname,g:netrw_fname_escape)
1171 if exists("g:netrw_port") && g:netrw_port != "" 1162 if exists("g:netrw_port") && g:netrw_port != ""
1172 let useport= " ".g:netrw_scpport." ".g:netrw_port 1163 let useport= " ".g:netrw_scpport." ".fnameescape(g:netrw_port)
1173 else 1164 else
1174 let useport= "" 1165 let useport= ""
1175 endif 1166 endif
1176 " call Decho("exe ".s:netrw_silentxfer."!".g:netrw_scp_cmd.useport." ".shellescape(tmpfile)." ".shellescape(g:netrw_machine.":".netrw_fname)) 1167 " call Decho("exe ".s:netrw_silentxfer."!".g:netrw_scp_cmd.useport." ".shellescape(tmpfile,1)." ".shellescape(g:netrw_machine.":".b:netrw_fname,1))
1177 exe s:netrw_silentxfer."!".g:netrw_scp_cmd.useport." ".shellescape(tmpfile)." ".shellescape(g:netrw_machine.":".netrw_fname) 1168 exe s:netrw_silentxfer."!".g:netrw_scp_cmd.useport." ".shellescape(tmpfile,1)." ".shellescape(g:netrw_machine.":".b:netrw_fname,1)
1178 let b:netrw_lastfile = choice 1169 let b:netrw_lastfile = choice
1179 1170
1180 "......................................... 1171 ".........................................
1181 " http: NetWrite Method #5 {{{4 1172 " http: NetWrite Method #5 {{{4
1182 elseif b:netrw_method == 5 1173 elseif b:netrw_method == 5
1213 1204
1214 "......................................... 1205 ".........................................
1215 " rsync: NetWrite Method #7 {{{4 1206 " rsync: NetWrite Method #7 {{{4
1216 elseif b:netrw_method == 7 1207 elseif b:netrw_method == 7
1217 " call Decho("write via rsync (method #7)") 1208 " call Decho("write via rsync (method #7)")
1218 let netrw_fname= escape(b:netrw_fname,g:netrw_fname_escape) 1209 " call Decho("executing: !".g:netrw_rsync_cmd." ".shellescape(tmpfile,1)." ".shellescape(g:netrw_machine.":".b:netrw_fname,1))
1219 " call Decho("executing: !".g:netrw_rsync_cmd." ".tmpfile." ".g:netrw_machine.":".netrw_fname) 1210 exe s:netrw_silentxfer."!".g:netrw_rsync_cmd." ".shellescape(tmpfile,1)." ".shellescape(g:netrw_machine.":".b:netrw_fname,1)
1220 exe s:netrw_silentxfer."!".g:netrw_rsync_cmd." ".tmpfile." ".g:netrw_machine.":".netrw_fname
1221 let b:netrw_lastfile = choice 1211 let b:netrw_lastfile = choice
1222 1212
1223 "......................................... 1213 ".........................................
1224 " sftp: NetWrite Method #9 {{{4 1214 " sftp: NetWrite Method #9 {{{4
1225 elseif b:netrw_method == 9 1215 elseif b:netrw_method == 9
1233 new 1223 new
1234 setlocal ff=unix 1224 setlocal ff=unix
1235 put ='put \"'.escape(tmpfile,'\').'\" '.netrw_fname 1225 put ='put \"'.escape(tmpfile,'\').'\" '.netrw_fname
1236 " call Decho("filter input: ".getline('.')) 1226 " call Decho("filter input: ".getline('.'))
1237 norm! 1Gdd 1227 norm! 1Gdd
1238 " call Decho("executing: %!".g:netrw_sftp_cmd.' '.uid_machine) 1228 " call Decho("executing: %!".g:netrw_sftp_cmd.' '.shellescape(uid_machine,1))
1239 exe s:netrw_silentxfer."%!".g:netrw_sftp_cmd.' '.uid_machine 1229 exe s:netrw_silentxfer."%!".g:netrw_sftp_cmd.' '.shellescape(uid_machine,1)
1240 bd! 1230 bd!
1241 let b:netrw_lastfile= choice 1231 let b:netrw_lastfile= choice
1242 1232
1243 "......................................... 1233 ".........................................
1244 " Complain {{{4 1234 " Complain {{{4
1249 1239
1250 " Cleanup: {{{3 1240 " Cleanup: {{{3
1251 " call Decho("cleanup") 1241 " call Decho("cleanup")
1252 if s:FileReadable(tmpfile) 1242 if s:FileReadable(tmpfile)
1253 " call Decho("tmpfile<".tmpfile."> readable, will now delete it") 1243 " call Decho("tmpfile<".tmpfile."> readable, will now delete it")
1254 call s:System("delete",tmpfile) 1244 call s:NetrwDelete(tmpfile)
1255 endif 1245 endif
1256 call s:NetrwOptionRestore("w:") 1246 call s:NetrwOptionRestore("w:")
1257 1247
1258 if a:firstline == 1 && a:lastline == line("$") 1248 if a:firstline == 1 && a:lastline == line("$")
1259 " restore modifiability; usually equivalent to set nomod 1249 " restore modifiability; usually equivalent to set nomod
1310 fun! s:NetrwGetFile(readcmd, tfile, method) 1300 fun! s:NetrwGetFile(readcmd, tfile, method)
1311 " call Dfunc("NetrwGetFile(readcmd<".a:readcmd.">,tfile<".a:tfile."> method<".a:method.">)") 1301 " call Dfunc("NetrwGetFile(readcmd<".a:readcmd.">,tfile<".a:tfile."> method<".a:method.">)")
1312 1302
1313 " readcmd=='t': simply do nothing 1303 " readcmd=='t': simply do nothing
1314 if a:readcmd == 't' 1304 if a:readcmd == 't'
1315 " call Decho("ro=".&ro." ma=".&ma." mod=".&mod." wrap=".&wrap) 1305 " call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap)
1316 " call Dret("NetrwGetFile : skip read of <".a:tfile.">") 1306 " call Dret("NetrwGetFile : skip read of <".a:tfile.">")
1317 return 1307 return
1318 endif 1308 endif
1319 1309
1320 " get name of remote filename (ie. url and all) 1310 " get name of remote filename (ie. url and all)
1334 if g:netrw_cygwin 1324 if g:netrw_cygwin
1335 let tfile= substitute(a:tfile,'/cygdrive/\(.\)','\1:','') 1325 let tfile= substitute(a:tfile,'/cygdrive/\(.\)','\1:','')
1336 else 1326 else
1337 let tfile= a:tfile 1327 let tfile= a:tfile
1338 endif 1328 endif
1339 " " call Decho("exe silent! keepalt file ".tfile) 1329 " call Decho("exe silent! keepalt file ".fnameescape(tfile))
1340 exe "silent! keepalt file ".tfile 1330 exe "silent! keepalt file ".fnameescape(tfile)
1341 1331
1342 " edit temporary file (ie. read the temporary file in) 1332 " edit temporary file (ie. read the temporary file in)
1343 if rfile =~ '\.zip$' 1333 if rfile =~ '\.zip$'
1344 " call Decho("handling remote zip file with zip#Browse(tfile<".tfile.">)") 1334 " call Decho("handling remote zip file with zip#Browse(tfile<".tfile.">)")
1345 call zip#Browse(tfile) 1335 call zip#Browse(tfile)
1356 " call Decho("edit temporary file") 1346 " call Decho("edit temporary file")
1357 e! 1347 e!
1358 endif 1348 endif
1359 1349
1360 " rename buffer back to remote filename 1350 " rename buffer back to remote filename
1361 " call Decho("exe silent! keepalt file ".escape(rfile,' ')) 1351 " call Decho("exe silent! keepalt file ".fnameescape(rfile))
1362 exe "silent! keepalt file ".escape(rfile,' ') 1352 exe "silent! keepalt file ".fnameescape(rfile)
1363 if a:method == 5 1353 if a:method == 5
1364 set ft=html 1354 set ft=html
1365 else 1355 else
1366 filetype detect 1356 filetype detect
1367 endif 1357 endif
1372 elseif s:FileReadable(a:tfile) 1362 elseif s:FileReadable(a:tfile)
1373 " read file after current line 1363 " read file after current line
1374 " call Decho("read file<".a:tfile."> after current line") 1364 " call Decho("read file<".a:tfile."> after current line")
1375 let curline = line(".") 1365 let curline = line(".")
1376 let lastline= line("$") 1366 let lastline= line("$")
1377 " call Decho("exe<".a:readcmd." ".v:cmdarg." ".a:tfile."> line#".curline) 1367 " call Decho("exe<".a:readcmd." ".fnameescape(v:cmdarg)." ".fnameescape(a:tfile)."> line#".curline)
1378 exe a:readcmd." ".v:cmdarg." ".a:tfile 1368 exe a:readcmd." ".fnameescape(v:cmdarg)." ".fnameescape(a:tfile)
1379 let line1= curline + 1 1369 let line1= curline + 1
1380 let line2= line("$") - lastline + 1 1370 let line2= line("$") - lastline + 1
1381 1371
1382 else 1372 else
1383 " not readable 1373 " not readable
1384 " call Decho("ro=".&ro." ma=".&ma." mod=".&mod." wrap=".&wrap) 1374 " call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap)
1385 " call Decho("tfile<".a:tfile."> not readable") 1375 " call Decho("tfile<".a:tfile."> not readable")
1386 call netrw#ErrorMsg(s:WARNING,"file <".a:tfile."> not readable",9) 1376 call netrw#ErrorMsg(s:WARNING,"file <".a:tfile."> not readable",9)
1387 " call Dret("NetrwGetFile : tfile<".a:tfile."> not readable") 1377 " call Dret("NetrwGetFile : tfile<".a:tfile."> not readable")
1388 return 1378 return
1389 endif 1379 endif
1404 " call Decho("readcmd<".a:readcmd."> cmdarg<".v:cmdarg."> tfile<".a:tfile."> readable=".s:FileReadable(a:tfile)) 1394 " call Decho("readcmd<".a:readcmd."> cmdarg<".v:cmdarg."> tfile<".a:tfile."> readable=".s:FileReadable(a:tfile))
1405 1395
1406 " make sure file is being displayed 1396 " make sure file is being displayed
1407 " redraw! 1397 " redraw!
1408 1398
1409 " call Decho("ro=".&ro." ma=".&ma." mod=".&mod." wrap=".&wrap) 1399 " call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap)
1410 " call Dret("NetrwGetFile") 1400 " call Dret("NetrwGetFile")
1411 endfun 1401 endfun
1412 1402
1413 " ------------------------------------------------------------------------ 1403 " ------------------------------------------------------------------------
1414 " s:NetrwMethod: determine method of transfer {{{2 1404 " s:NetrwMethod: determine method of transfer {{{2
1702 nnoremap <buffer> <silent> t :call <SID>NetrwSplit(4)<cr> 1692 nnoremap <buffer> <silent> t :call <SID>NetrwSplit(4)<cr>
1703 nnoremap <buffer> <silent> u :<c-u>call <SID>NetrwBookmarkDir(4,expand("%"))<cr> 1693 nnoremap <buffer> <silent> u :<c-u>call <SID>NetrwBookmarkDir(4,expand("%"))<cr>
1704 nnoremap <buffer> <silent> U :<c-u>call <SID>NetrwBookmarkDir(5,expand("%"))<cr> 1694 nnoremap <buffer> <silent> U :<c-u>call <SID>NetrwBookmarkDir(5,expand("%"))<cr>
1705 nnoremap <buffer> <silent> v :call <SID>NetrwSplit(5)<cr> 1695 nnoremap <buffer> <silent> v :call <SID>NetrwSplit(5)<cr>
1706 nnoremap <buffer> <silent> x :call netrw#NetrwBrowseX(<SID>NetrwBrowseChgDir(1,<SID>NetrwGetWord(),0),0)"<cr> 1696 nnoremap <buffer> <silent> x :call netrw#NetrwBrowseX(<SID>NetrwBrowseChgDir(1,<SID>NetrwGetWord(),0),0)"<cr>
1697 nnoremap <buffer> <silent> % :call <SID>NetrwOpenFile(1)<cr>
1707 if !hasmapto('<Plug>NetrwHideEdit') 1698 if !hasmapto('<Plug>NetrwHideEdit')
1708 nmap <buffer> <unique> <c-h> <Plug>NetrwHideEdit 1699 nmap <buffer> <unique> <c-h> <Plug>NetrwHideEdit
1709 endif 1700 endif
1710 nnoremap <buffer> <silent> <Plug>NetrwHideEdit :call <SID>NetrwHideEdit(1)<cr> 1701 nnoremap <buffer> <silent> <Plug>NetrwHideEdit :call <SID>NetrwHideEdit(1)<cr>
1711 if !hasmapto('<Plug>NetrwRefresh') 1702 if !hasmapto('<Plug>NetrwRefresh')
1773 nnoremap <buffer> <silent> t :call <SID>NetrwSplit(1)<cr> 1764 nnoremap <buffer> <silent> t :call <SID>NetrwSplit(1)<cr>
1774 nnoremap <buffer> <silent> u :<c-u>call <SID>NetrwBookmarkDir(4,b:netrw_curdir)<cr> 1765 nnoremap <buffer> <silent> u :<c-u>call <SID>NetrwBookmarkDir(4,b:netrw_curdir)<cr>
1775 nnoremap <buffer> <silent> U :<c-u>call <SID>NetrwBookmarkDir(5,b:netrw_curdir)<cr> 1766 nnoremap <buffer> <silent> U :<c-u>call <SID>NetrwBookmarkDir(5,b:netrw_curdir)<cr>
1776 nnoremap <buffer> <silent> v :call <SID>NetrwSplit(2)<cr> 1767 nnoremap <buffer> <silent> v :call <SID>NetrwSplit(2)<cr>
1777 nnoremap <buffer> <silent> x :call netrw#NetrwBrowseX(<SID>NetrwBrowseChgDir(0,<SID>NetrwGetWord()),1)<cr> 1768 nnoremap <buffer> <silent> x :call netrw#NetrwBrowseX(<SID>NetrwBrowseChgDir(0,<SID>NetrwGetWord()),1)<cr>
1769 nnoremap <buffer> <silent> % :call <SID>NetrwOpenFile(0)<cr>
1778 if !hasmapto('<Plug>NetrwHideEdit') 1770 if !hasmapto('<Plug>NetrwHideEdit')
1779 nmap <buffer> <c-h> <Plug>NetrwHideEdit 1771 nmap <buffer> <c-h> <Plug>NetrwHideEdit
1780 endif 1772 endif
1781 nnoremap <buffer> <silent> <Plug>NetrwHideEdit :call <SID>NetrwHideEdit(0)<cr> 1773 nnoremap <buffer> <silent> <Plug>NetrwHideEdit :call <SID>NetrwHideEdit(0)<cr>
1782 if !hasmapto('<Plug>NetrwRefresh') 1774 if !hasmapto('<Plug>NetrwRefresh')
1795 exe 'nnoremap <buffer> <silent> d :call <SID>NetrwMakeDir("'.s:user.s:machine.'")<cr>' 1787 exe 'nnoremap <buffer> <silent> d :call <SID>NetrwMakeDir("'.s:user.s:machine.'")<cr>'
1796 exe 'nnoremap <buffer> <silent> D :call <SID>NetrwRemoteRm("'.s:user.s:machine.'","'.s:path.'")<cr>' 1788 exe 'nnoremap <buffer> <silent> D :call <SID>NetrwRemoteRm("'.s:user.s:machine.'","'.s:path.'")<cr>'
1797 exe 'vnoremap <buffer> <silent> D :call <SID>NetrwRemoteRm("'.s:user.s:machine.'","'.s:path.'")<cr>' 1789 exe 'vnoremap <buffer> <silent> D :call <SID>NetrwRemoteRm("'.s:user.s:machine.'","'.s:path.'")<cr>'
1798 exe 'nnoremap <buffer> <silent> R :call <SID>NetrwRemoteRename("'.s:user.s:machine.'","'.s:path.'")<cr>' 1790 exe 'nnoremap <buffer> <silent> R :call <SID>NetrwRemoteRename("'.s:user.s:machine.'","'.s:path.'")<cr>'
1799 exe 'vnoremap <buffer> <silent> R :call <SID>NetrwRemoteRename("'.s:user.s:machine.'","'.s:path.'")<cr>' 1791 exe 'vnoremap <buffer> <silent> R :call <SID>NetrwRemoteRename("'.s:user.s:machine.'","'.s:path.'")<cr>'
1800 nnoremap <buffer> <F1> :he netrw-browse-cmds<cr> 1792 nnoremap <buffer> <F1> :he netrw-quickhelp<cr>
1801 endif 1793 endif
1802 call s:SetRexDir(a:islocal,b:netrw_curdir) 1794 call s:SetRexDir(a:islocal,b:netrw_curdir)
1803 " call Dret("s:BrowserMaps") 1795 " call Dret("s:BrowserMaps")
1804 endfun 1796 endfun
1805 1797
1919 " call Decho("setlocal ma noro") 1911 " call Decho("setlocal ma noro")
1920 %d 1912 %d
1921 setlocal nomod 1913 setlocal nomod
1922 " call Decho("setlocal nomod") 1914 " call Decho("setlocal nomod")
1923 endif 1915 endif
1924 " call Decho("exe e! ".g:NETRW_DIRHIST_{g:NETRW_DIRHIST_CNT}) 1916 " " call Decho("exe e! ".fnameescape(g:NETRW_DIRHIST_{g:NETRW_DIRHIST_CNT}))
1925 exe "e! ".g:NETRW_DIRHIST_{g:NETRW_DIRHIST_CNT} 1917 exe "e! ".fnameescape(g:NETRW_DIRHIST_{g:NETRW_DIRHIST_CNT})
1926 else 1918 else
1927 let g:NETRW_DIRHIST_CNT= ( g:NETRW_DIRHIST_CNT + 1 ) % g:netrw_dirhistmax 1919 let g:NETRW_DIRHIST_CNT= ( g:NETRW_DIRHIST_CNT + 1 ) % g:netrw_dirhistmax
1928 echo "Sorry, no predecessor directory exists yet" 1920 echo "Sorry, no predecessor directory exists yet"
1929 endif 1921 endif
1930 1922
1940 %d 1932 %d
1941 " call Decho("removed all lines from buffer (%d)") 1933 " call Decho("removed all lines from buffer (%d)")
1942 setlocal nomod 1934 setlocal nomod
1943 " call Decho("setlocal nomod") 1935 " call Decho("setlocal nomod")
1944 endif 1936 endif
1945 " call Decho("exe e! ".g:NETRW_DIRHIST_{g:NETRW_DIRHIST_CNT}) 1937 " call Decho("exe e! ".fnameescape(g:NETRW_DIRHIST_{g:NETRW_DIRHIST_CNT}))
1946 exe "e! ".g:NETRW_DIRHIST_{g:NETRW_DIRHIST_CNT} 1938 exe "e! ".fnameescape(g:NETRW_DIRHIST_{g:NETRW_DIRHIST_CNT})
1947 else 1939 else
1948 let g:NETRW_DIRHIST_CNT= ( g:NETRW_DIRHIST_CNT - 1 ) % g:netrw_dirhistmax 1940 let g:NETRW_DIRHIST_CNT= ( g:NETRW_DIRHIST_CNT - 1 ) % g:netrw_dirhistmax
1949 if g:NETRW_DIRHIST_CNT < 0 1941 if g:NETRW_DIRHIST_CNT < 0
1950 let g:NETRW_DIRHIST_CNT= g:NETRW_DIRHIST_CNT + g:netrw_dirhistmax 1942 let g:NETRW_DIRHIST_CNT= g:NETRW_DIRHIST_CNT + g:netrw_dirhistmax
1951 endif 1943 endif
2006 " call Decho("tab#".tabpagenr()." win#".winnr()) 1998 " call Decho("tab#".tabpagenr()." win#".winnr())
2007 " call Dredir("ls!") 1999 " call Dredir("ls!")
2008 2000
2009 if exists("s:netrw_skipbrowse") 2001 if exists("s:netrw_skipbrowse")
2010 unlet s:netrw_skipbrowse 2002 unlet s:netrw_skipbrowse
2011 " call Decho("ro=".&ro." ma=".&ma." mod=".&mod." wrap=".&wrap) 2003 " call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap)
2012 " call Dret("s:NetrwBrowse : s:netrw_skipbrowse=".s:netrw_skipbrowse) 2004 " call Dret("s:NetrwBrowse : s:netrw_skipbrowse=".s:netrw_skipbrowse)
2013 return 2005 return
2014 endif 2006 endif
2015 if !exists("*shellescape") 2007 if !exists("*shellescape")
2016 call netrw#ErrorMsg(s:ERROR,"netrw can't run -- your vim is missing shellescape()",69) 2008 call netrw#ErrorMsg(s:ERROR,"netrw can't run -- your vim is missing shellescape()",69)
2053 mark ' 2045 mark '
2054 call s:NetrwEnew(a:dirname) 2046 call s:NetrwEnew(a:dirname)
2055 setlocal ma noro 2047 setlocal ma noro
2056 " call Decho("setlocal ma noro") 2048 " call Decho("setlocal ma noro")
2057 let b:netrw_curdir= a:dirname 2049 let b:netrw_curdir= a:dirname
2058 " call Decho("exe silent! keepalt file ".s:method."://".s:user.s:machine."/".fnameescape(s:path)." (bt=".&bt.")") 2050 " call Decho("exe silent! keepalt file ".fnameescape(s:method."://".s:user.s:machine."/".s:path)." (bt=".&bt.")")
2059 exe "silent! keepalt file ".s:method."://".s:user.s:machine."/".fnameescape(s:path) 2051 exe "silent! keepalt file ".fnameescape(s:method."://".s:user.s:machine."/".s:path)
2060 exe "silent keepalt doau BufReadPre ".s:fname 2052 exe "silent keepalt doau BufReadPre ".fnameescape(s:fname)
2061 silent call netrw#NetRead(2,s:method."://".s:user.s:machine."/".s:path) 2053 silent call netrw#NetRead(2,s:method."://".s:user.s:machine."/".s:path)
2062 if s:path !~ '.tar.bz2$' && s:path !~ '.tar.gz' 2054 if s:path !~ '.tar.bz2$' && s:path !~ '.tar.gz'
2063 " netrw.vim and tar.vim have already handled decompression of the tarball; avoiding gzip.vim error 2055 " netrw.vim and tar.vim have already handled decompression of the tarball; avoiding gzip.vim error
2064 exe "silent keepalt doau BufReadPost ".s:fname 2056 exe "silent keepalt doau BufReadPost ".fnameescape(s:fname)
2065 endif 2057 endif
2066 2058
2067 " save certain window-oriented variables into buffer-oriented variables {{{3 2059 " save certain window-oriented variables into buffer-oriented variables {{{3
2068 call s:SetBufWinVars() 2060 call s:SetBufWinVars()
2069 call s:NetrwOptionRestore("w:") 2061 call s:NetrwOptionRestore("w:")
2070 setlocal ma nomod 2062 setlocal ma nomod
2071 2063
2072 " call Decho("ro=".&ro." ma=".&ma." mod=".&mod." wrap=".&wrap) 2064 " call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap)
2073 " call Dret("s:NetrwBrowse : file<".s:fname.">") 2065 " call Dret("s:NetrwBrowse : file<".s:fname.">")
2074 return 2066 return
2075 endif 2067 endif
2076 2068
2077 " use buffer-oriented WinVars if buffer ones exist but window ones don't {{{3 2069 " use buffer-oriented WinVars if buffer ones exist but window ones don't {{{3
2097 2match none 2089 2match none
2098 endif 2090 endif
2099 if reusing 2091 if reusing
2100 call s:NetrwOptionRestore("w:") 2092 call s:NetrwOptionRestore("w:")
2101 setlocal noma nomod nowrap 2093 setlocal noma nomod nowrap
2102 " call Decho("ro=".&ro." ma=".&ma." mod=".&mod." wrap=".&wrap) 2094 " call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap)
2103 " call Dret("s:NetrwBrowse : re-using buffer") 2095 " call Dret("s:NetrwBrowse : re-using buffer")
2104 return 2096 return
2105 endif 2097 endif
2106 2098
2107 " set b:netrw_curdir to the new directory name {{{3 2099 " set b:netrw_curdir to the new directory name {{{3
2148 let b:netrw_curdir= w:netrw_prvdir 2140 let b:netrw_curdir= w:netrw_prvdir
2149 else 2141 else
2150 call s:NetrwOptionRestore("w:") 2142 call s:NetrwOptionRestore("w:")
2151 setlocal noma nomod nowrap 2143 setlocal noma nomod nowrap
2152 let b:netrw_curdir= dirname 2144 let b:netrw_curdir= dirname
2153 " call Decho("ro=".&ro." ma=".&ma." mod=".&mod." wrap=".&wrap) 2145 " call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap)
2154 " call Dret("s:NetrwBrowse : reusing buffer#".(exists("bufnum")? bufnum : 'N/A')."<".dirname."> getcwd<".getcwd().">") 2146 " call Dret("s:NetrwBrowse : reusing buffer#".(exists("bufnum")? bufnum : 'N/A')."<".dirname."> getcwd<".getcwd().">")
2155 return 2147 return
2156 endif 2148 endif
2157 endtry 2149 endtry
2158 endif 2150 endif
2186 if !exists("g:netrw_quiet") 2178 if !exists("g:netrw_quiet")
2187 call netrw#ErrorMsg(s:ERROR,"netrw doesn't understand your dirname<".dirname.">",20) 2179 call netrw#ErrorMsg(s:ERROR,"netrw doesn't understand your dirname<".dirname.">",20)
2188 endif 2180 endif
2189 call s:NetrwOptionRestore("w:") 2181 call s:NetrwOptionRestore("w:")
2190 setlocal noma nomod nowrap 2182 setlocal noma nomod nowrap
2191 " call Decho("ro=".&ro." ma=".&ma." mod=".&mod." wrap=".&wrap) 2183 " call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap)
2192 " call Dret("s:NetrwBrowse : badly formatted dirname<".dirname.">") 2184 " call Dret("s:NetrwBrowse : badly formatted dirname<".dirname.">")
2193 return 2185 return
2194 endif 2186 endif
2195 let b:netrw_curdir= dirname 2187 let b:netrw_curdir= dirname
2196 " call Decho("b:netrw_curdir<".b:netrw_curdir."> (remote)") 2188 " call Decho("b:netrw_curdir<".b:netrw_curdir."> (remote)")
2200 " Directory Listing: {{{3 2192 " Directory Listing: {{{3
2201 " ----------------------- 2193 " -----------------------
2202 call s:BrowserMaps(a:islocal) 2194 call s:BrowserMaps(a:islocal)
2203 call s:PerformListing(a:islocal) 2195 call s:PerformListing(a:islocal)
2204 2196
2205 " call Decho("ro=".&ro." ma=".&ma." mod=".&mod." wrap=".&wrap) 2197 " call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap)
2206 " call Dret("s:NetrwBrowse : did PerformListing") 2198 " call Dret("s:NetrwBrowse : did PerformListing")
2207 return 2199 return
2208 endfun 2200 endfun
2209 2201
2210 " --------------------------------------------------------------------- 2202 " ---------------------------------------------------------------------
2297 2289
2298 " call Decho(" findbuf1: bufnum=bufnr('".dirname."')=".bufnum." bufname(".bufnum.")<".bufname(bufnum)."> (initial)") 2290 " call Decho(" findbuf1: bufnum=bufnr('".dirname."')=".bufnum." bufname(".bufnum.")<".bufname(bufnum)."> (initial)")
2299 " note: !~ was used just below, but that means using ../ to go back would match (ie. abc/def/ and abc/ matches) 2291 " note: !~ was used just below, but that means using ../ to go back would match (ie. abc/def/ and abc/ matches)
2300 if bufnum > 0 && bufname(bufnum) != dirname && bufname(bufnum) != '.' 2292 if bufnum > 0 && bufname(bufnum) != dirname && bufname(bufnum) != '.'
2301 " handle approximate matches 2293 " handle approximate matches
2302 " call Decho(" handling approx match: bufnum#%d<".bufname(bufnum)."> approx= dirname<".dirname.">") 2294 " call Decho(" handling approx match: bufnum#%d<".bufname(bufnum)."> approx=dirname<".dirname.">")
2303 let ibuf = 1 2295 let ibuf = 1
2304 let buflast = bufnr("$") 2296 let buflast = bufnr("$")
2305 " call Decho(" findbuf2: buflast=".buflast) 2297 " call Decho(" findbuf2: buflast=".buflast)
2306 while ibuf <= buflast 2298 while ibuf <= buflast
2307 let bname= substitute(bufname(ibuf),'\\','/','g') 2299 let bname= substitute(bufname(ibuf),'\\','/','g')
2300 let bname= substitute(bname,'.\zs/$','','')
2308 " call Decho(" findbuf3: dirname<".dirname."> bufname(".ibuf.")<".bname.">") 2301 " call Decho(" findbuf3: dirname<".dirname."> bufname(".ibuf.")<".bname.">")
2309 if bname != '' && bname !~ '/' && dirname =~ '/'.bname.'/\=$' | break | endif 2302 if bname != '' && dirname =~ '/'.bname.'/\=$' | break | endif
2310 if bname =~ '^'.dirname.'/\=$' | break | endif 2303 if bname =~ '^'.dirname.'/\=$' | break | endif
2311 if dirname =~ '^'.bname.'/$' | break | endif 2304 if dirname =~ '^'.bname.'/$' | break | endif
2312 let ibuf= ibuf + 1 2305 let ibuf= ibuf + 1
2313 endwhile 2306 endwhile
2314 if ibuf > buflast 2307 if ibuf > buflast
2334 let s:netrw_treelistnum= 1 2327 let s:netrw_treelistnum= 1
2335 else 2328 else
2336 let s:netrw_treelistnum= s:netrw_treelistnum + 1 2329 let s:netrw_treelistnum= s:netrw_treelistnum + 1
2337 endif 2330 endif
2338 let w:netrw_treebufnr= bufnr("%") 2331 let w:netrw_treebufnr= bufnr("%")
2339 " call Decho(" exe silent! keepalt file NetrwTreeListing ".s:netrw_treelistnum) 2332 " call Decho(" exe silent! keepalt file NetrwTreeListing ".fnameescape(s:netrw_treelistnum))
2340 exe 'silent! keepalt file NetrwTreeListing\ '.s:netrw_treelistnum 2333 exe 'silent! keepalt file NetrwTreeListing\ '.fnameescape(s:netrw_treelistnum)
2341 nnoremap <silent> <buffer> [ :silent call <SID>TreeListMove('[')<cr> 2334 nnoremap <silent> <buffer> [ :silent call <SID>TreeListMove('[')<cr>
2342 nnoremap <silent> <buffer> ] :silent call <SID>TreeListMove(']')<cr> 2335 nnoremap <silent> <buffer> ] :silent call <SID>TreeListMove(']')<cr>
2343 nnoremap <silent> <buffer> [[ :silent call <SID>TreeListMove('[')<cr> 2336 nnoremap <silent> <buffer> [[ :silent call <SID>TreeListMove('[')<cr>
2344 nnoremap <silent> <buffer> ]] :silent call <SID>TreeListMove(']')<cr> 2337 nnoremap <silent> <buffer> ]] :silent call <SID>TreeListMove(']')<cr>
2345 " call Decho(" tree listing#".s:netrw_treelistnum." bufnr=".w:netrw_treebufnr) 2338 " call Decho(" tree listing#".s:netrw_treelistnum." bufnr=".w:netrw_treebufnr)
2346 else 2339 else
2347 " let v:errmsg= "" " Decho 2340 " let v:errmsg= "" " Decho
2348 let escdirname= fnameescape(dirname) 2341 let escdirname= fnameescape(dirname)
2349 " call Decho(" errmsg<".v:errmsg."> bufnr(".escdirname.")=".bufnr(escdirname)."<".bufname(bufnr(escdirname)).">") 2342 " call Decho(" errmsg<".v:errmsg."> bufnr(".escdirname.")=".bufnr(escdirname)."<".bufname(bufnr(escdirname)).">")
2350 " call Decho(' exe silent! keepalt file '.escdirname) 2343 " call Decho(' exe silent! keepalt file '.fnameescape(escdirname))
2351 exe 'silent! keepalt file '.escdirname 2344 exe 'silent! keepalt file '.fnameescape(escdirname)
2352 " call Decho(" errmsg<".v:errmsg."> bufnr(".escdirname.")=".bufnr(escdirname)."<".bufname(bufnr(escdirname)).">") 2345 " call Decho(" errmsg<".v:errmsg."> bufnr(".escdirname.")=".bufnr(escdirname)."<".bufname(bufnr(escdirname)).">")
2353 endif 2346 endif
2354 " call Decho(" named enew buffer#".bufnr("%")."<".bufname("%").">") 2347 " call Decho(" named enew buffer#".bufnr("%")."<".bufname("%").">")
2355 2348
2356 else " Re-use the buffer 2349 else " Re-use the buffer
2363 else 2356 else
2364 " call Decho(" reusing buffer#".bufnum."<".((bufnum > 0)? bufname(bufnum) : "")."> using: b ".bufnum) 2357 " call Decho(" reusing buffer#".bufnum."<".((bufnum > 0)? bufname(bufnum) : "")."> using: b ".bufnum)
2365 exe "b ".bufnum 2358 exe "b ".bufnum
2366 endif 2359 endif
2367 if bufname("%") == '.' 2360 if bufname("%") == '.'
2368 exe "silent! keepalt file ".escape(getcwd(),' ') 2361 " call Decho("exe silent! keepalt file ".fnameescape(getcwd()))
2362 exe "silent! keepalt file ".fnameescape(getcwd())
2369 endif 2363 endif
2370 let &ei= eikeep 2364 let &ei= eikeep
2371 if line("$") <= 1 2365 if line("$") <= 1
2372 call s:NetrwListSettings(a:islocal) 2366 call s:NetrwListSettings(a:islocal)
2373 " call Dret("s:NetrwGetBuffer 0 : re-using buffer#".bufnr("%").", but its empty, so refresh it") 2367 " call Dret("s:NetrwGetBuffer 0 : re-using buffer#".bufnr("%").", but its empty, so refresh it")
2391 " med 1 D H 2385 " med 1 D H
2392 " fast 2 H H 2386 " fast 2 H H
2393 " call Decho("--do netrw settings: make this buffer not-a-file, modifiable, not line-numbered, etc--") 2387 " call Decho("--do netrw settings: make this buffer not-a-file, modifiable, not line-numbered, etc--")
2394 let fname= expand("%") 2388 let fname= expand("%")
2395 call s:NetrwListSettings(a:islocal) 2389 call s:NetrwListSettings(a:islocal)
2396 exe "keepalt file ".escape(fname,' ') 2390 " call Decho("exe keepalt file ".fnameescape(fname))
2391 exe "keepalt file ".fnameescape(fname)
2397 2392
2398 " delete all lines from buffer {{{3 2393 " delete all lines from buffer {{{3
2399 " call Decho("--delete all lines from buffer--") 2394 " call Decho("--delete all lines from buffer--")
2400 " call Decho(" clear buffer<".expand("%")."> with :%d") 2395 " call Decho(" clear buffer<".expand("%")."> with :%d")
2401 keepalt silent! %d 2396 keepalt silent! %d
2500 else 2495 else
2501 call cursor(line("."),filestart+1) 2496 call cursor(line("."),filestart+1)
2502 norm! ma 2497 norm! ma
2503 endif 2498 endif
2504 let rega= @a 2499 let rega= @a
2505 call cursor(line("."),filestart+b:netrw_cpf+1) 2500 let eofname= filestart + b:netrw_cpf + 1
2506 norm! "ay`a 2501 if eofname <= col("$")
2502 call cursor(line("."),filestart+b:netrw_cpf+1)
2503 norm! "ay`a
2504 else
2505 norm! "ay$
2506 endif
2507 let dirname = @a 2507 let dirname = @a
2508 let @a = rega 2508 let @a = rega
2509 " call Decho("2: dirname<".dirname.">") 2509 " call Decho("2: dirname<".dirname.">")
2510 let dirname= substitute(dirname,'\s\+$','','e') 2510 let dirname= substitute(dirname,'\s\+$','','e')
2511 " call Decho("3: dirname<".dirname.">") 2511 " call Decho("3: dirname<".dirname.">")
2524 " --------------------------------------------------------------------- 2524 " ---------------------------------------------------------------------
2525 " s:NetrwListSettings: {{{2 2525 " s:NetrwListSettings: {{{2
2526 fun! s:NetrwListSettings(islocal) 2526 fun! s:NetrwListSettings(islocal)
2527 " call Dfunc("s:NetrwListSettings(islocal=".a:islocal.")") 2527 " call Dfunc("s:NetrwListSettings(islocal=".a:islocal.")")
2528 let fname= bufname("%") 2528 let fname= bufname("%")
2529 " call Decho("setlocal bt=nofile nobl ma nonu nowrap noro")
2529 setlocal bt=nofile nobl ma nonu nowrap noro 2530 setlocal bt=nofile nobl ma nonu nowrap noro
2530 " call Decho("setlocal bt=nofile nobl ma nonu nowrap noro") 2531 " call Decho("exe keepalt file ".fnameescape(fname))
2531 exe "keepalt file ".escape(fname,' ') 2532 exe "keepalt file ".fnameescape(fname)
2532 if g:netrw_use_noswf 2533 if g:netrw_use_noswf
2533 setlocal noswf 2534 setlocal noswf
2534 endif 2535 endif
2535 " call Dredir("ls!") 2536 " call Dredir("ls!")
2536 " call Decho("exe setlocal ts=".g:netrw_maxfilenamelen) 2537 " call Decho("exe setlocal ts=".g:netrw_maxfilenamelen)
2640 let histcnt = 0 2641 let histcnt = 0
2641 while ( first || cnt != g:NETRW_DIRHIST_CNT ) 2642 while ( first || cnt != g:NETRW_DIRHIST_CNT )
2642 let histcnt = histcnt + 1 2643 let histcnt = histcnt + 1
2643 let priority = g:NETRW_DIRHIST_CNT + histcnt 2644 let priority = g:NETRW_DIRHIST_CNT + histcnt
2644 if exists("g:NETRW_DIRHIST_{cnt}") 2645 if exists("g:NETRW_DIRHIST_{cnt}")
2645 let bmdir= escape(g:NETRW_DIRHIST_{cnt},'. ') 2646 let bmdir= escape(g:NETRW_DIRHIST_{cnt},'/&? ')
2646 " call Decho('silent! menu '.g:NetrwMenuPriority.".3.".priority." ".g:NetrwTopLvlMenu.'History.'.bmdir.' :e '.bmdir) 2647 " call Decho('silent! menu '.g:NetrwMenuPriority.".3.".priority." ".g:NetrwTopLvlMenu.'History.'.bmdir.' :e '.bmdir)
2647 exe 'silent! menu '.g:NetrwMenuPriority.".3.".priority." ".g:NetrwTopLvlMenu.'History.'.bmdir.' :e '.bmdir."\<cr>" 2648 exe 'silent! menu '.g:NetrwMenuPriority.".3.".priority." ".g:NetrwTopLvlMenu.'History.'.bmdir.' :e '.bmdir."\<cr>"
2648 endif 2649 endif
2649 let first = 0 2650 let first = 0
2650 let cnt = ( cnt - 1 ) % g:netrw_dirhistmax 2651 let cnt = ( cnt - 1 ) % g:netrw_dirhistmax
2716 let dirname= s:ComposePath(dirname,newdir) 2717 let dirname= s:ComposePath(dirname,newdir)
2717 endif 2718 endif
2718 " call Decho("handling a file: dirname<".dirname."> (a:0=".a:0.")") 2719 " call Decho("handling a file: dirname<".dirname."> (a:0=".a:0.")")
2719 " this lets NetrwBrowseX avoid the edit 2720 " this lets NetrwBrowseX avoid the edit
2720 if a:0 < 1 2721 if a:0 < 1
2721 " call Decho("dirname<".dirname."> netrw_cd_escape<".g:netrw_cd_escape."> browse_split=".g:netrw_browse_split)
2722 " call Decho("set up windows for editing<".fnameescape(dirname)."> didsplit=".(exists("s:didsplit")? s:didsplit : "doesn't exist")) 2722 " call Decho("set up windows for editing<".fnameescape(dirname)."> didsplit=".(exists("s:didsplit")? s:didsplit : "doesn't exist"))
2723 call s:NetrwOptionRestore("s:") 2723 call s:NetrwOptionRestore("s:")
2724 if !exists("s:didsplit") 2724 if !exists("s:didsplit")
2725 if g:netrw_browse_split == 1 2725 if g:netrw_browse_split == 1
2726 new 2726 new
2898 " (lower case the extension, make a local copy of a remote file) 2898 " (lower case the extension, make a local copy of a remote file)
2899 let exten= substitute(a:fname,'.*\.\(.\{-}\)','\1','e') 2899 let exten= substitute(a:fname,'.*\.\(.\{-}\)','\1','e')
2900 if has("win32") || has("win95") || has("win64") || has("win16") 2900 if has("win32") || has("win95") || has("win64") || has("win16")
2901 let exten= substitute(exten,'^.*$','\L&\E','') 2901 let exten= substitute(exten,'^.*$','\L&\E','')
2902 endif 2902 endif
2903 let fname= escape(a:fname,"%#")
2904 " call Decho("fname<".fname."> after escape()")
2905 2903
2906 " seems kde systems often have gnome-open due to dependencies, even though 2904 " seems kde systems often have gnome-open due to dependencies, even though
2907 " gnome-open's subsidiary display tools are largely absent. Kde systems 2905 " gnome-open's subsidiary display tools are largely absent. Kde systems
2908 " usually have "kdeinit" running, though... (tnx Mikolaj Machowski) 2906 " usually have "kdeinit" running, though... (tnx Mikolaj Machowski)
2909 if !exists("s:haskdeinit") 2907 if !exists("s:haskdeinit")
2910 if has("unix") 2908 if has("unix")
2911 let s:haskdeinit= s:System("system",'ps -e') =~ 'kdeinit' 2909 let s:haskdeinit= system("ps -e") =~ 'kdeinit'
2912 if v:shell_error 2910 if v:shell_error
2913 let s:haskdeinit = 0 2911 let s:haskdeinit = 0
2914 endif 2912 endif
2915 else 2913 else
2916 let s:haskdeinit= 0 2914 let s:haskdeinit= 0
2919 endif 2917 endif
2920 2918
2921 if a:remote == 1 2919 if a:remote == 1
2922 " create a local copy 2920 " create a local copy
2923 let fname= fnamemodify(tempname(),":r").".".exten 2921 let fname= fnamemodify(tempname(),":r").".".exten
2924 " call Decho("a:remote=".a:remote.": create a local copy of <".a:fname."> as <".fname.">") 2922 " call Decho("a:remote=".a:remote.": create a local copy of <".fname."> as <".fname.">")
2925 exe "silent keepjumps bot 1new ".a:fname 2923 exe "silent keepjumps bot 1new ".fnameescape(fname)
2926 setlocal bh=delete 2924 setlocal bh=delete
2927 " call Decho("read <".fname.">, now writing: exe w! ".fname) 2925 " call Decho("read <".fnameescape(fname).">, now writing: exe w! ".fnameescape(fname))
2928 exe "silent! w! ".fname 2926 exe "silent! w! ".fnameescape(fname)
2929 q 2927 q
2928 else
2929 let fname= a:fname
2930 endif 2930 endif
2931 " call Decho("exten<".exten."> "."netrwFileHandlers#NFH_".exten."():exists=".exists("*netrwFileHandlers#NFH_".exten)) 2931 " call Decho("exten<".exten."> "."netrwFileHandlers#NFH_".exten."():exists=".exists("*netrwFileHandlers#NFH_".exten))
2932 2932
2933 " set up redirection 2933 " set up redirection
2934 if &srr =~ "%s" 2934 if &srr =~ "%s"
2970 " call Decho("g:netrw_browsex_viewer<".g:netrw_browsex_viewer.">") 2970 " call Decho("g:netrw_browsex_viewer<".g:netrw_browsex_viewer.">")
2971 let ret= netrwFileHandlers#Invoke(exten,fname) 2971 let ret= netrwFileHandlers#Invoke(exten,fname)
2972 2972
2973 elseif exists("g:netrw_browsex_viewer") && executable(viewer) 2973 elseif exists("g:netrw_browsex_viewer") && executable(viewer)
2974 " call Decho("g:netrw_browsex_viewer<".g:netrw_browsex_viewer.">") 2974 " call Decho("g:netrw_browsex_viewer<".g:netrw_browsex_viewer.">")
2975 " call Decho("exe silent !".viewer." ".viewopt.shellescape(fname).redir) 2975 " call Decho("exe silent !".viewer." ".viewopt.shellescape(fname,1).redir)
2976 exe "silent !".viewer." ".viewopt.shellescape(fname).redir 2976 exe "silent !".viewer." ".viewopt.shellescape(fname,1).redir
2977 let ret= v:shell_error 2977 let ret= v:shell_error
2978 2978
2979 elseif has("win32") || has("win64") 2979 elseif has("win32") || has("win64")
2980 " call Decho('exe silent !start rundll32 url.dll,FileProtocolHandler '.shellescape(fname)) 2980 " call Decho('exe silent !start rundll32 url.dll,FileProtocolHandler '.shellescape(fname,1))
2981 exe 'silent !start rundll32 url.dll,FileProtocolHandler '.shellescape(fname) 2981 exe 'silent !start rundll32 url.dll,FileProtocolHandler '.shellescape(fname,1)
2982 call inputsave()|call input("Press <cr> to continue")|call inputrestore() 2982 call inputsave()|call input("Press <cr> to continue")|call inputrestore()
2983 let ret= v:shell_error 2983 let ret= v:shell_error
2984 2984
2985 elseif has("unix") && executable("gnome-open") && !s:haskdeinit 2985 elseif has("unix") && executable("gnome-open") && !s:haskdeinit
2986 " call Decho("exe silent !gnome-open ".shellescape(fname)." ".redir) 2986 " call Decho("exe silent !gnome-open ".shellescape(fname,1)." ".redir)
2987 exe "silent !gnome-open ".shellescape(fname).redir 2987 exe "silent !gnome-open ".shellescape(fname,1).redir
2988 let ret= v:shell_error 2988 let ret= v:shell_error
2989 2989
2990 elseif has("unix") && executable("kfmclient") && s:haskdeinit 2990 elseif has("unix") && executable("kfmclient") && s:haskdeinit
2991 " call Decho("exe silent !kfmclient exec ".shellescape(fname)." ".redir) 2991 " call Decho("exe silent !kfmclient exec ".shellescape(fname,1)." ".redir)
2992 exe "silent !kfmclient exec ".shellescape(fname)." ".redir 2992 exe "silent !kfmclient exec ".shellescape(fname,1)." ".redir
2993 let ret= v:shell_error 2993 let ret= v:shell_error
2994 2994
2995 elseif has("macunix") && executable("open") 2995 elseif has("macunix") && executable("open")
2996 " call Decho("exe silent !open ".shellescape(fname)." ".redir) 2996 " call Decho("exe silent !open ".shellescape(fname,1)." ".redir)
2997 exe "silent !open ".shellescape(fname)." ".redir 2997 exe "silent !open ".shellescape(fname,1)." ".redir
2998 let ret= v:shell_error 2998 let ret= v:shell_error
2999 2999
3000 else 3000 else
3001 " netrwFileHandlers#Invoke() always returns 0 3001 " netrwFileHandlers#Invoke() always returns 0
3002 let ret= netrwFileHandlers#Invoke(exten,fname) 3002 let ret= netrwFileHandlers#Invoke(exten,fname)
3005 " if unsuccessful, attempt netrwFileHandlers#Invoke() 3005 " if unsuccessful, attempt netrwFileHandlers#Invoke()
3006 if ret 3006 if ret
3007 let ret= netrwFileHandlers#Invoke(exten,fname) 3007 let ret= netrwFileHandlers#Invoke(exten,fname)
3008 endif 3008 endif
3009 3009
3010 " redraw! 3010 " restoring redraw! after external file handlers
3011 redraw!
3011 3012
3012 " cleanup: remove temporary file, 3013 " cleanup: remove temporary file,
3013 " delete current buffer if success with handler, 3014 " delete current buffer if success with handler,
3014 " return to prior buffer (directory listing) 3015 " return to prior buffer (directory listing)
3015 " Feb 12, 2008: had to de-activiate removal of 3016 " Feb 12, 2008: had to de-activiate removal of
3016 " temporary file because it wasn't getting seen. 3017 " temporary file because it wasn't getting seen.
3017 " if a:remote == 1 && fname != a:fname 3018 " if a:remote == 1 && fname != a:fname
3018 " call Decho("deleting temporary file<".fname.">") 3019 " call Decho("deleting temporary file<".fname.">")
3019 " call s:System("delete",fname) 3020 " call s:NetrwDelete(fname)
3020 " endif 3021 " endif
3021 3022
3022 if a:remote == 1 3023 if a:remote == 1
3023 setlocal bh=delete bt=nofile 3024 setlocal bh=delete bt=nofile
3024 if g:netrw_use_noswf 3025 if g:netrw_use_noswf
3650 call mkdir(fullnewdir,"p") 3651 call mkdir(fullnewdir,"p")
3651 else 3652 else
3652 let netrw_origdir= s:NetrwGetcwd(1) 3653 let netrw_origdir= s:NetrwGetcwd(1)
3653 exe 'keepjumps lcd '.fnameescape(b:netrw_curdir) 3654 exe 'keepjumps lcd '.fnameescape(b:netrw_curdir)
3654 " call Decho("netrw_origdir<".netrw_origdir.">: lcd b:netrw_curdir<".fnameescape(b:netrw_curdir).">") 3655 " call Decho("netrw_origdir<".netrw_origdir.">: lcd b:netrw_curdir<".fnameescape(b:netrw_curdir).">")
3655 " call Decho("exe silent! !".g:netrw_local_mkdir.' '.shellescape(newdirname)) 3656 " call Decho("exe silent! !".g:netrw_local_mkdir.' '.shellescape(newdirname,1))
3656 exe "silent! !".g:netrw_local_mkdir.' '.shellescape(newdirname) 3657 exe "silent! !".g:netrw_local_mkdir.' '.shellescape(newdirname,1)
3657 if !g:netrw_keepdir 3658 if !g:netrw_keepdir
3658 exe 'keepjumps lcd '.fnameescape(netrw_origdir) 3659 exe 'keepjumps lcd '.fnameescape(netrw_origdir)
3659 " call Decho("netrw_keepdir=".g:netrw_keepdir.": keepjumps lcd ".fnameescape(netrw_origdir)." getcwd<".getcwd().">") 3660 " call Decho("netrw_keepdir=".g:netrw_keepdir.": keepjumps lcd ".fnameescape(netrw_origdir)." getcwd<".getcwd().">")
3660 endif 3661 endif
3661 endif 3662 endif
3674 elseif !exists("b:netrw_method") || b:netrw_method == 4 3675 elseif !exists("b:netrw_method") || b:netrw_method == 4
3675 " Remote mkdir: 3676 " Remote mkdir:
3676 " call Decho("remote mkdir") 3677 " call Decho("remote mkdir")
3677 let mkdircmd = s:MakeSshCmd(g:netrw_mkdir_cmd) 3678 let mkdircmd = s:MakeSshCmd(g:netrw_mkdir_cmd)
3678 let newdirname= substitute(b:netrw_curdir,'^\%(.\{-}/\)\{3}\(.*\)$','\1','').newdirname 3679 let newdirname= substitute(b:netrw_curdir,'^\%(.\{-}/\)\{3}\(.*\)$','\1','').newdirname
3679 " call Decho("exe silent! !".mkdircmd." ".shellescape(newdirname)) 3680 " call Decho("exe silent! !".mkdircmd." ".shellescape(newdirname,1))
3680 exe "silent! !".mkdircmd." ".shellescape(newdirname) 3681 exe "silent! !".mkdircmd." ".shellescape(newdirname,1)
3681 if v:shell_error == 0 3682 if v:shell_error == 0
3682 " refresh listing 3683 " refresh listing
3683 let svpos= netrw#NetrwSavePosn() 3684 let svpos= netrw#NetrwSavePosn()
3684 call s:NetrwRefresh(0,s:NetrwBrowseChgDir(0,'./')) 3685 call s:NetrwRefresh(0,s:NetrwBrowseChgDir(0,'./'))
3685 call netrw#NetrwRestorePosn(svpos) 3686 call netrw#NetrwRestorePosn(svpos)
3816 for fname in s:netrwmarkfilelist_{curbufnr} 3817 for fname in s:netrwmarkfilelist_{curbufnr}
3817 " for every filename in the marked list 3818 " for every filename in the marked list
3818 for sfx in sort(keys(g:netrw_decompress)) 3819 for sfx in sort(keys(g:netrw_decompress))
3819 if fname =~ '\'.sfx.'$' 3820 if fname =~ '\'.sfx.'$'
3820 " fname has a suffix indicating that its compressed; apply associated decompression routine 3821 " fname has a suffix indicating that its compressed; apply associated decompression routine
3821 let exe= g:netrw_decompress[sfx] 3822 let exe= s:WinPath(g:netrw_decompress[sfx])
3822 " call Decho("fname<".fname."> is compressed so decompress with <".exe.">") 3823 " call Decho("fname<".fname."> is compressed so decompress with <".exe.">")
3823 if a:islocal 3824 if a:islocal
3824 if g:netrw_keepdir 3825 if g:netrw_keepdir
3825 let fname= s:ComposePath(curdir,fname) 3826 let fname= shellescape(s:ComposePath(curdir,fname))
3826 endif 3827 endif
3827 else 3828 else
3828 let fname= b:netrw_curdir.fname 3829 let fname= shellescape(b:netrw_curdir.fname)
3829 endif 3830 endif
3830 if executable(exe) 3831 if executable(exe)
3831 if a:islocal 3832 if a:islocal
3832 call system(exe." ".fname) 3833 call system(exe." ".fname)
3833 else 3834 else
3841 endfor 3842 endfor
3842 if exists("exe") 3843 if exists("exe")
3843 unlet exe 3844 unlet exe
3844 elseif a:islocal 3845 elseif a:islocal
3845 " fname not a compressed file, so compress it 3846 " fname not a compressed file, so compress it
3846 call system(g:netrw_compress." ".s:ComposePath(b:netrw_curdir,fname)) 3847 call system(s:WinPath(g:netrw_compress)." ".shellescape(s:ComposePath(b:netrw_curdir,fname)))
3847 else 3848 else
3848 " fname not a compressed file, so compress it 3849 " fname not a compressed file, so compress it
3849 call s:RemoteSystem(g:netrw_compress." ".fname) 3850 call s:RemoteSystem(s:WinPath(g:netrw_compress)." ".shellescape(fname))
3850 endif 3851 endif
3851 endfor 3852 endfor
3852 call s:NetrwUnmarkList(curbufnr,curdir) 3853 call s:NetrwUnmarkList(curbufnr,curdir)
3853 call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./')) 3854 call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
3854 call netrw#NetrwRestorePosn(svpos) 3855 call netrw#NetrwRestorePosn(svpos)
3885 if a:islocal && s:netrwmftgt_islocal 3886 if a:islocal && s:netrwmftgt_islocal
3886 " Copy marked files, local directory to local directory 3887 " Copy marked files, local directory to local directory
3887 " call Decho("copy from local to local") 3888 " call Decho("copy from local to local")
3888 let args= join(map(copy(s:netrwmarkfilelist_{bufnr('%')}),"b:netrw_curdir.\"/\".shellescape(v:val)")) 3889 let args= join(map(copy(s:netrwmarkfilelist_{bufnr('%')}),"b:netrw_curdir.\"/\".shellescape(v:val)"))
3889 " call Decho("system(".g:netrw_localcopycmd." ".args." ".shellescape(s:netrwmftgt).")") 3890 " call Decho("system(".g:netrw_localcopycmd." ".args." ".shellescape(s:netrwmftgt).")")
3890 call system(g:netrw_localcopycmd." ".args." ".shellescape(s:netrwmftgt)) 3891 call system(s:WinPath(g:netrw_localcopycmd)." ".args." ".shellescape(s:netrwmftgt))
3891 3892
3892 elseif a:islocal && !s:netrwmftgt_islocal 3893 elseif a:islocal && !s:netrwmftgt_islocal
3893 " Copy marked files, local directory to remote directory 3894 " Copy marked files, local directory to remote directory
3894 " call Decho("copy from local to remote") 3895 " call Decho("copy from local to remote")
3895 call s:NetrwUpload(s:netrwmarkfilelist_{bufnr('%')},s:netrwmftgt) 3896 call s:NetrwUpload(s:netrwmarkfilelist_{bufnr('%')},s:netrwmftgt)
3906 let tmpdir= curdir."/".tmpdir 3907 let tmpdir= curdir."/".tmpdir
3907 endif 3908 endif
3908 if exists("*mkdir") 3909 if exists("*mkdir")
3909 call mkdir(tmpdir) 3910 call mkdir(tmpdir)
3910 else 3911 else
3911 exe "silent! !".g:netrw_local_mkdir.' '.shellescape(tmpdir) 3912 exe "silent! !".g:netrw_local_mkdir.' '.shellescape(tmpdir,1)
3912 endif 3913 endif
3913 if isdirectory(tmpdir) 3914 if isdirectory(tmpdir)
3914 exe "keepjumps lcd ".fnameescape(tmpdir) 3915 exe "keepjumps lcd ".fnameescape(tmpdir)
3915 call netrw#NetrwObtain(a:islocal,s:netrwmarkfilelist_{bufnr('%')},tmpdir) 3916 call netrw#NetrwObtain(a:islocal,s:netrwmarkfilelist_{bufnr('%')},tmpdir)
3916 let localfiles= map(copy(s:netrwmarkfilelist_{bufnr('%')}),'substitute(v:val,"^.*/","","")') 3917 let localfiles= map(copy(s:netrwmarkfilelist_{bufnr('%')}),'substitute(v:val,"^.*/","","")')
3917 call s:NetrwUpload(localfiles,s:netrwmftgt) 3918 call s:NetrwUpload(localfiles,s:netrwmftgt)
3918 if getcwd() == tmpdir 3919 if getcwd() == tmpdir
3919 for fname in s:netrwmarkfilelist_{bufnr('%')} 3920 for fname in s:netrwmarkfilelist_{bufnr('%')}
3920 call s:System("delete",fname) 3921 call s:NetrwDelete(fname)
3921 endfor 3922 endfor
3922 exe "keepjumps lcd ".fnameescape(curdir) 3923 exe "keepjumps lcd ".fnameescape(curdir)
3923 exe "silent !".g:netrw_local_rmdir." ".fnameescape(tmpdir) 3924 exe "silent !".g:netrw_local_rmdir." ".shellescape(tmpdir,1)
3924 else 3925 else
3925 exe "keepjumps lcd ".fnameescape(curdir) 3926 exe "keepjumps lcd ".fnameescape(curdir)
3926 endif 3927 endif
3927 endif 3928 endif
3928 endif 3929 endif
4034 " apply command to marked files. Substitute: filename -> % 4035 " apply command to marked files. Substitute: filename -> %
4035 " If no %, then append a space and the filename to the command 4036 " If no %, then append a space and the filename to the command
4036 for fname in s:netrwmarkfilelist_{curbufnr} 4037 for fname in s:netrwmarkfilelist_{curbufnr}
4037 if a:islocal 4038 if a:islocal
4038 if g:netrw_keepdir 4039 if g:netrw_keepdir
4039 let fname= s:ComposePath(curdir,fname) 4040 let fname= shellescape(s:WinPath(s:ComposePath(curdir,fname)))
4040 endif 4041 endif
4041 else 4042 else
4042 let fname= b:netrw_curdir.fname 4043 let fname= shellescape(s:WinPath(b:netrw_curdir.fname))
4043 endif 4044 endif
4044 if cmd =~ '%' 4045 if cmd =~ '%'
4045 let xcmd= substitute(cmd,'%',fname,'g') 4046 let xcmd= substitute(cmd,'%',fname,'g')
4046 else 4047 else
4047 let xcmd= cmd.' '.fname 4048 let xcmd= cmd.' '.fname
4397 endif 4398 endif
4398 else 4399 else
4399 let fname= curdir.fname 4400 let fname= curdir.fname
4400 endif 4401 endif
4401 " the autocmds will handle sourcing both local and remote files 4402 " the autocmds will handle sourcing both local and remote files
4402 " call Decho("exe so ".escape(fname,' ')) 4403 " call Decho("exe so ".fnameescape(fname))
4403 exe "so ".escape(fname,' ') 4404 exe "so ".fnameescape(fname)
4404 endfor 4405 endfor
4405 2match none 4406 2match none
4406 endif 4407 endif
4407 " call Dret("s:NetrwMarkFileSource") 4408 " call Dret("s:NetrwMarkFileSource")
4408 endfun 4409 endfun
4437 call system(g:netrw_ctags." ".netrwmarkfilelist) 4438 call system(g:netrw_ctags." ".netrwmarkfilelist)
4438 else 4439 else
4439 call netrw#ErrorMsg(s:ERROR,"g:netrw_ctags<".g:netrw_ctags."> is not executable!",51) 4440 call netrw#ErrorMsg(s:ERROR,"g:netrw_ctags<".g:netrw_ctags."> is not executable!",51)
4440 endif 4441 endif
4441 else 4442 else
4442 let cmd= s:RemoteSystem(g:netrw_ctags." ".netrwmarkfilelist) 4443 let cmd = s:RemoteSystem(g:netrw_ctags." ".netrwmarkfilelist)
4443 call netrw#NetrwObtain(a:islocal,"tags") 4444 call netrw#NetrwObtain(a:islocal,"tags")
4444 let curdir= b:netrw_curdir 4445 let curdir= b:netrw_curdir
4445 1split 4446 1split
4446 e tags 4447 e tags
4447 let path= substitute(curdir,'^\(.*\)/[^/]*$','\1/','') 4448 let path= substitute(curdir,'^\(.*\)/[^/]*$','\1/','')
4514 if !hadtgt 4515 if !hadtgt
4515 norm! j 4516 norm! j
4516 endif 4517 endif
4517 4518
4518 " call Dret("s:NetrwMarkFileTgt : netrwmftgt<".(exists("s:netrwmftgt")? s:netrwmftgt : "").">") 4519 " call Dret("s:NetrwMarkFileTgt : netrwmftgt<".(exists("s:netrwmftgt")? s:netrwmftgt : "").">")
4520 endfun
4521
4522 " ---------------------------------------------------------------------
4523 " s:NetrwOpenFile: query user for a filename and open it {{{2
4524 fun! s:NetrwOpenFile(islocal)
4525 " call Dfunc("s:NetrwOpenFile(islocal=".a:islocal.")")
4526 call inputsave()
4527 let fname= input("Enter filename: ")
4528 call inputrestore()
4529 if fname !~ '[/\\]'
4530 if exists("b:netrw_curdir")
4531 if exists("g:netrw_quiet")
4532 let netrw_quiet_keep = g:netrw_quiet
4533 endif
4534 let g:netrw_quiet = 1
4535 if b:netrw_curdir =~ '/$'
4536 exe "e ".fnameescape(b:netrw_curdir.fname)
4537 else
4538 exe "e ".fnameescape(b:netrw_curdir."/".fname)
4539 endif
4540 if exists("netrw_quiet_keep")
4541 let g:netrw_quiet= netrw_quiet_keep
4542 else
4543 unlet g:netrw_quiet
4544 endif
4545 endif
4546 else
4547 exe "e ".fnameescape(fname)
4548 endif
4549 " call Dret("s:NetrwOpenFile")
4519 endfun 4550 endfun
4520 4551
4521 " --------------------------------------------------------------------- 4552 " ---------------------------------------------------------------------
4522 " s:NetrwUnmarkList: delete local marked file lists and remove their contents from the global marked-file list {{{2 4553 " s:NetrwUnmarkList: delete local marked file lists and remove their contents from the global marked-file list {{{2
4523 fun! s:NetrwUnmarkList(curbufnr,curdir) 4554 fun! s:NetrwUnmarkList(curbufnr,curdir)
4733 if exists("b:netrw_curdir") && getcwd() != b:netrw_curdir 4764 if exists("b:netrw_curdir") && getcwd() != b:netrw_curdir
4734 let topath= s:ComposePath(tgtdir,"") 4765 let topath= s:ComposePath(tgtdir,"")
4735 if (has("win32") || has("win95") || has("win64") || has("win16")) 4766 if (has("win32") || has("win95") || has("win64") || has("win16"))
4736 " transfer files one at time 4767 " transfer files one at time
4737 for fname in fnamelist 4768 for fname in fnamelist
4738 " call Decho("system(".g:netrw_localcopycmd." ".fname." ".shellescape(topath).")") 4769 " call Decho("system(".g:netrw_localcopycmd." ".shellescape(fname)." ".shellescape(topath).")")
4739 call system(g:netrw_localcopycmd." ".fname." ".shellescape(topath)) 4770 call system(g:netrw_localcopycmd." ".shellescape(fname)." ".shellescape(topath))
4740 endfor 4771 endfor
4741 else 4772 else
4742 " transfer files with one command 4773 " transfer files with one command
4743 let filelist= join(map(copy(fname),"shellescape(v:val)")) 4774 let filelist= join(map(copy(fname),"shellescape(v:val)"))
4744 " call Decho("system(".g:netrw_localcopycmd." ".filelist." ".shellescape(topath).")") 4775 " call Decho("system(".g:netrw_localcopycmd." ".filelist." ".shellescape(topath).")")
4768 if b:netrw_fname =~ '/' 4799 if b:netrw_fname =~ '/'
4769 let path= substitute(b:netrw_fname,'^\(.*/\).\{-}$','\1','') 4800 let path= substitute(b:netrw_fname,'^\(.*/\).\{-}$','\1','')
4770 else 4801 else
4771 let path= "" 4802 let path= ""
4772 endif 4803 endif
4773 let filelist= join(map(copy(fnamelist),'shellescape(g:netrw_machine.":".escape(path.v:val,g:netrw_fname_escape))')) 4804 let filelist= join(map(copy(fnamelist),'shellescape(g:netrw_machine.":".path.v:val,1))'))
4774 " call Decho("exe ".s:netrw_silentxfer."!".g:netrw_scp_cmd.useport." ".filelist." ".shellescape(tgtdir)) 4805 " call Decho("exe ".s:netrw_silentxfer."!".g:netrw_scp_cmd.shellescape(useport,1)." ".filelist." ".shellescape(tgtdir,1))
4775 exe s:netrw_silentxfer."!".g:netrw_scp_cmd.useport." ".filelist." ".shellescape(tgtdir) 4806 exe s:netrw_silentxfer."!".g:netrw_scp_cmd.shellescape(useport,1)." ".filelist." ".shellescape(tgtdir,1)
4776 4807
4777 elseif b:netrw_method == 2 4808 elseif b:netrw_method == 2
4778 " obtain file using ftp + .netrc 4809 " obtain file using ftp + .netrc
4779 " call Decho("obtain via ftp+.netrc (method #2)") 4810 " call Decho("obtain via ftp+.netrc (method #2)")
4780 call s:SaveBufVars()|silent keepjumps new|call s:RestoreBufVars() 4811 call s:SaveBufVars()|silent keepjumps new|call s:RestoreBufVars()
4797 for fname in fnamelist 4828 for fname in fnamelist
4798 call setline(line("$")+1,'get "'.fname.'"') 4829 call setline(line("$")+1,'get "'.fname.'"')
4799 " call Decho("filter input: ".getline('$')) 4830 " call Decho("filter input: ".getline('$'))
4800 endfor 4831 endfor
4801 if exists("g:netrw_port") && g:netrw_port != "" 4832 if exists("g:netrw_port") && g:netrw_port != ""
4802 " call Decho("executing: %!".g:netrw_ftp_cmd." -i ".g:netrw_machine." ".g:netrw_port) 4833 " call Decho("executing: %!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)." ".shellescape(g:netrw_port,1))
4803 exe s:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i ".g:netrw_machine." ".g:netrw_port 4834 exe s:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)." ".shellescape(g:netrw_port,1)
4804 else 4835 else
4805 " call Decho("executing: %!".g:netrw_ftp_cmd." -i ".g:netrw_machine) 4836 " call Decho("executing: %!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1))
4806 exe s:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i ".g:netrw_machine 4837 exe s:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)
4807 endif 4838 endif
4808 " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar) 4839 " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar)
4809 if getline(1) !~ "^$" && !exists("g:netrw_quiet") && getline(1) !~ '^Trying ' 4840 if getline(1) !~ "^$" && !exists("g:netrw_quiet") && getline(1) !~ '^Trying '
4810 let debugkeep= &debug 4841 let debugkeep= &debug
4811 setlocal debug=msg 4842 setlocal debug=msg
5027 exe "e ".efname 5058 exe "e ".efname
5028 " call Decho("now locally editing<".expand("%").">, has ".line("$")." lines") 5059 " call Decho("now locally editing<".expand("%").">, has ".line("$")." lines")
5029 if a:tgt =~ '/$' 5060 if a:tgt =~ '/$'
5030 let wfname= substitute(a:fname,'^.*/','','') 5061 let wfname= substitute(a:fname,'^.*/','','')
5031 let wfname= escape(a:tgt.wfname,g:netrw_fname_escape) 5062 let wfname= escape(a:tgt.wfname,g:netrw_fname_escape)
5032 " call Decho("exe w! ".wfname) 5063 " call Decho("exe w! ".fnameescape(wfname))
5033 exe "w! ".wfname 5064 exe "w! ".fnameescape(wfname)
5034 else 5065 else
5035 let wfname= escape(a:tgt,g:netrw_fname_escape) 5066 " call Decho("writing local->remote: exe w ".fnameescape(a:tgt))
5036 " call Decho("writing local->remote: exe w ".wfname) 5067 exe "w ".fnameescape(a:tgt)
5037 exe "w ".wfname
5038 " call Decho("done writing local->remote") 5068 " call Decho("done writing local->remote")
5039 endif 5069 endif
5040 q! 5070 q!
5041 5071
5042 elseif type(a:fname) == 3 5072 elseif type(a:fname) == 3
5052 else 5082 else
5053 let useport= "" 5083 let useport= ""
5054 endif 5084 endif
5055 let machine = substitute(a:tgt,'^scp://\([^/:]\+\).*$','\1','') 5085 let machine = substitute(a:tgt,'^scp://\([^/:]\+\).*$','\1','')
5056 let tgt = substitute(a:tgt,'^scp://[^/]\+/\(.*\)$','\1','') 5086 let tgt = substitute(a:tgt,'^scp://[^/]\+/\(.*\)$','\1','')
5057 " call Decho("exe ".s:netrw_silentxfer."!".g:netrw_scp_cmd.useport." ".args." ".shellescape(machine.":".escape(tgt,g:netrw_fname_escape))) 5087 " call Decho("exe ".s:netrw_silentxfer."!".g:netrw_scp_cmd.shellescape(useport,1)." ".args." ".shellescape(machine.":".tgt,1))
5058 exe s:netrw_silentxfer."!".g:netrw_scp_cmd.useport." ".args." ".shellescape(machine.":".escape(tgt,g:netrw_fname_escape)) 5088 exe s:netrw_silentxfer."!".g:netrw_scp_cmd.shellescape(useport,1)." ".args." ".shellescape(machine.":".tgt,1)
5059 exe "keepjumps silent lcd ".fnameescape(curdir) 5089 exe "keepjumps silent lcd ".fnameescape(curdir)
5060 5090
5061 elseif a:tgt =~ '^ftp:' 5091 elseif a:tgt =~ '^ftp:'
5062 call s:NetrwMethod(a:tgt) 5092 call s:NetrwMethod(a:tgt)
5063 5093
5085 call setline(line("$")+1,'put "'.fname.'"') 5115 call setline(line("$")+1,'put "'.fname.'"')
5086 " call Decho("filter input: ".getline('$')) 5116 " call Decho("filter input: ".getline('$'))
5087 endfor 5117 endfor
5088 5118
5089 if exists("g:netrw_port") && g:netrw_port != "" 5119 if exists("g:netrw_port") && g:netrw_port != ""
5090 " call Decho("executing: ".s:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i ".g:netrw_machine." ".g:netrw_port) 5120 " call Decho("executing: ".s:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)." ".shellescape(g:netrw_port,1))
5091 exe s:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i ".g:netrw_machine." ".g:netrw_port 5121 exe s:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)." ".shellescape(g:netrw_port,1)
5092 else 5122 else
5093 " call Decho("filter input window#".winnr()) 5123 " call Decho("filter input window#".winnr())
5094 " call Decho("executing: ".s:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i ".g:netrw_machine) 5124 " call Decho("executing: ".s:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1))
5095 exe s:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i ".g:netrw_machine 5125 exe s:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)
5096 endif 5126 endif
5097 " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar) 5127 " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar)
5098 silent g/Local directory now/d 5128 silent g/Local directory now/d
5099 if getline(1) !~ "^$" && !exists("g:netrw_quiet") && getline(1) !~ '^Trying ' 5129 if getline(1) !~ "^$" && !exists("g:netrw_quiet") && getline(1) !~ '^Trying '
5100 call netrw#ErrorMsg(s:ERROR,getline(1),14) 5130 call netrw#ErrorMsg(s:ERROR,getline(1),14)
5792 5822
5793 if w:netrw_bannercnt < line("$") 5823 if w:netrw_bannercnt < line("$")
5794 " call Decho("g:netrw_sort_direction=".g:netrw_sort_direction." (bannercnt=".w:netrw_bannercnt.")") 5824 " call Decho("g:netrw_sort_direction=".g:netrw_sort_direction." (bannercnt=".w:netrw_bannercnt.")")
5795 if g:netrw_sort_direction =~ 'n' 5825 if g:netrw_sort_direction =~ 'n'
5796 " normal direction sorting 5826 " normal direction sorting
5797 exe 'silent keepjumps '.w:netrw_bannercnt.',$sort' 5827 exe 'silent keepjumps '.w:netrw_bannercnt.',$sort'.' '.g:netrw_sort_options
5798 else 5828 else
5799 " reverse direction sorting 5829 " reverse direction sorting
5800 exe 'silent keepjumps '.w:netrw_bannercnt.',$sort!' 5830 exe 'silent keepjumps '.w:netrw_bannercnt.',$sort!'.' '.g:netrw_sort_options
5801 endif 5831 endif
5802 endif 5832 endif
5803 " remove priority pattern prefix 5833 " remove priority pattern prefix
5804 " call Decho("remove priority pattern prefix") 5834 " call Decho("remove priority pattern prefix")
5805 let sepchr= "\<Char-0xff>" 5835 let sepchr= "\<Char-0xff>"
5808 elseif a:islocal 5838 elseif a:islocal
5809 if w:netrw_bannercnt < line("$") 5839 if w:netrw_bannercnt < line("$")
5810 " call Decho("g:netrw_sort_direction=".g:netrw_sort_direction) 5840 " call Decho("g:netrw_sort_direction=".g:netrw_sort_direction)
5811 if g:netrw_sort_direction =~ 'n' 5841 if g:netrw_sort_direction =~ 'n'
5812 " call Decho('exe silent keepjumps '.w:netrw_bannercnt.',$sort') 5842 " call Decho('exe silent keepjumps '.w:netrw_bannercnt.',$sort')
5813 exe 'silent keepjumps '.w:netrw_bannercnt.',$sort' 5843 exe 'silent keepjumps '.w:netrw_bannercnt.',$sort'.' '.g:netrw_sort_options
5814 else 5844 else
5815 " call Decho('exe silent keepjumps '.w:netrw_bannercnt.',$sort!') 5845 " call Decho('exe silent keepjumps '.w:netrw_bannercnt.',$sort!')
5816 exe 'silent keepjumps '.w:netrw_bannercnt.',$sort!' 5846 exe 'silent keepjumps '.w:netrw_bannercnt.',$sort!'.' '.g:netrw_sort_options
5817 endif 5847 endif
5818 endif 5848 endif
5819 exe 'silent keepjumps '.w:netrw_bannercnt.',$s/^\d\{-}\///e' 5849 exe 'silent keepjumps '.w:netrw_bannercnt.',$s/^\d\{-}\///e'
5820 endif 5850 endif
5821 5851
5995 " use ssh to get remote file listing {{{3 6025 " use ssh to get remote file listing {{{3
5996 " call Decho("use ssh to get remote file listing: s:path<".s:path.">") 6026 " call Decho("use ssh to get remote file listing: s:path<".s:path.">")
5997 let listcmd= s:MakeSshCmd(g:netrw_list_cmd) 6027 let listcmd= s:MakeSshCmd(g:netrw_list_cmd)
5998 " call Decho("listcmd<".listcmd."> (using g:netrw_list_cmd)") 6028 " call Decho("listcmd<".listcmd."> (using g:netrw_list_cmd)")
5999 if g:netrw_scp_cmd =~ '^pscp' 6029 if g:netrw_scp_cmd =~ '^pscp'
6000 " call Decho("1: exe silent r! ".listcmd.shellescape(s:path)) 6030 " call Decho("1: exe silent r! ".listcmd.s:path)
6001 exe "silent r! ".listcmd.shellescape(s:path) 6031 exe "silent r! ".listcmd.s:path
6002 " remove rubbish and adjust listing format of 'pscp' to 'ssh ls -FLa' like 6032 " remove rubbish and adjust listing format of 'pscp' to 'ssh ls -FLa' like
6003 g/^Listing directory/d 6033 g/^Listing directory/d
6004 g/^d[-rwx][-rwx][-rwx]/s+$+/+e 6034 g/^d[-rwx][-rwx][-rwx]/s+$+/+e
6005 silent g/^l[-rwx][-rwx][-rwx]/s+$+@+e 6035 silent g/^l[-rwx][-rwx][-rwx]/s+$+@+e
6006 if g:netrw_liststyle != s:LONGLIST 6036 if g:netrw_liststyle != s:LONGLIST
6009 else 6039 else
6010 if s:path == "" 6040 if s:path == ""
6011 " call Decho("2: exe silent r! ".listcmd) 6041 " call Decho("2: exe silent r! ".listcmd)
6012 exe "silent r! ".listcmd 6042 exe "silent r! ".listcmd
6013 else 6043 else
6014 " call Decho("3: exe silent r! ".listcmd.' "'.shellescape(s:path).'"') 6044 " call Decho("3: exe silent r! ".listcmd.' '.shellescape(s:path,1))
6015 exe "silent r! ".listcmd.' "'.shellescape(s:path).'"' 6045 exe "silent r! ".listcmd.' '.shellescape(s:path,1)
6016 " call Decho("listcmd<".listcmd."> path<".s:path.">") 6046 " call Decho("listcmd<".listcmd."> path<".s:path.">")
6017 endif 6047 endif
6018 endif 6048 endif
6019 6049
6020 " cleanup 6050 " cleanup
6201 if all || ok =~ 'y\%[es]' || ok == "" 6231 if all || ok =~ 'y\%[es]' || ok == ""
6202 if exists("w:netrw_method") && (w:netrw_method == 2 || w:netrw_method == 3) 6232 if exists("w:netrw_method") && (w:netrw_method == 2 || w:netrw_method == 3)
6203 call s:NetrwRemoteFtpCmd(a:path,"rmdir ".a:rmfile) 6233 call s:NetrwRemoteFtpCmd(a:path,"rmdir ".a:rmfile)
6204 else 6234 else
6205 let rmfile = substitute(a:path.a:rmfile,'/$','','') 6235 let rmfile = substitute(a:path.a:rmfile,'/$','','')
6206 let netrw_rmdir_cmd = s:MakeSshCmd(g:netrw_rmdir_cmd).' '.rmfile 6236 let netrw_rmdir_cmd = s:MakeSshCmd(s:WinPath(g:netrw_rmdir_cmd)).' '.shellescape(s:WinPath(rmfile))
6207 " call Decho("attempt to remove dir: system(".netrw_rmdir_cmd.")") 6237 " call Decho("attempt to remove dir: system(".netrw_rmdir_cmd.")")
6208 let ret= s:System("system",netrw_rmdir_cmd) 6238 let ret= system(netrw_rmdir_cmd)
6209 " call Decho("returned=".ret." errcode=".v:shell_error) 6239 " call Decho("returned=".ret." errcode=".v:shell_error)
6210 6240
6211 if v:shell_error != 0 6241 if v:shell_error != 0
6212 " call Decho("v:shell_error not 0") 6242 " call Decho("v:shell_error not 0")
6213 let netrw_rmf_cmd= s:MakeSshCmd(g:netrw_rmf_cmd).' '.substitute(rmfile,'[\/]$','','e') 6243 let netrw_rmf_cmd= s:MakeSshCmd(s:WinPath(g:netrw_rmf_cmd)).' '.shellescape(s:WinPath(substitute(rmfile,'[\/]$','','e')))
6214 " call Decho("2nd attempt to remove dir: system(".netrw_rmf_cmd.")") 6244 " call Decho("2nd attempt to remove dir: system(".netrw_rmf_cmd.")")
6215 let ret= s:System("system",netrw_rmf_cmd) 6245 let ret= system(netrw_rmf_cmd)
6216 " call Decho("returned=".ret." errcode=".v:shell_error) 6246 " call Decho("returned=".ret." errcode=".v:shell_error)
6217 6247
6218 if v:shell_error != 0 && !exists("g:netrw_quiet") 6248 if v:shell_error != 0 && !exists("g:netrw_quiet")
6219 call netrw#ErrorMsg(s:ERROR,"unable to remove directory<".rmfile."> -- is it empty?",22) 6249 call netrw#ErrorMsg(s:ERROR,"unable to remove directory<".rmfile."> -- is it empty?",22)
6220 endif 6250 endif
6221 endif 6251 endif
6260 " call Decho("filter input: ".getline('.')) 6290 " call Decho("filter input: ".getline('.'))
6261 endif 6291 endif
6262 call setline(line("$")+1,a:listcmd) 6292 call setline(line("$")+1,a:listcmd)
6263 " exe "keepjumps ".w:netrw_bannercnt.',$g/^./call Decho("ftp#".line(".").": ".getline("."))' 6293 " exe "keepjumps ".w:netrw_bannercnt.',$g/^./call Decho("ftp#".line(".").": ".getline("."))'
6264 if exists("g:netrw_port") && g:netrw_port != "" 6294 if exists("g:netrw_port") && g:netrw_port != ""
6265 " call Decho("exe ".s:netrw_silentxfer.w:netrw_bannercnt.",$!".g:netrw_ftp_cmd." -i ".g:netrw_machine." ".g:netrw_port) 6295 " call Decho("exe ".s:netrw_silentxfer.w:netrw_bannercnt.",$!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)." ".shellescape(g:netrw_port,1))
6266 exe s:netrw_silentxfer." keepjumps ".w:netrw_bannercnt.",$!".g:netrw_ftp_cmd." -i ".g:netrw_machine." ".g:netrw_port 6296 exe s:netrw_silentxfer." keepjumps ".w:netrw_bannercnt.",$!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)." ".shellescape(g:netrw_port,1)
6267 else 6297 else
6268 " call Decho("exe ".s:netrw_silentxfer.w:netrw_bannercnt.",$!".g:netrw_ftp_cmd." -i ".g:netrw_machine) 6298 " call Decho("exe ".s:netrw_silentxfer.w:netrw_bannercnt.",$!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1))
6269 exe s:netrw_silentxfer." keepjumps ".w:netrw_bannercnt.",$!".g:netrw_ftp_cmd." -i ".g:netrw_machine 6299 exe s:netrw_silentxfer." keepjumps ".w:netrw_bannercnt.",$!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)
6270 endif 6300 endif
6271 6301
6272 "......................................... 6302 ".........................................
6273 elseif w:netrw_method == 3 6303 elseif w:netrw_method == 3
6274 " ftp + machine,id,passwd,filename: Method #3 6304 " ftp + machine,id,passwd,filename: Method #3
6366 endif 6396 endif
6367 6397
6368 if exists("w:netrw_method") && (w:netrw_method == 2 || w:netrw_method == 3) 6398 if exists("w:netrw_method") && (w:netrw_method == 2 || w:netrw_method == 3)
6369 call s:NetrwRemoteFtpCmd(a:path,"rename ".oldname." ".newname) 6399 call s:NetrwRemoteFtpCmd(a:path,"rename ".oldname." ".newname)
6370 else 6400 else
6371 let oldname= a:path.oldname 6401 let oldname= shellescape(a:path.oldname)
6372 let newname= a:path.newname 6402 let newname= shellescape(a:path.newname)
6373 " call Decho("system(rename_cmd".' "'.fnameescape(oldname," ").'" "'.escape(newname).'"') 6403 " call Decho("system(s:WinPath(".rename_cmd.") ".oldname.' '.newname.")")
6374 let ret= s:System("system",rename_cmd.' "'.fnameescape(oldname).'" "'.fnameescape(newname).'"') 6404 let ret = system(s:WinPath(rename_cmd).' '.oldname.' '.newname)
6375 endif 6405 endif
6376 6406
6377 endfor 6407 endfor
6378 call s:NetrwUnMarkFile(1) 6408 call s:NetrwUnMarkFile(1)
6379 6409
6391 call inputrestore() 6421 call inputrestore()
6392 6422
6393 if exists("w:netrw_method") && (w:netrw_method == 2 || w:netrw_method == 3) 6423 if exists("w:netrw_method") && (w:netrw_method == 2 || w:netrw_method == 3)
6394 call s:NetrwRemoteFtpCmd(a:path,"rename ".oldname." ".newname) 6424 call s:NetrwRemoteFtpCmd(a:path,"rename ".oldname." ".newname)
6395 else 6425 else
6396 let oldname= a:path.oldname 6426 let oldname= shellescape(a:path.oldname)
6397 let newname= a:path.newname 6427 let newname= shellescape(a:path.newname)
6398 " call Decho("system(rename_cmd".' "'.fnameescape(oldname," ").'" "'.escape(newname).'"') 6428 " call Decho("system(s:WinPath(".rename_cmd.") ".oldname.' '.newname.")")
6399 let ret= s:System("system",rename_cmd.' "'.fnameescape(oldname).'" "'.fnameescape(newname).'"') 6429 let ret = system(s:WinPath(rename_cmd).' '.oldname.' '.newname)
6400 endif 6430 endif
6401 6431
6402 let ctr= ctr + 1 6432 let ctr= ctr + 1
6403 endwhile 6433 endwhile
6404 endif 6434 endif
6749 let all= 1 6779 let all= 1
6750 endif 6780 endif
6751 endif 6781 endif
6752 6782
6753 if all || ok =~ 'y\%[es]' || ok == "" 6783 if all || ok =~ 'y\%[es]' || ok == ""
6754 let ret= s:System("delete",rmfile) 6784 let ret= s:NetrwDelete(rmfile)
6755 " call Decho("errcode=".v:shell_error." ret=".ret) 6785 " call Decho("errcode=".v:shell_error." ret=".ret)
6756 endif 6786 endif
6757 6787
6758 else 6788 else
6759 " attempt to remove directory 6789 " attempt to remove directory
6771 endif 6801 endif
6772 endif 6802 endif
6773 let rmfile= substitute(rmfile,'[\/]$','','e') 6803 let rmfile= substitute(rmfile,'[\/]$','','e')
6774 6804
6775 if all || ok =~ 'y\%[es]' || ok == "" 6805 if all || ok =~ 'y\%[es]' || ok == ""
6776 " call Decho("1st attempt: system(".g:netrw_local_rmdir.' '.shellescape(rmfile).')') 6806 " call Decho("1st attempt: system(s:WinPath(".g:netrw_local_rmdir.') '.shellescape(rmfile).')')
6777 call s:System("system",g:netrw_local_rmdir.' '.shellescape(rmfile)) 6807 call system(s:WinPath(g:netrw_local_rmdir).' '.shellescape(rmfile))
6778 " call Decho("v:shell_error=".v:shell_error) 6808 " call Decho("v:shell_error=".v:shell_error)
6779 6809
6780 if v:shell_error != 0 6810 if v:shell_error != 0
6781 " call Decho("2nd attempt to remove directory<".rmfile.">") 6811 " call Decho("2nd attempt to remove directory<".rmfile.">")
6782 let errcode= s:System("delete",rmfile) 6812 let errcode= s:NetrwDelete(rmfile)
6783 " call Decho("errcode=".errcode) 6813 " call Decho("errcode=".errcode)
6784 6814
6785 if errcode != 0 6815 if errcode != 0
6786 if has("unix") 6816 if has("unix")
6787 " call Decho("3rd attempt to remove directory<".rmfile.">") 6817 " call Decho("3rd attempt to remove directory<".rmfile.">")
6788 call s:System("system","rm ".shellescape(rmfile)) 6818 call system("rm ".shellescape(rmfile))
6789 if v:shell_error != 0 && !exists("g:netrw_quiet") 6819 if v:shell_error != 0 && !exists("g:netrw_quiet")
6790 call netrw#ErrorMsg(s:ERROR,"unable to remove directory<".rmfile."> -- is it empty?",34) 6820 call netrw#ErrorMsg(s:ERROR,"unable to remove directory<".rmfile."> -- is it empty?",34)
6791 let ok="no" 6821 let ok="no"
6792 endif 6822 endif
6793 elseif !exists("g:netrw_quiet") 6823 elseif !exists("g:netrw_quiet")
6936 6966
6937 " --------------------------------------------------------------------- 6967 " ---------------------------------------------------------------------
6938 " Support Functions: {{{1 6968 " Support Functions: {{{1
6939 6969
6940 " --------------------------------------------------------------------- 6970 " ---------------------------------------------------------------------
6941 " s:UpdateBuffersMenu: does emenu Buffers.Refresh (but due to locale, the menu item may not be called that) {{{2
6942 " The Buffers.Refresh menu calls s:BMShow(); unfortunately, that means that that function
6943 " can't be called except via emenu. But due to locale, that menu line may not be called
6944 " Buffers.Refresh; hence, s:NetrwBMShow() utilizes a "cheat" to call that function anyway.
6945 fun! s:UpdateBuffersMenu()
6946 " call Dfunc("s:UpdateBuffersMenu()")
6947 if has("gui") && has("menu") && has("gui_running") && &go =~ 'm'
6948 try
6949 silent emenu Buffers.Refresh\ menu
6950 catch /^Vim\%((\a\+)\)\=:E/
6951 let v:errmsg= ""
6952 silent call s:NetrwBMShow()
6953 endtry
6954 endif
6955 " call Dret("s:UpdateBuffersMenu")
6956 endfun
6957
6958 " ---------------------------------------------------------------------
6959 " s:NetrwBMShow: {{{2
6960 fun! s:NetrwBMShow()
6961 " call Dfunc("s:NetrwBMShow()")
6962 redir => bmshowraw
6963 menu
6964 redir END
6965 let bmshowlist = split(bmshowraw,'\n')
6966 if bmshowlist != []
6967 let bmshowfuncs= filter(bmshowlist,'v:val =~ "<SNR>\\d\\+_BMShow()"')
6968 if bmshowfuncs != []
6969 let bmshowfunc = substitute(bmshowfuncs[0],'^.*:\(call.*BMShow()\).*$','\1','')
6970 if bmshowfunc =~ '^call.*BMShow()'
6971 exe "silent! ".bmshowfunc
6972 endif
6973 endif
6974 endif
6975 " call Dret("s:NetrwBMShow : bmshowfunc<".(exists("bmshowfunc")? bmshowfunc : 'n/a').">")
6976 endfun
6977
6978 " ---------------------------------------------------------------------
6979 " s:ComposePath: Appends a new part to a path taking different systems into consideration {{{2
6980 fun! s:ComposePath(base,subdir)
6981 " call Dfunc("s:ComposePath(base<".a:base."> subdir<".a:subdir.">)")
6982
6983 if(has("amiga"))
6984 " call Decho("amiga")
6985 let ec = a:base[strlen(a:base)-1]
6986 if ec != '/' && ec != ':'
6987 let ret = a:base . "/" . a:subdir
6988 else
6989 let ret = a:base . a:subdir
6990 endif
6991
6992 elseif a:subdir =~ '^\a:[/\\][^/\\]' && (has("win32") || has("win95") || has("win64") || has("win16"))
6993 " call Decho("windows")
6994 let ret= a:subdir
6995
6996 elseif a:base =~ '^\a\+://'
6997 " call Decho("remote linux/macos")
6998 let urlbase = substitute(a:base,'^\(\a\+://.\{-}/\)\(.*\)$','\1','')
6999 let curpath = substitute(a:base,'^\(\a\+://.\{-}/\)\(.*\)$','\2','')
7000 if a:subdir == '../'
7001 if curpath =~ '[^/]/[^/]\+/$'
7002 let curpath= substitute(curpath,'[^/]\+/$','','')
7003 else
7004 let curpath=""
7005 endif
7006 let ret= urlbase.curpath
7007 else
7008 let ret= urlbase.curpath.a:subdir
7009 endif
7010 " call Decho("urlbase<".urlbase.">")
7011 " call Decho("curpath<".curpath.">")
7012 " call Decho("ret<".ret.">")
7013
7014 else
7015 " call Decho("local linux/macos")
7016 let ret = substitute(a:base."/".a:subdir,"//","/","g")
7017 if a:base =~ '^//'
7018 " keeping initial '//' for the benefit of network share listing support
7019 let ret= '/'.ret
7020 endif
7021 let ret= simplify(ret)
7022 endif
7023
7024 " call Dret("s:ComposePath ".ret)
7025 return ret
7026 endfun
7027
7028 " ---------------------------------------------------------------------
7029 " netrw#ErrorMsg: {{{2 6971 " netrw#ErrorMsg: {{{2
7030 " 0=note = s:NOTE 6972 " 0=note = s:NOTE
7031 " 1=warning = s:WARNING 6973 " 1=warning = s:WARNING
7032 " 2=error = s:ERROR 6974 " 2=error = s:ERROR
7033 " Jun 11, 2008 : max errnum currently is 70 6975 " Jul 08, 2008 : max errnum currently is 71
7034 fun! netrw#ErrorMsg(level,msg,errnum) 6976 fun! netrw#ErrorMsg(level,msg,errnum)
7035 " call Dfunc("netrw#ErrorMsg(level=".a:level." msg<".a:msg."> errnum=".a:errnum.") g:netrw_use_errorwindow=".g:netrw_use_errorwindow) 6977 " call Dfunc("netrw#ErrorMsg(level=".a:level." msg<".a:msg."> errnum=".a:errnum.") g:netrw_use_errorwindow=".g:netrw_use_errorwindow)
7036 6978
7037 if a:level == 1 6979 if a:level == 1
7038 let level= "**warning** (netrw) " 6980 let level= "**warning** (netrw) "
7097 7039
7098 " call Dret("netrw#ErrorMsg") 7040 " call Dret("netrw#ErrorMsg")
7099 endfun 7041 endfun
7100 7042
7101 " --------------------------------------------------------------------- 7043 " ---------------------------------------------------------------------
7044 " netrw#NetrwRestorePosn: restores the cursor and file position as saved by NetrwSavePosn() {{{2
7045 fun! netrw#NetrwRestorePosn(...)
7046 " call Dfunc("netrw#NetrwRestorePosn() a:0=".a:0." winnr=".(exists("w:netrw_winnr")? w:netrw_winnr : -1)." line=".(exists("w:netrw_line")? w:netrw_line : -1)." col=".(exists("w:netrw_col")? w:netrw_col : -1)." hline=".(exists("w:netrw_hline")? w:netrw_hline : -1))
7047 let eikeep= &ei
7048 set ei=all
7049 if expand("%") == "NetrwMessage"
7050 exe s:winBeforeErr."wincmd w"
7051 endif
7052
7053 if a:0 > 0
7054 exe a:1
7055 endif
7056
7057 " restore window
7058 if exists("w:netrw_winnr")
7059 " call Decho("restore window: exe silent! ".w:netrw_winnr."wincmd w")
7060 exe "silent! ".w:netrw_winnr."wincmd w"
7061 endif
7062 if v:shell_error == 0
7063 " as suggested by Bram M: redraw on no error
7064 " allows protocol error messages to remain visible
7065 " redraw!
7066 endif
7067
7068 " restore top-of-screen line
7069 if exists("w:netrw_hline")
7070 " call Decho("restore topofscreen: exe norm! ".w:netrw_hline."G0z")
7071 exe "norm! ".w:netrw_hline."G0z\<CR>"
7072 endif
7073
7074 " restore position
7075 if exists("w:netrw_line") && exists("w:netrw_col")
7076 " call Decho("restore posn: exe norm! ".w:netrw_line."G0".w:netrw_col."|")
7077 exe "norm! ".w:netrw_line."G0".w:netrw_col."\<bar>"
7078 endif
7079
7080 let &ei= eikeep
7081 " call Dret("netrw#NetrwRestorePosn")
7082 endfun
7083
7084 " ---------------------------------------------------------------------
7085 " netrw#NetrwSavePosn: saves position of cursor on screen {{{2
7086 fun! netrw#NetrwSavePosn()
7087 " call Dfunc("netrw#NetrwSavePosn()")
7088 " Save current line and column
7089 let w:netrw_winnr= winnr()
7090 let w:netrw_line = line(".")
7091 let w:netrw_col = virtcol(".")
7092
7093 " Save top-of-screen line
7094 norm! H0
7095 let w:netrw_hline= line(".")
7096
7097 " set up string holding position parameters
7098 let ret = "let w:netrw_winnr=".w:netrw_winnr."|let w:netrw_line=".w:netrw_line."|let w:netrw_col=".w:netrw_col."|let w:netrw_hline=".w:netrw_hline
7099
7100 call netrw#NetrwRestorePosn()
7101 " call Dret("netrw#NetrwSavePosn : winnr=".w:netrw_winnr." line=".w:netrw_line." col=".w:netrw_col." hline=".w:netrw_hline)
7102 return ret
7103 endfun
7104
7105 " ------------------------------------------------------------------------
7102 " netrw#RFC2396: converts %xx into characters {{{2 7106 " netrw#RFC2396: converts %xx into characters {{{2
7103 fun! netrw#RFC2396(fname) 7107 fun! netrw#RFC2396(fname)
7104 " call Dfunc("netrw#RFC2396(fname<".a:fname.">)") 7108 " call Dfunc("netrw#RFC2396(fname<".a:fname.">)")
7105 let fname = escape(substitute(a:fname,'%\(\x\x\)','\=nr2char("0x".submatch(1))','ge')," \t") 7109 let fname = escape(substitute(a:fname,'%\(\x\x\)','\=nr2char("0x".submatch(1))','ge')," \t")
7106 " call Dret("netrw#RFC2396 ".fname) 7110 " call Dret("netrw#RFC2396 ".fname)
7107 return fname 7111 return fname
7108 endfun 7112 endfun
7109 7113
7110 " --------------------------------------------------------------------- 7114 " ---------------------------------------------------------------------
7115 " s:ComposePath: Appends a new part to a path taking different systems into consideration {{{2
7116 fun! s:ComposePath(base,subdir)
7117 " call Dfunc("s:ComposePath(base<".a:base."> subdir<".a:subdir.">)")
7118
7119 if(has("amiga"))
7120 " call Decho("amiga")
7121 let ec = a:base[strlen(a:base)-1]
7122 if ec != '/' && ec != ':'
7123 let ret = a:base . "/" . a:subdir
7124 else
7125 let ret = a:base . a:subdir
7126 endif
7127
7128 elseif a:subdir =~ '^\a:[/\\][^/\\]' && (has("win32") || has("win95") || has("win64") || has("win16"))
7129 " call Decho("windows")
7130 let ret= a:subdir
7131
7132 elseif a:base =~ '^\a\+://'
7133 " call Decho("remote linux/macos")
7134 let urlbase = substitute(a:base,'^\(\a\+://.\{-}/\)\(.*\)$','\1','')
7135 let curpath = substitute(a:base,'^\(\a\+://.\{-}/\)\(.*\)$','\2','')
7136 if a:subdir == '../'
7137 if curpath =~ '[^/]/[^/]\+/$'
7138 let curpath= substitute(curpath,'[^/]\+/$','','')
7139 else
7140 let curpath=""
7141 endif
7142 let ret= urlbase.curpath
7143 else
7144 let ret= urlbase.curpath.a:subdir
7145 endif
7146 " call Decho("urlbase<".urlbase.">")
7147 " call Decho("curpath<".curpath.">")
7148 " call Decho("ret<".ret.">")
7149
7150 else
7151 " call Decho("local linux/macos")
7152 let ret = substitute(a:base."/".a:subdir,"//","/","g")
7153 if a:base =~ '^//'
7154 " keeping initial '//' for the benefit of network share listing support
7155 let ret= '/'.ret
7156 endif
7157 let ret= simplify(ret)
7158 endif
7159
7160 " call Dret("s:ComposePath ".ret)
7161 return ret
7162 endfun
7163
7164 " ---------------------------------------------------------------------
7111 " s:FileReadable: o/s independent filereadable {{{2 7165 " s:FileReadable: o/s independent filereadable {{{2
7112 fun! s:FileReadable(fname) 7166 fun! s:FileReadable(fname)
7113 " call Dfunc("s:FileReadable(fname<".a:fname.">)") 7167 " call Dfunc("s:FileReadable(fname<".a:fname.">)")
7114 7168
7115 if g:netrw_cygwin 7169 if g:netrw_cygwin
7132 if !exists("b:netrw_tmpfile") 7186 if !exists("b:netrw_tmpfile")
7133 " get a brand new temporary filename 7187 " get a brand new temporary filename
7134 let tmpfile= tempname() 7188 let tmpfile= tempname()
7135 " call Decho("tmpfile<".tmpfile."> : from tempname()") 7189 " call Decho("tmpfile<".tmpfile."> : from tempname()")
7136 7190
7137 let tmpfile= escape(substitute(tmpfile,'\','/','ge'),g:netrw_tmpfile_escape) 7191 let tmpfile= substitute(tmpfile,'\','/','ge')
7138 " call Decho("tmpfile<".tmpfile."> : chgd any \\ -> /") 7192 " call Decho("tmpfile<".tmpfile."> : chgd any \\ -> /")
7139 7193
7140 " sanity check -- does the temporary file's directory exist? 7194 " sanity check -- does the temporary file's directory exist?
7141 if !isdirectory(substitute(tmpfile,'[^/]\+$','','e')) 7195 if !isdirectory(substitute(tmpfile,'[^/]\+$','','e'))
7142 " call Decho("ro=".&ro." ma=".&ma." mod=".&mod." wrap=".&wrap) 7196 " call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap)
7143 call netrw#ErrorMsg(s:ERROR,"your <".substitute(tmpfile,'[^/]\+$','','e')."> directory is missing!",2) 7197 call netrw#ErrorMsg(s:ERROR,"your <".substitute(tmpfile,'[^/]\+$','','e')."> directory is missing!",2)
7144 " call Dret("s:GetTempfile getcwd<".getcwd().">") 7198 " call Dret("s:GetTempfile getcwd<".getcwd().">")
7145 return "" 7199 return ""
7146 endif 7200 endif
7147 7201
7174 if a:fname =~ '.tar.gz' || a:fname =~ '.tar.bz2' 7228 if a:fname =~ '.tar.gz' || a:fname =~ '.tar.bz2'
7175 let suffix = ".tar".substitute(a:fname,'^.*\(\.[^./]\+\)$','\1','e') 7229 let suffix = ".tar".substitute(a:fname,'^.*\(\.[^./]\+\)$','\1','e')
7176 else 7230 else
7177 let suffix = substitute(a:fname,'^.*\(\.[^./]\+\)$','\1','e') 7231 let suffix = substitute(a:fname,'^.*\(\.[^./]\+\)$','\1','e')
7178 endif 7232 endif
7179 let suffix = escape(suffix,g:netrw_tmpfile_escape)
7180 " call Decho("suffix<".suffix.">") 7233 " call Decho("suffix<".suffix.">")
7181 let tmpfile= substitute(tmpfile,'\.tmp$','','e') 7234 let tmpfile= substitute(tmpfile,'\.tmp$','','e')
7182 " call Decho("chgd tmpfile<".tmpfile."> (removed any .tmp suffix)") 7235 " call Decho("chgd tmpfile<".tmpfile."> (removed any .tmp suffix)")
7183 let tmpfile .= suffix 7236 let tmpfile .= suffix
7184 " call Decho("chgd tmpfile<".tmpfile."> (added ".suffix." suffix) netrw_fname<".b:netrw_fname.">") 7237 " call Decho("chgd tmpfile<".tmpfile."> (added ".suffix." suffix) netrw_fname<".b:netrw_fname.">")
7185 let s:netrw_tmpfile= tmpfile " supports netrw#NetSource() 7238 let s:netrw_tmpfile= tmpfile " supports netrw#NetSource()
7186 endif 7239 endif
7187 endif 7240 endif
7188 7241
7189 " call Decho("ro=".&ro." ma=".&ma." mod=".&mod." wrap=".&wrap) 7242 " call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap)
7190 " call Dret("s:GetTempfile <".tmpfile.">") 7243 " call Dret("s:GetTempfile <".tmpfile.">")
7191 return tmpfile 7244 return tmpfile
7192 endfun 7245 endfun
7193 7246
7194 " --------------------------------------------------------------------- 7247 " ---------------------------------------------------------------------
7195 " s:MakeSshCmd: transforms input command using USEPORT HOSTNAME into {{{2 7248 " s:MakeSshCmd: transforms input command using USEPORT HOSTNAME into {{{2
7196 " a correct command 7249 " a correct command for use with a system() call
7197 fun! s:MakeSshCmd(sshcmd) 7250 fun! s:MakeSshCmd(sshcmd)
7198 " call Dfunc("s:MakeSshCmd(sshcmd<".a:sshcmd.">) user<".s:user."> machine<".s:machine.">") 7251 " call Dfunc("s:MakeSshCmd(sshcmd<".a:sshcmd.">) user<".s:user."> machine<".s:machine.">")
7199 let sshcmd = substitute(a:sshcmd,'\<HOSTNAME\>',s:user.s:machine,'') 7252 let sshcmd = substitute(a:sshcmd,'\<HOSTNAME\>',s:user.s:machine,'')
7200 if exists("g:netrw_port") && g:netrw_port != "" 7253 if exists("g:netrw_port") && g:netrw_port != ""
7201 let sshcmd= substitute(sshcmd,"USEPORT",g:netrw_sshport.' '.g:netrw_port,'') 7254 let sshcmd= substitute(sshcmd,"USEPORT",g:netrw_sshport.' '.g:netrw_port,'')
7207 " call Dret("s:MakeSshCmd <".sshcmd.">") 7260 " call Dret("s:MakeSshCmd <".sshcmd.">")
7208 return sshcmd 7261 return sshcmd
7209 endfun 7262 endfun
7210 7263
7211 " --------------------------------------------------------------------- 7264 " ---------------------------------------------------------------------
7212 " s:RemoteSystem: runs a command on a remote host using ssh {{{2 7265 " s:NetrwBMShow: {{{2
7213 " Returns status 7266 fun! s:NetrwBMShow()
7214 fun! s:RemoteSystem(cmd) 7267 " call Dfunc("s:NetrwBMShow()")
7215 " call Dfunc("s:RemoteSystem(cmd<".a:cmd.">)") 7268 redir => bmshowraw
7216 if !executable(g:netrw_ssh_cmd) 7269 menu
7217 call netrw#ErrorMsg(s:ERROR,"g:netrw_ssh_cmd<".g:netrw_ssh_cmd."> is not executable!",52) 7270 redir END
7218 elseif !exists("b:netrw_curdir") 7271 let bmshowlist = split(bmshowraw,'\n')
7219 call netrw#ErrorMsg(s:ERROR,"for some reason b:netrw_curdir doesn't exist!",53) 7272 if bmshowlist != []
7273 let bmshowfuncs= filter(bmshowlist,'v:val =~ "<SNR>\\d\\+_BMShow()"')
7274 if bmshowfuncs != []
7275 let bmshowfunc = substitute(bmshowfuncs[0],'^.*:\(call.*BMShow()\).*$','\1','')
7276 if bmshowfunc =~ '^call.*BMShow()'
7277 exe "silent! ".bmshowfunc
7278 endif
7279 endif
7280 endif
7281 " call Dret("s:NetrwBMShow : bmshowfunc<".(exists("bmshowfunc")? bmshowfunc : 'n/a').">")
7282 endfun
7283
7284 " ---------------------------------------------------------------------
7285 " s:NetrwDelete: Deletes a file. {{{2
7286 " Uses Steve Hall's idea to insure that Windows paths stay
7287 " acceptable. No effect on Unix paths.
7288 " Examples of use: let result= s:NetrwDelete(path)
7289 fun! s:NetrwDelete(path)
7290 " call Dfunc("s:NetrwDelete(path<".a:path.">)")
7291
7292 let path = s:WinPath(a:path)
7293 if !g:netrw_cygwin && (has("win32") || has("win95") || has("win64") || has("win16"))
7294 if exists("+shellslash")
7295 let sskeep= &shellslash
7296 setlocal noshellslash
7297 let result = delete(path)
7298 let &shellslash = sskeep
7299 else
7300 " call Decho("exe let result= ".a:cmd."('".path."')")
7301 let result= delete(path)
7302 endif
7220 else 7303 else
7221 let cmd = s:MakeSshCmd(g:netrw_ssh_cmd." USEPORT HOSTNAME") 7304 " call Decho("let result= delete(".path.")")
7222 let remotedir= substitute(b:netrw_curdir,'^.*//[^/]\+/\(.*\)$','\1','') 7305 let result= delete(path)
7223 if remotedir != "" 7306 endif
7224 let cmd= cmd.' "cd '.shellescape(remotedir).";" 7307 if result < 0
7225 else 7308 call Netrw#ErrorMsg(s:WARNING,"delete(".path.") failed!",71)
7226 let cmd= cmd.' "' 7309 endif
7227 endif 7310
7228 let cmd= cmd.a:cmd.'"' 7311 " call Dret("s:NetrwDelete ".result)
7229 " call Decho("call system(".cmd.")") 7312 return result
7230 let ret= system(cmd)
7231 endif
7232 " call Dret("s:RemoteSystem ".ret)
7233 return ret
7234 endfun 7313 endfun
7235 7314
7236 " --------------------------------------------------------------------- 7315 " ---------------------------------------------------------------------
7237 " s:NetrwEnew: opens a new buffer, passes netrw buffer variables through {{{2 7316 " s:NetrwEnew: opens a new buffer, passes netrw buffer variables through {{{2
7238 fun! s:NetrwEnew(curdir) 7317 fun! s:NetrwEnew(curdir)
7284 if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST 7363 if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST
7285 file NetrwTreeListing 7364 file NetrwTreeListing
7286 nno <silent> <buffer> [ :silent call <SID>TreeListMove('[')<cr> 7365 nno <silent> <buffer> [ :silent call <SID>TreeListMove('[')<cr>
7287 nno <silent> <buffer> ] :silent call <SID>TreeListMove(']')<cr> 7366 nno <silent> <buffer> ] :silent call <SID>TreeListMove(']')<cr>
7288 else 7367 else
7289 exe "silent! keepalt file ".b:netrw_curdir 7368 exe "silent! keepalt file ".fnameescape(b:netrw_curdir)
7290 endif 7369 endif
7291 endif 7370 endif
7292 7371
7293 " call Dret("s:NetrwEnew : buf#".bufnr("%")."<".bufname("%")."> expand(%)<".expand("%")."> expand(#)<".expand("#").">") 7372 " call Dret("s:NetrwEnew : buf#".bufnr("%")."<".bufname("%")."> expand(%)<".expand("%")."> expand(#)<".expand("#").">")
7294 endfun 7373 endfun
7295 7374
7296 " ------------------------------------------------------------------------ 7375 " ------------------------------------------------------------------------
7297 " netrw#NetrwSavePosn: saves position of cursor on screen {{{2
7298 fun! netrw#NetrwSavePosn()
7299 " call Dfunc("netrw#NetrwSavePosn()")
7300 " Save current line and column
7301 let w:netrw_winnr= winnr()
7302 let w:netrw_line = line(".")
7303 let w:netrw_col = virtcol(".")
7304
7305 " Save top-of-screen line
7306 norm! H0
7307 let w:netrw_hline= line(".")
7308
7309 " set up string holding position parameters
7310 let ret = "let w:netrw_winnr=".w:netrw_winnr."|let w:netrw_line=".w:netrw_line."|let w:netrw_col=".w:netrw_col."|let w:netrw_hline=".w:netrw_hline
7311
7312 call netrw#NetrwRestorePosn()
7313 " call Dret("netrw#NetrwSavePosn : winnr=".w:netrw_winnr." line=".w:netrw_line." col=".w:netrw_col." hline=".w:netrw_hline)
7314 return ret
7315 endfun
7316
7317 " ------------------------------------------------------------------------
7318 " netrw#NetrwRestorePosn: restores the cursor and file position as saved by NetrwSavePosn() {{{2
7319 fun! netrw#NetrwRestorePosn(...)
7320 " call Dfunc("netrw#NetrwRestorePosn() a:0=".a:0." winnr=".(exists("w:netrw_winnr")? w:netrw_winnr : -1)." line=".(exists("w:netrw_line")? w:netrw_line : -1)." col=".(exists("w:netrw_col")? w:netrw_col : -1)." hline=".(exists("w:netrw_hline")? w:netrw_hline : -1))
7321 let eikeep= &ei
7322 set ei=all
7323 if expand("%") == "NetrwMessage"
7324 exe s:winBeforeErr."wincmd w"
7325 endif
7326
7327 if a:0 > 0
7328 exe a:1
7329 endif
7330
7331 " restore window
7332 if exists("w:netrw_winnr")
7333 " call Decho("restore window: exe silent! ".w:netrw_winnr."wincmd w")
7334 exe "silent! ".w:netrw_winnr."wincmd w"
7335 endif
7336 if v:shell_error == 0
7337 " as suggested by Bram M: redraw on no error
7338 " allows protocol error messages to remain visible
7339 " redraw!
7340 endif
7341
7342 " restore top-of-screen line
7343 if exists("w:netrw_hline")
7344 " call Decho("restore topofscreen: exe norm! ".w:netrw_hline."G0z")
7345 exe "norm! ".w:netrw_hline."G0z\<CR>"
7346 endif
7347
7348 " restore position
7349 if exists("w:netrw_line") && exists("w:netrw_col")
7350 " call Decho("restore posn: exe norm! ".w:netrw_line."G0".w:netrw_col."|")
7351 exe "norm! ".w:netrw_line."G0".w:netrw_col."\<bar>"
7352 endif
7353
7354 let &ei= eikeep
7355 " call Dret("netrw#NetrwRestorePosn")
7356 endfun
7357
7358 " ---------------------------------------------------------------------
7359 " s:NetrwSaveWordPosn: used to keep cursor on same word after refresh, {{{2 7376 " s:NetrwSaveWordPosn: used to keep cursor on same word after refresh, {{{2
7360 " changed sorting, etc. Also see s:NetrwRestoreWordPosn(). 7377 " changed sorting, etc. Also see s:NetrwRestoreWordPosn().
7361 fun! s:NetrwSaveWordPosn() 7378 fun! s:NetrwSaveWordPosn()
7362 " call Dfunc("NetrwSaveWordPosn()") 7379 " call Dfunc("NetrwSaveWordPosn()")
7363 let s:netrw_saveword= '^'.fnameescape(getline('.')).'$' 7380 let s:netrw_saveword= '^'.fnameescape(getline('.')).'$'
7369 " changed sorting, etc. Also see s:NetrwSaveWordPosn(). 7386 " changed sorting, etc. Also see s:NetrwSaveWordPosn().
7370 fun! s:NetrwRestoreWordPosn() 7387 fun! s:NetrwRestoreWordPosn()
7371 " call Dfunc("NetrwRestoreWordPosn()") 7388 " call Dfunc("NetrwRestoreWordPosn()")
7372 silent! call search(s:netrw_saveword,'w') 7389 silent! call search(s:netrw_saveword,'w')
7373 " call Dret("NetrwRestoreWordPosn") 7390 " call Dret("NetrwRestoreWordPosn")
7391 endfun
7392
7393 " ---------------------------------------------------------------------
7394 " s:RestoreBufVars: {{{2
7395 fun! s:RestoreBufVars()
7396 " call Dfunc("s:RestoreBufVars()")
7397
7398 if exists("s:netrw_curdir") |let b:netrw_curdir = s:netrw_curdir |endif
7399 if exists("s:netrw_lastfile") |let b:netrw_lastfile = s:netrw_lastfile |endif
7400 if exists("s:netrw_method") |let b:netrw_method = s:netrw_method |endif
7401 if exists("s:netrw_fname") |let b:netrw_fname = s:netrw_fname |endif
7402 if exists("s:netrw_machine") |let b:netrw_machine = s:netrw_machine |endif
7403 if exists("s:netrw_browser_active")|let b:netrw_browser_active = s:netrw_browser_active|endif
7404
7405 " call Dret("s:RestoreBufVars")
7374 endfun 7406 endfun
7375 7407
7376 " --------------------------------------------------------------------- 7408 " ---------------------------------------------------------------------
7377 " s:RemotePathAnalysis: {{{2 7409 " s:RemotePathAnalysis: {{{2
7378 fun! s:RemotePathAnalysis(dirname) 7410 fun! s:RemotePathAnalysis(dirname)
7395 7427
7396 " call Dret("s:RemotePathAnalysis") 7428 " call Dret("s:RemotePathAnalysis")
7397 endfun 7429 endfun
7398 7430
7399 " --------------------------------------------------------------------- 7431 " ---------------------------------------------------------------------
7400 " s:RestoreBufVars: {{{2 7432 " s:RemoteSystem: runs a command on a remote host using ssh {{{2
7401 fun! s:RestoreBufVars() 7433 " Returns status
7402 " call Dfunc("s:RestoreBufVars()") 7434 " Runs system() on
7403 7435 " [cd REMOTEDIRPATH;] a:cmd
7404 if exists("s:netrw_curdir") |let b:netrw_curdir = s:netrw_curdir |endif 7436 " Note that it doesn't do shellescape(a:cmd)!
7405 if exists("s:netrw_lastfile") |let b:netrw_lastfile = s:netrw_lastfile |endif 7437 fun! s:RemoteSystem(cmd)
7406 if exists("s:netrw_method") |let b:netrw_method = s:netrw_method |endif 7438 " call Dfunc("s:RemoteSystem(cmd<".a:cmd.">)")
7407 if exists("s:netrw_fname") |let b:netrw_fname = s:netrw_fname |endif 7439 if !executable(g:netrw_ssh_cmd)
7408 if exists("s:netrw_machine") |let b:netrw_machine = s:netrw_machine |endif 7440 call netrw#ErrorMsg(s:ERROR,"g:netrw_ssh_cmd<".g:netrw_ssh_cmd."> is not executable!",52)
7409 if exists("s:netrw_browser_active")|let b:netrw_browser_active = s:netrw_browser_active|endif 7441 elseif !exists("b:netrw_curdir")
7410 7442 call netrw#ErrorMsg(s:ERROR,"for some reason b:netrw_curdir doesn't exist!",53)
7411 " call Dret("s:RestoreBufVars") 7443 else
7444 let cmd = s:MakeSshCmd(g:netrw_ssh_cmd." USEPORT HOSTNAME")
7445 let remotedir= substitute(b:netrw_curdir,'^.*//[^/]\+/\(.*\)$','\1','')
7446 if remotedir != ""
7447 let cmd= cmd.' cd '.shellescape(remotedir).";"
7448 else
7449 let cmd= cmd.' '
7450 endif
7451 let cmd= cmd.a:cmd
7452 " call Decho("call system(".cmd.")")
7453 let ret= system(cmd)
7454 endif
7455 " call Dret("s:RemoteSystem ".ret)
7456 return ret
7412 endfun 7457 endfun
7413 7458
7414 " --------------------------------------------------------------------- 7459 " ---------------------------------------------------------------------
7415 " s:RestoreWinVars: (used by Explore() and NetrwSplit()) {{{2 7460 " s:RestoreWinVars: (used by Explore() and NetrwSplit()) {{{2
7416 fun! s:RestoreWinVars() 7461 fun! s:RestoreWinVars()
7584 " call Dret("s:Strlen ".ret) 7629 " call Dret("s:Strlen ".ret)
7585 return ret 7630 return ret
7586 endfun 7631 endfun
7587 7632
7588 " --------------------------------------------------------------------- 7633 " ---------------------------------------------------------------------
7589 " s:System: using Steve Hall's idea to insure that Windows paths stay {{{2
7590 " acceptable. No effect on Unix paths.
7591 " Examples of use: let result= s:System("rm",path)
7592 " let result= s:System("delete",path)
7593 fun! netrw#System(cmd,path)
7594 echomsg s:System(a:cmd,a:path)
7595 endfun
7596 fun! s:System(cmd,path)
7597 " call Dfunc("s:System(cmd<".a:cmd."> path<".a:path.">)")
7598
7599 let path = a:path
7600 if !g:netrw_cygwin && (has("win32") || has("win95") || has("win64") || has("win16"))
7601 " system call prep
7602 " remove trailing slash (Win95)
7603 let path = substitute(path, '\(\\\|/\)$', '', 'g')
7604 " remove escaped spaces
7605 let path = substitute(path, '\ ', ' ', 'g')
7606 " convert slashes to backslashes
7607 let path = substitute(path, '/', '\', 'g')
7608 if exists("+shellslash")
7609 let sskeep= &shellslash
7610 setlocal noshellslash
7611 exe "let result= ".a:cmd."('".path."')"
7612 let &shellslash = sskeep
7613 else
7614 " call Decho("exe let result= ".a:cmd."('".path."')")
7615 exe "let result= ".a:cmd."('".path."')"
7616 endif
7617 else
7618 " call Decho("exe let result= ".a:cmd."('".path."')")
7619 exe "let result= ".a:cmd."('".path."')"
7620 endif
7621
7622 " call Dret("s:System result<".result.">")
7623 return result
7624 endfun
7625
7626 " ---------------------------------------------------------------------
7627 " s:TreeListMove: {{{2 7634 " s:TreeListMove: {{{2
7628 fun! s:TreeListMove(dir) 7635 fun! s:TreeListMove(dir)
7629 " call Dfunc("s:TreeListMove(dir<".a:dir.">)") 7636 " call Dfunc("s:TreeListMove(dir<".a:dir.">)")
7630 let curline = getline('.') 7637 let curline = getline('.')
7631 let prvline = (line(".") > 1)? getline(line(".")-1) : '' 7638 let prvline = (line(".") > 1)? getline(line(".")-1) : ''
7675 endif 7682 endif
7676 7683
7677 endif 7684 endif
7678 7685
7679 " call Dret("s:TreeListMove") 7686 " call Dret("s:TreeListMove")
7687 endfun
7688
7689 " ---------------------------------------------------------------------
7690 " s:UpdateBuffersMenu: does emenu Buffers.Refresh (but due to locale, the menu item may not be called that) {{{2
7691 " The Buffers.Refresh menu calls s:BMShow(); unfortunately, that means that that function
7692 " can't be called except via emenu. But due to locale, that menu line may not be called
7693 " Buffers.Refresh; hence, s:NetrwBMShow() utilizes a "cheat" to call that function anyway.
7694 fun! s:UpdateBuffersMenu()
7695 " call Dfunc("s:UpdateBuffersMenu()")
7696 if has("gui") && has("menu") && has("gui_running") && &go =~ 'm'
7697 try
7698 silent emenu Buffers.Refresh\ menu
7699 catch /^Vim\%((\a\+)\)\=:E/
7700 let v:errmsg= ""
7701 silent call s:NetrwBMShow()
7702 endtry
7703 endif
7704 " call Dret("s:UpdateBuffersMenu")
7680 endfun 7705 endfun
7681 7706
7682 " --------------------------------------------------------------------- 7707 " ---------------------------------------------------------------------
7683 " s:UseBufWinVars: (used by NetrwBrowse() and LocalBrowseCheck() {{{2 7708 " s:UseBufWinVars: (used by NetrwBrowse() and LocalBrowseCheck() {{{2
7684 " Matching function to BufferWinVars() 7709 " Matching function to BufferWinVars()
7696 if exists("b:netrw_explore_list") && !exists("w:netrw_explore_list") |let w:netrw_explore_list = b:netrw_explore_list |endif 7721 if exists("b:netrw_explore_list") && !exists("w:netrw_explore_list") |let w:netrw_explore_list = b:netrw_explore_list |endif
7697 " call Dret("s:UseBufWinVars") 7722 " call Dret("s:UseBufWinVars")
7698 endfun 7723 endfun
7699 7724
7700 " --------------------------------------------------------------------- 7725 " ---------------------------------------------------------------------
7726 " s:WinPath: {{{2
7727 fun! s:WinPath(path)
7728 " call Dfunc("s:WinPath(path<".a:path.">)")
7729 if !g:netrw_cygwin && (has("win32") || has("win95") || has("win64") || has("win16"))
7730 " remove trailing slash (Win95)
7731 let path = substitute(a:path, '\(\\\|/\)$', '', 'g')
7732 " remove escaped spaces
7733 let path = substitute(path, '\ ', ' ', 'g')
7734 " convert slashes to backslashes
7735 let path = substitute(path, '/', '\', 'g')
7736 else
7737 let path= a:path
7738 endif
7739 " call Dret("s:WinPath <".path.">")
7740 return path
7741 endfun
7742
7743 " ---------------------------------------------------------------------
7701 " Settings Restoration: {{{2 7744 " Settings Restoration: {{{2
7702 let &cpo= s:keepcpo 7745 let &cpo= s:keepcpo
7703 unlet s:keepcpo 7746 unlet s:keepcpo
7704 7747
7705 " ------------------------------------------------------------------------ 7748 " ------------------------------------------------------------------------