runtime(netrw): fix regression with x mapping on Cygwin

related: #13687

Co-authored-by: K.Takata <kentkt@csc.jp>
Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
Christian Brabandt
2024-10-30 18:36:20 +01:00
parent aa2ce6f580
commit 9f32069b8c

View File

@ -29,6 +29,7 @@
" 2024 Oct 21 by Vim Project: remove netrwFileHandlers (#15895) " 2024 Oct 21 by Vim Project: remove netrwFileHandlers (#15895)
" 2024 Oct 27 by Vim Project: clean up gx mapping (#15721) " 2024 Oct 27 by Vim Project: clean up gx mapping (#15721)
" 2024 Oct 30 by Vim Project: fix filetype detection for remote files (#15961) " 2024 Oct 30 by Vim Project: fix filetype detection for remote files (#15961)
" 2024 Oct 30 by Vim Project: fix x mapping on cygwin (#13687)
" }}} " }}}
" Former Maintainer: Charles E Campbell " Former Maintainer: Charles E Campbell
" GetLatestVimScripts: 1075 1 :AutoInstall: netrw.vim " GetLatestVimScripts: 1075 1 :AutoInstall: netrw.vim
@ -5270,27 +5271,13 @@ endfun
" given filename; typically this means given their extension. " given filename; typically this means given their extension.
" 0=local, 1=remote " 0=local, 1=remote
fun! netrw#BrowseX(fname,remote) fun! netrw#BrowseX(fname,remote)
let use_ctrlo= 1
" call Dfunc("netrw#BrowseX(fname<".a:fname."> remote=".a:remote.") implements x and gx maps")
if a:remote == 0 && isdirectory(a:fname) if a:remote == 0 && isdirectory(a:fname)
" if its really just a local directory, then do a "gf" instead " if its really just a local directory, then do a "gf" instead
" call Decho("remote≡0 and a:fname<".a:fname."> ".(isdirectory(a:fname)? "is a directory" : "is not a directory"),'~'.expand("<slnum>"))
" call Decho("..appears to be a local directory; using e ".a:fname." instead",'~'.expand("<slnum>"))
exe "e ".a:fname exe "e ".a:fname
" call Dret("netrw#BrowseX")
return
elseif a:remote == 1 && a:fname !~ '^https\=:' && a:fname =~ '/$' elseif a:remote == 1 && a:fname !~ '^https\=:' && a:fname =~ '/$'
" remote directory, not a webpage access, looks like an attempt to do a directory listing " remote directory, not a webpage access, looks like an attempt to do a directory listing
" call Decho("remote≡1 and a:fname<".a:fname.">",'~'.expand("<slnum>"))
" call Decho("..and fname ".((a:fname =~ '^https\=:')? 'matches' : 'does not match').'^https\=:','~'.expand("<slnum>"))
" call Decho("..and fname ".((a:fname =~ '/$')? 'matches' : 'does not match').' /$','~'.expand("<slnum>"))
" call Decho("..appears to be a remote directory listing request; using gf instead",'~'.expand("<slnum>"))
norm! gf norm! gf
" call Dret("netrw#BrowseX")
return
endif endif
" call Decho("not a local file nor a webpage request",'~'.expand("<slnum>"))
if exists("g:netrw_browsex_viewer") && exists("g:netrw_browsex_support_remote") && !g:netrw_browsex_support_remote if exists("g:netrw_browsex_viewer") && exists("g:netrw_browsex_support_remote") && !g:netrw_browsex_support_remote
let remote = a:remote let remote = a:remote
@ -5300,7 +5287,6 @@ fun! netrw#BrowseX(fname,remote)
let ykeep = @@ let ykeep = @@
let screenposn = winsaveview() let screenposn = winsaveview()
" call Decho("saving posn to screenposn<".string(screenposn).">",'~'.expand("<slnum>"))
" need to save and restore aw setting as gx can invoke this function from non-netrw buffers " need to save and restore aw setting as gx can invoke this function from non-netrw buffers
let awkeep = &aw let awkeep = &aw
@ -5311,22 +5297,18 @@ fun! netrw#BrowseX(fname,remote)
if exists("g:Netrw_corehandler") if exists("g:Netrw_corehandler")
if type(g:Netrw_corehandler) == 2 if type(g:Netrw_corehandler) == 2
" g:Netrw_corehandler is a function reference (see :help Funcref) " g:Netrw_corehandler is a function reference (see :help Funcref)
" call Decho("g:Netrw_corehandler is a funcref",'~'.expand("<slnum>"))
call g:Netrw_corehandler(s:NetrwFile(a:fname)) call g:Netrw_corehandler(s:NetrwFile(a:fname))
elseif type(g:Netrw_corehandler) == 3 elseif type(g:Netrw_corehandler) == 3
" g:Netrw_corehandler is a List of function references (see :help Funcref) " g:Netrw_corehandler is a List of function references (see :help Funcref)
" call Decho("g:Netrw_corehandler is a List",'~'.expand("<slnum>"))
for Fncref in g:Netrw_corehandler for Fncref in g:Netrw_corehandler
if type(Fncref) == 2 if type(Fncref) == 2
call Fncref(a:fname) call Fncref(a:fname)
endif endif
endfor endfor
endif endif
" call Decho("restoring posn: screenposn<".string(screenposn).">,'~'.expand("<slnum>"))"
call winrestview(screenposn) call winrestview(screenposn)
let @@= ykeep let @@= ykeep
let &aw= awkeep let &aw= awkeep
" call Dret("netrw#BrowseX : coredump handler invoked")
return return
endif endif
endif endif
@ -5340,46 +5322,35 @@ fun! netrw#BrowseX(fname,remote)
if exten =~ "[\\/]" if exten =~ "[\\/]"
let exten= "" let exten= ""
endif endif
" call Decho("exten<".exten.">",'~'.expand("<slnum>"))
if remote == 1 if remote == 1
" create a local copy " create a local copy
" call Decho("remote: remote=".remote.": create a local copy of <".a:fname.">",'~'.expand("<slnum>"))
setl bh=delete setl bh=delete
call netrw#NetRead(3,a:fname) call netrw#NetRead(3,a:fname)
" attempt to rename tempfile " attempt to rename tempfile
let basename= substitute(a:fname,'^\(.*\)/\(.*\)\.\([^.]*\)$','\2','') let basename= substitute(a:fname,'^\(.*\)/\(.*\)\.\([^.]*\)$','\2','')
let newname = substitute(s:netrw_tmpfile,'^\(.*\)/\(.*\)\.\([^.]*\)$','\1/'.basename.'.\3','') let newname = substitute(s:netrw_tmpfile,'^\(.*\)/\(.*\)\.\([^.]*\)$','\1/'.basename.'.\3','')
" call Decho("basename<".basename.">",'~'.expand("<slnum>"))
" call Decho("newname <".newname.">",'~'.expand("<slnum>"))
if s:netrw_tmpfile != newname && newname != "" if s:netrw_tmpfile != newname && newname != ""
if rename(s:netrw_tmpfile,newname) == 0 if rename(s:netrw_tmpfile,newname) == 0
" renaming succeeded " renaming succeeded
" call Decho("renaming succeeded (tmpfile<".s:netrw_tmpfile."> to <".newname.">)")
let fname= newname let fname= newname
else else
" renaming failed " renaming failed
" call Decho("renaming failed (tmpfile<".s:netrw_tmpfile."> to <".newname.">)")
let fname= s:netrw_tmpfile let fname= s:netrw_tmpfile
endif endif
else else
let fname= s:netrw_tmpfile let fname= s:netrw_tmpfile
endif endif
else else
" call Decho("local: remote=".remote.": handling local copy of <".a:fname.">",'~'.expand("<slnum>"))
let fname= a:fname let fname= a:fname
" special ~ handler for local " special ~ handler for local
if fname =~ '^\~' && expand("$HOME") != "" if fname =~ '^\~' && expand("$HOME") != ""
" call Decho('invoking special ~ handler','~'.expand("<slnum>"))
let fname= s:NetrwFile(substitute(fname,'^\~',expand("$HOME"),'')) let fname= s:NetrwFile(substitute(fname,'^\~',expand("$HOME"),''))
endif endif
endif endif
" call Decho("fname<".fname.">",'~'.expand("<slnum>"))
" call Decho("exten<".exten."> "."netrwFileHandlers#NFH_".exten."():exists=".exists("*netrwFileHandlers#NFH_".exten),'~'.expand("<slnum>"))
" extract any viewing options. Assumes that they're set apart by spaces. " extract any viewing options. Assumes that they're set apart by spaces.
if exists("g:netrw_browsex_viewer") if exists("g:netrw_browsex_viewer")
" call Decho("extract any viewing options from g:netrw_browsex_viewer<".g:netrw_browsex_viewer.">",'~'.expand("<slnum>"))
if g:netrw_browsex_viewer =~ '\s' if g:netrw_browsex_viewer =~ '\s'
let viewer = substitute(g:netrw_browsex_viewer,'\s.*$','','') let viewer = substitute(g:netrw_browsex_viewer,'\s.*$','','')
let viewopt = substitute(g:netrw_browsex_viewer,'^\S\+\s*','','')." " let viewopt = substitute(g:netrw_browsex_viewer,'^\S\+\s*','','')." "
@ -5390,17 +5361,14 @@ fun! netrw#BrowseX(fname,remote)
let viewopt = substitute(g:netrw_browsex_viewer,'^\(\(^\S\+\s\+\)\{'.cnt.'}\S\+\)\(.*\)$','\3','')." " let viewopt = substitute(g:netrw_browsex_viewer,'^\(\(^\S\+\s\+\)\{'.cnt.'}\S\+\)\(.*\)$','\3','')." "
let cnt = cnt + 1 let cnt = cnt + 1
let oviewer = viewer let oviewer = viewer
" call Decho("!exe: viewer<".viewer."> viewopt<".viewopt.">",'~'.expand("<slnum>"))
endwhile endwhile
else else
let viewer = g:netrw_browsex_viewer let viewer = g:netrw_browsex_viewer
let viewopt = "" let viewopt = ""
endif endif
" call Decho("viewer<".viewer."> viewopt<".viewopt.">",'~'.expand("<slnum>"))
endif endif
if exists("g:netrw_browsex_viewer") && executable(viewer) if exists("g:netrw_browsex_viewer") && executable(viewer)
" call Decho("(netrw#BrowseX) g:netrw_browsex_viewer<".g:netrw_browsex_viewer.">",'~'.expand("<slnum>"))
exe 'Launch' viewer viewopt shellescape(fname, 1) exe 'Launch' viewer viewopt shellescape(fname, 1)
else else
" though shellescape(..., 1) is used in Open, it's insufficient " though shellescape(..., 1) is used in Open, it's insufficient
@ -5413,7 +5381,6 @@ fun! netrw#BrowseX(fname,remote)
" Feb 12, 2008: had to de-activate removal of " Feb 12, 2008: had to de-activate removal of
" temporary file because it wasn't getting seen. " temporary file because it wasn't getting seen.
" if remote == 1 && fname != a:fname " if remote == 1 && fname != a:fname
"" call Decho("deleting temporary file<".fname.">",'~'.expand("<slnum>"))
" call s:NetrwDelete(fname) " call s:NetrwDelete(fname)
" endif " endif
@ -5422,16 +5389,11 @@ fun! netrw#BrowseX(fname,remote)
if g:netrw_use_noswf if g:netrw_use_noswf
setl noswf setl noswf
endif endif
if use_ctrlo exe "sil! NetrwKeepj norm! \<c-o>"
exe "sil! NetrwKeepj norm! \<c-o>"
endif
endif endif
" call Decho("restoring posn to screenposn<".string(screenposn).">",'~'.expand("<slnum>"))
call winrestview(screenposn) call winrestview(screenposn)
let @@ = ykeep let @@ = ykeep
let &aw= awkeep let &aw= awkeep
" call Dret("netrw#BrowseX")
endfun endfun
" --------------------------------------------------------------------- " ---------------------------------------------------------------------