To: vim_dev@googlegroups.com Subject: Patch 9.0.0845 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 9.0.0845 Problem: Shell command with just space gives strange error. Solution: Skip white space at start of the argument. (Christian Brabandt, Shane-XB-Qian, closes #11515, closes #11495) Files: src/ex_cmds.c, src/testdir/test_cmdline.vim *** ../vim-9.0.0844/src/ex_cmds.c 2022-10-29 21:18:53.875116353 +0100 --- src/ex_cmds.c 2022-11-08 21:13:18.642657415 +0000 *************** *** 899,909 **** } /* ! * Try to find an embedded bang, like in :! ! [args] ! * (:!! is indicated by the 'forceit' variable) */ ins_prevcmd = forceit; ! trailarg = arg; do { len = (int)STRLEN(trailarg) + 1; --- 899,911 ---- } /* ! * Try to find an embedded bang, like in ":! ! [args]" ! * ":!!" is indicated by the 'forceit' variable. */ ins_prevcmd = forceit; ! ! // Skip leading white space to avoid a strange error with some shells. ! trailarg = skipwhite(arg); do { len = (int)STRLEN(trailarg) + 1; *** ../vim-9.0.0844/src/testdir/test_cmdline.vim 2022-10-06 11:38:48.154906022 +0100 --- src/testdir/test_cmdline.vim 2022-11-08 21:38:37.161496604 +0000 *************** *** 1653,1658 **** --- 1653,1705 ---- %bwipe! endfunc + func Test_cmd_bang_args() + new + :.! + call assert_equal(0, v:shell_error) + + " Note that below there is one space char after the '!'. This caused a + " shell error in the past, see https://github.com/vim/vim/issues/11495. + :.! + call assert_equal(0, v:shell_error) + bwipe! + + CheckUnix + :.!pwd + call assert_equal(0, v:shell_error) + :.! pwd + call assert_equal(0, v:shell_error) + + " Note there is one space after 'pwd'. + :.! pwd + call assert_equal(0, v:shell_error) + + " Note there are two spaces after 'pwd'. + :.! pwd + call assert_equal(0, v:shell_error) + :.!ls ~ + call assert_equal(0, v:shell_error) + + " Note there is one space char after '~'. + :.!ls ~ + call assert_equal(0, v:shell_error) + + " Note there are two spaces after '~'. + :.!ls ~ + call assert_equal(0, v:shell_error) + + :.!echo "foo" + call assert_equal(getline('.'), "foo") + :.!echo "foo " + call assert_equal(getline('.'), "foo ") + :.!echo " foo " + call assert_equal(getline('.'), " foo ") + :.!echo " foo " + call assert_equal(getline('.'), " foo ") + + %bwipe! + endfunc + " Test for using ~ for home directory in cmdline completion matches func Test_cmdline_expand_home() call mkdir('Xexpdir', 'R') *** ../vim-9.0.0844/src/version.c 2022-11-07 12:16:46.397761740 +0000 --- src/version.c 2022-11-08 21:11:00.942745891 +0000 *************** *** 697,698 **** --- 697,700 ---- { /* Add new patch number below this line */ + /**/ + 845, /**/ -- If you put seven of the most talented OSS developers in a room and ask them to fix a bug in a spreadsheet program, in one week you'd have 2 new mail readers and a text-based web browser. /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ /// \\\ \\\ sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ /// \\\ help me help AIDS victims -- http://ICCF-Holland.org ///