From f1181bdb14306e2b3627adcc0658a922d1bec049 Mon Sep 17 00:00:00 2001 From: Karsten Hopp Date: Wed, 22 Apr 2015 18:00:04 +0200 Subject: [PATCH] - patchlevel 709 --- 7.4.709 | 378 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 378 insertions(+) create mode 100644 7.4.709 diff --git a/7.4.709 b/7.4.709 new file mode 100644 index 00000000..9592daf0 --- /dev/null +++ b/7.4.709 @@ -0,0 +1,378 @@ +To: vim_dev@googlegroups.com +Subject: Patch 7.4.709 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.4.709 +Problem: ":tabmove" does not work as documented. +Solution: Make it work consistently. Update documentation and add tests. + (Hirohito Higashi) +Files: src/window.c, runtime/doc/tabpage.txt, src/ex_docmd.c, + src/testdir/test62.in, src/testdir/test62.ok + + +*** ../vim-7.4.708/src/window.c 2015-04-21 15:43:00.338397578 +0200 +--- src/window.c 2015-04-21 18:05:36.180477302 +0200 +*************** +*** 4120,4137 **** + } + + /* +! * Move the current tab page to before tab page "nr". + */ + void + tabpage_move(nr) + int nr; + { +! int n = nr; +! tabpage_T *tp; + + if (first_tabpage->tp_next == NULL) + return; + + /* Remove the current tab page from the list of tab pages. */ + if (curtab == first_tabpage) + first_tabpage = curtab->tp_next; +--- 4120,4146 ---- + } + + /* +! * Move the current tab page to after tab page "nr". + */ + void + tabpage_move(nr) + int nr; + { +! int n = 1; +! tabpage_T *tp, *tp_dst; + + if (first_tabpage->tp_next == NULL) + return; + ++ for (tp = first_tabpage; tp->tp_next != NULL && n < nr; tp = tp->tp_next) ++ ++n; ++ ++ if (tp == curtab || (nr > 0 && tp->tp_next != NULL ++ && tp->tp_next == curtab)) ++ return; ++ ++ tp_dst = tp; ++ + /* Remove the current tab page from the list of tab pages. */ + if (curtab == first_tabpage) + first_tabpage = curtab->tp_next; +*************** +*** 4146,4162 **** + } + + /* Re-insert it at the specified position. */ +! if (n <= 0) + { + curtab->tp_next = first_tabpage; + first_tabpage = curtab; + } + else + { +! for (tp = first_tabpage; tp->tp_next != NULL && n > 1; tp = tp->tp_next) +! --n; +! curtab->tp_next = tp->tp_next; +! tp->tp_next = curtab; + } + + /* Need to redraw the tabline. Tab page contents doesn't change. */ +--- 4155,4169 ---- + } + + /* Re-insert it at the specified position. */ +! if (nr <= 0) + { + curtab->tp_next = first_tabpage; + first_tabpage = curtab; + } + else + { +! curtab->tp_next = tp_dst->tp_next; +! tp_dst->tp_next = curtab; + } + + /* Need to redraw the tabline. Tab page contents doesn't change. */ +*** ../vim-7.4.708/runtime/doc/tabpage.txt 2015-01-07 16:52:53.506792420 +0100 +--- runtime/doc/tabpage.txt 2015-04-21 18:01:53.042846350 +0200 +*************** +*** 202,224 **** + Move the current tab page to after tab page N. Use zero to + make the current tab page the first one. Without N the tab + page is made the last one. > + :-tabmove " move the tab page to the left +! :tabmove " move the tab page to the right +! :.tabmove " as above +! :+tabmove " as above + :0tabmove " move the tab page to the beginning of the tab + " list +! :$tabmove " move the tab page to the end of the tab list +! < + + :tabm[ove] +[N] + :tabm[ove] -[N] + Move the current tab page N places to the right (with +) or to +! the left (with -). + + Note that although it is possible to move a tab behind the N-th one by using +! :Ntabmove, it is impossible to move it by N places by using :+Ntabmove. For +! clarification what +N means in this context see |[range]|. + + + LOOPING OVER TAB PAGES: +--- 202,230 ---- + Move the current tab page to after tab page N. Use zero to + make the current tab page the first one. Without N the tab + page is made the last one. > ++ :.tabmove " do nothing + :-tabmove " move the tab page to the left +! :+tabmove " move the tab page to the right + :0tabmove " move the tab page to the beginning of the tab + " list +! :tabmove 0 " as above +! :tabmove " move the tab page to the last +! :$tabmove " as above +! :tabmove $ " as above + + :tabm[ove] +[N] + :tabm[ove] -[N] + Move the current tab page N places to the right (with +) or to +! the left (with -). > +! :tabmove - " move the tab page to the left +! :tabmove -1 " as above +! :tabmove + " move the tab page to the right +! :tabmove +1 " as above +! + + Note that although it is possible to move a tab behind the N-th one by using +! :Ntabmove. And move it by N places by using :+Ntabmove. For clarification what +! +N means in this context see |[range]|. + + + LOOPING OVER TAB PAGES: +*** ../vim-7.4.708/src/ex_docmd.c 2015-04-13 12:35:50.180593380 +0200 +--- src/ex_docmd.c 2015-04-21 18:01:53.042846350 +0200 +*************** +*** 8145,8151 **** + ex_tabmove(eap) + exarg_T *eap; + { +! int tab_number = 9999; + + if (eap->arg && *eap->arg != NUL) + { +--- 8145,8151 ---- + ex_tabmove(eap) + exarg_T *eap; + { +! int tab_number; + + if (eap->arg && *eap->arg != NUL) + { +*************** +*** 8166,8184 **** + else + p = eap->arg; + +! if (p == skipdigits(p)) + { +! /* No numbers as argument. */ +! eap->errmsg = e_invarg; +! return; + } +- +- tab_number = getdigits(&p); +- if (relative != 0) +- tab_number = tab_number * relative + tabpage_index(curtab) - 1;; + } + else if (eap->addr_count != 0) + tab_number = eap->line2; + + tabpage_move(tab_number); + } +--- 8166,8203 ---- + else + p = eap->arg; + +! if (relative == 0) + { +! if (STRCMP(p, "$") == 0) +! tab_number = LAST_TAB_NR; +! else if (p == skipdigits(p)) +! { +! /* No numbers as argument. */ +! eap->errmsg = e_invarg; +! return; +! } +! else +! tab_number = getdigits(&p); +! } +! else +! { +! if (*p != NUL) +! tab_number = getdigits(&p); +! else +! tab_number = 1; +! tab_number = tab_number * relative + tabpage_index(curtab); +! if (relative == -1) +! --tab_number; + } + } + else if (eap->addr_count != 0) ++ { + tab_number = eap->line2; ++ if (**eap->cmdlinep == '-') ++ --tab_number; ++ } ++ else ++ tab_number = LAST_TAB_NR; + + tabpage_move(tab_number); + } +*** ../vim-7.4.708/src/testdir/test62.in 2015-01-07 15:57:13.145559792 +0100 +--- src/testdir/test62.in 2015-04-21 18:01:15.231247887 +0200 +*************** +*** 96,125 **** + :" + :for i in range(9) | tabnew | endfor + 1gt +! Go=tabpagenr()  + :tabmove 5 +! i=tabpagenr()  + :tabmove -2 +! i=tabpagenr()  + :tabmove +4 +! i=tabpagenr()  + :tabmove +! i=tabpagenr()  + :tabmove -20 +! i=tabpagenr()  + :tabmove +20 +! i=tabpagenr()  + :3tabmove +! i=tabpagenr()  + :7tabmove 5 +! i=tabpagenr()  + :let a='No error caught.' + :try + :tabmove foo + :catch E474 + :let a='E474 caught.' + :endtry +! i=a  + :" + :" Test autocommands + :tabonly! +--- 96,139 ---- + :" + :for i in range(9) | tabnew | endfor + 1gt +! :$put =tabpagenr() + :tabmove 5 +! :$put =tabpagenr() +! :.tabmove +! :$put =tabpagenr() +! :tabmove - +! :$put =tabpagenr() +! :tabmove + +! :$put =tabpagenr() + :tabmove -2 +! :$put =tabpagenr() + :tabmove +4 +! :$put =tabpagenr() + :tabmove +! :$put =tabpagenr() + :tabmove -20 +! :$put =tabpagenr() + :tabmove +20 +! :$put =tabpagenr() +! :0tabmove +! :$put =tabpagenr() +! :$tabmove +! :$put =tabpagenr() +! :tabmove 0 +! :$put =tabpagenr() +! :tabmove $ +! :$put =tabpagenr() + :3tabmove +! :$put =tabpagenr() + :7tabmove 5 +! :$put =tabpagenr() + :let a='No error caught.' + :try + :tabmove foo + :catch E474 + :let a='E474 caught.' + :endtry +! :$put =a + :" + :" Test autocommands + :tabonly! +*** ../vim-7.4.708/src/testdir/test62.ok 2013-07-14 12:16:20.000000000 +0200 +--- src/testdir/test62.ok 2015-04-21 18:01:15.231247887 +0200 +*************** +*** 9,22 **** + tab drop 2: pass + tab drop 3: pass + 1 +! 6 + 4 +! 8 + 10 + 1 + 10 + 4 +! 6 + E474 caught. + === tab split === + WinLeave +--- 9,29 ---- + tab drop 2: pass + tab drop 3: pass + 1 +! 5 +! 5 + 4 +! 5 +! 3 +! 7 +! 10 +! 1 +! 10 +! 1 + 10 + 1 + 10 + 4 +! 5 + E474 caught. + === tab split === + WinLeave +*** ../vim-7.4.708/src/version.c 2015-04-21 16:48:55.028917216 +0200 +--- src/version.c 2015-04-21 18:00:49.083525577 +0200 +*************** +*** 743,744 **** +--- 743,746 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 709, + /**/ + +-- +BEDEVERE: Why do you think she is a witch? +SECOND VILLAGER: She turned me into a newt. +BEDEVERE: A newt? +SECOND VILLAGER: (After looking at himself for some time) I got better. + "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD + + /// 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 ///