To: vim_dev@googlegroups.com Subject: Patch 9.0.0683 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 9.0.0683 Problem: Cannot specify a time for :echowindow. Solution: A count can be used to specify the display time. Add popup_findecho(). Files: runtime/doc/eval.txt, runtime/doc/popup.txt, runtime/doc/builtin.txt, runtime/doc/usr_41.txt, src/eval.c, src/popupwin.c, src/proto/popupwin.pro, src/evalfunc.c, src/ex_cmds.h, src/vim9.h, src/vim9compile.c, src/vim9execute.c, src/vim9cmds.c, src/proto/vim9cmds.pro, src/vim9instr.c, src/proto/vim9instr.pro, src/testdir/test_vim9_disassemble.vim, src/testdir/test_messages.vim, src/testdir/dumps/Test_echowindow_8.dump, src/testdir/dumps/Test_echowindow_9.dump *** ../vim-9.0.0682/runtime/doc/eval.txt 2022-09-17 21:07:52.087993184 +0100 --- runtime/doc/eval.txt 2022-10-07 12:26:56.512246269 +0100 *************** *** 3876,3886 **** when the screen is redrawn. *:echow* *:echowin* *:echowindow* ! :echow[indow] {expr1} .. Like |:echomsg| but when the messages popup window is available the message is displayed there. This means it will show for three seconds and avoid a ! |hit-enter| prompt. The message window is available when Vim was compiled with the +timer and the +popupwin features. --- 3392,3408 ---- when the screen is redrawn. *:echow* *:echowin* *:echowindow* ! :[N]echow[indow] {expr1} .. Like |:echomsg| but when the messages popup window is available the message is displayed there. This means it will show for three seconds and avoid a ! |hit-enter| prompt. If you want to hide it before ! that, press Esc in Normal mode (when it would ! otherwise beep). If it disappears too soon you can ! use `:messages` to see the text. ! When [N] is given then the window will show up for ! this number of seconds. The last `:echowindow` with a ! count matters, it is used once only. The message window is available when Vim was compiled with the +timer and the +popupwin features. *** ../vim-9.0.0682/runtime/doc/popup.txt 2022-06-28 11:21:06.000000000 +0100 --- runtime/doc/popup.txt 2022-10-07 13:26:09.913130845 +0100 *************** *** 347,352 **** --- 347,358 ---- See the example here: |popup_dialog-example| + popup_findecho() *popup_findecho()* + Get the |window-ID| for the popup that shows messages for the + `:echowindow` command. Return zero if there is none. + Mainly useful to hide the popup. + + popup_findinfo() *popup_findinfo()* Get the |window-ID| for the popup info window, as it used by the popup menu. See |complete-popup|. The info popup is *** ../vim-9.0.0682/runtime/doc/builtin.txt 2022-09-29 13:50:04.711222464 +0100 --- runtime/doc/builtin.txt 2022-10-07 13:26:44.753113159 +0100 *************** *** 395,400 **** --- 396,402 ---- popup_dialog({what}, {options}) Number create a popup window used as a dialog popup_filter_menu({id}, {key}) Number filter for a menu popup window popup_filter_yesno({id}, {key}) Number filter for a dialog popup window + popup_findecho() Number get window ID of popup for `:echowin` popup_findinfo() Number get window ID of info popup window popup_findpreview() Number get window ID of preview popup window popup_getoptions({id}) Dict get options of popup window {id} *** ../vim-9.0.0682/runtime/doc/usr_41.txt 2022-09-12 13:38:01.390578399 +0100 --- runtime/doc/usr_41.txt 2022-10-07 13:27:50.993070199 +0100 *************** *** 1288,1293 **** --- 1289,1295 ---- popup_filter_yesno() block until 'y' or 'n' is pressed popup_getoptions() get current options for a popup popup_getpos() get actual position and size of a popup + popup_findecho() get window ID for popup used for `:echowindow` popup_findinfo() get window ID for popup info window popup_findpreview() get window ID for popup preview window popup_list() get list of all popup window IDs *** ../vim-9.0.0682/src/eval.c 2022-10-01 19:43:48.602494034 +0100 --- src/eval.c 2022-10-07 12:53:44.961135481 +0100 *************** *** 6916,6922 **** else if (eap->cmdidx == CMD_echowindow) { #ifdef HAS_MESSAGE_WINDOW ! start_echowindow(); #endif msg_attr(ga.ga_data, echo_attr); #ifdef HAS_MESSAGE_WINDOW --- 6916,6922 ---- else if (eap->cmdidx == CMD_echowindow) { #ifdef HAS_MESSAGE_WINDOW ! start_echowindow(eap->addr_count > 0 ? eap->line2 : 0); #endif msg_attr(ga.ga_data, echo_attr); #ifdef HAS_MESSAGE_WINDOW *** ../vim-9.0.0682/src/popupwin.c 2022-09-26 12:56:49.662896909 +0100 --- src/popupwin.c 2022-10-07 13:29:55.316960929 +0100 *************** *** 32,37 **** --- 32,40 ---- // Window used for ":echowindow" static win_T *message_win = NULL; + // Time used for the next ":echowindow" message in msec. + static int message_win_time = 3000; + // Flag set when a message is added to the message window, timer is started // when the message window is drawn. This might be after pressing Enter at the // hit-enter prompt. *************** *** 4379,4384 **** --- 4382,4397 ---- #endif void + f_popup_findecho(typval_T *argvars UNUSED, typval_T *rettv) + { + #ifdef HAS_MESSAGE_WINDOW + rettv->vval.v_number = message_win == NULL ? 0 : message_win->w_id; + #else + rettv->vval.v_number = 0; + #endif + } + + void f_popup_findinfo(typval_T *argvars UNUSED, typval_T *rettv) { #ifdef FEAT_QUICKFIX *************** *** 4537,4543 **** --- 4550,4560 ---- if (wp == message_win && start_message_win_timer) { if (message_win->w_popup_timer != NULL) + { + message_win->w_popup_timer->tr_interval = message_win_time; timer_start(message_win->w_popup_timer); + message_win_time = 3000; + } start_message_win_timer = FALSE; } } *************** *** 4568,4582 **** /* * Invoked before outputting a message for ":echowindow". */ void ! start_echowindow(void) { in_echowindow = TRUE; save_msg_didout = msg_didout; save_msg_col = msg_col; msg_didout = ew_msg_didout; msg_col = ew_msg_col; } /* --- 4585,4602 ---- /* * Invoked before outputting a message for ":echowindow". + * "time_sec" is the display time, zero means using the default 3 sec. */ void ! start_echowindow(int time_sec) { in_echowindow = TRUE; save_msg_didout = msg_didout; save_msg_col = msg_col; msg_didout = ew_msg_didout; msg_col = ew_msg_col; + if (time_sec != 0) + message_win_time = time_sec * 1000; } /* *** ../vim-9.0.0682/src/proto/popupwin.pro 2022-09-01 16:00:49.730496296 +0100 --- src/proto/popupwin.pro 2022-10-07 13:30:46.844906342 +0100 *************** *** 57,62 **** --- 57,63 ---- int popup_is_popup(win_T *wp); win_T *popup_find_preview_window(void); win_T *popup_find_info_window(void); + void f_popup_findecho(typval_T *argvars, typval_T *rettv); void f_popup_findinfo(typval_T *argvars, typval_T *rettv); void f_popup_findpreview(typval_T *argvars, typval_T *rettv); int popup_create_preview_window(int info); *************** *** 67,73 **** void popup_show_message_win(void); int popup_message_win_visible(void); void popup_hide_message_win(void); ! void start_echowindow(void); void end_echowindow(void); int popup_win_closed(win_T *win); void popup_set_title(win_T *wp); --- 68,74 ---- void popup_show_message_win(void); int popup_message_win_visible(void); void popup_hide_message_win(void); ! void start_echowindow(int time_sec); void end_echowindow(void); int popup_win_closed(win_T *win); void popup_set_title(win_T *wp); *** ../vim-9.0.0682/src/evalfunc.c 2022-10-04 16:23:39.010042185 +0100 --- src/evalfunc.c 2022-10-07 13:30:26.516928467 +0100 *************** *** 2273,2278 **** --- 2273,2280 ---- ret_bool, PROP_FUNC(f_popup_filter_menu)}, {"popup_filter_yesno", 2, 2, 0, arg2_number_string, ret_bool, PROP_FUNC(f_popup_filter_yesno)}, + {"popup_findecho", 0, 0, 0, NULL, + ret_number, PROP_FUNC(f_popup_findecho)}, {"popup_findinfo", 0, 0, 0, NULL, ret_number, PROP_FUNC(f_popup_findinfo)}, {"popup_findpreview", 0, 0, 0, NULL, *** ../vim-9.0.0682/src/ex_cmds.h 2022-09-03 21:35:50.184158219 +0100 --- src/ex_cmds.h 2022-10-07 12:28:38.788095119 +0100 *************** *** 552,559 **** EX_EXTRA|EX_NOTRLCOM|EX_EXPR_ARG|EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK, ADDR_NONE), EXCMD(CMD_echowindow, "echowindow", ex_execute, ! 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|EX_WHOLE, ADDR_NONE), --- 552,559 ---- EX_EXTRA|EX_NOTRLCOM|EX_EXPR_ARG|EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK, ADDR_NONE), EXCMD(CMD_echowindow, "echowindow", ex_execute, ! EX_RANGE|EX_EXTRA|EX_NOTRLCOM|EX_EXPR_ARG|EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK, ! ADDR_OTHER), EXCMD(CMD_else, "else", ex_else, EX_TRLBAR|EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK|EX_WHOLE, ADDR_NONE), *** ../vim-9.0.0682/src/vim9.h 2022-09-30 11:04:47.169344522 +0100 --- src/vim9.h 2022-10-07 13:44:43.363594542 +0100 *************** *** 457,462 **** --- 457,468 ---- int defer_argcount; // number of arguments } deferins_T; + // arguments to ISN_ECHOWINDOW + typedef struct { + int ewin_count; // number of arguments + long ewin_time; // time argument (msec) + } echowin_T; + /* * Instruction */ *************** *** 507,512 **** --- 513,519 ---- getitem_T getitem; debug_T debug; deferins_T defer; + echowin_T echowin; } isn_arg; }; *** ../vim-9.0.0682/src/vim9compile.c 2022-09-30 11:04:47.169344522 +0100 --- src/vim9compile.c 2022-10-07 13:53:37.355167795 +0100 *************** *** 2683,2688 **** --- 2683,2714 ---- } /* + * Get a count before a command. Can only be a number. + * Returns zero if there is no count. + * Returns -1 if there is something wrong. + */ + static long + get_cmd_count(char_u *line, exarg_T *eap) + { + char_u *p; + + // skip over colons and white space + for (p = line; *p == ':' || VIM_ISWHITE(*p); ++p) + ; + if (!isdigit(*p)) + { + // the command must be following + if (p < eap->cmd) + { + emsg(_(e_invalid_range)); + return -1; + } + return 0; + } + return atol((char *)p); + } + + /* * Get the compilation type that should be used for "ufunc". * Keep in sync with INSTRUCTIONS(). */ *************** *** 3309,3324 **** line = compile_defer(p, &cctx); break; case CMD_echo: case CMD_echon: case CMD_echoconsole: case CMD_echoerr: case CMD_echomsg: - #ifdef HAS_MESSAGE_WINDOW - case CMD_echowindow: - #endif case CMD_execute: ! line = compile_mult_expr(p, ea.cmdidx, &cctx); break; case CMD_put: --- 3335,3357 ---- line = compile_defer(p, &cctx); break; + #ifdef HAS_MESSAGE_WINDOW + case CMD_echowindow: + { + long cmd_count = get_cmd_count(line, &ea); + if (cmd_count >= 0) + line = compile_mult_expr(p, ea.cmdidx, + cmd_count, &cctx); + } + break; + #endif case CMD_echo: case CMD_echon: case CMD_echoconsole: case CMD_echoerr: case CMD_echomsg: case CMD_execute: ! line = compile_mult_expr(p, ea.cmdidx, 0, &cctx); break; case CMD_put: *** ../vim-9.0.0682/src/vim9execute.c 2022-10-01 15:32:42.539442245 +0100 --- src/vim9execute.c 2022-10-07 13:56:17.903157135 +0100 *************** *** 3269,3275 **** case ISN_ECHOCONSOLE: case ISN_ECHOERR: { ! int count = iptr->isn_arg.number; garray_T ga; char_u buf[NUMBUFLEN]; char_u *p; --- 3269,3275 ---- case ISN_ECHOCONSOLE: case ISN_ECHOERR: { ! int count; garray_T ga; char_u buf[NUMBUFLEN]; char_u *p; *************** *** 3277,3282 **** --- 3277,3286 ---- int failed = FALSE; int idx; + if (iptr->isn_type == ISN_ECHOWINDOW) + count = iptr->isn_arg.echowin.ewin_count; + else + count = iptr->isn_arg.number; ga_init2(&ga, 1, 80); for (idx = 0; idx < count; ++idx) { *************** *** 3339,3345 **** #ifdef HAS_MESSAGE_WINDOW else if (iptr->isn_type == ISN_ECHOWINDOW) { ! start_echowindow(); msg_attr(ga.ga_data, echo_attr); end_echowindow(); } --- 3343,3350 ---- #ifdef HAS_MESSAGE_WINDOW else if (iptr->isn_type == ISN_ECHOWINDOW) { ! start_echowindow( ! iptr->isn_arg.echowin.ewin_time); msg_attr(ga.ga_data, echo_attr); end_echowindow(); } *************** *** 6094,6101 **** (varnumber_T)(iptr->isn_arg.number)); break; case ISN_ECHOWINDOW: ! smsg("%s%4d ECHOWINDOW %lld", pfx, current, ! (varnumber_T)(iptr->isn_arg.number)); break; case ISN_ECHOCONSOLE: smsg("%s%4d ECHOCONSOLE %lld", pfx, current, --- 6099,6111 ---- (varnumber_T)(iptr->isn_arg.number)); break; case ISN_ECHOWINDOW: ! if (iptr->isn_arg.echowin.ewin_time > 0) ! smsg("%s%4d ECHOWINDOW %d (%ld sec)", pfx, current, ! iptr->isn_arg.echowin.ewin_count, ! iptr->isn_arg.echowin.ewin_time); ! else ! smsg("%s%4d ECHOWINDOW %d", pfx, current, ! iptr->isn_arg.echowin.ewin_count); break; case ISN_ECHOCONSOLE: smsg("%s%4d ECHOCONSOLE %lld", pfx, current, *** ../vim-9.0.0682/src/vim9cmds.c 2022-09-30 11:04:47.169344522 +0100 --- src/vim9cmds.c 2022-10-07 13:47:00.499339378 +0100 *************** *** 1971,1980 **** * compile "echomsg expr" * compile "echoerr expr" * compile "echoconsole expr" * compile "execute expr" */ char_u * ! compile_mult_expr(char_u *arg, int cmdidx, cctx_T *cctx) { char_u *p = arg; char_u *prev = arg; --- 1971,1981 ---- * compile "echomsg expr" * compile "echoerr expr" * compile "echoconsole expr" + * compile "echowindow expr" - may have cmd_count set * compile "execute expr" */ char_u * ! compile_mult_expr(char_u *arg, int cmdidx, long cmd_count, cctx_T *cctx) { char_u *p = arg; char_u *prev = arg; *************** *** 1982,1987 **** --- 1983,1989 ---- int count = 0; int start_ctx_lnum = cctx->ctx_lnum; type_T *type; + int r = OK; for (;;) { *************** *** 2015,2037 **** cctx->ctx_lnum = start_ctx_lnum; if (cmdidx == CMD_echo || cmdidx == CMD_echon) ! generate_ECHO(cctx, cmdidx == CMD_echo, count); else if (cmdidx == CMD_execute) ! generate_MULT_EXPR(cctx, ISN_EXECUTE, count); else if (cmdidx == CMD_echomsg) ! generate_MULT_EXPR(cctx, ISN_ECHOMSG, count); #ifdef HAS_MESSAGE_WINDOW else if (cmdidx == CMD_echowindow) ! generate_MULT_EXPR(cctx, ISN_ECHOWINDOW, count); #endif else if (cmdidx == CMD_echoconsole) ! generate_MULT_EXPR(cctx, ISN_ECHOCONSOLE, count); else ! generate_MULT_EXPR(cctx, ISN_ECHOERR, count); cctx->ctx_lnum = save_lnum; } ! return p; } /* --- 2017,2039 ---- cctx->ctx_lnum = start_ctx_lnum; if (cmdidx == CMD_echo || cmdidx == CMD_echon) ! r = generate_ECHO(cctx, cmdidx == CMD_echo, count); else if (cmdidx == CMD_execute) ! r = generate_MULT_EXPR(cctx, ISN_EXECUTE, count); else if (cmdidx == CMD_echomsg) ! r = generate_MULT_EXPR(cctx, ISN_ECHOMSG, count); #ifdef HAS_MESSAGE_WINDOW else if (cmdidx == CMD_echowindow) ! r = generate_ECHOWINDOW(cctx, count, cmd_count); #endif else if (cmdidx == CMD_echoconsole) ! r = generate_MULT_EXPR(cctx, ISN_ECHOCONSOLE, count); else ! r = generate_MULT_EXPR(cctx, ISN_ECHOERR, count); cctx->ctx_lnum = save_lnum; } ! return r == OK ? p : NULL; } /* *** ../vim-9.0.0682/src/proto/vim9cmds.pro 2022-09-19 15:54:29.543117874 +0100 --- src/proto/vim9cmds.pro 2022-10-07 13:46:20.787413847 +0100 *************** *** 25,31 **** char_u *compile_eval(char_u *arg, cctx_T *cctx); int get_defer_var_idx(cctx_T *cctx); char_u *compile_defer(char_u *arg_start, cctx_T *cctx); ! char_u *compile_mult_expr(char_u *arg, int cmdidx, cctx_T *cctx); char_u *compile_put(char_u *arg, exarg_T *eap, cctx_T *cctx); char_u *compile_exec(char_u *line_arg, exarg_T *eap, cctx_T *cctx); char_u *compile_script(char_u *line, cctx_T *cctx); --- 25,31 ---- char_u *compile_eval(char_u *arg, cctx_T *cctx); int get_defer_var_idx(cctx_T *cctx); char_u *compile_defer(char_u *arg_start, cctx_T *cctx); ! char_u *compile_mult_expr(char_u *arg, int cmdidx, long cmd_count, cctx_T *cctx); char_u *compile_put(char_u *arg, exarg_T *eap, cctx_T *cctx); char_u *compile_exec(char_u *line_arg, exarg_T *eap, cctx_T *cctx); char_u *compile_script(char_u *line, cctx_T *cctx); *** ../vim-9.0.0682/src/vim9instr.c 2022-09-29 19:14:37.675876694 +0100 --- src/vim9instr.c 2022-10-07 13:45:10.611544315 +0100 *************** *** 1879,1885 **** --- 1879,1899 ---- if ((isn = generate_instr_drop(cctx, isn_type, count)) == NULL) return FAIL; isn->isn_arg.number = count; + return OK; + } + /* + * Generate an ISN_ECHOWINDOW instruction + */ + int + generate_ECHOWINDOW(cctx_T *cctx, int count, long time) + { + isn_T *isn; + + if ((isn = generate_instr_drop(cctx, ISN_ECHOWINDOW, count)) == NULL) + return FAIL; + isn->isn_arg.echowin.ewin_count = count; + isn->isn_arg.echowin.ewin_time = time; return OK; } *** ../vim-9.0.0682/src/proto/vim9instr.pro 2022-09-19 15:54:29.543117874 +0100 --- src/proto/vim9instr.pro 2022-10-07 13:45:32.319504120 +0100 *************** *** 60,65 **** --- 60,66 ---- int generate_STRINGMEMBER(cctx_T *cctx, char_u *name, size_t len); int generate_ECHO(cctx_T *cctx, int with_white, int count); int generate_MULT_EXPR(cctx_T *cctx, isntype_T isn_type, int count); + int generate_ECHOWINDOW(cctx_T *cctx, int count, long time); int generate_SOURCE(cctx_T *cctx, int sid); int generate_PUT(cctx_T *cctx, int regname, linenr_T lnum); int generate_EXEC_copy(cctx_T *cctx, isntype_T isntype, char_u *line); *** ../vim-9.0.0682/src/testdir/test_vim9_disassemble.vim 2022-09-19 15:54:29.543117874 +0100 --- src/testdir/test_vim9_disassemble.vim 2022-10-07 14:21:53.813272069 +0100 *************** *** 2367,2372 **** --- 2367,2373 ---- echoerr 'went' .. 'wrong' var local = 'window' echowin 'in' local + :5echowin 'five' enddef def Test_disassemble_echomsg() *************** *** 2389,2394 **** --- 2390,2398 ---- '\d\+ PUSHS "in"\_s*' .. '\d\+ LOAD $0\_s*' .. '\d\+ ECHOWINDOW 2\_s*' .. + ":5echowin 'five'\\_s*" .. + '\d\+ PUSHS "five"\_s*' .. + '\d\+ ECHOWINDOW 1 (5 sec)\_s*' .. '\d\+ RETURN void', res) enddef *** ../vim-9.0.0682/src/testdir/test_messages.vim 2022-09-29 21:37:19.321641591 +0100 --- src/testdir/test_messages.vim 2022-10-07 14:25:04.025846386 +0100 *************** *** 511,516 **** --- 511,520 ---- echo 'two' echo 'three' enddef + + def HideWin() + popup_hide(popup_findecho()) + enddef END call writefile(lines, 'XtestEchowindow', 'D') let buf = RunVimInTerminal('-S XtestEchowindow', #{rows: 8}) *************** *** 536,544 **** call VerifyScreenDump(buf, 'Test_echowindow_7', {}) call term_sendkeys(buf, ":tabnew\") ! call term_sendkeys(buf, ":echowin 'more'\") call VerifyScreenDump(buf, 'Test_echowindow_8', {}) " clean up call StopVimInTerminal(buf) endfunc --- 540,551 ---- call VerifyScreenDump(buf, 'Test_echowindow_7', {}) call term_sendkeys(buf, ":tabnew\") ! call term_sendkeys(buf, ":7echowin 'more'\") call VerifyScreenDump(buf, 'Test_echowindow_8', {}) + call term_sendkeys(buf, ":call HideWin()\") + call VerifyScreenDump(buf, 'Test_echowindow_9', {}) + " clean up call StopVimInTerminal(buf) endfunc *** ../vim-9.0.0682/src/testdir/dumps/Test_echowindow_8.dump 2022-09-26 12:56:49.662896909 +0100 --- src/testdir/dumps/Test_echowindow_8.dump 2022-10-07 14:25:40.046242920 +0100 *************** *** 4,8 **** |═+0#e000002&@74 |l|a|t|e|r| |m|e|s@1|a|g|e| @61 |m|o|r|e| @70 ! |:+0#0000000&|e|c|h|o|w|i|n| |'|m|o|r|e|'| @59 @57|0|,|0|-|1| @8|A|l@1| --- 4,8 ---- |═+0#e000002&@74 |l|a|t|e|r| |m|e|s@1|a|g|e| @61 |m|o|r|e| @70 ! |:+0#0000000&|7|e|c|h|o|w|i|n| |'|m|o|r|e|'| @58 @57|0|,|0|-|1| @8|A|l@1| *** ../vim-9.0.0682/src/testdir/dumps/Test_echowindow_9.dump 2022-10-07 14:28:42.023891375 +0100 --- src/testdir/dumps/Test_echowindow_9.dump 2022-10-07 14:26:24.106693534 +0100 *************** *** 0 **** --- 1,8 ---- + | +8#0000001#e0e0e08|+| |[|N|o| |N|a|m|e|]| | +2#0000000#ffffff0|[|N|o| |N|a|m|e|]| | +1&&@49|X+8#0000001#e0e0e08 + > +0#0000000#ffffff0@74 + |~+0#4040ff13&| @73 + |~| @73 + |~| @73 + |~| @73 + |:+0#0000000&|c|a|l@1| |H|i|d|e|W|i|n|(|)| @59 + @57|0|,|0|-|1| @8|A|l@1| *** ../vim-9.0.0682/src/version.c 2022-10-07 11:20:24.038352636 +0100 --- src/version.c 2022-10-07 14:28:48.267938864 +0100 *************** *** 701,702 **** --- 701,704 ---- { /* Add new patch number below this line */ + /**/ + 683, /**/ -- TALL KNIGHT OF NI: Ni! "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD /// 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 ///