mirror of
https://github.com/neovim/neovim.git
synced 2025-02-25 18:55:25 -06:00
terminal: Support extra arguments in 'shell'. #4504
Tokenize p_sh if used as default in ex_terminal(). Previously p_sh was
used as the first arg in a list when calling termopen(), this would try
to call an untokenized version of shell, meaning if you had an argument
in 'shell':
set shell=/bin/bash\ --login
the command would fail.
Helped-by: oni-link <knil.ino@gmail.com>
Closes #3999
This commit is contained in:
committed by
Justin M. Keyes
parent
0c1f783164
commit
2ea7bfc627
@@ -12,8 +12,12 @@ static void help(void)
|
||||
puts(" shell-test");
|
||||
puts(" shell-test EXE");
|
||||
puts(" Prints \"ready $ \" to stderr.");
|
||||
puts(" shell-test -t {prompt text}");
|
||||
puts(" Prints \"{prompt text} $ \" to stderr.");
|
||||
puts(" shell-test EXE \"prog args...\"");
|
||||
puts(" Prints \"ready $ prog args...\\n\" to stderr.");
|
||||
puts(" shell-test -t {prompt text} EXE \"prog args...\"");
|
||||
puts(" Prints \"{prompt text} $ progs args...\" to stderr.");
|
||||
puts(" shell-test REP {byte} \"line line line\"");
|
||||
puts(" Prints \"{lnr}: line line line\\n\" to stdout {byte} times.");
|
||||
puts(" I.e. for `shell-test REP ab \"test\"'");
|
||||
@@ -30,7 +34,17 @@ int main(int argc, char **argv)
|
||||
}
|
||||
|
||||
if (argc >= 2) {
|
||||
if (strcmp(argv[1], "EXE") == 0) {
|
||||
if (strcmp(argv[1], "-t") == 0) {
|
||||
if (argc < 3) {
|
||||
fprintf(stderr,"Missing prompt text for -t option\n");
|
||||
return 5;
|
||||
} else {
|
||||
fprintf(stderr, "%s $ ", argv[2]);
|
||||
if (argc >= 5 && (strcmp(argv[3], "EXE") == 0)) {
|
||||
fprintf(stderr, "%s\n", argv[4]);
|
||||
}
|
||||
}
|
||||
} else if (strcmp(argv[1], "EXE") == 0) {
|
||||
fprintf(stderr, "ready $ ");
|
||||
if (argc >= 3) {
|
||||
fprintf(stderr, "%s\n", argv[2]);
|
||||
|
||||
@@ -79,6 +79,30 @@ describe(':terminal (with fake shell)', function()
|
||||
]])
|
||||
end)
|
||||
|
||||
it("with no argument, and 'shell' is set to empty string", function()
|
||||
nvim('set_option', 'shell', '')
|
||||
terminal_with_fake_shell()
|
||||
wait()
|
||||
screen:expect([[
|
||||
^ |
|
||||
~ |
|
||||
~ |
|
||||
E91: 'shell' option is empty |
|
||||
]])
|
||||
end)
|
||||
|
||||
it("with no argument, but 'shell' has arguments, acts like termopen()", function()
|
||||
nvim('set_option', 'shell', nvim_dir..'/shell-test -t jeff')
|
||||
terminal_with_fake_shell()
|
||||
wait()
|
||||
screen:expect([[
|
||||
jeff $ |
|
||||
[Process exited 0] |
|
||||
|
|
||||
-- TERMINAL -- |
|
||||
]])
|
||||
end)
|
||||
|
||||
it('executes a given command through the shell', function()
|
||||
terminal_with_fake_shell('echo hi')
|
||||
wait()
|
||||
@@ -90,6 +114,18 @@ describe(':terminal (with fake shell)', function()
|
||||
]])
|
||||
end)
|
||||
|
||||
it("executes a given command through the shell, when 'shell' has arguments", function()
|
||||
nvim('set_option', 'shell', nvim_dir..'/shell-test -t jeff')
|
||||
terminal_with_fake_shell('echo hi')
|
||||
wait()
|
||||
screen:expect([[
|
||||
jeff $ echo hi |
|
||||
|
|
||||
[Process exited 0] |
|
||||
-- TERMINAL -- |
|
||||
]])
|
||||
end)
|
||||
|
||||
it('allows quotes and slashes', function()
|
||||
terminal_with_fake_shell([[echo 'hello' \ "world"]])
|
||||
wait()
|
||||
|
||||
Reference in New Issue
Block a user