To: vim_dev@googlegroups.com Subject: Patch 8.2.3817 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 8.2.3817 (after 8.2.3815) Problem: Vim9: Not using NL as command end does not work for :autocmd. Solution: Only ignore NL for commands with an expression argument. Files: src/ex_cmds.h, src/ex_docmd.c, src/testdir/test_usercommands.vim *** ../vim-8.2.3816/src/ex_cmds.h 2021-11-27 11:42:46.346486505 +0000 --- src/ex_cmds.h 2021-12-15 17:38:08.929813122 +0000 *************** *** 57,62 **** --- 57,63 ---- // buffer when curbuf_lock is set #define EX_NONWHITE_OK 0x2000000 // command can be followed by non-white #define EX_KEEPSCRIPT 0x4000000 // keep sctx of where command was invoked + #define EX_EXPR_ARG 0x8000000 // argument is an expression #define EX_FILES (EX_XFILE | EX_EXTRA) // multiple extra files allowed #define EX_FILE1 (EX_FILES | EX_NOSPC) // 1 file, defaults to current file *************** *** 265,271 **** EX_RANGE|EX_WORD1|EX_TRLBAR, ADDR_OTHER), EXCMD(CMD_caddexpr, "caddexpr", ex_cexpr, ! EX_NEEDARG|EX_WORD1|EX_NOTRLCOM, ADDR_NONE), EXCMD(CMD_caddfile, "caddfile", ex_cfile, EX_TRLBAR|EX_FILE1, --- 266,272 ---- EX_RANGE|EX_WORD1|EX_TRLBAR, ADDR_OTHER), EXCMD(CMD_caddexpr, "caddexpr", ex_cexpr, ! EX_NEEDARG|EX_WORD1|EX_NOTRLCOM|EX_EXPR_ARG, ADDR_NONE), EXCMD(CMD_caddfile, "caddfile", ex_cfile, EX_TRLBAR|EX_FILE1, *************** *** 274,280 **** EX_RANGE|EX_COUNT|EX_TRLBAR, ADDR_UNSIGNED), EXCMD(CMD_call, "call", ex_call, ! EX_RANGE|EX_NEEDARG|EX_EXTRA|EX_NOTRLCOM|EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK, ADDR_LINES), EXCMD(CMD_catch, "catch", ex_catch, EX_EXTRA|EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK, --- 275,281 ---- EX_RANGE|EX_COUNT|EX_TRLBAR, ADDR_UNSIGNED), EXCMD(CMD_call, "call", ex_call, ! EX_RANGE|EX_NEEDARG|EX_EXTRA|EX_NOTRLCOM|EX_EXPR_ARG|EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK, ADDR_LINES), EXCMD(CMD_catch, "catch", ex_catch, EX_EXTRA|EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK, *************** *** 307,313 **** EX_TRLBAR|EX_RANGE|EX_WHOLEFOLD|EX_EXTRA|EX_CMDWIN|EX_LOCK_OK|EX_MODIFY, ADDR_LINES), EXCMD(CMD_cexpr, "cexpr", ex_cexpr, ! EX_NEEDARG|EX_WORD1|EX_NOTRLCOM|EX_BANG, ADDR_NONE), EXCMD(CMD_cfile, "cfile", ex_cfile, EX_TRLBAR|EX_FILE1|EX_BANG, --- 308,314 ---- EX_TRLBAR|EX_RANGE|EX_WHOLEFOLD|EX_EXTRA|EX_CMDWIN|EX_LOCK_OK|EX_MODIFY, ADDR_LINES), EXCMD(CMD_cexpr, "cexpr", ex_cexpr, ! EX_NEEDARG|EX_WORD1|EX_NOTRLCOM|EX_EXPR_ARG|EX_BANG, ADDR_NONE), EXCMD(CMD_cfile, "cfile", ex_cfile, EX_TRLBAR|EX_FILE1|EX_BANG, *************** *** 325,331 **** EX_RANGE|EX_WORD1|EX_TRLBAR, ADDR_OTHER), EXCMD(CMD_cgetexpr, "cgetexpr", ex_cexpr, ! EX_NEEDARG|EX_WORD1|EX_NOTRLCOM, ADDR_NONE), EXCMD(CMD_chdir, "chdir", ex_cd, EX_BANG|EX_FILE1|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK, --- 326,332 ---- EX_RANGE|EX_WORD1|EX_TRLBAR, ADDR_OTHER), EXCMD(CMD_cgetexpr, "cgetexpr", ex_cexpr, ! EX_NEEDARG|EX_WORD1|EX_NOTRLCOM|EX_EXPR_ARG, ADDR_NONE), EXCMD(CMD_chdir, "chdir", ex_cd, EX_BANG|EX_FILE1|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK, *************** *** 409,415 **** EX_NEEDARG|EX_EXTRA|EX_NOTRLCOM|EX_CMDWIN|EX_LOCK_OK, ADDR_NONE), EXCMD(CMD_const, "const", ex_let, ! EX_EXTRA|EX_BANG|EX_NOTRLCOM|EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK, ADDR_NONE), EXCMD(CMD_copen, "copen", ex_copen, EX_RANGE|EX_COUNT|EX_TRLBAR, --- 410,416 ---- EX_NEEDARG|EX_EXTRA|EX_NOTRLCOM|EX_CMDWIN|EX_LOCK_OK, ADDR_NONE), EXCMD(CMD_const, "const", ex_let, ! EX_EXTRA|EX_BANG|EX_NOTRLCOM|EX_EXPR_ARG|EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK, ADDR_NONE), EXCMD(CMD_copen, "copen", ex_copen, EX_RANGE|EX_COUNT|EX_TRLBAR, *************** *** 526,553 **** EX_TRLBAR|EX_EXTRA|EX_NOSPC|EX_CMDWIN|EX_LOCK_OK, ADDR_NONE), EXCMD(CMD_echo, "echo", ex_echo, ! EX_EXTRA|EX_NOTRLCOM|EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK, ADDR_NONE), EXCMD(CMD_echoerr, "echoerr", ex_execute, ! EX_EXTRA|EX_NOTRLCOM|EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK, ADDR_NONE), EXCMD(CMD_echohl, "echohl", ex_echohl, EX_EXTRA|EX_TRLBAR|EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK, ADDR_NONE), EXCMD(CMD_echomsg, "echomsg", ex_execute, ! EX_EXTRA|EX_NOTRLCOM|EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK, ADDR_NONE), EXCMD(CMD_echoconsole, "echoconsole", ex_execute, ! EX_EXTRA|EX_NOTRLCOM|EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK, ADDR_NONE), EXCMD(CMD_echon, "echon", ex_echo, ! EX_EXTRA|EX_NOTRLCOM|EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK, ADDR_NONE), EXCMD(CMD_else, "else", ex_else, EX_TRLBAR|EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK, ADDR_NONE), EXCMD(CMD_elseif, "elseif", ex_else, ! EX_EXTRA|EX_NOTRLCOM|EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK, ADDR_NONE), EXCMD(CMD_emenu, "emenu", ex_emenu, EX_NEEDARG|EX_EXTRA|EX_TRLBAR|EX_NOTRLCOM|EX_RANGE|EX_CMDWIN|EX_LOCK_OK, --- 527,554 ---- EX_TRLBAR|EX_EXTRA|EX_NOSPC|EX_CMDWIN|EX_LOCK_OK, ADDR_NONE), EXCMD(CMD_echo, "echo", ex_echo, ! EX_EXTRA|EX_NOTRLCOM|EX_EXPR_ARG|EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK, ADDR_NONE), EXCMD(CMD_echoerr, "echoerr", ex_execute, ! EX_EXTRA|EX_NOTRLCOM|EX_EXPR_ARG|EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK, ADDR_NONE), EXCMD(CMD_echohl, "echohl", ex_echohl, EX_EXTRA|EX_TRLBAR|EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK, ADDR_NONE), EXCMD(CMD_echomsg, "echomsg", ex_execute, ! EX_EXTRA|EX_NOTRLCOM|EX_EXPR_ARG|EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK, ADDR_NONE), EXCMD(CMD_echoconsole, "echoconsole", ex_execute, ! EX_EXTRA|EX_NOTRLCOM|EX_EXPR_ARG|EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK, ADDR_NONE), EXCMD(CMD_echon, "echon", ex_echo, ! EX_EXTRA|EX_NOTRLCOM|EX_EXPR_ARG|EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK, ADDR_NONE), EXCMD(CMD_else, "else", ex_else, EX_TRLBAR|EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK, ADDR_NONE), EXCMD(CMD_elseif, "elseif", ex_else, ! EX_EXTRA|EX_NOTRLCOM|EX_EXPR_ARG|EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK, ADDR_NONE), EXCMD(CMD_emenu, "emenu", ex_emenu, EX_NEEDARG|EX_EXTRA|EX_TRLBAR|EX_NOTRLCOM|EX_RANGE|EX_CMDWIN|EX_LOCK_OK, *************** *** 586,604 **** EX_EXTRA|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK, ADDR_NONE), EXCMD(CMD_eval, "eval", ex_eval, ! EX_EXTRA|EX_NOTRLCOM|EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK, ADDR_NONE), EXCMD(CMD_ex, "ex", ex_edit, EX_BANG|EX_FILE1|EX_CMDARG|EX_ARGOPT|EX_TRLBAR, ADDR_NONE), EXCMD(CMD_execute, "execute", ex_execute, ! EX_EXTRA|EX_NOTRLCOM|EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK, ADDR_NONE), EXCMD(CMD_exit, "exit", ex_exit, EX_RANGE|EX_WHOLEFOLD|EX_BANG|EX_FILE1|EX_ARGOPT|EX_DFLALL|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK, ADDR_LINES), EXCMD(CMD_export, "export", ex_export, ! EX_EXTRA|EX_NOTRLCOM|EX_CMDWIN|EX_LOCK_OK, ADDR_NONE), EXCMD(CMD_exusage, "exusage", ex_exusage, EX_TRLBAR, --- 587,605 ---- EX_EXTRA|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK, ADDR_NONE), EXCMD(CMD_eval, "eval", ex_eval, ! EX_EXTRA|EX_NOTRLCOM|EX_EXPR_ARG|EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK, ADDR_NONE), EXCMD(CMD_ex, "ex", ex_edit, EX_BANG|EX_FILE1|EX_CMDARG|EX_ARGOPT|EX_TRLBAR, ADDR_NONE), EXCMD(CMD_execute, "execute", ex_execute, ! EX_EXTRA|EX_NOTRLCOM|EX_EXPR_ARG|EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK, ADDR_NONE), EXCMD(CMD_exit, "exit", ex_exit, EX_RANGE|EX_WHOLEFOLD|EX_BANG|EX_FILE1|EX_ARGOPT|EX_DFLALL|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK, ADDR_LINES), EXCMD(CMD_export, "export", ex_export, ! EX_EXTRA|EX_NOTRLCOM|EX_EXPR_ARG|EX_CMDWIN|EX_LOCK_OK, ADDR_NONE), EXCMD(CMD_exusage, "exusage", ex_exusage, EX_TRLBAR, *************** *** 649,655 **** EX_RANGE|EX_BANG|EX_WHOLEFOLD|EX_TRLBAR|EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK, ADDR_LINES), EXCMD(CMD_for, "for", ex_while, ! EX_EXTRA|EX_NOTRLCOM|EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK, ADDR_NONE), EXCMD(CMD_function, "function", ex_function, EX_EXTRA|EX_BANG|EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK, --- 650,656 ---- EX_RANGE|EX_BANG|EX_WHOLEFOLD|EX_TRLBAR|EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK, ADDR_LINES), EXCMD(CMD_for, "for", ex_while, ! EX_EXTRA|EX_NOTRLCOM|EX_EXPR_ARG|EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK, ADDR_NONE), EXCMD(CMD_function, "function", ex_function, EX_EXTRA|EX_BANG|EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK, *************** *** 709,715 **** EX_EXTRA|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK, ADDR_NONE), EXCMD(CMD_if, "if", ex_if, ! EX_EXTRA|EX_NOTRLCOM|EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK, ADDR_NONE), EXCMD(CMD_ijump, "ijump", ex_findpat, EX_BANG|EX_RANGE|EX_DFLALL|EX_WHOLEFOLD|EX_EXTRA, --- 710,716 ---- EX_EXTRA|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK, ADDR_NONE), EXCMD(CMD_if, "if", ex_if, ! EX_EXTRA|EX_NOTRLCOM|EX_EXPR_ARG|EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK, ADDR_NONE), EXCMD(CMD_ijump, "ijump", ex_findpat, EX_BANG|EX_RANGE|EX_DFLALL|EX_WHOLEFOLD|EX_EXTRA, *************** *** 799,805 **** EX_EXTRA|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK, ADDR_NONE), EXCMD(CMD_laddexpr, "laddexpr", ex_cexpr, ! EX_NEEDARG|EX_WORD1|EX_NOTRLCOM, ADDR_NONE), EXCMD(CMD_laddbuffer, "laddbuffer", ex_cbuffer, EX_RANGE|EX_WORD1|EX_TRLBAR, --- 800,806 ---- EX_EXTRA|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK, ADDR_NONE), EXCMD(CMD_laddexpr, "laddexpr", ex_cexpr, ! EX_NEEDARG|EX_WORD1|EX_NOTRLCOM|EX_EXPR_ARG, ADDR_NONE), EXCMD(CMD_laddbuffer, "laddbuffer", ex_cbuffer, EX_RANGE|EX_WORD1|EX_TRLBAR, *************** *** 847,856 **** EX_NEEDARG|EX_EXTRA|EX_NOTRLCOM, ADDR_NONE), EXCMD(CMD_let, "let", ex_let, ! EX_EXTRA|EX_NOTRLCOM|EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK, ADDR_NONE), EXCMD(CMD_lexpr, "lexpr", ex_cexpr, ! EX_NEEDARG|EX_WORD1|EX_NOTRLCOM|EX_BANG, ADDR_NONE), EXCMD(CMD_legacy, "legacy", ex_wrongmodifier, EX_NEEDARG|EX_EXTRA|EX_NOTRLCOM|EX_CMDWIN|EX_LOCK_OK, --- 848,857 ---- EX_NEEDARG|EX_EXTRA|EX_NOTRLCOM, ADDR_NONE), EXCMD(CMD_let, "let", ex_let, ! EX_EXTRA|EX_NOTRLCOM|EX_EXPR_ARG|EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK, ADDR_NONE), EXCMD(CMD_lexpr, "lexpr", ex_cexpr, ! EX_NEEDARG|EX_WORD1|EX_NOTRLCOM|EX_EXPR_ARG|EX_BANG, ADDR_NONE), EXCMD(CMD_legacy, "legacy", ex_wrongmodifier, EX_NEEDARG|EX_EXTRA|EX_NOTRLCOM|EX_CMDWIN|EX_LOCK_OK, *************** *** 871,877 **** EX_RANGE|EX_WORD1|EX_TRLBAR, ADDR_OTHER), EXCMD(CMD_lgetexpr, "lgetexpr", ex_cexpr, ! EX_NEEDARG|EX_WORD1|EX_NOTRLCOM, ADDR_NONE), EXCMD(CMD_lgrep, "lgrep", ex_make, EX_RANGE|EX_BANG|EX_NEEDARG|EX_EXTRA|EX_NOTRLCOM|EX_TRLBAR|EX_XFILE, --- 872,878 ---- EX_RANGE|EX_WORD1|EX_TRLBAR, ADDR_OTHER), EXCMD(CMD_lgetexpr, "lgetexpr", ex_cexpr, ! EX_NEEDARG|EX_WORD1|EX_NOTRLCOM|EX_EXPR_ARG, ADDR_NONE), EXCMD(CMD_lgrep, "lgrep", ex_make, EX_RANGE|EX_BANG|EX_NEEDARG|EX_EXTRA|EX_NOTRLCOM|EX_TRLBAR|EX_XFILE, *** ../vim-8.2.3816/src/ex_docmd.c 2021-12-15 15:41:41.085254846 +0000 --- src/ex_docmd.c 2021-12-15 17:36:49.861825651 +0000 *************** *** 2305,2311 **** // versions. if (*p == '\\' && p[1] == '\n') STRMOVE(p, p + 1); ! else if (*p == '\n' && (ea.argt & EX_TRLBAR)) { ea.nextcmd = p + 1; *p = NUL; --- 2305,2311 ---- // versions. if (*p == '\\' && p[1] == '\n') STRMOVE(p, p + 1); ! else if (*p == '\n' && !(ea.argt & EX_EXPR_ARG)) { ea.nextcmd = p + 1; *p = NUL; *** ../vim-8.2.3816/src/testdir/test_usercommands.vim 2021-12-10 21:46:05.035979827 +0000 --- src/testdir/test_usercommands.vim 2021-12-15 17:50:45.561163376 +0000 *************** *** 648,659 **** call CheckScriptFailure(lines, 'E1026:') let lines =<< trim END ! command BarCommand { echo 'hello' | echo 'there' } ! BarCommand END ! call CheckScriptFailure(lines, 'E1231:') endfunc func Test_delcommand_buffer() --- 648,670 ---- call CheckScriptFailure(lines, 'E1026:') let lines =<< trim END ! command HelloThere { echo 'hello' | echo 'there' } ! HelloThere END ! call CheckScriptSuccess(lines) ! delcommand HelloThere ! ! let lines =<< trim END ! command BadCommand { ! echo { ! 'key': 'value', ! } ! } ! BadCommand ! END ! call CheckScriptFailure(lines, 'E1128:') endfunc func Test_delcommand_buffer() *** ../vim-8.2.3816/src/version.c 2021-12-15 16:38:28.914629660 +0000 --- src/version.c 2021-12-15 17:37:03.181824713 +0000 *************** *** 751,752 **** --- 751,754 ---- { /* Add new patch number below this line */ + /**/ + 3817, /**/ -- Change is inevitable, except from a vending machine. /// 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 ///