mirror of
https://github.com/neovim/neovim.git
synced 2024-12-29 14:41:06 -07:00
131aad953c
closes #7698 Wrapping a command in double-quotes allows cmd.exe to safely dequote the entire command as if the user entered the entire command in an interactive prompt. This reduces the need to escape nested and uneven double quotes. The `/s` flag of cmd.exe makes the behaviour more reliable: :set shellcmdflag=/s\ /c Before this patch, cmd.exe cannot use cygwin echo.exe (as opposed to cmd.exe `echo` builtin) even if it is wrapped in double quotes. Example: :: internal echo > cmd /s /c " echo foo\:bar" " foo\:bar" :: cygwin echo.exe > cmd /s /c " "echo" foo\:bar" " foo:bar
70 lines
2.3 KiB
Lua
70 lines
2.3 KiB
Lua
local helpers = require('test.functional.helpers')(after_each)
|
|
local screen = require('test.functional.ui.screen')
|
|
|
|
local curbufmeths = helpers.curbufmeths
|
|
local curwinmeths = helpers.curwinmeths
|
|
local nvim_dir = helpers.nvim_dir
|
|
local command = helpers.command
|
|
local meths = helpers.meths
|
|
local clear = helpers.clear
|
|
local eq = helpers.eq
|
|
|
|
describe(':edit term://*', function()
|
|
local get_screen = function(columns, lines)
|
|
local scr = screen.new(columns, lines)
|
|
scr:attach({rgb=false})
|
|
return scr
|
|
end
|
|
|
|
before_each(function()
|
|
clear()
|
|
meths.set_option('shell', nvim_dir .. '/shell-test')
|
|
meths.set_option('shellcmdflag', 'EXE')
|
|
end)
|
|
|
|
it('runs TermOpen event', function()
|
|
meths.set_var('termopen_runs', {})
|
|
command('autocmd TermOpen * :call add(g:termopen_runs, expand("<amatch>"))')
|
|
command('edit term://')
|
|
local termopen_runs = meths.get_var('termopen_runs')
|
|
eq(1, #termopen_runs)
|
|
eq(termopen_runs[1], termopen_runs[1]:match('^term://.//%d+:$'))
|
|
end)
|
|
|
|
it("runs TermOpen early enough to set buffer-local 'scrollback'", function()
|
|
local columns, lines = 20, 4
|
|
local scr = get_screen(columns, lines)
|
|
local rep = 'a'
|
|
meths.set_option('shellcmdflag', 'REP ' .. rep)
|
|
command('set shellxquote=') -- win: avoid extra quotes
|
|
local rep_size = rep:byte() -- 'a' => 97
|
|
local sb = 10
|
|
command('autocmd TermOpen * :setlocal scrollback='..tostring(sb)
|
|
..'|call feedkeys("G", "n")')
|
|
command('edit term://foobar')
|
|
|
|
local bufcontents = {}
|
|
local winheight = curwinmeths.get_height()
|
|
local buf_cont_start = rep_size - sb - winheight + 2
|
|
for i = buf_cont_start,(rep_size - 1) do
|
|
bufcontents[#bufcontents + 1] = ('%d: foobar'):format(i)
|
|
end
|
|
bufcontents[#bufcontents + 1] = ''
|
|
bufcontents[#bufcontents + 1] = '[Process exited 0]'
|
|
|
|
local exp_screen = '\n'
|
|
for i = 1,(winheight - 1) do
|
|
local line = bufcontents[#bufcontents - winheight + i]
|
|
exp_screen = (exp_screen
|
|
.. line
|
|
.. (' '):rep(columns - #line)
|
|
.. '|\n')
|
|
end
|
|
exp_screen = exp_screen..'^[Process exited 0] |\n'
|
|
|
|
exp_screen = exp_screen..(' '):rep(columns)..'|\n'
|
|
scr:expect(exp_screen)
|
|
eq(bufcontents, curbufmeths.get_lines(0, -1, true))
|
|
end)
|
|
end)
|