mirror of
https://github.com/vim/vim.git
synced 2025-09-23 03:43:49 -04:00
patch 9.1.0356: MS-Windows: --remote may change working directory
Problem: MS-Windows: --remote may change working directory when 'shellslash' is set Solution: normalize directory separators on MS-Windows fixes: #14549 closes: #14587 Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
@@ -608,7 +608,7 @@ build_drop_cmd(
|
|||||||
|
|
||||||
// Call inputsave() so that a prompt for an encryption key works.
|
// Call inputsave() so that a prompt for an encryption key works.
|
||||||
ga_concat(&ga, (char_u *)
|
ga_concat(&ga, (char_u *)
|
||||||
"<CR>:if exists('*inputsave')|call inputsave()|endif|");
|
"<CR><C-\\><C-N>:if exists('*inputsave')|call inputsave()|endif|");
|
||||||
if (tabs)
|
if (tabs)
|
||||||
ga_concat(&ga, (char_u *)"tab ");
|
ga_concat(&ga, (char_u *)"tab ");
|
||||||
ga_concat(&ga, (char_u *)"drop");
|
ga_concat(&ga, (char_u *)"drop");
|
||||||
@@ -652,7 +652,13 @@ build_drop_cmd(
|
|||||||
// endif
|
// endif
|
||||||
// endif
|
// endif
|
||||||
ga_concat(&ga, (char_u *)":if !exists('+acd')||!&acd|if haslocaldir()|");
|
ga_concat(&ga, (char_u *)":if !exists('+acd')||!&acd|if haslocaldir()|");
|
||||||
|
#ifdef MSWIN
|
||||||
|
// in case :set shellslash is set, need to normalize the directory separators
|
||||||
|
// '/' is not valid in a filename so replacing '/' by '\\' should be safe
|
||||||
|
ga_concat(&ga, (char_u *)"cd -|lcd -|elseif getcwd()->tr('/','\\') ==# '");
|
||||||
|
#else
|
||||||
ga_concat(&ga, (char_u *)"cd -|lcd -|elseif getcwd() ==# '");
|
ga_concat(&ga, (char_u *)"cd -|lcd -|elseif getcwd() ==# '");
|
||||||
|
#endif
|
||||||
ga_concat(&ga, cdp);
|
ga_concat(&ga, cdp);
|
||||||
ga_concat(&ga, (char_u *)"'|cd -|endif|endif<CR>");
|
ga_concat(&ga, (char_u *)"'|cd -|endif|endif<CR>");
|
||||||
vim_free(cdp);
|
vim_free(cdp);
|
||||||
|
@@ -76,4 +76,49 @@ func Test_remote_servername()
|
|||||||
close
|
close
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
func Test_remote_servername_shellslash()
|
||||||
|
" Note this test does not currently run on Windows
|
||||||
|
" because:
|
||||||
|
" 1) we cannot run the gui version of Vim inside a terminal
|
||||||
|
" 2) Running Windows vim.exe inside a terminal would work, but is
|
||||||
|
" disabled because of the limited colors inside the default Windows
|
||||||
|
" console (see CanRunVimInTerminal in term_util.vim)
|
||||||
|
CheckRunVimInTerminal
|
||||||
|
CheckMSWindows
|
||||||
|
|
||||||
|
" That is the file we want the server to open,
|
||||||
|
" despite the wildignore setting
|
||||||
|
call mkdir(expand('~/remote/'), 'pD')
|
||||||
|
call writefile(range(1, 20), expand('~/remote/XTEST.txt'), 'D')
|
||||||
|
" just a dummy file, so that the ':wq' further down is successful
|
||||||
|
call writefile(range(1, 20), 'Xdummy.log', 'D')
|
||||||
|
|
||||||
|
" Run Vim in a terminal and open a terminal window to run Vim in.
|
||||||
|
let lines =<< trim END
|
||||||
|
set shellslash
|
||||||
|
cd ~/remote
|
||||||
|
END
|
||||||
|
call writefile(lines, 'XRemoteEditing1.vim', 'D')
|
||||||
|
let buf = RunVimInTerminal('--servername XVIMTEST -S XRemoteEditing1.vim Xdummy.log', {'rows': 10})
|
||||||
|
call TermWait(buf)
|
||||||
|
|
||||||
|
" wildignore setting should be ignored and the XVIMTEST server should now
|
||||||
|
" open XTEST.txt, if wildignore setting is not ignored, the server
|
||||||
|
" will continue with the Xdummy.log file
|
||||||
|
let buf2 = RunVimInTerminal('--servername XVIMTEST --remote-silent ~/remote/XTEST.txt', {'rows': 5, 'wait_for_ruler': 0})
|
||||||
|
" job should be no-longer running, so we can just close it
|
||||||
|
exe buf2 .. 'bw!'
|
||||||
|
|
||||||
|
call term_sendkeys(buf, ":pwd\<CR>")
|
||||||
|
call WaitForAssert({-> assert_match('remote/$', term_getline(buf, 10))}, 1000)
|
||||||
|
call TermWait(buf)
|
||||||
|
call term_sendkeys(buf, ":q!\<CR>")
|
||||||
|
call TermWait(buf)
|
||||||
|
if term_getstatus(buf) == 'running'
|
||||||
|
call StopVimInTerminal(buf)
|
||||||
|
endif
|
||||||
|
bw!
|
||||||
|
close
|
||||||
|
endfunc
|
||||||
|
|
||||||
" vim: shiftwidth=2 sts=2 expandtab
|
" vim: shiftwidth=2 sts=2 expandtab
|
||||||
|
@@ -704,6 +704,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
356,
|
||||||
/**/
|
/**/
|
||||||
355,
|
355,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user