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 -- b...@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    ///

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to vim_dev+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/vim_dev/20221007141156.D4BE71C0592%40moolenaar.net.

Raspunde prin e-mail lui