| To: vim_dev@googlegroups.com |
| Subject: Patch 7.4.535 |
| 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.4.535 (after 7.4.530) |
| Problem: Can't build with tiny features. |
| Solution: Add #ifdefs and skip a test. |
| Files: src/ex_docmd.c, src/testdir/test_argument_count.in |
| |
| |
| |
| |
| |
| *** 1713,1718 **** |
| --- 1713,1765 ---- |
| return buf->b_fnum; |
| } |
| |
| + #ifdef FEAT_WINDOWS |
| + static int current_win_nr __ARGS((win_T *win)); |
| + static int current_tab_nr __ARGS((tabpage_T *tab)); |
| + |
| + static int |
| + current_win_nr(win) |
| + win_T *win; |
| + { |
| + win_T *wp; |
| + int nr = 0; |
| + |
| + for (wp = firstwin; wp != NULL; wp = wp->w_next) |
| + { |
| + ++nr; |
| + if (wp == win) |
| + break; |
| + } |
| + return nr; |
| + } |
| + |
| + static int |
| + current_tab_nr(tab) |
| + tabpage_T *tab; |
| + { |
| + tabpage_T *tp; |
| + int nr = 0; |
| + |
| + for (tp = first_tabpage; tp != NULL; tp = tp->tp_next) |
| + { |
| + ++nr; |
| + if (tp == tab) |
| + break; |
| + } |
| + return nr; |
| + } |
| + |
| + # define CURRENT_WIN_NR current_win_nr(curwin) |
| + # define LAST_WIN_NR current_win_nr(NULL) |
| + # define CURRENT_TAB_NR current_tab_nr(curtab) |
| + # define LAST_TAB_NR current_tab_nr(NULL) |
| + #else |
| + # define CURRENT_WIN_NR 1 |
| + # define LAST_WIN_NR 1 |
| + # define CURRENT_TAB_NR 1 |
| + # define LAST_TAB_NR 1 |
| + #endif |
| + |
| |
| /* |
| * Execute one Ex command. |
| |
| *** 1765,1772 **** |
| #endif |
| cmdmod_T save_cmdmod; |
| int ni; /* set when Not Implemented */ |
| - win_T *wp; |
| - tabpage_T *tp; |
| char_u *cmd; |
| |
| vim_memset(&ea, 0, sizeof(ea)); |
| --- 1812,1817 ---- |
| |
| *** 2085,2097 **** |
| ea.line2 = curwin->w_cursor.lnum; |
| break; |
| case ADDR_WINDOWS: |
| ! lnum = 0; |
| ! for (wp = firstwin; wp != NULL; wp = wp->w_next) |
| ! { |
| ! lnum++; |
| ! if (wp == curwin) |
| ! break; |
| ! } |
| ea.line2 = lnum; |
| break; |
| case ADDR_ARGUMENTS: |
| --- 2130,2136 ---- |
| ea.line2 = curwin->w_cursor.lnum; |
| break; |
| case ADDR_WINDOWS: |
| ! lnum = CURRENT_WIN_NR; |
| ea.line2 = lnum; |
| break; |
| case ADDR_ARGUMENTS: |
| |
| *** 2102,2114 **** |
| ea.line2 = curbuf->b_fnum; |
| break; |
| case ADDR_TABS: |
| ! lnum = 0; |
| ! for(tp = first_tabpage; tp != NULL; tp = tp->tp_next) |
| ! { |
| ! lnum++; |
| ! if (tp == curtab) |
| ! break; |
| ! } |
| ea.line2 = lnum; |
| break; |
| } |
| --- 2141,2147 ---- |
| ea.line2 = curbuf->b_fnum; |
| break; |
| case ADDR_TABS: |
| ! lnum = CURRENT_TAB_NR; |
| ea.line2 = lnum; |
| break; |
| } |
| |
| *** 4198,4205 **** |
| pos_T pos; |
| pos_T *fp; |
| linenr_T lnum; |
| - win_T *wp; |
| - tabpage_T *tp; |
| |
| cmd = skipwhite(*ptr); |
| lnum = MAXLNUM; |
| --- 4231,4236 ---- |
| |
| *** 4215,4227 **** |
| lnum = curwin->w_cursor.lnum; |
| break; |
| case ADDR_WINDOWS: |
| ! lnum = 0; |
| ! for (wp = firstwin; wp != NULL; wp = wp->w_next) |
| ! { |
| ! lnum++; |
| ! if (wp == curwin) |
| ! break; |
| ! } |
| break; |
| case ADDR_ARGUMENTS: |
| lnum = curwin->w_arg_idx + 1; |
| --- 4246,4252 ---- |
| lnum = curwin->w_cursor.lnum; |
| break; |
| case ADDR_WINDOWS: |
| ! lnum = CURRENT_WIN_NR; |
| break; |
| case ADDR_ARGUMENTS: |
| lnum = curwin->w_arg_idx + 1; |
| |
| *** 4231,4243 **** |
| lnum = curbuf->b_fnum; |
| break; |
| case ADDR_TABS: |
| ! lnum = 0; |
| ! for(tp = first_tabpage; tp != NULL; tp = tp->tp_next) |
| ! { |
| ! lnum++; |
| ! if (tp == curtab) |
| ! break; |
| ! } |
| break; |
| } |
| break; |
| --- 4256,4262 ---- |
| lnum = curbuf->b_fnum; |
| break; |
| case ADDR_TABS: |
| ! lnum = CURRENT_TAB_NR; |
| break; |
| } |
| break; |
| |
| *** 4250,4258 **** |
| lnum = curbuf->b_ml.ml_line_count; |
| break; |
| case ADDR_WINDOWS: |
| ! lnum = 0; |
| ! for (wp = firstwin; wp != NULL; wp = wp->w_next) |
| ! lnum++; |
| break; |
| case ADDR_ARGUMENTS: |
| lnum = ARGCOUNT; |
| --- 4269,4275 ---- |
| lnum = curbuf->b_ml.ml_line_count; |
| break; |
| case ADDR_WINDOWS: |
| ! lnum = LAST_WIN_NR; |
| break; |
| case ADDR_ARGUMENTS: |
| lnum = ARGCOUNT; |
| |
| *** 4262,4270 **** |
| lnum = lastbuf->b_fnum; |
| break; |
| case ADDR_TABS: |
| ! lnum = 0; |
| ! for(tp = first_tabpage; tp != NULL; tp = tp->tp_next) |
| ! lnum++; |
| break; |
| } |
| break; |
| --- 4279,4285 ---- |
| lnum = lastbuf->b_fnum; |
| break; |
| case ADDR_TABS: |
| ! lnum = LAST_TAB_NR; |
| break; |
| } |
| break; |
| |
| *** 4419,4434 **** |
| switch (addr_type) |
| { |
| case ADDR_LINES: |
| ! lnum = curwin->w_cursor.lnum; /* "+1" is same as ".+1" */ |
| break; |
| case ADDR_WINDOWS: |
| ! lnum = 0; |
| ! for (wp = firstwin; wp != NULL; wp = wp->w_next) |
| ! { |
| ! lnum++; |
| ! if (wp == curwin) |
| ! break; |
| ! } |
| break; |
| case ADDR_ARGUMENTS: |
| lnum = curwin->w_arg_idx + 1; |
| --- 4434,4444 ---- |
| switch (addr_type) |
| { |
| case ADDR_LINES: |
| ! /* "+1" is same as ".+1" */ |
| ! lnum = curwin->w_cursor.lnum; |
| break; |
| case ADDR_WINDOWS: |
| ! lnum = CURRENT_WIN_NR; |
| break; |
| case ADDR_ARGUMENTS: |
| lnum = curwin->w_arg_idx + 1; |
| |
| *** 4438,4450 **** |
| lnum = curbuf->b_fnum; |
| break; |
| case ADDR_TABS: |
| ! lnum = 0; |
| ! for(tp = first_tabpage; tp != NULL; tp = tp->tp_next) |
| ! { |
| ! lnum++; |
| ! if (tp == curtab) |
| ! break; |
| ! } |
| break; |
| } |
| } |
| --- 4448,4454 ---- |
| lnum = curbuf->b_fnum; |
| break; |
| case ADDR_TABS: |
| ! lnum = CURRENT_TAB_NR; |
| break; |
| } |
| } |
| |
| *** 4481,4489 **** |
| lnum = 0; |
| break; |
| } |
| ! c = 0; |
| ! for (tp = first_tabpage; tp != NULL; tp = tp->tp_next) |
| ! c++; |
| if (lnum >= c) |
| lnum = c; |
| break; |
| --- 4485,4491 ---- |
| lnum = 0; |
| break; |
| } |
| ! c = LAST_TAB_NR; |
| if (lnum >= c) |
| lnum = c; |
| break; |
| |
| *** 4493,4501 **** |
| lnum = 0; |
| break; |
| } |
| ! c = 0; |
| ! for (wp = firstwin; wp != NULL; wp = wp->w_next) |
| ! c++; |
| if (lnum > c) |
| lnum = c; |
| break; |
| --- 4495,4501 ---- |
| lnum = 0; |
| break; |
| } |
| ! c = LAST_WIN_NR; |
| if (lnum > c) |
| lnum = c; |
| break; |
| |
| *** 6805,6819 **** |
| } |
| |
| /* |
| ! * ":quit": quit current window, quit Vim if closed the last window. |
| */ |
| static void |
| ex_quit(eap) |
| exarg_T *eap; |
| { |
| win_T *wp; |
| ! buf_T *buf; |
| ! int wnr; |
| |
| #ifdef FEAT_CMDWIN |
| if (cmdwin_type != 0) |
| --- 6805,6819 ---- |
| } |
| |
| /* |
| ! * ":quit": quit current window, quit Vim if the last window is closed. |
| */ |
| static void |
| ex_quit(eap) |
| exarg_T *eap; |
| { |
| + #if defined(FEAT_WINDOWS) || defined(FEAT_AUTOCMD) |
| win_T *wp; |
| ! #endif |
| |
| #ifdef FEAT_CMDWIN |
| if (cmdwin_type != 0) |
| |
| *** 6828,6855 **** |
| text_locked_msg(); |
| return; |
| } |
| if (eap->addr_count > 0) |
| { |
| ! wnr = eap->line2; |
| ! for (wp = firstwin; --wnr > 0; ) |
| ! { |
| ! if (wp->w_next == NULL) |
| break; |
| - else |
| - wp = wp->w_next; |
| - } |
| - buf = wp->w_buffer; |
| } |
| else |
| ! { |
| wp = curwin; |
| ! buf = curbuf; |
| ! } |
| #ifdef FEAT_AUTOCMD |
| apply_autocmds(EVENT_QUITPRE, NULL, NULL, FALSE, curbuf); |
| /* Refuse to quit when locked or when the buffer in the last window is |
| * being closed (can only happen in autocommands). */ |
| ! if (curbuf_locked() || (buf->b_nwindows == 1 && buf->b_closing)) |
| return; |
| #endif |
| |
| --- 6828,6854 ---- |
| text_locked_msg(); |
| return; |
| } |
| + #ifdef FEAT_WINDOWS |
| if (eap->addr_count > 0) |
| { |
| ! int wnr = eap->line2; |
| ! |
| ! for (wp = firstwin; wp->w_next != NULL; wp = wp->w_next) |
| ! if (--wnr <= 0) |
| break; |
| } |
| else |
| ! #endif |
| ! #if defined(FEAT_WINDOWS) || defined(FEAT_AUTOCMD) |
| wp = curwin; |
| ! #endif |
| ! |
| #ifdef FEAT_AUTOCMD |
| apply_autocmds(EVENT_QUITPRE, NULL, NULL, FALSE, curbuf); |
| /* Refuse to quit when locked or when the buffer in the last window is |
| * being closed (can only happen in autocommands). */ |
| ! if (curbuf_locked() || (wp->w_buffer->b_nwindows == 1 |
| ! && wp->w_buffer->b_closing)) |
| return; |
| #endif |
| |
| |
| *** 7214,7222 **** |
| ex_hide(eap) |
| exarg_T *eap; |
| { |
| - win_T *win; |
| - int winnr = 0; |
| - |
| if (*eap->arg != NUL && check_nextcmd(eap->arg) == NULL) |
| eap->errmsg = e_invarg; |
| else |
| --- 7213,7218 ---- |
| |
| *** 7231,7237 **** |
| # endif |
| if (eap->addr_count == 0) |
| win_close(curwin, FALSE); /* don't free buffer */ |
| ! else { |
| for (win = firstwin; win != NULL; win = win->w_next) |
| { |
| winnr++; |
| --- 7227,7237 ---- |
| # endif |
| if (eap->addr_count == 0) |
| win_close(curwin, FALSE); /* don't free buffer */ |
| ! else |
| ! { |
| ! int winnr = 0; |
| ! win_T *win; |
| ! |
| for (win = firstwin; win != NULL; win = win->w_next) |
| { |
| winnr++; |
| |
| |
| |
| *** 1,6 **** |
| --- 1,7 ---- |
| Tests for :[count]argument! and :[count]argdelete vim: set ft=vim : |
| |
| STARTTEST |
| + :so small.vim |
| :%argd |
| :argadd a b c d |
| :set hidden |
| |
| |
| |
| *** 743,744 **** |
| --- 743,746 ---- |
| { /* Add new patch number below this line */ |
| + /**/ |
| + 535, |
| /**/ |
| |
| -- |
| Mushrooms always grow in damp places and so they look like umbrellas. |
| |
| /// 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 /// |