mirror of
https://github.com/neovim/neovim.git
synced 2025-09-17 08:48:16 +00:00
vim-patch:7.4.535
Patch 7.4.535 (after 7.4.530) Problem: Can't build with tiny features. Solution: Add #ifdefs and skip a test. https://code.google.com/p/vim/source/detail?name=v7-4-535 This is also a refactor of some code in 7.4.530.
This commit is contained in:
@@ -1092,6 +1092,35 @@ static int compute_buffer_local_count(int addr_type, int lnum, int offset)
|
||||
return buf->b_fnum;
|
||||
}
|
||||
|
||||
static int current_win_nr(win_T *win)
|
||||
{
|
||||
int nr = 0;
|
||||
|
||||
FOR_ALL_WINDOWS_IN_TAB(wp, curtab) {
|
||||
++nr;
|
||||
if (wp == win)
|
||||
break;
|
||||
}
|
||||
return nr;
|
||||
}
|
||||
|
||||
static int current_tab_nr(tabpage_T *tab)
|
||||
{
|
||||
int nr = 0;
|
||||
|
||||
FOR_ALL_TABS(tp) {
|
||||
++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)
|
||||
|
||||
/*
|
||||
* Execute one Ex command.
|
||||
*
|
||||
@@ -1128,8 +1157,6 @@ static char_u * do_one_cmd(char_u **cmdlinep,
|
||||
int did_sandbox = FALSE;
|
||||
cmdmod_T save_cmdmod;
|
||||
int ni; /* set when Not Implemented */
|
||||
win_T *wp;
|
||||
tabpage_T *tp;
|
||||
char_u *cmd;
|
||||
|
||||
memset(&ea, 0, sizeof(ea));
|
||||
@@ -1393,12 +1420,7 @@ static char_u * do_one_cmd(char_u **cmdlinep,
|
||||
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;
|
||||
}
|
||||
lnum = CURRENT_WIN_NR;
|
||||
ea.line2 = lnum;
|
||||
break;
|
||||
case ADDR_ARGUMENTS:
|
||||
@@ -1409,12 +1431,7 @@ static char_u * do_one_cmd(char_u **cmdlinep,
|
||||
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;
|
||||
}
|
||||
lnum = CURRENT_TAB_NR;
|
||||
ea.line2 = lnum;
|
||||
break;
|
||||
}
|
||||
@@ -3206,8 +3223,6 @@ static linenr_T get_address(char_u **ptr,
|
||||
pos_T pos;
|
||||
pos_T *fp;
|
||||
linenr_T lnum;
|
||||
win_T *wp;
|
||||
tabpage_T *tp;
|
||||
buf_T *buf;
|
||||
|
||||
cmd = skipwhite(*ptr);
|
||||
@@ -3221,12 +3236,7 @@ static linenr_T get_address(char_u **ptr,
|
||||
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;
|
||||
}
|
||||
lnum = CURRENT_WIN_NR;
|
||||
break;
|
||||
case ADDR_ARGUMENTS:
|
||||
lnum = curwin->w_arg_idx + 1;
|
||||
@@ -3234,11 +3244,9 @@ static linenr_T get_address(char_u **ptr,
|
||||
case ADDR_LOADED_BUFFERS:
|
||||
case ADDR_UNLOADED_BUFFERS:
|
||||
lnum = curbuf->b_fnum;
|
||||
for (tp = first_tabpage; tp != NULL; tp = tp->tp_next) {
|
||||
lnum++;
|
||||
if (tp == curtab)
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case ADDR_TABS:
|
||||
lnum = CURRENT_TAB_NR;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
@@ -3250,10 +3258,7 @@ static linenr_T get_address(char_u **ptr,
|
||||
lnum = curbuf->b_ml.ml_line_count;
|
||||
break;
|
||||
case ADDR_WINDOWS:
|
||||
lnum = 0;
|
||||
for (wp = firstwin; wp != NULL; wp = wp->w_next) {
|
||||
lnum++;
|
||||
}
|
||||
lnum = LAST_WIN_NR;
|
||||
break;
|
||||
case ADDR_ARGUMENTS:
|
||||
lnum = ARGCOUNT;
|
||||
@@ -3272,10 +3277,7 @@ static linenr_T get_address(char_u **ptr,
|
||||
lnum = lastbuf->b_fnum;
|
||||
break;
|
||||
case ADDR_TABS:
|
||||
lnum = 0;
|
||||
for (tp = first_tabpage; tp != NULL; tp = tp->tp_next) {
|
||||
lnum++;
|
||||
}
|
||||
lnum = LAST_TAB_NR;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
@@ -3404,12 +3406,7 @@ static linenr_T get_address(char_u **ptr,
|
||||
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;
|
||||
}
|
||||
lnum = CURRENT_WIN_NR;
|
||||
break;
|
||||
case ADDR_ARGUMENTS:
|
||||
lnum = curwin->w_arg_idx + 1;
|
||||
@@ -3419,12 +3416,7 @@ static linenr_T get_address(char_u **ptr,
|
||||
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;
|
||||
}
|
||||
lnum = CURRENT_TAB_NR;
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -3459,9 +3451,7 @@ static linenr_T get_address(char_u **ptr,
|
||||
lnum = 0;
|
||||
break;
|
||||
}
|
||||
c = 0;
|
||||
for (tp = first_tabpage; tp != NULL; tp = tp->tp_next)
|
||||
c++;
|
||||
c = LAST_TAB_NR;
|
||||
if (lnum >= c)
|
||||
lnum = c;
|
||||
break;
|
||||
@@ -3470,9 +3460,7 @@ static linenr_T get_address(char_u **ptr,
|
||||
lnum = 0;
|
||||
break;
|
||||
}
|
||||
c = 0;
|
||||
for (wp = firstwin; wp != NULL; wp = wp->w_next)
|
||||
c++;
|
||||
c = LAST_WIN_NR;
|
||||
if (lnum > c)
|
||||
lnum = c;
|
||||
break;
|
||||
@@ -5328,7 +5316,7 @@ void not_exiting(void)
|
||||
}
|
||||
|
||||
/*
|
||||
* ":quit": quit current window, quit Vim if closed the last window.
|
||||
* ":quit": quit current window, quit Vim if the last window is closed.
|
||||
*/
|
||||
static void ex_quit(exarg_T *eap)
|
||||
{
|
||||
@@ -5343,27 +5331,23 @@ static void ex_quit(exarg_T *eap)
|
||||
}
|
||||
|
||||
win_T *wp;
|
||||
buf_T *buf;
|
||||
int wnr;
|
||||
|
||||
if (eap->addr_count > 0) {
|
||||
wnr = eap->line2;
|
||||
for (wp = firstwin; --wnr > 0;) {
|
||||
if (wp->w_next == NULL)
|
||||
int wnr = eap->line2;
|
||||
|
||||
for (wp = firstwin; wp->w_next != NULL; wp = wp->w_next) {
|
||||
if (--wnr <= 0)
|
||||
break;
|
||||
else
|
||||
wp = wp->w_next;
|
||||
}
|
||||
buf = wp->w_buffer;
|
||||
} else {
|
||||
wp = curwin;
|
||||
buf = curbuf;
|
||||
}
|
||||
|
||||
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 && curbuf->b_closing))
|
||||
if (curbuf_locked() ||
|
||||
(wp->w_buffer->b_nwindows == 1 && wp->w_buffer->b_closing))
|
||||
return;
|
||||
|
||||
|
||||
@@ -5641,8 +5625,6 @@ void ex_all(exarg_T *eap)
|
||||
|
||||
static void ex_hide(exarg_T *eap)
|
||||
{
|
||||
win_T *win;
|
||||
int winnr = 0;
|
||||
if (*eap->arg != NUL && check_nextcmd(eap->arg) == NULL)
|
||||
eap->errmsg = e_invarg;
|
||||
else {
|
||||
@@ -5652,6 +5634,9 @@ static void ex_hide(exarg_T *eap)
|
||||
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++;
|
||||
if (winnr == eap->line2)
|
||||
|
Reference in New Issue
Block a user