mirror of
https://github.com/vim/vim.git
synced 2025-07-26 11:04:33 -04:00
updated for version 7.0208
This commit is contained in:
parent
a23ccb8ac6
commit
eddf53b02e
@ -1,4 +1,4 @@
|
||||
*todo.txt* For Vim version 7.0aa. Last change: 2006 Feb 25
|
||||
*todo.txt* For Vim version 7.0aa. Last change: 2006 Feb 26
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||
@ -30,49 +30,17 @@ be worked on, but only if you sponsor Vim development. See |sponsor|.
|
||||
*known-bugs*
|
||||
-------------------- Known bugs and current work -----------------------
|
||||
|
||||
Tab pages:
|
||||
- Add 'guitablabel' option.
|
||||
- GTK GUI implementation for the tab pages line:
|
||||
handling of tab in insert mode (like clicking mouse in other window)
|
||||
and cmdline mode (keep current tab)
|
||||
|
||||
9 GUI implementation for the tab pages line for other systems.
|
||||
8 Make GUI menu in tab pages line configurable. Like the popup menu.
|
||||
8 tab pages in the session file, if "tabpages" in 'sessionoptions'
|
||||
8 :tabmove +N move tab page N pages forward
|
||||
8 :tabmove -N move tab page N pages backward
|
||||
7 :tabdup duplicate the tab with all its windows.
|
||||
6 :tab ball tab page for each buffer
|
||||
6 :tab all tab page for each argument
|
||||
7 In GUI: right click can popup a menu to close a specific tab.
|
||||
7 Option to put tab line at the left or right? Need an option to specify
|
||||
its witdh. It's like a separate window with ":tabs" output.
|
||||
7 Add local variables for each tab page?
|
||||
8 Add local options for each tab page? E.g., 'diffopt' could differ between
|
||||
tab pages.
|
||||
7 Add local highlighting for a tab page?
|
||||
|
||||
Spelling: m'n -> no suggestion for "mijn"?
|
||||
|
||||
Add an argument to search functions to stop at a certain line number.
|
||||
search('{', 'b', line('w0'))
|
||||
search('{', '', line('w$'))
|
||||
Also start at a specified position?
|
||||
|
||||
undo could remember the '< and '> marks.
|
||||
Script ID is only remembered for global options. Should remember it for every
|
||||
local option separately.
|
||||
Change PV_XXX values in separate ranges for buffer and window.
|
||||
Move the enums to option.h so that the size is known in structs.h
|
||||
use array for each window and buffer with scriptID values.
|
||||
|
||||
Crash with X command server (Ciaran McCreesh).
|
||||
|
||||
Make virtcol([lnum, col]) work?
|
||||
|
||||
"dip" in end empty lines at end of file leaves one line. (Matt Mzyzik)
|
||||
|
||||
Ctags still hasn't included the patch. Darren is looking for someone to do
|
||||
maintanance.
|
||||
|
||||
Script ID is only remembered for global options. Should remember it for every
|
||||
local option separately.
|
||||
|
||||
"fsutil hardlink" can create a hard link on an NTFS file system. (Daniel
|
||||
Einspanjer) What library function can detect that?
|
||||
|
||||
@ -1391,6 +1359,23 @@ User Friendlier:
|
||||
global_event_filter() for GTK.
|
||||
|
||||
|
||||
Tab pages:
|
||||
9 GUI implementation for the tab pages line for other systems.
|
||||
8 Make GUI menu in tab pages line configurable. Like the popup menu.
|
||||
8 tab pages in the session file, if "tabpages" in 'sessionoptions'
|
||||
8 :tabmove +N move tab page N pages forward
|
||||
8 :tabmove -N move tab page N pages backward
|
||||
7 :tabdup duplicate the tab with all its windows.
|
||||
6 :tab ball tab page for each buffer
|
||||
6 :tab all tab page for each argument
|
||||
7 Option to put tab line at the left or right? Need an option to specify
|
||||
its witdh. It's like a separate window with ":tabs" output.
|
||||
7 Add local variables for each tab page?
|
||||
8 Add local options for each tab page? E.g., 'diffopt' could differ between
|
||||
tab pages.
|
||||
7 Add local highlighting for each tab page?
|
||||
|
||||
|
||||
Spell checking:
|
||||
9 Work together with OpenOffice.org to update the wordlists. (Adri Verhoef,
|
||||
Aad Nales) Setup vim-spell maillist?
|
||||
|
@ -1,4 +1,4 @@
|
||||
*usr_12.txt* For Vim version 7.0aa. Last change: 2004 Dec 29
|
||||
*usr_12.txt* For Vim version 7.0aa. Last change: 2006 Feb 26
|
||||
|
||||
VIM USER MANUAL - by Bram Moolenaar
|
||||
|
||||
@ -273,7 +273,7 @@ To display a man page for the word under the cursor, use this: >
|
||||
For example, you want to know the return value of "strstr()" while editing
|
||||
this line:
|
||||
|
||||
if (strstr(input, "aap") == ) ~
|
||||
if ( strstr (input, "aap") == ) ~
|
||||
|
||||
Move the cursor to somewhere on "strstr" and type "\K". A window will open
|
||||
to display the man page for strstr().
|
||||
|
@ -1,4 +1,4 @@
|
||||
*version7.txt* For Vim version 7.0aa. Last change: 2006 Feb 25
|
||||
*version7.txt* For Vim version 7.0aa. Last change: 2006 Feb 26
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||
@ -734,6 +734,9 @@ other Vim to the foreground.
|
||||
When starting Vim with a "-t tag" argument, there is an existing swapfile and
|
||||
the user selects "quit" or "abort" then exit Vim.
|
||||
|
||||
Undo now also restores the '< and '> marks. "gv" selects the same area as
|
||||
before the change and undo.
|
||||
|
||||
==============================================================================
|
||||
IMPROVEMENTS *improvements-7*
|
||||
|
||||
@ -948,6 +951,9 @@ Win32: Balloons can have multiple lines if common controls supports it.
|
||||
The 's' flag is added to the search() and searchpair() function to set the
|
||||
' mark if the cursor is moved. (Yegappan Lakshmanan)
|
||||
|
||||
The search() and searchpair() functions have an extra argument to specify
|
||||
where to stop searching. Speeds up searches that should not continue too far.
|
||||
|
||||
For 'errorformat' it was not possible to have a file name that contains the
|
||||
character that follows after "%f". For example, in "%f:%l:%m" the file name
|
||||
could not contain ":". Now include the first ":" where the rest of the
|
||||
@ -1077,6 +1083,9 @@ Mac: When running "make install" the runtime files are installed as for Unix.
|
||||
Avoids that too many files are copied. When running "make" a link to the
|
||||
runtime files is created to avoid a recursive copy that takes much time.
|
||||
|
||||
Mac: Configure will attempt to build Vim for both Intel and PowerPC. The
|
||||
--with-mac-arch configure argument can change it.
|
||||
|
||||
==============================================================================
|
||||
BUG FIXES *bug-fixes-7*
|
||||
|
||||
@ -1756,4 +1765,6 @@ block could be unhighlighted.
|
||||
When counting words for the Visual block area and using "$" to select until
|
||||
the end of every line only up to the length of the last line was counted.
|
||||
|
||||
"dip" in trailing empty lines left one empty line behind.
|
||||
|
||||
vim:tw=78:ts=8:ft=help:norl:
|
||||
|
236
src/eval.c
236
src/eval.c
@ -400,6 +400,7 @@ static int get_option_tv __ARGS((char_u **arg, typval_T *rettv, int evaluate));
|
||||
static int get_string_tv __ARGS((char_u **arg, typval_T *rettv, int evaluate));
|
||||
static int get_lit_string_tv __ARGS((char_u **arg, typval_T *rettv, int evaluate));
|
||||
static int get_list_tv __ARGS((char_u **arg, typval_T *rettv, int evaluate));
|
||||
static int rettv_list_alloc __ARGS((typval_T *rettv));
|
||||
static listitem_T *listitem_alloc __ARGS((void));
|
||||
static void listitem_free __ARGS((listitem_T *item));
|
||||
static void listitem_remove __ARGS((list_T *l, listitem_T *item));
|
||||
@ -5222,6 +5223,25 @@ list_alloc()
|
||||
return l;
|
||||
}
|
||||
|
||||
/*
|
||||
* Allocate an empty list for a return value.
|
||||
* Returns OK or FAIL.
|
||||
*/
|
||||
static int
|
||||
rettv_list_alloc(rettv)
|
||||
typval_T *rettv;
|
||||
{
|
||||
list_T *l = list_alloc();
|
||||
|
||||
if (l == NULL)
|
||||
return FAIL;
|
||||
|
||||
rettv->vval.v_list = l;
|
||||
rettv->v_type = VAR_LIST;
|
||||
++l->lv_refcount;
|
||||
return OK;
|
||||
}
|
||||
|
||||
/*
|
||||
* Unreference a list: decrement the reference count and free it when it
|
||||
* becomes zero.
|
||||
@ -6952,11 +6972,11 @@ static struct fst
|
||||
{"repeat", 2, 2, f_repeat},
|
||||
{"resolve", 1, 1, f_resolve},
|
||||
{"reverse", 1, 1, f_reverse},
|
||||
{"search", 1, 2, f_search},
|
||||
{"search", 1, 3, f_search},
|
||||
{"searchdecl", 1, 3, f_searchdecl},
|
||||
{"searchpair", 3, 5, f_searchpair},
|
||||
{"searchpairpos", 3, 5, f_searchpairpos},
|
||||
{"searchpos", 1, 2, f_searchpos},
|
||||
{"searchpair", 3, 6, f_searchpair},
|
||||
{"searchpairpos", 3, 6, f_searchpairpos},
|
||||
{"searchpos", 1, 3, f_searchpos},
|
||||
{"server2client", 2, 2, f_server2client},
|
||||
{"serverlist", 0, 0, f_serverlist},
|
||||
{"setbufvar", 3, 3, f_setbufvar},
|
||||
@ -9353,17 +9373,11 @@ get_buffer_lines(buf, start, end, retlist, rettv)
|
||||
typval_T *rettv;
|
||||
{
|
||||
char_u *p;
|
||||
list_T *l = NULL;
|
||||
|
||||
if (retlist)
|
||||
{
|
||||
l = list_alloc();
|
||||
if (l == NULL)
|
||||
if (rettv_list_alloc(rettv) == FAIL)
|
||||
return;
|
||||
|
||||
rettv->vval.v_list = l;
|
||||
rettv->v_type = VAR_LIST;
|
||||
++l->lv_refcount;
|
||||
}
|
||||
else
|
||||
rettv->vval.v_number = 0;
|
||||
@ -9391,8 +9405,8 @@ get_buffer_lines(buf, start, end, retlist, rettv)
|
||||
if (end > buf->b_ml.ml_line_count)
|
||||
end = buf->b_ml.ml_line_count;
|
||||
while (start <= end)
|
||||
if (list_append_string(l, ml_get_buf(buf, start++, FALSE), -1)
|
||||
== FAIL)
|
||||
if (list_append_string(rettv->vval.v_list,
|
||||
ml_get_buf(buf, start++, FALSE), -1) == FAIL)
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -9846,18 +9860,13 @@ f_getqflist(argvars, rettv)
|
||||
typval_T *rettv;
|
||||
{
|
||||
#ifdef FEAT_QUICKFIX
|
||||
list_T *l;
|
||||
win_T *wp;
|
||||
#endif
|
||||
|
||||
rettv->vval.v_number = FALSE;
|
||||
#ifdef FEAT_QUICKFIX
|
||||
l = list_alloc();
|
||||
if (l != NULL)
|
||||
if (rettv_list_alloc(rettv) == OK)
|
||||
{
|
||||
rettv->vval.v_list = l;
|
||||
rettv->v_type = VAR_LIST;
|
||||
++l->lv_refcount;
|
||||
wp = NULL;
|
||||
if (argvars[0].v_type != VAR_UNKNOWN) /* getloclist() */
|
||||
{
|
||||
@ -9866,7 +9875,7 @@ f_getqflist(argvars, rettv)
|
||||
return;
|
||||
}
|
||||
|
||||
(void)get_errorlist(wp, l);
|
||||
(void)get_errorlist(wp, rettv->vval.v_list);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
@ -11297,7 +11306,6 @@ dict_list(argvars, rettv, what)
|
||||
typval_T *rettv;
|
||||
int what;
|
||||
{
|
||||
list_T *l;
|
||||
list_T *l2;
|
||||
dictitem_T *di;
|
||||
hashitem_T *hi;
|
||||
@ -11315,12 +11323,8 @@ dict_list(argvars, rettv, what)
|
||||
if ((d = argvars[0].vval.v_dict) == NULL)
|
||||
return;
|
||||
|
||||
l = list_alloc();
|
||||
if (l == NULL)
|
||||
if (rettv_list_alloc(rettv) == FAIL)
|
||||
return;
|
||||
rettv->v_type = VAR_LIST;
|
||||
rettv->vval.v_list = l;
|
||||
++l->lv_refcount;
|
||||
|
||||
todo = d->dv_hashtab.ht_used;
|
||||
for (hi = d->dv_hashtab.ht_array; todo > 0; ++hi)
|
||||
@ -11333,7 +11337,7 @@ dict_list(argvars, rettv, what)
|
||||
li = listitem_alloc();
|
||||
if (li == NULL)
|
||||
break;
|
||||
list_append(l, li);
|
||||
list_append(rettv->vval.v_list, li);
|
||||
|
||||
if (what == 0)
|
||||
{
|
||||
@ -11741,10 +11745,8 @@ find_some_match(argvars, rettv, type)
|
||||
if (type == 3)
|
||||
{
|
||||
/* return empty list when there are no matches */
|
||||
if ((rettv->vval.v_list = list_alloc()) == NULL)
|
||||
if (rettv_list_alloc(rettv) == FAIL)
|
||||
goto theend;
|
||||
rettv->v_type = VAR_LIST;
|
||||
++rettv->vval.v_list->lv_refcount;
|
||||
}
|
||||
else if (type == 2)
|
||||
{
|
||||
@ -12259,7 +12261,6 @@ f_range(argvars, rettv)
|
||||
long end;
|
||||
long stride = 1;
|
||||
long i;
|
||||
list_T *l;
|
||||
int error = FALSE;
|
||||
|
||||
start = get_tv_number_chk(&argvars[0], &error);
|
||||
@ -12284,17 +12285,11 @@ f_range(argvars, rettv)
|
||||
EMSG(_("E727: Start past end"));
|
||||
else
|
||||
{
|
||||
l = list_alloc();
|
||||
if (l != NULL)
|
||||
{
|
||||
rettv->v_type = VAR_LIST;
|
||||
rettv->vval.v_list = l;
|
||||
++l->lv_refcount;
|
||||
|
||||
if (rettv_list_alloc(rettv) == OK)
|
||||
for (i = start; stride > 0 ? i <= end : i >= end; i += stride)
|
||||
if (list_append_number(l, (varnumber_T)i) == FAIL)
|
||||
if (list_append_number(rettv->vval.v_list,
|
||||
(varnumber_T)i) == FAIL)
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -12309,7 +12304,6 @@ f_readfile(argvars, rettv)
|
||||
int binary = FALSE;
|
||||
char_u *fname;
|
||||
FILE *fd;
|
||||
list_T *l;
|
||||
listitem_T *li;
|
||||
#define FREAD_SIZE 200 /* optimized for text lines */
|
||||
char_u buf[FREAD_SIZE];
|
||||
@ -12333,12 +12327,8 @@ f_readfile(argvars, rettv)
|
||||
maxline = get_tv_number(&argvars[2]);
|
||||
}
|
||||
|
||||
l = list_alloc();
|
||||
if (l == NULL)
|
||||
if (rettv_list_alloc(rettv) == FAIL)
|
||||
return;
|
||||
rettv->v_type = VAR_LIST;
|
||||
rettv->vval.v_list = l;
|
||||
l->lv_refcount = 1;
|
||||
|
||||
/* Always open the file in binary mode, library functions have a mind of
|
||||
* their own about CR-LF conversion. */
|
||||
@ -12397,7 +12387,7 @@ f_readfile(argvars, rettv)
|
||||
li->li_tv.v_type = VAR_STRING;
|
||||
li->li_tv.v_lock = 0;
|
||||
li->li_tv.vval.v_string = s;
|
||||
list_append(l, li);
|
||||
list_append(rettv->vval.v_list, li);
|
||||
|
||||
if (++cnt >= maxline && maxline >= 0)
|
||||
break;
|
||||
@ -12446,7 +12436,7 @@ f_readfile(argvars, rettv)
|
||||
if (maxline < 0)
|
||||
while (cnt > -maxline)
|
||||
{
|
||||
listitem_remove(l, l->lv_first);
|
||||
listitem_remove(rettv->vval.v_list, rettv->vval.v_list->lv_first);
|
||||
--cnt;
|
||||
}
|
||||
|
||||
@ -12788,14 +12778,11 @@ f_remove(argvars, rettv)
|
||||
else
|
||||
{
|
||||
list_remove(l, item, item2);
|
||||
l = list_alloc();
|
||||
if (l != NULL)
|
||||
if (rettv_list_alloc(rettv) == OK)
|
||||
{
|
||||
rettv->v_type = VAR_LIST;
|
||||
rettv->vval.v_list = l;
|
||||
l = rettv->vval.v_list;
|
||||
l->lv_first = item;
|
||||
l->lv_last = item2;
|
||||
l->lv_refcount = 1;
|
||||
item->li_prev = NULL;
|
||||
item2->li_next = NULL;
|
||||
l->lv_len = cnt;
|
||||
@ -12839,21 +12826,15 @@ f_repeat(argvars, rettv)
|
||||
int len;
|
||||
char_u *r;
|
||||
int i;
|
||||
list_T *l;
|
||||
|
||||
n = get_tv_number(&argvars[1]);
|
||||
if (argvars[0].v_type == VAR_LIST)
|
||||
{
|
||||
l = list_alloc();
|
||||
if (l != NULL && argvars[0].vval.v_list != NULL)
|
||||
{
|
||||
l->lv_refcount = 1;
|
||||
if (rettv_list_alloc(rettv) == OK && argvars[0].vval.v_list != NULL)
|
||||
while (n-- > 0)
|
||||
if (list_extend(l, argvars[0].vval.v_list, NULL) == FAIL)
|
||||
if (list_extend(rettv->vval.v_list,
|
||||
argvars[0].vval.v_list, NULL) == FAIL)
|
||||
break;
|
||||
}
|
||||
rettv->v_type = VAR_LIST;
|
||||
rettv->vval.v_list = l;
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -13174,7 +13155,7 @@ get_search_arg(varp, flagsp)
|
||||
static int
|
||||
search_cmn(argvars, match_pos)
|
||||
typval_T *argvars;
|
||||
pos_T *match_pos;
|
||||
pos_T *match_pos;
|
||||
{
|
||||
char_u *pat;
|
||||
pos_T pos;
|
||||
@ -13183,11 +13164,22 @@ search_cmn(argvars, match_pos)
|
||||
int dir;
|
||||
int flags = 0;
|
||||
int retval = 0; /* default: FAIL */
|
||||
long lnum_stop = 0;
|
||||
|
||||
pat = get_tv_string(&argvars[0]);
|
||||
dir = get_search_arg(&argvars[1], &flags); /* may set p_ws */
|
||||
if (dir == 0)
|
||||
goto theend;
|
||||
|
||||
/* Optional extra argument: line number to stop searching. */
|
||||
if (argvars[1].v_type != VAR_UNKNOWN
|
||||
&& argvars[2].v_type != VAR_UNKNOWN)
|
||||
{
|
||||
lnum_stop = get_tv_number_chk(&argvars[2], NULL);
|
||||
if (lnum_stop < 0)
|
||||
goto theend;
|
||||
}
|
||||
|
||||
/*
|
||||
* This function accepts only SP_NOMOVE and SP_SETPCMARK flags.
|
||||
* Check to make sure only those flags are set.
|
||||
@ -13203,7 +13195,7 @@ search_cmn(argvars, match_pos)
|
||||
|
||||
pos = save_cursor = curwin->w_cursor;
|
||||
if (searchit(curwin, curbuf, &pos, dir, pat, 1L,
|
||||
SEARCH_KEEP, RE_SEARCH) != FAIL)
|
||||
SEARCH_KEEP, RE_SEARCH, (linenr_T)lnum_stop) != FAIL)
|
||||
{
|
||||
retval = pos.lnum;
|
||||
if (flags & SP_SETPCMARK)
|
||||
@ -13284,6 +13276,7 @@ searchpair_cmn(argvars, match_pos)
|
||||
char_u nbuf2[NUMBUFLEN];
|
||||
char_u nbuf3[NUMBUFLEN];
|
||||
int retval = 0; /* default: FAIL */
|
||||
long lnum_stop = 0;
|
||||
|
||||
/* Get the three pattern arguments: start, middle, end. */
|
||||
spat = get_tv_string_chk(&argvars[0]);
|
||||
@ -13310,11 +13303,20 @@ searchpair_cmn(argvars, match_pos)
|
||||
|| argvars[4].v_type == VAR_UNKNOWN)
|
||||
skip = (char_u *)"";
|
||||
else
|
||||
{
|
||||
skip = get_tv_string_buf_chk(&argvars[4], nbuf3);
|
||||
if (argvars[5].v_type != VAR_UNKNOWN)
|
||||
{
|
||||
lnum_stop = get_tv_number_chk(&argvars[5], NULL);
|
||||
if (lnum_stop < 0)
|
||||
goto theend;
|
||||
}
|
||||
}
|
||||
if (skip == NULL)
|
||||
goto theend; /* type error */
|
||||
|
||||
retval = do_searchpair(spat, mpat, epat, dir, skip, flags, match_pos);
|
||||
retval = do_searchpair(spat, mpat, epat, dir, skip, flags,
|
||||
match_pos, lnum_stop);
|
||||
|
||||
theend:
|
||||
p_ws = save_p_ws;
|
||||
@ -13341,19 +13343,14 @@ f_searchpairpos(argvars, rettv)
|
||||
typval_T *argvars;
|
||||
typval_T *rettv;
|
||||
{
|
||||
list_T *l;
|
||||
pos_T match_pos;
|
||||
int lnum = 0;
|
||||
int col = 0;
|
||||
|
||||
rettv->vval.v_number = 0;
|
||||
|
||||
l = list_alloc();
|
||||
if (l == NULL)
|
||||
if (rettv_list_alloc(rettv) == FAIL)
|
||||
return;
|
||||
rettv->v_type = VAR_LIST;
|
||||
rettv->vval.v_list = l;
|
||||
++l->lv_refcount;
|
||||
|
||||
if (searchpair_cmn(argvars, &match_pos) > 0)
|
||||
{
|
||||
@ -13361,8 +13358,8 @@ f_searchpairpos(argvars, rettv)
|
||||
col = match_pos.col;
|
||||
}
|
||||
|
||||
list_append_number(l, (varnumber_T)lnum);
|
||||
list_append_number(l, (varnumber_T)col);
|
||||
list_append_number(rettv->vval.v_list, (varnumber_T)lnum);
|
||||
list_append_number(rettv->vval.v_list, (varnumber_T)col);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -13371,7 +13368,7 @@ f_searchpairpos(argvars, rettv)
|
||||
* Returns 0 or -1 for no match,
|
||||
*/
|
||||
long
|
||||
do_searchpair(spat, mpat, epat, dir, skip, flags, match_pos)
|
||||
do_searchpair(spat, mpat, epat, dir, skip, flags, match_pos, lnum_stop)
|
||||
char_u *spat; /* start pattern */
|
||||
char_u *mpat; /* middle pattern */
|
||||
char_u *epat; /* end pattern */
|
||||
@ -13379,6 +13376,7 @@ do_searchpair(spat, mpat, epat, dir, skip, flags, match_pos)
|
||||
char_u *skip; /* skip expression */
|
||||
int flags; /* SP_RETCOUNT, SP_REPEAT, SP_NOMOVE */
|
||||
pos_T *match_pos;
|
||||
linenr_T lnum_stop; /* stop at this line if not zero */
|
||||
{
|
||||
char_u *save_cpo;
|
||||
char_u *pat, *pat2 = NULL, *pat3 = NULL;
|
||||
@ -13418,7 +13416,7 @@ do_searchpair(spat, mpat, epat, dir, skip, flags, match_pos)
|
||||
for (;;)
|
||||
{
|
||||
n = searchit(curwin, curbuf, &pos, dir, pat, 1L,
|
||||
SEARCH_KEEP, RE_SEARCH);
|
||||
SEARCH_KEEP, RE_SEARCH, lnum_stop);
|
||||
if (n == FAIL || (firstpos.lnum != 0 && equalpos(pos, firstpos)))
|
||||
/* didn't find it or found the first match again: FAIL */
|
||||
break;
|
||||
@ -13513,19 +13511,14 @@ f_searchpos(argvars, rettv)
|
||||
typval_T *argvars;
|
||||
typval_T *rettv;
|
||||
{
|
||||
list_T *l;
|
||||
pos_T match_pos;
|
||||
int lnum = 0;
|
||||
int col = 0;
|
||||
|
||||
rettv->vval.v_number = 0;
|
||||
|
||||
l = list_alloc();
|
||||
if (l == NULL)
|
||||
if (rettv_list_alloc(rettv) == FAIL)
|
||||
return;
|
||||
rettv->v_type = VAR_LIST;
|
||||
rettv->vval.v_list = l;
|
||||
++l->lv_refcount;
|
||||
|
||||
if (search_cmn(argvars, &match_pos) > 0)
|
||||
{
|
||||
@ -13533,8 +13526,8 @@ f_searchpos(argvars, rettv)
|
||||
col = match_pos.col;
|
||||
}
|
||||
|
||||
list_append_number(l, (varnumber_T)lnum);
|
||||
list_append_number(l, (varnumber_T)col);
|
||||
list_append_number(rettv->vval.v_list, (varnumber_T)lnum);
|
||||
list_append_number(rettv->vval.v_list, (varnumber_T)col);
|
||||
|
||||
}
|
||||
|
||||
@ -14167,14 +14160,9 @@ f_spellbadword(argvars, rettv)
|
||||
char_u *word = (char_u *)"";
|
||||
hlf_T attr = HLF_COUNT;
|
||||
int len = 0;
|
||||
list_T *l;
|
||||
|
||||
l = list_alloc();
|
||||
if (l == NULL)
|
||||
if (rettv_list_alloc(rettv) == FAIL)
|
||||
return;
|
||||
rettv->v_type = VAR_LIST;
|
||||
rettv->vval.v_list = l;
|
||||
++l->lv_refcount;
|
||||
|
||||
#ifdef FEAT_SYN_HL
|
||||
if (argvars[0].v_type == VAR_UNKNOWN)
|
||||
@ -14206,8 +14194,8 @@ f_spellbadword(argvars, rettv)
|
||||
}
|
||||
#endif
|
||||
|
||||
list_append_string(l, word, len);
|
||||
list_append_string(l, (char_u *)(
|
||||
list_append_string(rettv->vval.v_list, word, len);
|
||||
list_append_string(rettv->vval.v_list, (char_u *)(
|
||||
attr == HLF_SPB ? "bad" :
|
||||
attr == HLF_SPR ? "rare" :
|
||||
attr == HLF_SPL ? "local" :
|
||||
@ -14223,7 +14211,6 @@ f_spellsuggest(argvars, rettv)
|
||||
typval_T *argvars;
|
||||
typval_T *rettv;
|
||||
{
|
||||
list_T *l;
|
||||
#ifdef FEAT_SYN_HL
|
||||
char_u *str;
|
||||
int typeerr = FALSE;
|
||||
@ -14234,12 +14221,8 @@ f_spellsuggest(argvars, rettv)
|
||||
int need_capital = FALSE;
|
||||
#endif
|
||||
|
||||
l = list_alloc();
|
||||
if (l == NULL)
|
||||
if (rettv_list_alloc(rettv) == FAIL)
|
||||
return;
|
||||
rettv->v_type = VAR_LIST;
|
||||
rettv->vval.v_list = l;
|
||||
++l->lv_refcount;
|
||||
|
||||
#ifdef FEAT_SYN_HL
|
||||
if (curwin->w_p_spell && *curbuf->b_p_spl != NUL)
|
||||
@ -14274,7 +14257,7 @@ f_spellsuggest(argvars, rettv)
|
||||
li->li_tv.v_type = VAR_STRING;
|
||||
li->li_tv.v_lock = 0;
|
||||
li->li_tv.vval.v_string = str;
|
||||
list_append(l, li);
|
||||
list_append(rettv->vval.v_list, li);
|
||||
}
|
||||
}
|
||||
ga_clear(&ga);
|
||||
@ -14294,7 +14277,6 @@ f_split(argvars, rettv)
|
||||
char_u patbuf[NUMBUFLEN];
|
||||
char_u *save_cpo;
|
||||
int match;
|
||||
list_T *l;
|
||||
colnr_T col = 0;
|
||||
int keepempty = FALSE;
|
||||
int typeerr = FALSE;
|
||||
@ -14315,12 +14297,8 @@ f_split(argvars, rettv)
|
||||
if (pat == NULL || *pat == NUL)
|
||||
pat = (char_u *)"[\\x01- ]\\+";
|
||||
|
||||
l = list_alloc();
|
||||
if (l == NULL)
|
||||
if (rettv_list_alloc(rettv) == FAIL)
|
||||
return;
|
||||
rettv->v_type = VAR_LIST;
|
||||
rettv->vval.v_list = l;
|
||||
++l->lv_refcount;
|
||||
if (typeerr)
|
||||
return;
|
||||
|
||||
@ -14338,10 +14316,11 @@ f_split(argvars, rettv)
|
||||
end = regmatch.startp[0];
|
||||
else
|
||||
end = str + STRLEN(str);
|
||||
if (keepempty || end > str || (l->lv_len > 0 && *str != NUL
|
||||
&& match && end < regmatch.endp[0]))
|
||||
if (keepempty || end > str || (rettv->vval.v_list->lv_len > 0
|
||||
&& *str != NUL && match && end < regmatch.endp[0]))
|
||||
{
|
||||
if (list_append_string(l, str, (int)(end - str)) == FAIL)
|
||||
if (list_append_string(rettv->vval.v_list, str,
|
||||
(int)(end - str)) == FAIL)
|
||||
break;
|
||||
}
|
||||
if (!match)
|
||||
@ -14891,7 +14870,6 @@ f_tabpagebuflist(argvars, rettv)
|
||||
#else
|
||||
tabpage_T *tp;
|
||||
win_T *wp = NULL;
|
||||
list_T *l;
|
||||
|
||||
if (argvars[0].v_type == VAR_UNKNOWN)
|
||||
wp = firstwin;
|
||||
@ -14905,17 +14883,13 @@ f_tabpagebuflist(argvars, rettv)
|
||||
rettv->vval.v_number = 0;
|
||||
else
|
||||
{
|
||||
l = list_alloc();
|
||||
if (l == NULL)
|
||||
if (rettv_list_alloc(rettv) == FAIL)
|
||||
rettv->vval.v_number = 0;
|
||||
else
|
||||
{
|
||||
rettv->vval.v_list = l;
|
||||
rettv->v_type = VAR_LIST;
|
||||
++l->lv_refcount;
|
||||
|
||||
for (; wp != NULL; wp = wp->w_next)
|
||||
if (list_append_number(l, wp->w_buffer->b_fnum) == FAIL)
|
||||
if (list_append_number(rettv->vval.v_list,
|
||||
wp->w_buffer->b_fnum) == FAIL)
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -15033,23 +15007,20 @@ f_tagfiles(argvars, rettv)
|
||||
typval_T *rettv;
|
||||
{
|
||||
char_u fname[MAXPATHL + 1];
|
||||
list_T *l;
|
||||
tagname_T tn;
|
||||
int first;
|
||||
|
||||
l = list_alloc();
|
||||
if (l == NULL)
|
||||
if (rettv_list_alloc(rettv) == FAIL)
|
||||
{
|
||||
rettv->vval.v_number = 0;
|
||||
return;
|
||||
}
|
||||
rettv->vval.v_list = l;
|
||||
rettv->v_type = VAR_LIST;
|
||||
++l->lv_refcount;
|
||||
|
||||
get_tagfname(TRUE, NULL);
|
||||
for (;;)
|
||||
if (get_tagfname(FALSE, fname) == FAIL
|
||||
|| list_append_string(l, fname, -1) == FAIL)
|
||||
for (first = TRUE; ; first = FALSE)
|
||||
if (get_tagfname(&tn, first, fname) == FAIL
|
||||
|| list_append_string(rettv->vval.v_list, fname, -1) == FAIL)
|
||||
break;
|
||||
tagname_free(&tn);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -15061,7 +15032,6 @@ f_taglist(argvars, rettv)
|
||||
typval_T *rettv;
|
||||
{
|
||||
char_u *tag_pattern;
|
||||
list_T *l;
|
||||
|
||||
tag_pattern = get_tv_string(&argvars[0]);
|
||||
|
||||
@ -15069,18 +15039,8 @@ f_taglist(argvars, rettv)
|
||||
if (*tag_pattern == NUL)
|
||||
return;
|
||||
|
||||
l = list_alloc();
|
||||
if (l != NULL)
|
||||
{
|
||||
if (get_tags(l, tag_pattern) != FAIL)
|
||||
{
|
||||
rettv->vval.v_list = l;
|
||||
rettv->v_type = VAR_LIST;
|
||||
++l->lv_refcount;
|
||||
}
|
||||
else
|
||||
list_free(l);
|
||||
}
|
||||
if (rettv_list_alloc(rettv) == OK)
|
||||
(void)get_tags(rettv->vval.v_list, tag_pattern);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -3086,25 +3086,6 @@ tabline_menu_handler(GtkMenuItem *item, gpointer user_data)
|
||||
gtk_main_quit();
|
||||
}
|
||||
|
||||
/*
|
||||
* Send the event for clicking to select tab page "nr".
|
||||
*/
|
||||
static void
|
||||
send_tabline_event(int nr)
|
||||
{
|
||||
char_u string[3];
|
||||
|
||||
string[0] = CSI;
|
||||
string[1] = KS_TABLINE;
|
||||
string[2] = KE_FILLER;
|
||||
add_to_input_buf(string, 3);
|
||||
string[0] = nr;
|
||||
add_to_input_buf_csi(string, 1);
|
||||
|
||||
if (gtk_main_level() > 0)
|
||||
gtk_main_quit();
|
||||
}
|
||||
|
||||
/*
|
||||
* Create a menu for the tab line.
|
||||
*/
|
||||
@ -3178,8 +3159,11 @@ on_tabline_menu(GtkWidget *widget, GdkEvent *event)
|
||||
return TRUE;
|
||||
}
|
||||
else if (bevent->button == 1 && clicked_page == 0)
|
||||
{
|
||||
/* Click after all tabs moves to next tab page. */
|
||||
send_tabline_event(0);
|
||||
if (send_tabline_event(0) && gtk_main_level() > 0)
|
||||
gtk_main_quit();
|
||||
}
|
||||
}
|
||||
/* We didn't handle the event. */
|
||||
return FALSE;
|
||||
@ -3197,7 +3181,10 @@ on_select_tab(
|
||||
gpointer data)
|
||||
{
|
||||
if (!ignore_tabline_evt)
|
||||
send_tabline_event(index + 1);
|
||||
{
|
||||
if (send_tabline_event(index + 1) && gtk_main_level() > 0)
|
||||
gtk_main_quit();
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
|
12
src/menu.c
12
src/menu.c
@ -2129,14 +2129,14 @@ ex_emenu(eap)
|
||||
* quick way of detecting whether we are doing this from a
|
||||
* selection - see if the range matches up with the visual
|
||||
* select start and end. */
|
||||
if ((curbuf->b_visual_start.lnum == eap->line1)
|
||||
&& (curbuf->b_visual_end.lnum) == eap->line2)
|
||||
if ((curbuf->b_visual.vi_start.lnum == eap->line1)
|
||||
&& (curbuf->b_visual.vi_end.lnum) == eap->line2)
|
||||
{
|
||||
/* Set it up for visual mode - equivalent to gv. */
|
||||
VIsual_mode = curbuf->b_visual_mode;
|
||||
tpos = curbuf->b_visual_end;
|
||||
curwin->w_cursor = curbuf->b_visual_start;
|
||||
curwin->w_curswant = curbuf->b_visual_curswant;
|
||||
VIsual_mode = curbuf->b_visual.vi_mode;
|
||||
tpos = curbuf->b_visual.vi_end;
|
||||
curwin->w_cursor = curbuf->b_visual.vi_start;
|
||||
curwin->w_curswant = curbuf->b_visual.vi_curswant;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -9,7 +9,7 @@ char_u *last_search_pat __ARGS((void));
|
||||
void reset_search_dir __ARGS((void));
|
||||
void set_last_search_pat __ARGS((char_u *s, int idx, int magic, int setlast));
|
||||
void last_pat_prog __ARGS((regmmatch_T *regmatch));
|
||||
int searchit __ARGS((win_T *win, buf_T *buf, pos_T *pos, int dir, char_u *pat, long count, int options, int pat_use));
|
||||
int searchit __ARGS((win_T *win, buf_T *buf, pos_T *pos, int dir, char_u *pat, long count, int options, int pat_use, linenr_T stop_lnum));
|
||||
int do_search __ARGS((oparg_T *oap, int dirc, char_u *pat, long count, int options));
|
||||
int search_for_exact_line __ARGS((buf_T *buf, pos_T *pos, int dir, char_u *pat));
|
||||
int searchc __ARGS((cmdarg_T *cap, int t_cmd));
|
||||
|
@ -4,7 +4,8 @@ void tag_freematch __ARGS((void));
|
||||
void do_tags __ARGS((exarg_T *eap));
|
||||
int find_tags __ARGS((char_u *pat, int *num_matches, char_u ***matchesp, int flags, int mincount, char_u *buf_ffname));
|
||||
void free_tag_stuff __ARGS((void));
|
||||
int get_tagfname __ARGS((int first, char_u *buf));
|
||||
int get_tagfname __ARGS((tagname_T *tnp, int first, char_u *buf));
|
||||
void tagname_free __ARGS((tagname_T *tnp));
|
||||
void simplify_filename __ARGS((char_u *filename));
|
||||
int expand_tags __ARGS((int tagnames, char_u *pat, int *num_file, char_u ***file));
|
||||
int get_tags __ARGS((list_T *list, char_u *pat));
|
||||
|
Loading…
x
Reference in New Issue
Block a user