Patch 9.0.0683

8 views
Skip to first unread message

Bram Moolenaar

unread,
Oct 7, 2022, 10:12:04 AM10/7/22
to vim...@googlegroups.com

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\<CR>")
! call term_sendkeys(buf, ":echowin 'more'\<CR>")
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\<CR>")
! call term_sendkeys(buf, ":7echowin 'more'\<CR>")
call VerifyScreenDump(buf, 'Test_echowindow_8', {})

+ call term_sendkeys(buf, ":call HideWin()\<CR>")
+ 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 -- Br...@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 ///

John Marriott

unread,
Oct 7, 2022, 5:38:08 PM10/7/22
to vim...@googlegroups.com

On 08-Oct-2022 01:11, Bram Moolenaar wrote:
> 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
>
>
After this patch mingw64 (gcc 12.2.0) spits out this warning if
HAS_MESSAGE_WINDOW is not defined:
<snip>
gcc -c -I. -Iproto -DWIN32 -DWINVER=0x0603 -D_WIN32_WINNT=0x0603
-DHAVE_PATHDEF -DFEAT_NORMAL -DHAVE_STDINT_H -D__USE_MINGW_ANSI_STDIO
-pipe -march=native -Wall -O3 -fomit-frame-pointer -freg-struct-return
-fpie -fPIE -DFEAT_GUI_MSWIN -DFEAT_CLIPBOARD vim9compile.c -o
gobjnative/vim9compile.o
vim9compile.c:2691:1: warning: 'get_cmd_count' defined but not used
[-Wunused-function]
 2691 | get_cmd_count(char_u *line, exarg_T *eap)
      | ^~~~~~~~~~~~~
</snip>

The attached patch tries to fix it.

Cheers
John
vim9compile.c.9.0.0683.patch

Bram Moolenaar

unread,
Oct 7, 2022, 5:49:01 PM10/7/22
to vim...@googlegroups.com, John Marriott
Thanks. It was intended as a generic function, but only used in one
place right now.

--
"To whoever finds this note -
I have been imprisoned by my father who wishes me to marry
against my will. Please please please please come and rescue me.
I am in the tall tower of Swamp Castle."
SIR LAUNCELOT's eyes light up with holy inspiration.
Reply all
Reply to author
Forward
0 new messages