Patch 8.1.0992
Problem:    A :normal command while executing a register resets the
            reg_executing() result.
Solution:   Save and restore reg_executing. (closes #4066)
Files:      src/ex_docmd.c, src/structs.h, src/testdir/test_functions.vim


*** ../vim-8.1.0991/src/ex_docmd.c      2019-02-17 17:44:36.203875545 +0100
--- src/ex_docmd.c      2019-03-04 11:25:11.856705429 +0100
***************
*** 10260,10265 ****
--- 10260,10266 ----
      sst->save_insertmode = p_im;
      sst->save_finish_op = finish_op;
      sst->save_opcount = opcount;
+     sst->save_reg_executing = reg_executing;
  
      msg_scroll = FALSE;           /* no msg scrolling in Normal mode */
      restart_edit = 0;     /* don't go to Insert mode */
***************
*** 10285,10290 ****
--- 10286,10292 ----
      p_im = sst->save_insertmode;
      finish_op = sst->save_finish_op;
      opcount = sst->save_opcount;
+     reg_executing = sst->save_reg_executing;
      msg_didout |= sst->save_msg_didout;       /* don't reset msg_didout now */
  
      /* Restore the state (needed when called from a function executed for
*** ../vim-8.1.0991/src/structs.h       2019-02-17 17:44:36.219875473 +0100
--- src/structs.h       2019-03-04 11:27:37.271660673 +0100
***************
*** 2625,2643 ****
   */
  struct frame_S
  {
!     char      fr_layout;      /* FR_LEAF, FR_COL or FR_ROW */
      int               fr_width;
!     int               fr_newwidth;    /* new width used in win_equal_rec() */
      int               fr_height;
!     int               fr_newheight;   /* new height used in win_equal_rec() */
!     frame_T   *fr_parent;     /* containing frame or NULL */
!     frame_T   *fr_next;       /* frame right or below in same parent, NULL
!                                  for first */
!     frame_T   *fr_prev;       /* frame left or above in same parent, NULL
!                                  for last */
!     /* fr_child and fr_win are mutually exclusive */
!     frame_T   *fr_child;      /* first contained frame */
!     win_T     *fr_win;        /* window that fills this frame */
  };
  
  #define FR_LEAF       0       /* frame is a leaf */
--- 2625,2643 ----
   */
  struct frame_S
  {
!     char      fr_layout;      // FR_LEAF, FR_COL or FR_ROW
      int               fr_width;
!     int               fr_newwidth;    // new width used in win_equal_rec()
      int               fr_height;
!     int               fr_newheight;   // new height used in win_equal_rec()
!     frame_T   *fr_parent;     // containing frame or NULL
!     frame_T   *fr_next;       // frame right or below in same parent, NULL
!                               // for last
!     frame_T   *fr_prev;       // frame left or above in same parent, NULL
!                               // for first
!     // fr_child and fr_win are mutually exclusive
!     frame_T   *fr_child;      // first contained frame
!     win_T     *fr_win;        // window that fills this frame
  };
  
  #define FR_LEAF       0       /* frame is a leaf */
***************
*** 3527,3532 ****
--- 3527,3533 ----
      int               save_insertmode;
      int               save_finish_op;
      int               save_opcount;
+     int               save_reg_executing;
      tasave_T  tabuf;
  } save_state_T;
  
*** ../vim-8.1.0991/src/testdir/test_functions.vim      2019-02-10 
23:18:49.038187525 +0100
--- src/testdir/test_functions.vim      2019-03-04 11:37:13.379506401 +0100
***************
*** 1137,1142 ****
--- 1137,1151 ----
    call feedkeys("q\"\"=s:save_reg_stat()\<CR>pq", 'xt')
    call assert_equal('":', s:reg_stat)
  
+   " :normal command saves and restores reg_executing
+   let @q = ":call TestFunc()\<CR>:call s:save_reg_stat()\<CR>"
+   func TestFunc() abort
+     normal! ia
+   endfunc
+   call feedkeys("@q", 'xt')
+   call assert_equal(':q', s:reg_stat)
+   delfunc TestFunc
+ 
    bwipe!
    delfunc s:save_reg_stat
    unlet s:reg_stat
*** ../vim-8.1.0991/src/version.c       2019-03-03 14:42:04.782109771 +0100
--- src/version.c       2019-03-04 11:38:16.315045207 +0100
***************
*** 781,782 ****
--- 781,784 ----
  {   /* Add new patch number below this line */
+ /**/
+     992,
  /**/

-- 
hundred-and-one symptoms of being an internet addict:
34. You laugh at people with a 10 Mbit connection.

 /// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\  an exciting new programming language -- http://www.Zimbu.org        ///
 \\\            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 [email protected].
For more options, visit https://groups.google.com/d/optout.

Raspunde prin e-mail lui