Bram Moolenaar | 482aaeb | 2005-09-29 18:26:07 +0000 | [diff] [blame] | 1 | " netrwPlugin.vim: Handles file transfer and remote directory listing across a network |
Bram Moolenaar | dd2a3cd | 2007-05-05 17:10:09 +0000 | [diff] [blame] | 2 | " PLUGIN SECTION |
Christian Brabandt | f9ca139 | 2024-02-19 20:37:11 +0100 | [diff] [blame] | 3 | " Maintainer: This runtime file is looking for a new maintainer. |
Konfekt | 3d7e567 | 2024-10-27 22:16:49 +0100 | [diff] [blame] | 4 | " Date: Sep 09, 2021 |
Nir Lichtman | 1e34b95 | 2024-05-08 19:19:34 +0200 | [diff] [blame] | 5 | " Last Change: |
| 6 | " 2024 May 08 by Vim Project: cleanup legacy Win9X checks |
Konfekt | 3d7e567 | 2024-10-27 22:16:49 +0100 | [diff] [blame] | 7 | " 2024 Oct 27 by Vim Project: cleanup gx mapping |
Christian Brabandt | f9ca139 | 2024-02-19 20:37:11 +0100 | [diff] [blame] | 8 | " Former Maintainer: Charles E Campbell |
Bram Moolenaar | 482aaeb | 2005-09-29 18:26:07 +0000 | [diff] [blame] | 9 | " GetLatestVimScripts: 1075 1 :AutoInstall: netrw.vim |
Bram Moolenaar | 89a9c15 | 2021-08-29 21:55:35 +0200 | [diff] [blame] | 10 | " Copyright: Copyright (C) 1999-2021 Charles E. Campbell {{{1 |
Bram Moolenaar | 482aaeb | 2005-09-29 18:26:07 +0000 | [diff] [blame] | 11 | " Permission is hereby granted to use and distribute this code, |
| 12 | " with or without modifications, provided that this copyright |
| 13 | " notice is copied with it. Like anything else that's free, |
| 14 | " netrw.vim, netrwPlugin.vim, and netrwSettings.vim are provided |
| 15 | " *as is* and comes with no warranty of any kind, either |
| 16 | " expressed or implied. By using this plugin, you agree that |
| 17 | " in no event will the copyright holder be liable for any damages |
| 18 | " resulting from the use of this software. |
| 19 | " |
| 20 | " But be doers of the Word, and not only hearers, deluding your own selves {{{1 |
| 21 | " (James 1:22 RSV) |
| 22 | " =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- |
Bram Moolenaar | 482aaeb | 2005-09-29 18:26:07 +0000 | [diff] [blame] | 23 | " Load Once: {{{1 |
Bram Moolenaar | dd2a3cd | 2007-05-05 17:10:09 +0000 | [diff] [blame] | 24 | if &cp || exists("g:loaded_netrwPlugin") |
Bram Moolenaar | 482aaeb | 2005-09-29 18:26:07 +0000 | [diff] [blame] | 25 | finish |
| 26 | endif |
Bram Moolenaar | b7398fe | 2023-05-14 18:50:25 +0100 | [diff] [blame] | 27 | let g:loaded_netrwPlugin = "v173" |
Bram Moolenaar | 5c73622 | 2010-01-06 20:54:52 +0100 | [diff] [blame] | 28 | let s:keepcpo = &cpo |
Bram Moolenaar | 482aaeb | 2005-09-29 18:26:07 +0000 | [diff] [blame] | 29 | set cpo&vim |
Bram Moolenaar | 8d04317 | 2014-01-23 14:24:41 +0100 | [diff] [blame] | 30 | "DechoRemOn |
Bram Moolenaar | 482aaeb | 2005-09-29 18:26:07 +0000 | [diff] [blame] | 31 | |
| 32 | " --------------------------------------------------------------------- |
| 33 | " Public Interface: {{{1 |
| 34 | |
Konfekt | 3d7e567 | 2024-10-27 22:16:49 +0100 | [diff] [blame] | 35 | " Commands Launch/URL {{{2 |
| 36 | " surpress output of command; use bang for GUI applications |
| 37 | |
Enno | 7019788 | 2024-10-28 20:47:25 +0100 | [diff] [blame] | 38 | func s:redir() |
| 39 | " set up redirection (avoids browser messages) |
| 40 | " by default if not set, g:netrw_suppress_gx_mesg is true |
| 41 | if get(g:, 'netrw_suppress_gx_mesg', 1) |
| 42 | if &srr =~# "%s" |
| 43 | return printf(&srr, has("win32") ? "nul" : "/dev/null") |
| 44 | else |
| 45 | return &srr .. (has("win32") ? "nul" : "/dev/null") |
| 46 | endif |
Konfekt | 3d7e567 | 2024-10-27 22:16:49 +0100 | [diff] [blame] | 47 | endif |
Enno | 7019788 | 2024-10-28 20:47:25 +0100 | [diff] [blame] | 48 | return '' |
| 49 | endfunc |
Konfekt | 3d7e567 | 2024-10-27 22:16:49 +0100 | [diff] [blame] | 50 | |
| 51 | if has('unix') |
| 52 | if has('win32unix') |
| 53 | " If cygstart provided, then assume Cygwin and use cygstart --hide; see man cygstart. |
| 54 | if executable('cygstart') |
| 55 | command -complete=shellcmd -nargs=1 -bang Launch |
| 56 | \ exe 'silent ! cygstart --hide' trim(<q-args>) s:redir | redraw! |
| 57 | elseif !empty($MSYSTEM) && executable('start') |
| 58 | " MSYS2/Git Bash comes by default without cygstart; see |
| 59 | " https://www.msys2.org/wiki/How-does-MSYS2-differ-from-Cygwin |
| 60 | " Instead it provides /usr/bin/start script running `cmd.exe //c start` |
| 61 | " Adding "" //b` sets void title, hides cmd window and blocks path conversion |
| 62 | " of /b to \b\ " by MSYS2; see https://www.msys2.org/docs/filesystem-paths/ |
| 63 | command -complete=shellcmd -nargs=1 -bang Launch |
Enno | 7019788 | 2024-10-28 20:47:25 +0100 | [diff] [blame] | 64 | \ exe 'silent !start "" //b' trim(<q-args>) s:redir() | redraw! |
Konfekt | 3d7e567 | 2024-10-27 22:16:49 +0100 | [diff] [blame] | 65 | else |
| 66 | " imitate /usr/bin/start script for other environments and hope for the best |
| 67 | command -complete=shellcmd -nargs=1 -bang Launch |
Enno | 7019788 | 2024-10-28 20:47:25 +0100 | [diff] [blame] | 68 | \ exe 'silent !cmd //c start "" //b' trim(<q-args>) s:redir() | redraw! |
Konfekt | 3d7e567 | 2024-10-27 22:16:49 +0100 | [diff] [blame] | 69 | endif |
| 70 | elseif exists('$WSL_DISTRO_NAME') " use cmd.exe to start GUI apps in WSL |
| 71 | command -complete=shellcmd -nargs=1 -bang Launch execute ':silent !'.. |
| 72 | \ ((<q-args> =~? '\v<\f+\.(exe|com|bat|cmd)>') ? |
| 73 | \ 'cmd.exe /c start "" /b' trim(<q-args>) : |
Enno | 7019788 | 2024-10-28 20:47:25 +0100 | [diff] [blame] | 74 | \ 'nohup ' trim(<q-args>) s:redir() '&') |
Konfekt | 3d7e567 | 2024-10-27 22:16:49 +0100 | [diff] [blame] | 75 | \ | redraw! |
| 76 | else |
| 77 | command -complete=shellcmd -nargs=1 -bang Launch |
Enno | 7019788 | 2024-10-28 20:47:25 +0100 | [diff] [blame] | 78 | \ exe ':silent ! nohup' trim(<q-args>) s:redir() '&' | redraw! |
Konfekt | 3d7e567 | 2024-10-27 22:16:49 +0100 | [diff] [blame] | 79 | endif |
| 80 | elseif has('win32') |
| 81 | command -complete=shellcmd -nargs=1 -bang Launch |
| 82 | \ exe 'silent !'.. (&shell =~? '\<cmd\.exe\>' ? '' : 'cmd.exe /c') |
Enno | 7019788 | 2024-10-28 20:47:25 +0100 | [diff] [blame] | 83 | \ 'start /b ' trim(<q-args>) s:redir() | redraw! |
Konfekt | 3d7e567 | 2024-10-27 22:16:49 +0100 | [diff] [blame] | 84 | endif |
| 85 | if exists(':Launch') == 2 |
| 86 | " Git Bash |
| 87 | if has('win32unix') |
| 88 | " start suffices |
| 89 | let s:cmd = '' |
| 90 | " Windows / WSL |
| 91 | elseif executable('explorer.exe') |
| 92 | let s:cmd = 'explorer.exe' |
| 93 | " Linux / BSD |
| 94 | elseif executable('xdg-open') |
| 95 | let s:cmd = 'xdg-open' |
| 96 | " MacOS |
| 97 | elseif executable('open') |
| 98 | let s:cmd = 'open' |
Konfekt | 3d7e567 | 2024-10-27 22:16:49 +0100 | [diff] [blame] | 99 | endif |
Enno | 7019788 | 2024-10-28 20:47:25 +0100 | [diff] [blame] | 100 | function s:Open(file) |
| 101 | if !exists('s:cmd') && !exists('g:netrw_browsex_viewer') |
Konfekt | 3d7e567 | 2024-10-27 22:16:49 +0100 | [diff] [blame] | 102 | echoerr "No program to open this path found. See :help Open for more information." |
| 103 | else |
Enno | 7019788 | 2024-10-28 20:47:25 +0100 | [diff] [blame] | 104 | exe 'Launch' s:cmd shellescape(a:file, 1) |
Konfekt | 3d7e567 | 2024-10-27 22:16:49 +0100 | [diff] [blame] | 105 | endif |
| 106 | endfunction |
Enno | 7019788 | 2024-10-28 20:47:25 +0100 | [diff] [blame] | 107 | command -complete=file -nargs=1 Open call s:Open(<q-args>) |
Konfekt | 3d7e567 | 2024-10-27 22:16:49 +0100 | [diff] [blame] | 108 | endif |
| 109 | |
| 110 | if !exists('g:netrw_regex_url') |
| 111 | let g:netrw_regex_url = '\%(\%(http\|ftp\|irc\)s\?\|file\)://\S\{-}' |
| 112 | endif |
| 113 | |
| 114 | " " }}} |
Bram Moolenaar | 8d04317 | 2014-01-23 14:24:41 +0100 | [diff] [blame] | 115 | " Local Browsing Autocmds: {{{2 |
Bram Moolenaar | 482aaeb | 2005-09-29 18:26:07 +0000 | [diff] [blame] | 116 | augroup FileExplorer |
| 117 | au! |
Bram Moolenaar | a687837 | 2014-03-22 21:02:50 +0100 | [diff] [blame] | 118 | au BufLeave * if &ft != "netrw"|let w:netrw_prvfile= expand("%:p")|endif |
Bram Moolenaar | 8d04317 | 2014-01-23 14:24:41 +0100 | [diff] [blame] | 119 | au BufEnter * sil call s:LocalBrowse(expand("<amatch>")) |
| 120 | au VimEnter * sil call s:VimEnter(expand("<amatch>")) |
Nir Lichtman | 1e34b95 | 2024-05-08 19:19:34 +0200 | [diff] [blame] | 121 | if has("win32") |
Bram Moolenaar | 8d04317 | 2014-01-23 14:24:41 +0100 | [diff] [blame] | 122 | au BufEnter .* sil call s:LocalBrowse(expand("<amatch>")) |
Bram Moolenaar | dd2a3cd | 2007-05-05 17:10:09 +0000 | [diff] [blame] | 123 | endif |
Bram Moolenaar | 482aaeb | 2005-09-29 18:26:07 +0000 | [diff] [blame] | 124 | augroup END |
| 125 | |
| 126 | " Network Browsing Reading Writing: {{{2 |
| 127 | augroup Network |
| 128 | au! |
Bram Moolenaar | 85850f3 | 2019-07-19 22:05:51 +0200 | [diff] [blame] | 129 | au BufReadCmd file://* call netrw#FileUrlEdit(expand("<amatch>")) |
| 130 | au BufReadCmd ftp://*,rcp://*,scp://*,http://*,https://*,dav://*,davs://*,rsync://*,sftp://* exe "sil doau BufReadPre ".fnameescape(expand("<amatch>"))|call netrw#Nread(2,expand("<amatch>"))|exe "sil doau BufReadPost ".fnameescape(expand("<amatch>")) |
Bram Moolenaar | 8feef4f | 2015-01-07 16:57:10 +0100 | [diff] [blame] | 131 | au FileReadCmd ftp://*,rcp://*,scp://*,http://*,file://*,https://*,dav://*,davs://*,rsync://*,sftp://* exe "sil doau FileReadPre ".fnameescape(expand("<amatch>"))|call netrw#Nread(1,expand("<amatch>"))|exe "sil doau FileReadPost ".fnameescape(expand("<amatch>")) |
| 132 | au BufWriteCmd ftp://*,rcp://*,scp://*,http://*,file://*,dav://*,davs://*,rsync://*,sftp://* exe "sil doau BufWritePre ".fnameescape(expand("<amatch>"))|exe 'Nwrite '.fnameescape(expand("<amatch>"))|exe "sil doau BufWritePost ".fnameescape(expand("<amatch>")) |
| 133 | au FileWriteCmd ftp://*,rcp://*,scp://*,http://*,file://*,dav://*,davs://*,rsync://*,sftp://* exe "sil doau FileWritePre ".fnameescape(expand("<amatch>"))|exe "'[,']".'Nwrite '.fnameescape(expand("<amatch>"))|exe "sil doau FileWritePost ".fnameescape(expand("<amatch>")) |
Bram Moolenaar | 589edb3 | 2019-09-20 14:38:13 +0200 | [diff] [blame] | 134 | try |
Bram Moolenaar | 8feef4f | 2015-01-07 16:57:10 +0100 | [diff] [blame] | 135 | au SourceCmd ftp://*,rcp://*,scp://*,http://*,file://*,https://*,dav://*,davs://*,rsync://*,sftp://* exe 'Nsource '.fnameescape(expand("<amatch>")) |
Bram Moolenaar | 589edb3 | 2019-09-20 14:38:13 +0200 | [diff] [blame] | 136 | catch /^Vim\%((\a\+)\)\=:E216/ |
Bram Moolenaar | 8feef4f | 2015-01-07 16:57:10 +0100 | [diff] [blame] | 137 | au SourcePre ftp://*,rcp://*,scp://*,http://*,file://*,https://*,dav://*,davs://*,rsync://*,sftp://* exe 'Nsource '.fnameescape(expand("<amatch>")) |
Bram Moolenaar | dd2a3cd | 2007-05-05 17:10:09 +0000 | [diff] [blame] | 138 | endtry |
Bram Moolenaar | 482aaeb | 2005-09-29 18:26:07 +0000 | [diff] [blame] | 139 | augroup END |
| 140 | |
| 141 | " Commands: :Nread, :Nwrite, :NetUserPass {{{2 |
Bram Moolenaar | e0fa374 | 2016-02-20 15:47:01 +0100 | [diff] [blame] | 142 | com! -count=1 -nargs=* Nread let s:svpos= winsaveview()<bar>call netrw#NetRead(<count>,<f-args>)<bar>call winrestview(s:svpos) |
| 143 | com! -range=% -nargs=* Nwrite let s:svpos= winsaveview()<bar><line1>,<line2>call netrw#NetWrite(<f-args>)<bar>call winrestview(s:svpos) |
Bram Moolenaar | 482aaeb | 2005-09-29 18:26:07 +0000 | [diff] [blame] | 144 | com! -nargs=* NetUserPass call NetUserPass(<f-args>) |
Bram Moolenaar | e0fa374 | 2016-02-20 15:47:01 +0100 | [diff] [blame] | 145 | com! -nargs=* Nsource let s:svpos= winsaveview()<bar>call netrw#NetSource(<f-args>)<bar>call winrestview(s:svpos) |
Bram Moolenaar | 85850f3 | 2019-07-19 22:05:51 +0200 | [diff] [blame] | 146 | com! -nargs=? Ntree call netrw#SetTreetop(1,<q-args>) |
Bram Moolenaar | 482aaeb | 2005-09-29 18:26:07 +0000 | [diff] [blame] | 147 | |
Bram Moolenaar | 8d04317 | 2014-01-23 14:24:41 +0100 | [diff] [blame] | 148 | " Commands: :Explore, :Sexplore, Hexplore, Vexplore, Lexplore {{{2 |
Bram Moolenaar | dd2a3cd | 2007-05-05 17:10:09 +0000 | [diff] [blame] | 149 | com! -nargs=* -bar -bang -count=0 -complete=dir Explore call netrw#Explore(<count>,0,0+<bang>0,<q-args>) |
| 150 | com! -nargs=* -bar -bang -count=0 -complete=dir Sexplore call netrw#Explore(<count>,1,0+<bang>0,<q-args>) |
| 151 | com! -nargs=* -bar -bang -count=0 -complete=dir Hexplore call netrw#Explore(<count>,1,2+<bang>0,<q-args>) |
| 152 | com! -nargs=* -bar -bang -count=0 -complete=dir Vexplore call netrw#Explore(<count>,1,4+<bang>0,<q-args>) |
| 153 | com! -nargs=* -bar -count=0 -complete=dir Texplore call netrw#Explore(<count>,0,6 ,<q-args>) |
| 154 | com! -nargs=* -bar -bang Nexplore call netrw#Explore(-1,0,0,<q-args>) |
| 155 | com! -nargs=* -bar -bang Pexplore call netrw#Explore(-2,0,0,<q-args>) |
Bram Moolenaar | 8feef4f | 2015-01-07 16:57:10 +0100 | [diff] [blame] | 156 | com! -nargs=* -bar -bang -count=0 -complete=dir Lexplore call netrw#Lexplore(<count>,<bang>0,<q-args>) |
Bram Moolenaar | 482aaeb | 2005-09-29 18:26:07 +0000 | [diff] [blame] | 157 | |
| 158 | " Commands: NetrwSettings {{{2 |
Bram Moolenaar | f233048 | 2008-06-24 20:19:36 +0000 | [diff] [blame] | 159 | com! -nargs=0 NetrwSettings call netrwSettings#NetrwSettings() |
Bram Moolenaar | a687837 | 2014-03-22 21:02:50 +0100 | [diff] [blame] | 160 | com! -bang NetrwClean call netrw#Clean(<bang>0) |
Bram Moolenaar | 482aaeb | 2005-09-29 18:26:07 +0000 | [diff] [blame] | 161 | |
Bram Moolenaar | b8a7b56 | 2006-02-01 21:47:16 +0000 | [diff] [blame] | 162 | " Maps: |
Bram Moolenaar | 8feef4f | 2015-01-07 16:57:10 +0100 | [diff] [blame] | 163 | if !exists("g:netrw_nogx") |
| 164 | if maparg('gx','n') == "" |
| 165 | if !hasmapto('<Plug>NetrwBrowseX') |
| 166 | nmap <unique> gx <Plug>NetrwBrowseX |
| 167 | endif |
Bram Moolenaar | 5ef1c6a | 2019-11-10 22:09:11 +0100 | [diff] [blame] | 168 | nno <silent> <Plug>NetrwBrowseX :call netrw#BrowseX(netrw#GX(),netrw#CheckIfRemote(netrw#GX()))<cr> |
Bram Moolenaar | dd2a3cd | 2007-05-05 17:10:09 +0000 | [diff] [blame] | 169 | endif |
Bram Moolenaar | 89a9c15 | 2021-08-29 21:55:35 +0200 | [diff] [blame] | 170 | if maparg('gx','x') == "" |
Bram Moolenaar | 8feef4f | 2015-01-07 16:57:10 +0100 | [diff] [blame] | 171 | if !hasmapto('<Plug>NetrwBrowseXVis') |
Bram Moolenaar | 89a9c15 | 2021-08-29 21:55:35 +0200 | [diff] [blame] | 172 | xmap <unique> gx <Plug>NetrwBrowseXVis |
Bram Moolenaar | 8feef4f | 2015-01-07 16:57:10 +0100 | [diff] [blame] | 173 | endif |
Bram Moolenaar | 89a9c15 | 2021-08-29 21:55:35 +0200 | [diff] [blame] | 174 | xno <silent> <Plug>NetrwBrowseXVis :<c-u>call netrw#BrowseXVis()<cr> |
Bram Moolenaar | 8feef4f | 2015-01-07 16:57:10 +0100 | [diff] [blame] | 175 | endif |
Bram Moolenaar | b8a7b56 | 2006-02-01 21:47:16 +0000 | [diff] [blame] | 176 | endif |
Bram Moolenaar | a0f849e | 2015-10-30 14:37:44 +0100 | [diff] [blame] | 177 | if exists("g:netrw_usetab") && g:netrw_usetab |
| 178 | if maparg('<c-tab>','n') == "" |
| 179 | nmap <unique> <c-tab> <Plug>NetrwShrink |
| 180 | endif |
| 181 | nno <silent> <Plug>NetrwShrink :call netrw#Shrink()<cr> |
| 182 | endif |
Bram Moolenaar | b8a7b56 | 2006-02-01 21:47:16 +0000 | [diff] [blame] | 183 | |
Bram Moolenaar | 482aaeb | 2005-09-29 18:26:07 +0000 | [diff] [blame] | 184 | " --------------------------------------------------------------------- |
Bram Moolenaar | 8d04317 | 2014-01-23 14:24:41 +0100 | [diff] [blame] | 185 | " LocalBrowse: invokes netrw#LocalBrowseCheck() on directory buffers {{{2 |
Bram Moolenaar | 482aaeb | 2005-09-29 18:26:07 +0000 | [diff] [blame] | 186 | fun! s:LocalBrowse(dirname) |
Bram Moolenaar | 8d04317 | 2014-01-23 14:24:41 +0100 | [diff] [blame] | 187 | " Unfortunate interaction -- only DechoMsg debugging calls can be safely used here. |
| 188 | " Otherwise, the BufEnter event gets triggered when attempts to write to |
Bram Moolenaar | 482aaeb | 2005-09-29 18:26:07 +0000 | [diff] [blame] | 189 | " the DBG buffer are made. |
Bram Moolenaar | 589edb3 | 2019-09-20 14:38:13 +0200 | [diff] [blame] | 190 | |
Bram Moolenaar | e6ae622 | 2013-05-21 21:01:10 +0200 | [diff] [blame] | 191 | if !exists("s:vimentered") |
Bram Moolenaar | 8d04317 | 2014-01-23 14:24:41 +0100 | [diff] [blame] | 192 | " If s:vimentered doesn't exist, then the VimEnter event hasn't fired. It will, |
| 193 | " and so s:VimEnter() will then be calling this routine, but this time with s:vimentered defined. |
| 194 | " call Dfunc("s:LocalBrowse(dirname<".a:dirname.">) (s:vimentered doesn't exist)") |
| 195 | " call Dret("s:LocalBrowse") |
Bram Moolenaar | e6ae622 | 2013-05-21 21:01:10 +0200 | [diff] [blame] | 196 | return |
| 197 | endif |
Bram Moolenaar | 8d04317 | 2014-01-23 14:24:41 +0100 | [diff] [blame] | 198 | |
| 199 | " call Dfunc("s:LocalBrowse(dirname<".a:dirname.">) (s:vimentered=".s:vimentered.")") |
| 200 | |
Bram Moolenaar | dd2a3cd | 2007-05-05 17:10:09 +0000 | [diff] [blame] | 201 | if has("amiga") |
| 202 | " The check against '' is made for the Amiga, where the empty |
| 203 | " string is the current directory and not checking would break |
| 204 | " things such as the help command. |
Bram Moolenaar | 8d04317 | 2014-01-23 14:24:41 +0100 | [diff] [blame] | 205 | " call Decho("(LocalBrowse) dirname<".a:dirname."> (isdirectory, amiga)") |
Bram Moolenaar | dd2a3cd | 2007-05-05 17:10:09 +0000 | [diff] [blame] | 206 | if a:dirname != '' && isdirectory(a:dirname) |
Bram Moolenaar | adc2182 | 2011-04-01 18:03:16 +0200 | [diff] [blame] | 207 | sil! call netrw#LocalBrowseCheck(a:dirname) |
Bram Moolenaar | 8feef4f | 2015-01-07 16:57:10 +0100 | [diff] [blame] | 208 | if exists("w:netrw_bannercnt") && line('.') < w:netrw_bannercnt |
Bram Moolenaar | a687837 | 2014-03-22 21:02:50 +0100 | [diff] [blame] | 209 | exe w:netrw_bannercnt |
| 210 | endif |
Bram Moolenaar | dd2a3cd | 2007-05-05 17:10:09 +0000 | [diff] [blame] | 211 | endif |
Bram Moolenaar | 8d04317 | 2014-01-23 14:24:41 +0100 | [diff] [blame] | 212 | |
Bram Moolenaar | dd2a3cd | 2007-05-05 17:10:09 +0000 | [diff] [blame] | 213 | elseif isdirectory(a:dirname) |
Bram Moolenaar | a687837 | 2014-03-22 21:02:50 +0100 | [diff] [blame] | 214 | " call Decho("(LocalBrowse) dirname<".a:dirname."> ft=".&ft." (isdirectory, not amiga)") |
| 215 | " call Dredir("LocalBrowse ft last set: ","verbose set ft") |
Bram Moolenaar | 89a9c15 | 2021-08-29 21:55:35 +0200 | [diff] [blame] | 216 | " Jul 13, 2021: for whatever reason, preceding the following call with |
| 217 | " a sil! causes an unbalanced if-endif vim error |
| 218 | call netrw#LocalBrowseCheck(a:dirname) |
Bram Moolenaar | 8feef4f | 2015-01-07 16:57:10 +0100 | [diff] [blame] | 219 | if exists("w:netrw_bannercnt") && line('.') < w:netrw_bannercnt |
Bram Moolenaar | a687837 | 2014-03-22 21:02:50 +0100 | [diff] [blame] | 220 | exe w:netrw_bannercnt |
| 221 | endif |
Bram Moolenaar | 8d04317 | 2014-01-23 14:24:41 +0100 | [diff] [blame] | 222 | |
| 223 | else |
| 224 | " not a directory, ignore it |
| 225 | " call Decho("(LocalBrowse) dirname<".a:dirname."> not a directory, ignoring...") |
Bram Moolenaar | 482aaeb | 2005-09-29 18:26:07 +0000 | [diff] [blame] | 226 | endif |
Bram Moolenaar | 8d04317 | 2014-01-23 14:24:41 +0100 | [diff] [blame] | 227 | |
| 228 | " call Dret("s:LocalBrowse") |
Bram Moolenaar | 482aaeb | 2005-09-29 18:26:07 +0000 | [diff] [blame] | 229 | endfun |
| 230 | |
| 231 | " --------------------------------------------------------------------- |
Bram Moolenaar | 8d04317 | 2014-01-23 14:24:41 +0100 | [diff] [blame] | 232 | " s:VimEnter: after all vim startup stuff is done, this function is called. {{{2 |
| 233 | " Its purpose: to look over all windows and run s:LocalBrowse() on |
| 234 | " them, which checks if they're directories and will create a directory |
| 235 | " listing when appropriate. |
| 236 | " It also sets s:vimentered, letting s:LocalBrowse() know that s:VimEnter() |
| 237 | " has already been called. |
Bram Moolenaar | 00a927d | 2010-05-14 23:24:24 +0200 | [diff] [blame] | 238 | fun! s:VimEnter(dirname) |
Bram Moolenaar | 8d04317 | 2014-01-23 14:24:41 +0100 | [diff] [blame] | 239 | " call Dfunc("s:VimEnter(dirname<".a:dirname.">) expand(%)<".expand("%").">") |
Bram Moolenaar | 89a9c15 | 2021-08-29 21:55:35 +0200 | [diff] [blame] | 240 | if has('nvim') || v:version < 802 |
| 241 | " Johann Hรถchtl: reported that the call range... line causes an E488: Trailing characters |
| 242 | " error with neovim. I suspect its because neovim hasn't updated with recent |
| 243 | " vim patches. As is, this code will have problems with popup terminals |
| 244 | " instantiated before the VimEnter event runs. |
| 245 | " Ingo Karkat : E488 also in Vim 8.1.1602 |
Bram Moolenaar | e6ae622 | 2013-05-21 21:01:10 +0200 | [diff] [blame] | 246 | let curwin = winnr() |
| 247 | let s:vimentered = 1 |
Bram Moolenaar | 8d04317 | 2014-01-23 14:24:41 +0100 | [diff] [blame] | 248 | windo call s:LocalBrowse(expand("%:p")) |
Bram Moolenaar | 477db06 | 2010-07-28 18:17:41 +0200 | [diff] [blame] | 249 | exe curwin."wincmd w" |
Bram Moolenaar | 89a9c15 | 2021-08-29 21:55:35 +0200 | [diff] [blame] | 250 | else |
| 251 | " the following complicated expression comes courtesy of lacygoill; largely does the same thing as the windo and |
| 252 | " wincmd which are commented out, but avoids some side effects. Allows popup terminal before VimEnter. |
| 253 | let s:vimentered = 1 |
| 254 | call range(1, winnr('$'))->map({_, v -> win_execute(win_getid(v), 'call expand("%:p")->s:LocalBrowse()')}) |
| 255 | endif |
Bram Moolenaar | 8d04317 | 2014-01-23 14:24:41 +0100 | [diff] [blame] | 256 | " call Dret("s:VimEnter") |
Bram Moolenaar | 00a927d | 2010-05-14 23:24:24 +0200 | [diff] [blame] | 257 | endfun |
| 258 | |
| 259 | " --------------------------------------------------------------------- |
Bram Moolenaar | 482aaeb | 2005-09-29 18:26:07 +0000 | [diff] [blame] | 260 | " NetrwStatusLine: {{{1 |
| 261 | fun! NetrwStatusLine() |
Bram Moolenaar | af48b09 | 2006-03-14 22:51:38 +0000 | [diff] [blame] | 262 | " let g:stlmsg= "Xbufnr=".w:netrw_explore_bufnr." bufnr=".bufnr("%")." Xline#".w:netrw_explore_line." line#".line(".") |
| 263 | if !exists("w:netrw_explore_bufnr") || w:netrw_explore_bufnr != bufnr("%") || !exists("w:netrw_explore_line") || w:netrw_explore_line != line(".") || !exists("w:netrw_explore_list") |
Bram Moolenaar | 482aaeb | 2005-09-29 18:26:07 +0000 | [diff] [blame] | 264 | let &stl= s:netrw_explore_stl |
| 265 | if exists("w:netrw_explore_bufnr")|unlet w:netrw_explore_bufnr|endif |
| 266 | if exists("w:netrw_explore_line")|unlet w:netrw_explore_line|endif |
| 267 | return "" |
| 268 | else |
| 269 | return "Match ".w:netrw_explore_mtchcnt." of ".w:netrw_explore_listlen |
| 270 | endif |
| 271 | endfun |
| 272 | |
| 273 | " ------------------------------------------------------------------------ |
| 274 | " NetUserPass: set username and password for subsequent ftp transfer {{{1 |
| 275 | " Usage: :call NetUserPass() -- will prompt for userid and password |
| 276 | " :call NetUserPass("uid") -- will prompt for password |
| 277 | " :call NetUserPass("uid","password") -- sets global userid and password |
| 278 | fun! NetUserPass(...) |
| 279 | |
| 280 | " get/set userid |
| 281 | if a:0 == 0 |
| 282 | " call Dfunc("NetUserPass(a:0<".a:0.">)") |
| 283 | if !exists("g:netrw_uid") || g:netrw_uid == "" |
| 284 | " via prompt |
| 285 | let g:netrw_uid= input('Enter username: ') |
| 286 | endif |
| 287 | else " from command line |
| 288 | " call Dfunc("NetUserPass(a:1<".a:1.">) {") |
| 289 | let g:netrw_uid= a:1 |
| 290 | endif |
| 291 | |
| 292 | " get password |
| 293 | if a:0 <= 1 " via prompt |
| 294 | " call Decho("a:0=".a:0." case <=1:") |
| 295 | let g:netrw_passwd= inputsecret("Enter Password: ") |
| 296 | else " from command line |
| 297 | " call Decho("a:0=".a:0." case >1: a:2<".a:2.">") |
| 298 | let g:netrw_passwd=a:2 |
| 299 | endif |
| 300 | " call Dret("NetUserPass") |
| 301 | endfun |
| 302 | |
| 303 | " ------------------------------------------------------------------------ |
Bram Moolenaar | 482aaeb | 2005-09-29 18:26:07 +0000 | [diff] [blame] | 304 | " Modelines And Restoration: {{{1 |
| 305 | let &cpo= s:keepcpo |
| 306 | unlet s:keepcpo |
| 307 | " vim:ts=8 fdm=marker |