diff options
Diffstat (limited to 'source/ap/vim/patches/7.3.456')
-rw-r--r-- | source/ap/vim/patches/7.3.456 | 376 |
1 files changed, 0 insertions, 376 deletions
diff --git a/source/ap/vim/patches/7.3.456 b/source/ap/vim/patches/7.3.456 deleted file mode 100644 index 26fc2a98..00000000 --- a/source/ap/vim/patches/7.3.456 +++ /dev/null @@ -1,376 +0,0 @@ -To: vim_dev@googlegroups.com -Subject: Patch 7.3.456 -Fcc: outbox -From: Bram Moolenaar <Bram@moolenaar.net> -Mime-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit ------------- - -Patch 7.3.456 -Problem: ":tab drop file" has several problems, including moving the - current window and opening a new tab for a file that already has a - window. -Solution: Refactor ":tab drop" handling. (Hirohito Higashi) -Files: src/buffer.c, src/testdir/test62.in, src/testdir/test62.ok - - -*** ../vim-7.3.455/src/buffer.c 2012-02-22 14:58:24.000000000 +0100 ---- src/buffer.c 2012-02-22 19:08:34.000000000 +0100 -*************** -*** 4405,4411 **** - { - int i; - win_T *wp, *wpnext; -! char_u *opened; /* array of flags for which args are open */ - int opened_len; /* length of opened[] */ - int use_firstwin = FALSE; /* use first window for arglist */ - int split_ret = OK; ---- 4405,4416 ---- - { - int i; - win_T *wp, *wpnext; -! char_u *opened; /* Array of weight for which args are open: -! * 0: not opened -! * 1: opened in other tab -! * 2: opened in curtab -! * 3: opened in curtab and curwin -! */ - int opened_len; /* length of opened[] */ - int use_firstwin = FALSE; /* use first window for arglist */ - int split_ret = OK; -*************** -*** 4414,4419 **** ---- 4419,4426 ---- - buf_T *buf; - tabpage_T *tpnext; - int had_tab = cmdmod.tab; -+ win_T *old_curwin, *last_curwin; -+ tabpage_T *old_curtab, *last_curtab; - win_T *new_curwin = NULL; - tabpage_T *new_curtab = NULL; - -*************** -*** 4430,4435 **** ---- 4437,4451 ---- - if (opened == NULL) - return; - -+ /* Autocommands may do anything to the argument list. Make sure it's not -+ * freed while we are working here by "locking" it. We still have to -+ * watch out for its size to be changed. */ -+ alist = curwin->w_alist; -+ ++alist->al_refcount; -+ -+ old_curwin = curwin; -+ old_curtab = curtab; -+ - #ifdef FEAT_GUI - need_mouse_correct = TRUE; - #endif -*************** -*** 4451,4486 **** - wpnext = wp->w_next; - buf = wp->w_buffer; - if (buf->b_ffname == NULL -! || buf->b_nwindows > 1 - #ifdef FEAT_VERTSPLIT - || wp->w_width != Columns - #endif - ) -! i = ARGCOUNT; - else - { - /* check if the buffer in this window is in the arglist */ -! for (i = 0; i < ARGCOUNT; ++i) - { -! if (ARGLIST[i].ae_fnum == buf->b_fnum -! || fullpathcmp(alist_name(&ARGLIST[i]), -! buf->b_ffname, TRUE) & FPC_SAME) - { -! if (i < opened_len) - { -! opened[i] = TRUE; - if (i == 0) - { - new_curwin = wp; - new_curtab = curtab; - } - } -! if (wp->w_alist != curwin->w_alist) - { - /* Use the current argument list for all windows - * containing a file from it. */ - alist_unlink(wp->w_alist); -! wp->w_alist = curwin->w_alist; - ++wp->w_alist->al_refcount; - } - break; ---- 4467,4517 ---- - wpnext = wp->w_next; - buf = wp->w_buffer; - if (buf->b_ffname == NULL -! || (!keep_tabs && buf->b_nwindows > 1) - #ifdef FEAT_VERTSPLIT - || wp->w_width != Columns - #endif - ) -! i = opened_len; - else - { - /* check if the buffer in this window is in the arglist */ -! for (i = 0; i < opened_len; ++i) - { -! if (i < alist->al_ga.ga_len -! && (AARGLIST(alist)[i].ae_fnum == buf->b_fnum -! || fullpathcmp(alist_name(&AARGLIST(alist)[i]), -! buf->b_ffname, TRUE) & FPC_SAME)) - { -! int weight = 1; -! -! if (old_curtab == curtab) -! { -! ++weight; -! if (old_curwin == wp) -! ++weight; -! } -! -! if (weight > (int)opened[i]) - { -! opened[i] = (char_u)weight; - if (i == 0) - { -+ if (new_curwin != NULL) -+ new_curwin->w_arg_idx = opened_len; - new_curwin = wp; - new_curtab = curtab; - } - } -! else if (keep_tabs) -! i = opened_len; -! -! if (wp->w_alist != alist) - { - /* Use the current argument list for all windows - * containing a file from it. */ - alist_unlink(wp->w_alist); -! wp->w_alist = alist; - ++wp->w_alist->al_refcount; - } - break; -*************** -*** 4489,4495 **** - } - wp->w_arg_idx = i; - -! if (i == ARGCOUNT && !keep_tabs) /* close this window */ - { - if (P_HID(buf) || forceit || buf->b_nwindows > 1 - || !bufIsChanged(buf)) ---- 4520,4526 ---- - } - wp->w_arg_idx = i; - -! if (i == opened_len && !keep_tabs)/* close this window */ - { - if (P_HID(buf) || forceit || buf->b_nwindows > 1 - || !bufIsChanged(buf)) -*************** -*** 4511,4517 **** - } - #ifdef FEAT_WINDOWS - /* don't close last window */ -! if (firstwin == lastwin && first_tabpage->tp_next == NULL) - #endif - use_firstwin = TRUE; - #ifdef FEAT_WINDOWS ---- 4542,4549 ---- - } - #ifdef FEAT_WINDOWS - /* don't close last window */ -! if (firstwin == lastwin -! && (first_tabpage->tp_next == NULL || !had_tab)) - #endif - use_firstwin = TRUE; - #ifdef FEAT_WINDOWS -*************** -*** 4545,4564 **** - * Open a window for files in the argument list that don't have one. - * ARGCOUNT may change while doing this, because of autocommands. - */ -! if (count > ARGCOUNT || count <= 0) -! count = ARGCOUNT; -! -! /* Autocommands may do anything to the argument list. Make sure it's not -! * freed while we are working here by "locking" it. We still have to -! * watch out for its size to be changed. */ -! alist = curwin->w_alist; -! ++alist->al_refcount; - - #ifdef FEAT_AUTOCMD - /* Don't execute Win/Buf Enter/Leave autocommands here. */ - ++autocmd_no_enter; - ++autocmd_no_leave; - #endif - win_enter(lastwin, FALSE); - #ifdef FEAT_WINDOWS - /* ":drop all" should re-use an empty window to avoid "--remote-tab" ---- 4577,4592 ---- - * Open a window for files in the argument list that don't have one. - * ARGCOUNT may change while doing this, because of autocommands. - */ -! if (count > opened_len || count <= 0) -! count = opened_len; - - #ifdef FEAT_AUTOCMD - /* Don't execute Win/Buf Enter/Leave autocommands here. */ - ++autocmd_no_enter; - ++autocmd_no_leave; - #endif -+ last_curwin = curwin; -+ last_curtab = curtab; - win_enter(lastwin, FALSE); - #ifdef FEAT_WINDOWS - /* ":drop all" should re-use an empty window to avoid "--remote-tab" -*************** -*** 4568,4578 **** - use_firstwin = TRUE; - #endif - -! for (i = 0; i < count && i < alist->al_ga.ga_len && !got_int; ++i) - { - if (alist == &global_alist && i == global_alist.al_ga.ga_len - 1) - arg_had_last = TRUE; -! if (i < opened_len && opened[i]) - { - /* Move the already present window to below the current window */ - if (curwin->w_arg_idx != i) ---- 4596,4606 ---- - use_firstwin = TRUE; - #endif - -! for (i = 0; i < count && i < opened_len && !got_int; ++i) - { - if (alist == &global_alist && i == global_alist.al_ga.ga_len - 1) - arg_had_last = TRUE; -! if (opened[i] > 0) - { - /* Move the already present window to below the current window */ - if (curwin->w_arg_idx != i) -*************** -*** 4581,4587 **** - { - if (wpnext->w_arg_idx == i) - { -! win_move_after(wpnext, curwin); - break; - } - } ---- 4609,4621 ---- - { - if (wpnext->w_arg_idx == i) - { -! if (keep_tabs) -! { -! new_curwin = wpnext; -! new_curtab = curtab; -! } -! else -! win_move_after(wpnext, curwin); - break; - } - } -*************** -*** 4636,4641 **** ---- 4670,4683 ---- - #ifdef FEAT_AUTOCMD - --autocmd_no_enter; - #endif -+ /* restore last referenced tabpage's curwin */ -+ if (last_curtab != new_curtab) -+ { -+ if (valid_tabpage(last_curtab)) -+ goto_tabpage_tp(last_curtab); -+ if (win_valid(last_curwin)) -+ win_enter(last_curwin, FALSE); -+ } - /* to window with first arg */ - if (valid_tabpage(new_curtab)) - goto_tabpage_tp(new_curtab); -*** ../vim-7.3.455/src/testdir/test62.in 2010-08-15 21:57:29.000000000 +0200 ---- src/testdir/test62.in 2012-02-22 18:45:10.000000000 +0100 -*************** -*** 50,55 **** ---- 50,92 ---- - :call append(line('$'), test_status) - :" - :" -+ :" Test for ":tab drop exist-file" to keep current window. -+ :sp test1 -+ :tab drop test1 -+ :let test_status = 'tab drop 1: fail' -+ :if tabpagenr('$') == 1 && winnr('$') == 2 && winnr() == 1 -+ : let test_status = 'tab drop 1: pass' -+ :endif -+ :close -+ :call append(line('$'), test_status) -+ :" -+ :" -+ :" Test for ":tab drop new-file" to keep current window of tabpage 1. -+ :split -+ :tab drop newfile -+ :let test_status = 'tab drop 2: fail' -+ :if tabpagenr('$') == 2 && tabpagewinnr(1, '$') == 2 && tabpagewinnr(1) == 1 -+ : let test_status = 'tab drop 2: pass' -+ :endif -+ :tabclose -+ :q -+ :call append(line('$'), test_status) -+ :" -+ :" -+ :" Test for ":tab drop multi-opend-file" to keep current tabpage and window. -+ :new test1 -+ :tabnew -+ :new test1 -+ :tab drop test1 -+ :let test_status = 'tab drop 3: fail' -+ :if tabpagenr() == 2 && tabpagewinnr(2, '$') == 2 && tabpagewinnr(2) == 1 -+ : let test_status = 'tab drop 3: pass' -+ :endif -+ :tabclose -+ :q -+ :call append(line('$'), test_status) -+ :" -+ :" - :/^Results/,$w! test.out - :qa! - ENDTEST -*** ../vim-7.3.455/src/testdir/test62.ok 2010-08-15 21:57:29.000000000 +0200 ---- src/testdir/test62.ok 2012-02-22 18:45:10.000000000 +0100 -*************** -*** 5,7 **** ---- 5,10 ---- - this is tab page 4 - gettabvar: pass - settabvar: pass -+ tab drop 1: pass -+ tab drop 2: pass -+ tab drop 3: pass -*** ../vim-7.3.455/src/version.c 2012-02-22 18:29:29.000000000 +0100 ---- src/version.c 2012-02-22 19:11:52.000000000 +0100 -*************** -*** 716,717 **** ---- 716,719 ---- - { /* Add new patch number below this line */ -+ /**/ -+ 456, - /**/ - --- -% cat /usr/include/life.h -void life(void); - - /// Bram Moolenaar -- Bram@Moolenaar.net -- 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 /// |