Patch 7.3.1204
Problem:    Calling gettabwinvar() in 'tabline' cancels Visual mode. (Hirohito
            Higashi)
Solution:   Don't always use goto_tabpage_tp().
Files:      src/window.c, src/proto/window.pro, src/eval.c, src/if_py_both.h


*** ../vim-7.3.1203/src/window.c        2013-06-08 18:19:40.000000000 +0200
--- src/window.c        2013-06-16 14:08:52.000000000 +0200
***************
*** 3774,3780 ****
      /* We would like doing the TabEnter event first, but we don't have a
       * valid current window yet, which may break some commands.
       * This triggers autocommands, thus may make "tp" invalid. */
!     win_enter_ext(tp->tp_curwin, FALSE, TRUE, trigger_enter_autocmds, 
trigger_leave_autocmds);
      prevwin = next_prevwin;
  
      last_status(FALSE);               /* status line may appear or disappear 
*/
--- 3774,3781 ----
      /* We would like doing the TabEnter event first, but we don't have a
       * valid current window yet, which may break some commands.
       * This triggers autocommands, thus may make "tp" invalid. */
!     win_enter_ext(tp->tp_curwin, FALSE, TRUE,
!                             trigger_enter_autocmds, trigger_leave_autocmds);
      prevwin = next_prevwin;
  
      last_status(FALSE);               /* status line may appear or disappear 
*/
***************
*** 6575,6588 ****
   * Set "win" to be the curwin and "tp" to be the current tab page.
   * restore_win() MUST be called to undo.
   * No autocommands will be executed.
   * Returns FAIL if switching to "win" failed.
   */
      int
! switch_win(save_curwin, save_curtab, win, tp)
      win_T     **save_curwin;
      tabpage_T **save_curtab;
      win_T     *win;
      tabpage_T *tp;
  {
  # ifdef FEAT_AUTOCMD
      block_autocmds();
--- 6576,6592 ----
   * Set "win" to be the curwin and "tp" to be the current tab page.
   * restore_win() MUST be called to undo.
   * No autocommands will be executed.
+  * When "no_display" is TRUE the display won't be affected, no redraw is
+  * triggered, another tabpage access is limited.
   * Returns FAIL if switching to "win" failed.
   */
      int
! switch_win(save_curwin, save_curtab, win, tp, no_display)
      win_T     **save_curwin;
      tabpage_T **save_curtab;
      win_T     *win;
      tabpage_T *tp;
+     int               no_display;
  {
  # ifdef FEAT_AUTOCMD
      block_autocmds();
***************
*** 6592,6598 ****
      if (tp != NULL)
      {
        *save_curtab = curtab;
!       goto_tabpage_tp(tp, FALSE, FALSE);
      }
      if (!win_valid(win))
      {
--- 6596,6611 ----
      if (tp != NULL)
      {
        *save_curtab = curtab;
!       if (no_display)
!       {
!           curtab->tp_firstwin = firstwin;
!           curtab->tp_lastwin = lastwin;
!           curtab = tp;
!           firstwin = curtab->tp_firstwin;
!           lastwin = curtab->tp_lastwin;
!       }
!       else
!           goto_tabpage_tp(tp, FALSE, FALSE);
      }
      if (!win_valid(win))
      {
***************
*** 6609,6623 ****
  
  /*
   * Restore current tabpage and window saved by switch_win(), if still valid.
   */
      void
! restore_win(save_curwin, save_curtab)
      win_T     *save_curwin;
      tabpage_T *save_curtab;
  {
  # ifdef FEAT_WINDOWS
      if (save_curtab != NULL && valid_tabpage(save_curtab))
!       goto_tabpage_tp(save_curtab, FALSE, FALSE);
      if (win_valid(save_curwin))
      {
        curwin = save_curwin;
--- 6622,6650 ----
  
  /*
   * Restore current tabpage and window saved by switch_win(), if still valid.
+  * When "no_display" is TRUE the display won't be affected, no redraw is
+  * triggered.
   */
      void
! restore_win(save_curwin, save_curtab, no_display)
      win_T     *save_curwin;
      tabpage_T *save_curtab;
+     int               no_display;
  {
  # ifdef FEAT_WINDOWS
      if (save_curtab != NULL && valid_tabpage(save_curtab))
!     {
!       if (no_display)
!       {
!           curtab->tp_firstwin = firstwin;
!           curtab->tp_lastwin = lastwin;
!           curtab = save_curtab;
!           firstwin = curtab->tp_firstwin;
!           lastwin = curtab->tp_lastwin;
!       }
!       else
!           goto_tabpage_tp(save_curtab, FALSE, FALSE);
!     }
      if (win_valid(save_curwin))
      {
        curwin = save_curwin;
*** ../vim-7.3.1203/src/proto/window.pro        2013-05-17 16:03:53.000000000 
+0200
--- src/proto/window.pro        2013-06-16 13:48:18.000000000 +0200
***************
*** 70,77 ****
  void check_lnums __ARGS((int do_curwin));
  void make_snapshot __ARGS((int idx));
  void restore_snapshot __ARGS((int idx, int close_curwin));
! int switch_win __ARGS((win_T **save_curwin, tabpage_T **save_curtab, win_T 
*win, tabpage_T *tp));
! void restore_win __ARGS((win_T *save_curwin, tabpage_T *save_curtab));
  void switch_buffer __ARGS((buf_T **save_curbuf, buf_T *buf));
  void restore_buffer __ARGS((buf_T *save_curbuf));
  int win_hasvertsplit __ARGS((void));
--- 70,77 ----
  void check_lnums __ARGS((int do_curwin));
  void make_snapshot __ARGS((int idx));
  void restore_snapshot __ARGS((int idx, int close_curwin));
! int switch_win __ARGS((win_T **save_curwin, tabpage_T **save_curtab, win_T 
*win, tabpage_T *tp, int no_display));
! void restore_win __ARGS((win_T *save_curwin, tabpage_T *save_curtab, int 
no_display));
  void switch_buffer __ARGS((buf_T **save_curbuf, buf_T *buf));
  void restore_buffer __ARGS((buf_T *save_curbuf));
  int win_hasvertsplit __ARGS((void));
*** ../vim-7.3.1203/src/eval.c  2013-06-13 21:24:01.000000000 +0200
--- src/eval.c  2013-06-16 14:03:15.000000000 +0200
***************
*** 11952,11958 ****
      {
        /* Set curwin to be our win, temporarily.  Also set the tabpage,
         * otherwise the window is not valid. */
!       switch_win(&oldcurwin, &oldtabpage, win, tp);
  
        if (*varname == '&')    /* window-local-option */
        {
--- 11952,11958 ----
      {
        /* Set curwin to be our win, temporarily.  Also set the tabpage,
         * otherwise the window is not valid. */
!       switch_win(&oldcurwin, &oldtabpage, win, tp, TRUE);
  
        if (*varname == '&')    /* window-local-option */
        {
***************
*** 11972,11978 ****
        }
  
        /* restore previous notion of curwin */
!       restore_win(oldcurwin, oldtabpage);
      }
  
      if (!done && argvars[off + 2].v_type != VAR_UNKNOWN)
--- 11972,11978 ----
        }
  
        /* restore previous notion of curwin */
!       restore_win(oldcurwin, oldtabpage, TRUE);
      }
  
      if (!done && argvars[off + 2].v_type != VAR_UNKNOWN)
***************
*** 16775,16781 ****
      if (win != NULL && varname != NULL && varp != NULL)
      {
  #ifdef FEAT_WINDOWS
!       if (switch_win(&save_curwin, &save_curtab, win, tp) == FAIL)
            return;
  #endif
  
--- 16775,16781 ----
      if (win != NULL && varname != NULL && varp != NULL)
      {
  #ifdef FEAT_WINDOWS
!       if (switch_win(&save_curwin, &save_curtab, win, tp, TRUE) == FAIL)
            return;
  #endif
  
***************
*** 16804,16810 ****
        }
  
  #ifdef FEAT_WINDOWS
!       restore_win(save_curwin, save_curtab);
  #endif
      }
  }
--- 16804,16810 ----
        }
  
  #ifdef FEAT_WINDOWS
!       restore_win(save_curwin, save_curtab, TRUE);
  #endif
      }
  }
*** ../vim-7.3.1203/src/if_py_both.h    2013-06-12 18:13:31.000000000 +0200
--- src/if_py_both.h    2013-06-16 13:54:21.000000000 +0200
***************
*** 2706,2712 ****
      {
        case SREQ_WIN:
            if (switch_win(&save_curwin, &save_curtab, (win_T *)from,
!                                    win_find_tabpage((win_T *)from)) == FAIL)
            {
                if (VimTryEnd())
                    return -1;
--- 2702,2708 ----
      {
        case SREQ_WIN:
            if (switch_win(&save_curwin, &save_curtab, (win_T *)from,
!                             win_find_tabpage((win_T *)from), FALSE) == FAIL)
            {
                if (VimTryEnd())
                    return -1;
***************
*** 2714,2720 ****
                return -1;
            }
            r = set_option_value_err(key, numval, stringval, opt_flags);
!           restore_win(save_curwin, save_curtab);
            if (r == FAIL)
                return -1;
            break;
--- 2710,2716 ----
                return -1;
            }
            r = set_option_value_err(key, numval, stringval, opt_flags);
!           restore_win(save_curwin, save_curtab, FALSE);
            if (r == FAIL)
                return -1;
            break;
*** ../vim-7.3.1203/src/version.c       2013-06-15 23:00:26.000000000 +0200
--- src/version.c       2013-06-16 13:44:37.000000000 +0200
***************
*** 730,731 ****
--- 730,733 ----
  {   /* Add new patch number below this line */
+ /**/
+     1204,
  /**/

-- 
hundred-and-one symptoms of being an internet addict:
224. You set up your own Web page. You set up a Web page for each
     of your kids... and your pets.

 /// 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/groups/opt_out.


Raspunde prin e-mail lui