To: vim_dev@googlegroups.com Subject: Patch 7.3.591 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 7.3.591 Problem: Can only move to a tab by absolute number. Solution: Move a number of tabs to the left or the right. (Lech Lorens) Files: runtime/doc/tabpage.txt, src/ex_cmds.h, src/ex_docmd.c, src/testdir/test62.in, src/testdir/test62.ok, src/window.c *** ../vim-7.3.590/runtime/doc/tabpage.txt 2010-08-15 21:57:17.000000000 +0200 --- runtime/doc/tabpage.txt 2012-07-06 18:10:06.000000000 +0200 *************** *** 173,182 **** --- 173,192 ---- REORDERING TAB PAGES: :tabm[ove] [N] *:tabm* *:tabmove* + :[N]tabm[ove] 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. + :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: *** ../vim-7.3.590/src/ex_cmds.h 2012-05-18 18:47:11.000000000 +0200 --- src/ex_cmds.h 2012-07-06 18:10:13.000000000 +0200 *************** *** 944,950 **** EX(CMD_tabfirst, "tabfirst", ex_tabnext, TRLBAR), EX(CMD_tabmove, "tabmove", ex_tabmove, ! RANGE|NOTADR|ZEROR|COUNT|TRLBAR|ZEROR), EX(CMD_tablast, "tablast", ex_tabnext, TRLBAR), EX(CMD_tabnext, "tabnext", ex_tabnext, --- 944,950 ---- EX(CMD_tabfirst, "tabfirst", ex_tabnext, TRLBAR), EX(CMD_tabmove, "tabmove", ex_tabmove, ! RANGE|NOTADR|ZEROR|EXTRA|NOSPC|TRLBAR), EX(CMD_tablast, "tablast", ex_tabnext, TRLBAR), EX(CMD_tabnext, "tabnext", ex_tabnext, *** ../vim-7.3.590/src/ex_docmd.c 2012-06-06 19:02:40.000000000 +0200 --- src/ex_docmd.c 2012-07-06 18:16:25.000000000 +0200 *************** *** 7478,7484 **** ex_tabmove(eap) exarg_T *eap; { ! tabpage_move(eap->addr_count == 0 ? 9999 : (int)eap->line2); } /* --- 7478,7519 ---- ex_tabmove(eap) exarg_T *eap; { ! int tab_number = 9999; ! ! if (eap->arg && *eap->arg != NUL) ! { ! char_u *p = eap->arg; ! int relative = 0; /* argument +N/-N means: move N places to the ! * right/left relative to the current position. */ ! ! if (*eap->arg == '-') ! { ! relative = -1; ! p = eap->arg + 1; ! } ! else if (*eap->arg == '+') ! { ! relative = 1; ! p = eap->arg + 1; ! } ! 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); } /* *** ../vim-7.3.590/src/testdir/test62.in 2012-03-07 22:55:17.000000000 +0100 --- src/testdir/test62.in 2012-07-06 18:10:13.000000000 +0200 *************** *** 93,98 **** --- 93,126 ---- :endif :" :" + :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  + :" + :" :/^Results/,$w! test.out :qa! ENDTEST *** ../vim-7.3.590/src/testdir/test62.ok 2012-02-22 19:13:00.000000000 +0100 --- src/testdir/test62.ok 2012-07-06 18:10:13.000000000 +0200 *************** *** 8,10 **** --- 8,20 ---- tab drop 1: pass tab drop 2: pass tab drop 3: pass + 1 + 6 + 4 + 8 + 10 + 1 + 10 + 4 + 6 + E474 caught. *** ../vim-7.3.590/src/window.c 2012-07-06 16:39:43.000000000 +0200 --- src/window.c 2012-07-06 18:10:13.000000000 +0200 *************** *** 3929,3935 **** } /* Re-insert it at the specified position. */ ! if (n == 0) { curtab->tp_next = first_tabpage; first_tabpage = curtab; --- 3929,3935 ---- } /* Re-insert it at the specified position. */ ! if (n <= 0) { curtab->tp_next = first_tabpage; first_tabpage = curtab; *** ../vim-7.3.590/src/version.c 2012-07-06 17:51:24.000000000 +0200 --- src/version.c 2012-07-06 18:11:08.000000000 +0200 *************** *** 716,717 **** --- 716,719 ---- { /* Add new patch number below this line */ + /**/ + 591, /**/ -- Bare feet magnetize sharp metal objects so they point upward from the floor -- especially in the dark. /// 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 ///