Skip to content

Commit

Permalink
patch 9.1.0356: MS-Windows: --remote may change working directory
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
chrisbra committed Apr 19, 2024
1 parent cee0341 commit 349f5cd
Show file tree
Hide file tree
Showing 3 changed files with 54 additions and 1 deletion.
8 changes: 7 additions & 1 deletion src/clientserver.c
Expand Up @@ -608,7 +608,7 @@ build_drop_cmd(

// Call inputsave() so that a prompt for an encryption key works.
ga_concat(&ga, (char_u *)
"<CR>:if exists('*inputsave')|call inputsave()|endif|");
"<CR><C-\\><C-N>:if exists('*inputsave')|call inputsave()|endif|");
if (tabs)
ga_concat(&ga, (char_u *)"tab ");
ga_concat(&ga, (char_u *)"drop");
Expand Down Expand Up @@ -652,7 +652,13 @@ build_drop_cmd(
// endif
// endif
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() ==# '");
#endif
ga_concat(&ga, cdp);
ga_concat(&ga, (char_u *)"'|cd -|endif|endif<CR>");
vim_free(cdp);
Expand Down
45 changes: 45 additions & 0 deletions src/testdir/test_remote.vim
Expand Up @@ -76,4 +76,49 @@ func Test_remote_servername()
close
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
2 changes: 2 additions & 0 deletions src/version.c
Expand Up @@ -704,6 +704,8 @@ static char *(features[]) =

static int included_patches[] =
{ /* Add new patch number below this line */
/**/
356,
/**/
355,
/**/
Expand Down

0 comments on commit 349f5cd

Please sign in to comment.