- patchlevel 211

This commit is contained in:
Karsten Hopp 2008-01-07 17:19:22 +00:00
parent 812f196453
commit 3bddd30fb2
3 changed files with 863 additions and 2 deletions

748
7.1.211 Normal file
View File

@ -0,0 +1,748 @@
To: vim-dev@vim.org
Subject: Patch 7.1.211
Fcc: outbox
From: Bram Moolenaar <Bram@moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------
Patch 7.1.211
Problem: The matchparen plugin may take an unexpected amount of time, so
that it looks like Vim hangs.
Solution: Add a timeout to searchpair(), searchpairpos(), search() and
searchpos(). Use half a second timeout in the plugin.
Files: runtime/doc/eval.txt, runtime/plugin/matchparen.vim, src/edit.c,
src/eval.c, src/ex_cmds2.c, src/ex_docmd.c, src/normal.c,
src/proto/eval.pro, src/proto/ex_cmds2.pro, src/proto/search.pro,
src/search.c
*** ../vim-7.1.210/runtime/doc/eval.txt Sat Jan 5 13:34:01 2008
--- runtime/doc/eval.txt Sun Jan 6 16:27:33 2008
***************
*** 1,4 ****
! *eval.txt* For Vim version 7.1. Last change: 2008 Jan 04
VIM REFERENCE MANUAL by Bram Moolenaar
--- 1,4 ----
! *eval.txt* For Vim version 7.1. Last change: 2008 Jan 06
VIM REFERENCE MANUAL by Bram Moolenaar
***************
*** 1733,1746 ****
repeat( {expr}, {count}) String repeat {expr} {count} times
resolve( {filename}) String get filename a shortcut points to
reverse( {list}) List reverse {list} in-place
! search( {pattern} [, {flags}]) Number search for {pattern}
searchdecl({name} [, {global} [, {thisblock}]])
Number search for variable declaration
! searchpair( {start}, {middle}, {end} [, {flags} [, {skip} [, {stopline}]]])
Number search for other end of start/end pair
! searchpairpos( {start}, {middle}, {end} [, {flags} [, {skip} [, {stopline}]]])
List search for other end of start/end pair
! searchpos( {pattern} [, {flags} [, {stopline}]])
List search for {pattern}
server2client( {clientid}, {string})
Number send reply string
--- 1733,1747 ----
repeat( {expr}, {count}) String repeat {expr} {count} times
resolve( {filename}) String get filename a shortcut points to
reverse( {list}) List reverse {list} in-place
! search( {pattern} [, {flags} [, {stopline} [, {timeout}]]])
! Number search for {pattern}
searchdecl({name} [, {global} [, {thisblock}]])
Number search for variable declaration
! searchpair( {start}, {middle}, {end} [, {flags} [, {skip} [...]]])
Number search for other end of start/end pair
! searchpairpos( {start}, {middle}, {end} [, {flags} [, {skip} [...]]])
List search for other end of start/end pair
! searchpos( {pattern} [, {flags} [, {stopline} [, {timeout}]]])
List search for {pattern}
server2client( {clientid}, {string})
Number send reply string
***************
*** 4212,4218 ****
If you want a list to remain unmodified make a copy first: >
:let revlist = reverse(copy(mylist))
! search({pattern} [, {flags} [, {stopline}]]) *search()*
Search for regexp pattern {pattern}. The search starts at the
cursor position (you can use |cursor()| to set it).
--- 4216,4222 ----
If you want a list to remain unmodified make a copy first: >
:let revlist = reverse(copy(mylist))
! search({pattern} [, {flags} [, {stopline} [, {timeout}]]]) *search()*
Search for regexp pattern {pattern}. The search starts at the
cursor position (you can use |cursor()| to set it).
***************
*** 4240,4245 ****
--- 4244,4257 ----
let end = search('END', '', line("w$"))
< When {stopline} is used and it is not zero this also implies
that the search does not wrap around the end of the file.
+ A zero value is equal to not giving the argument.
+
+ When the {timeout} argument is given the search stops when
+ more than this many milli seconds have passed. Thus when
+ {timeout} is 500 the search stops after half a second.
+ The value must not be negative. A zero value is like not
+ giving the argument.
+ {only available when compiled with the +reltime feature}
If there is no match a 0 is returned and the cursor doesn't
move. No error message is given.
***************
*** 4302,4308 ****
endif
<
*searchpair()*
! searchpair({start}, {middle}, {end} [, {flags} [, {skip} [, {stopline}]]])
Search for the match of a nested start-end pair. This can be
used to find the "endif" that matches an "if", while other
if/endif pairs in between are ignored.
--- 4314,4321 ----
endif
<
*searchpair()*
! searchpair({start}, {middle}, {end} [, {flags} [, {skip}
! [, {stopline} [, {timeout}]]]])
Search for the match of a nested start-end pair. This can be
used to find the "endif" that matches an "if", while other
if/endif pairs in between are ignored.
***************
*** 4337,4343 ****
When evaluating {skip} causes an error the search is aborted
and -1 returned.
! For {stopline} see |search()|.
The value of 'ignorecase' is used. 'magic' is ignored, the
patterns are used like it's on.
--- 4350,4356 ----
When evaluating {skip} causes an error the search is aborted
and -1 returned.
! For {stopline} and {timeout} see |search()|.
The value of 'ignorecase' is used. 'magic' is ignored, the
patterns are used like it's on.
***************
*** 4383,4389 ****
\ 'synIDattr(synID(line("."), col("."), 0), "name") =~? "string"')
<
*searchpairpos()*
! searchpairpos({start}, {middle}, {end} [, {flags} [, {skip} [, {stopline}]]])
Same as searchpair(), but returns a |List| with the line and
column position of the match. The first element of the |List|
is the line number and the second element is the byte index of
--- 4396,4403 ----
\ 'synIDattr(synID(line("."), col("."), 0), "name") =~? "string"')
<
*searchpairpos()*
! searchpairpos({start}, {middle}, {end} [, {flags} [, {skip}
! [, {stopline} [, {timeout}]]]])
Same as searchpair(), but returns a |List| with the line and
column position of the match. The first element of the |List|
is the line number and the second element is the byte index of
***************
*** 4394,4400 ****
<
See |match-parens| for a bigger and more useful example.
! searchpos({pattern} [, {flags} [, {stopline}]]) *searchpos()*
Same as |search()|, but returns a |List| with the line and
column position of the match. The first element of the |List|
is the line number and the second element is the byte index of
--- 4408,4414 ----
<
See |match-parens| for a bigger and more useful example.
! searchpos({pattern} [, {flags} [, {stopline} [, {timeout}]]]) *searchpos()*
Same as |search()|, but returns a |List| with the line and
column position of the match. The first element of the |List|
is the line number and the second element is the byte index of
*** ../vim-7.1.210/runtime/plugin/matchparen.vim Sat Aug 18 18:20:57 2007
--- runtime/plugin/matchparen.vim Sun Jan 6 16:22:39 2008
***************
*** 1,6 ****
" Vim plugin for showing matching parens
" Maintainer: Bram Moolenaar <Bram@vim.org>
! " Last Change: 2007 Aug 8
" Exit quickly when:
" - this plugin was already loaded (or disabled)
--- 1,6 ----
" Vim plugin for showing matching parens
" Maintainer: Bram Moolenaar <Bram@vim.org>
! " Last Change: 2008 Jan 06
" Exit quickly when:
" - this plugin was already loaded (or disabled)
***************
*** 111,117 ****
\ '=~? "string\\|character\\|singlequote\\|comment"'
execute 'if' s_skip '| let s_skip = 0 | endif'
! let [m_lnum, m_col] = searchpairpos(c, '', c2, s_flags, s_skip, stopline)
if before > 0
call winrestview(save_cursor)
--- 111,122 ----
\ '=~? "string\\|character\\|singlequote\\|comment"'
execute 'if' s_skip '| let s_skip = 0 | endif'
! try
! " Limit the search time to 500 msec to avoid a hang on very long lines.
! let [m_lnum, m_col] = searchpairpos(c, '', c2, s_flags, s_skip, stopline, 500)
! catch /E118/
! let [m_lnum, m_col] = searchpairpos(c, '', c2, s_flags, s_skip, stopline)
! endtry
if before > 0
call winrestview(save_cursor)
*** ../vim-7.1.210/src/edit.c Wed Jan 2 22:08:43 2008
--- src/edit.c Sun Jan 6 16:08:00 2008
***************
*** 4062,4068 ****
found_new_match = searchit(NULL, ins_buf, pos,
compl_direction,
compl_pattern, 1L, SEARCH_KEEP + SEARCH_NFMSG,
! RE_LAST, (linenr_T)0);
--msg_silent;
if (!compl_started)
{
--- 4062,4068 ----
found_new_match = searchit(NULL, ins_buf, pos,
compl_direction,
compl_pattern, 1L, SEARCH_KEEP + SEARCH_NFMSG,
! RE_LAST, (linenr_T)0, NULL);
--msg_silent;
if (!compl_started)
{
*** ../vim-7.1.210/src/eval.c Sat Jan 5 22:15:21 2008
--- src/eval.c Sun Jan 6 16:37:42 2008
***************
*** 7213,7223 ****
{"repeat", 2, 2, f_repeat},
{"resolve", 1, 1, f_resolve},
{"reverse", 1, 1, f_reverse},
! {"search", 1, 3, f_search},
{"searchdecl", 1, 3, f_searchdecl},
! {"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},
--- 7213,7223 ----
{"repeat", 2, 2, f_repeat},
{"resolve", 1, 1, f_resolve},
{"reverse", 1, 1, f_reverse},
! {"search", 1, 4, f_search},
{"searchdecl", 1, 3, f_searchdecl},
! {"searchpair", 3, 7, f_searchpair},
! {"searchpairpos", 3, 7, f_searchpairpos},
! {"searchpos", 1, 4, f_searchpos},
{"server2client", 2, 2, f_server2client},
{"serverlist", 0, 0, f_serverlist},
{"setbufvar", 3, 3, f_setbufvar},
***************
*** 14020,14025 ****
--- 14020,14029 ----
int dir;
int retval = 0; /* default: FAIL */
long lnum_stop = 0;
+ proftime_T tm;
+ #ifdef FEAT_RELTIME
+ long time_limit = 0;
+ #endif
int options = SEARCH_KEEP;
int subpatnum;
***************
*** 14033,14047 ****
if (flags & SP_END)
options |= SEARCH_END;
! /* 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 does not accept SP_REPEAT and SP_RETCOUNT flags.
* Check to make sure only those flags are set.
--- 14037,14063 ----
if (flags & SP_END)
options |= SEARCH_END;
! /* Optional arguments: line number to stop searching and timeout. */
! 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;
+ #ifdef FEAT_RELTIME
+ if (argvars[3].v_type != VAR_UNKNOWN)
+ {
+ time_limit = get_tv_number_chk(&argvars[3], NULL);
+ if (time_limit < 0)
+ goto theend;
+ }
+ #endif
}
+ #ifdef FEAT_RELTIME
+ /* Set the time limit, if there is one. */
+ profile_setlimit(time_limit, &tm);
+ #endif
+
/*
* This function does not accept SP_REPEAT and SP_RETCOUNT flags.
* Check to make sure only those flags are set.
***************
*** 14057,14063 ****
pos = save_cursor = curwin->w_cursor;
subpatnum = searchit(curwin, curbuf, &pos, dir, pat, 1L,
! options, RE_SEARCH, (linenr_T)lnum_stop);
if (subpatnum != FAIL)
{
if (flags & SP_SUBPAT)
--- 14073,14079 ----
pos = save_cursor = curwin->w_cursor;
subpatnum = searchit(curwin, curbuf, &pos, dir, pat, 1L,
! options, RE_SEARCH, (linenr_T)lnum_stop, &tm);
if (subpatnum != FAIL)
{
if (flags & SP_SUBPAT)
***************
*** 14147,14152 ****
--- 14163,14169 ----
char_u nbuf3[NUMBUFLEN];
int retval = 0; /* default: FAIL */
long lnum_stop = 0;
+ long time_limit = 0;
/* Get the three pattern arguments: start, middle, end. */
spat = get_tv_string_chk(&argvars[0]);
***************
*** 14182,14194 ****
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, lnum_stop);
theend:
p_ws = save_p_ws;
--- 14199,14219 ----
lnum_stop = get_tv_number_chk(&argvars[5], NULL);
if (lnum_stop < 0)
goto theend;
+ #ifdef FEAT_RELTIME
+ if (argvars[6].v_type != VAR_UNKNOWN)
+ {
+ time_limit = get_tv_number_chk(&argvars[6], NULL);
+ if (time_limit < 0)
+ goto theend;
+ }
+ #endif
}
}
if (skip == NULL)
goto theend; /* type error */
retval = do_searchpair(spat, mpat, epat, dir, skip, flags,
! match_pos, lnum_stop, time_limit);
theend:
p_ws = save_p_ws;
***************
*** 14240,14246 ****
* Returns 0 or -1 for no match,
*/
long
! 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 */
--- 14265,14272 ----
* Returns 0 or -1 for no match,
*/
long
! do_searchpair(spat, mpat, epat, dir, skip, flags, match_pos,
! lnum_stop, time_limit)
char_u *spat; /* start pattern */
char_u *mpat; /* middle pattern */
char_u *epat; /* end pattern */
***************
*** 14249,14254 ****
--- 14275,14281 ----
int flags; /* SP_SETPCMARK and other SP_ values */
pos_T *match_pos;
linenr_T lnum_stop; /* stop at this line if not zero */
+ long time_limit; /* stop after this many msec */
{
char_u *save_cpo;
char_u *pat, *pat2 = NULL, *pat3 = NULL;
***************
*** 14263,14273 ****
--- 14290,14306 ----
int nest = 1;
int err;
int options = SEARCH_KEEP;
+ proftime_T tm;
/* Make 'cpoptions' empty, the 'l' flag should not be used here. */
save_cpo = p_cpo;
p_cpo = (char_u *)"";
+ #ifdef FEAT_RELTIME
+ /* Set the time limit, if there is one. */
+ profile_setlimit(time_limit, &tm);
+ #endif
+
/* Make two search patterns: start/end (pat2, for in nested pairs) and
* start/middle/end (pat3, for the top pair). */
pat2 = alloc((unsigned)(STRLEN(spat) + STRLEN(epat) + 15));
***************
*** 14291,14297 ****
for (;;)
{
n = searchit(curwin, curbuf, &pos, dir, pat, 1L,
! options, 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;
--- 14324,14330 ----
for (;;)
{
n = searchit(curwin, curbuf, &pos, dir, pat, 1L,
! options, RE_SEARCH, lnum_stop, &tm);
if (n == FAIL || (firstpos.lnum != 0 && equalpos(pos, firstpos)))
/* didn't find it or found the first match again: FAIL */
break;
*** ../vim-7.1.210/src/ex_cmds2.c Fri Jan 4 16:00:10 2008
--- src/ex_cmds2.c Sun Jan 6 18:22:28 2008
***************
*** 895,913 ****
sprintf(buf, "%10.6lf", (double)tm->QuadPart / (double)fr.QuadPart);
# else
sprintf(buf, "%3ld.%06ld", (long)tm->tv_sec, (long)tm->tv_usec);
! #endif
return buf;
}
! # endif /* FEAT_PROFILE || FEAT_RELTIME */
- # if defined(FEAT_PROFILE) || defined(PROTO)
/*
! * Functions for profiling.
*/
! static void script_do_profile __ARGS((scriptitem_T *si));
! static void script_dump_profile __ARGS((FILE *fd));
! static proftime_T prof_wait_time;
/*
* Set the time in "tm" to zero.
--- 895,955 ----
sprintf(buf, "%10.6lf", (double)tm->QuadPart / (double)fr.QuadPart);
# else
sprintf(buf, "%3ld.%06ld", (long)tm->tv_sec, (long)tm->tv_usec);
! # endif
return buf;
}
! /*
! * Put the time "msec" past now in "tm".
! */
! void
! profile_setlimit(msec, tm)
! long msec;
! proftime_T *tm;
! {
! if (msec <= 0) /* no limit */
! profile_zero(tm);
! else
! {
! # ifdef WIN3264
! LARGE_INTEGER fr;
!
! QueryPerformanceCounter(tm);
! QueryPerformanceFrequency(&fr);
! tm->QuadPart += (double)msec / 1000.0 * (double)fr.QuadPart;
! # else
! long usec;
!
! gettimeofday(tm, NULL);
! usec = (long)tm->tv_usec + (long)msec * 1000;
! tm->tv_usec = usec % 1000000L;
! tm->tv_sec += usec / 1000000L;
! # endif
! }
! }
/*
! * Return TRUE if the current time is past "tm".
*/
! int
! profile_passed_limit(tm)
! proftime_T *tm;
! {
! proftime_T now;
!
! # ifdef WIN3264
! if (tm->QuadPart == 0) /* timer was not set */
! return FALSE;
! QueryPerformanceCounter(&now);
! return (now.QuadPart > tm->QuadPart);
! # else
! if (tm->tv_sec == 0) /* timer was not set */
! return FALSE;
! gettimeofday(&now, NULL);
! return (now.tv_sec > tm->tv_sec
! || (now.tv_sec == tm->tv_sec && now.tv_usec > tm->tv_usec));
! # endif
! }
/*
* Set the time in "tm" to zero.
***************
*** 923,928 ****
--- 965,980 ----
tm->tv_sec = 0;
# endif
}
+
+ # endif /* FEAT_PROFILE || FEAT_RELTIME */
+
+ # if defined(FEAT_PROFILE) || defined(PROTO)
+ /*
+ * Functions for profiling.
+ */
+ static void script_do_profile __ARGS((scriptitem_T *si));
+ static void script_dump_profile __ARGS((FILE *fd));
+ static proftime_T prof_wait_time;
/*
* Add the time "tm2" to "tm".
*** ../vim-7.1.210/src/ex_docmd.c Fri Jan 4 16:00:10 2008
--- src/ex_docmd.c Sun Jan 6 16:08:29 2008
***************
*** 3979,3985 ****
*cmd == '?' ? BACKWARD : FORWARD,
(char_u *)"", 1L,
SEARCH_MSG + SEARCH_START,
! i, (linenr_T)0) != FAIL)
lnum = pos.lnum;
else
{
--- 3980,3986 ----
*cmd == '?' ? BACKWARD : FORWARD,
(char_u *)"", 1L,
SEARCH_MSG + SEARCH_START,
! i, (linenr_T)0, NULL) != FAIL)
lnum = pos.lnum;
else
{
*** ../vim-7.1.210/src/normal.c Sat Jan 5 13:34:01 2008
--- src/normal.c Sun Jan 6 16:08:54 2008
***************
*** 4194,4200 ****
for (;;)
{
t = searchit(curwin, curbuf, &curwin->w_cursor, FORWARD,
! pat, 1L, searchflags, RE_LAST, (linenr_T)0);
if (curwin->w_cursor.lnum >= old_pos.lnum)
t = FAIL; /* match after start is failure too */
--- 4194,4200 ----
for (;;)
{
t = searchit(curwin, curbuf, &curwin->w_cursor, FORWARD,
! pat, 1L, searchflags, RE_LAST, (linenr_T)0, NULL);
if (curwin->w_cursor.lnum >= old_pos.lnum)
t = FAIL; /* match after start is failure too */
*** ../vim-7.1.210/src/proto/eval.pro Sun May 6 15:18:09 2007
--- src/proto/eval.pro Sun Jan 6 15:55:47 2008
***************
*** 54,60 ****
long get_dict_number __ARGS((dict_T *d, char_u *key));
char_u *get_function_name __ARGS((expand_T *xp, int idx));
char_u *get_expr_name __ARGS((expand_T *xp, int idx));
! long do_searchpair __ARGS((char_u *spat, char_u *mpat, char_u *epat, int dir, char_u *skip, int flags, pos_T *match_pos, linenr_T lnum_stop));
void set_vim_var_nr __ARGS((int idx, long val));
long get_vim_var_nr __ARGS((int idx));
char_u *get_vim_var_str __ARGS((int idx));
--- 54,60 ----
long get_dict_number __ARGS((dict_T *d, char_u *key));
char_u *get_function_name __ARGS((expand_T *xp, int idx));
char_u *get_expr_name __ARGS((expand_T *xp, int idx));
! long do_searchpair __ARGS((char_u *spat, char_u *mpat, char_u *epat, int dir, char_u *skip, int flags, pos_T *match_pos, linenr_T lnum_stop, long time_limit));
void set_vim_var_nr __ARGS((int idx, long val));
long get_vim_var_nr __ARGS((int idx));
char_u *get_vim_var_str __ARGS((int idx));
*** ../vim-7.1.210/src/proto/ex_cmds2.pro Sat May 5 20:21:13 2007
--- src/proto/ex_cmds2.pro Sun Jan 6 16:42:24 2008
***************
*** 14,19 ****
--- 14,21 ----
void profile_end __ARGS((proftime_T *tm));
void profile_sub __ARGS((proftime_T *tm, proftime_T *tm2));
char *profile_msg __ARGS((proftime_T *tm));
+ void profile_setlimit __ARGS((long msec, proftime_T *tm));
+ int profile_passed_limit __ARGS((proftime_T *tm));
void profile_zero __ARGS((proftime_T *tm));
void profile_add __ARGS((proftime_T *tm, proftime_T *tm2));
void profile_self __ARGS((proftime_T *self, proftime_T *total, proftime_T *children));
*** ../vim-7.1.210/src/proto/search.pro Wed Aug 8 22:48:16 2007
--- src/proto/search.pro Sun Jan 6 16:11:53 2008
***************
*** 10,16 ****
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, 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));
--- 10,16 ----
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, linenr_T stop_lnum, proftime_T *tm));
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));
*** ../vim-7.1.210/src/search.c Tue Jan 1 15:42:45 2008
--- src/search.c Sun Jan 6 18:23:37 2008
***************
*** 494,501 ****
* When FEAT_EVAL is defined, returns the index of the first matching
* subpattern plus one; one if there was none.
*/
int
! searchit(win, buf, pos, dir, pat, count, options, pat_use, stop_lnum)
win_T *win; /* window to search in; can be NULL for a
buffer without a window! */
buf_T *buf;
--- 494,502 ----
* When FEAT_EVAL is defined, returns the index of the first matching
* subpattern plus one; one if there was none.
*/
+ /*ARGSUSED*/
int
! searchit(win, buf, pos, dir, pat, count, options, pat_use, stop_lnum, tm)
win_T *win; /* window to search in; can be NULL for a
buffer without a window! */
buf_T *buf;
***************
*** 506,511 ****
--- 507,513 ----
int options;
int pat_use; /* which pattern to use when "pat" is empty */
linenr_T stop_lnum; /* stop after this line number when != 0 */
+ proftime_T *tm; /* timeout limit or NULL */
{
int found;
linenr_T lnum; /* no init to shut up Apollo cc */
***************
*** 594,599 ****
--- 596,606 ----
if (stop_lnum != 0 && (dir == FORWARD
? lnum > stop_lnum : lnum < stop_lnum))
break;
+ #ifdef FEAT_RELTIME
+ /* Stop after passing the "tm" time limit. */
+ if (tm != NULL && profile_passed_limit(tm))
+ break;
+ #endif
/*
* Look for a match somewhere in line "lnum".
***************
*** 1249,1255 ****
(SEARCH_KEEP + SEARCH_PEEK + SEARCH_HIS
+ SEARCH_MSG + SEARCH_START
+ ((pat != NULL && *pat == ';') ? 0 : SEARCH_NOOF))),
! RE_LAST, (linenr_T)0);
if (dircp != NULL)
*dircp = dirc; /* restore second '/' or '?' for normal_cmd() */
--- 1256,1262 ----
(SEARCH_KEEP + SEARCH_PEEK + SEARCH_HIS
+ SEARCH_MSG + SEARCH_START
+ ((pat != NULL && *pat == ';') ? 0 : SEARCH_NOOF))),
! RE_LAST, (linenr_T)0, NULL);
if (dircp != NULL)
*dircp = dirc; /* restore second '/' or '?' for normal_cmd() */
***************
*** 3780,3786 ****
if (do_searchpair((char_u *)"<[^ \t>/!]\\+\\%(\\_s\\_[^>]\\{-}[^/]>\\|$\\|\\_s\\=>\\)",
(char_u *)"",
(char_u *)"</[^>]*>", BACKWARD, (char_u *)"", 0,
! NULL, (linenr_T)0) <= 0)
{
curwin->w_cursor = old_pos;
goto theend;
--- 3787,3793 ----
if (do_searchpair((char_u *)"<[^ \t>/!]\\+\\%(\\_s\\_[^>]\\{-}[^/]>\\|$\\|\\_s\\=>\\)",
(char_u *)"",
(char_u *)"</[^>]*>", BACKWARD, (char_u *)"", 0,
! NULL, (linenr_T)0, 0L) <= 0)
{
curwin->w_cursor = old_pos;
goto theend;
***************
*** 3814,3820 ****
sprintf((char *)epat, "</%.*s>\\c", len, p);
r = do_searchpair(spat, (char_u *)"", epat, FORWARD, (char_u *)"",
! 0, NULL, (linenr_T)0);
vim_free(spat);
vim_free(epat);
--- 3821,3827 ----
sprintf((char *)epat, "</%.*s>\\c", len, p);
r = do_searchpair(spat, (char_u *)"", epat, FORWARD, (char_u *)"",
! 0, NULL, (linenr_T)0, 0L);
vim_free(spat);
vim_free(epat);
*** ../vim-7.1.210/src/version.c Sun Jan 6 17:18:16 2008
--- src/version.c Sun Jan 6 20:00:03 2008
***************
*** 668,669 ****
--- 668,671 ----
{ /* Add new patch number below this line */
+ /**/
+ 211,
/**/
--
No letters of the alphabet were harmed in the creation of this message.
/// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\ download, build and distribute -- http://www.A-A-P.org ///
\\\ help me help AIDS victims -- http://ICCF-Holland.org ///

View File

@ -25,6 +25,7 @@ Checksums for the patch files can be found in the file MD5.
Collection of patches for Vim 7.1:
SIZE NAME INCLUDES
91424 7.1.001-100.gz patches 7.1.001 to 7.1.100, gzip'ed
75402 7.1.101-200.gz patches 7.1.101 to 7.1.200, gzip'ed
Individual patches for Vim 7.1:
@ -155,6 +156,7 @@ Individual patches for Vim 7.1:
2599 7.1.124 (extra) Mac: may get empty buffer if dropping file on Vim.app
12060 7.1.125 the TermResponse autocommand event is not always triggered
13372 7.1.126 (extra) ":vimgrep */*" doesn't work if autocmd changes dir
12461 7.1.126ne replacement for 7.1.126 without the (extra)
2319 7.1.127 memory leak when doing completing
2079 7.1.128 (extra) build problem with Cygwin
1740 7.1.129 (extra) Win32: Can't get long user name
@ -204,3 +206,39 @@ Individual patches for Vim 7.1:
1928 7.1.173 accessing freed memory when using "\%^" pattern
2197 7.1.174 writing NUL past end of a buffer
4722 7.1.175 <BS> doesn't work with some combination of option settings
2943 7.1.176 compiling with Aap fails if "compiledby" contains '<' or '>'
5450 7.1.177 freeing memory twice when in debug mode while reading a script
1567 7.1.178 "%" doesn't work on "/* comment *//* comment */"
6581 7.1.179 configure doesn't find TCL 8.5
7099 7.1.180 regexp patterns are not sufficiently tested
1878 7.1.181 accessing uninitialized memory in Farsi mode with ":s"
5457 7.1.182 with tab pages and an argument list session file may be wrong
2489 7.1.183 Internal error for ":echo matchstr('a', 'a\%[\&]')"
2132 7.1.184 crash when deleting backwards over a line break in Insert mode
3744 7.1.185 "gR" and then BS doesn't work properly with multi-byte chars
3294 7.1.186 "expand('<afile>')" returns a bogus value after ":cd dir"
2341 7.1.187 Win32 GUI: custom completion using system() doesn't work
1688 7.1.188 "W10" message could be displayed in the second column
1950 7.1.189 (after 7.1.104) need to call plain_vgetc() in ask_yesno()
1685 7.1.190 cursor after end-of-line: "iA sentence.<Esc>)"
2007 7.1.191 Win32 GUI: when not in focus click in scrollbar doesn't work
2605 7.1.192 CTRL-C doesn't stop duplicating text for "s" in Visual block
2962 7.1.193 some of the Vim 5.x digraphs could be supported
1650 7.1.194 Unix: ":echo glob('~/{}')" results in "/home/user//"
2273 7.1.195 '0 mark doesn't work for "~/foo ~ foo"
2642 7.1.196 (extra) Win32 GUI: "\n" in a tooltip doesn't cause line break
2308 7.1.197 Mac: "make install" doesn't work when $prefix is set
1460 7.1.198 hang when using ":s/\n//gn"
3572 7.1.199 can't do command line completion for a file name extension
2310 7.1.200 (after 7.1.177 and 7.1.182) compiler warnings
2705 7.1.201 when reading stdin 'fenc' and 'ff' are not set
2383 7.1.202 incomplete utf-8 byte sequence is not checked for validity
2261 7.1.203 if 'virtualedit' is "onemore" then ":normal 99|" is not right
2891 7.1.204 (extra) Win32: 'balloonexpr' tooltip disappears after 4 sec
5481 7.1.205 can't get the operator in an ":omap"
1690 7.1.206 compiler warnings when using MODIFIED_BY
7708 7.1.207 netbeans: "remove" cannot delete one line
2051 7.1.208 on Alpha get an unaligned access error
2249 7.1.209 GTK GUI: when using the netrw plugin ":gui" causes a hang
1923 7.1.210 listing mapping for 0xdb fails when 'encoding' is utf-8
25525 7.1.211 matchparen plugin may take so long it looks like Vim hangs

View File

@ -15,7 +15,7 @@
#used for pre-releases:
%define beta %{nil}
%define vimdir vim71%{?beta}
%define patchlevel 175
%define patchlevel 211
Summary: The VIM editor
URL: http://www.vim.org/
@ -226,6 +226,42 @@ Patch172: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.172
Patch173: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.173
Patch174: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.174
Patch175: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.175
Patch176: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.176
Patch177: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.177
Patch178: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.178
Patch179: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.179
Patch180: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.180
Patch181: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.181
Patch182: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.182
Patch183: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.183
Patch184: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.184
Patch185: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.185
Patch186: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.186
Patch187: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.187
Patch188: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.188
Patch189: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.189
Patch190: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.190
Patch191: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.191
Patch192: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.192
Patch193: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.193
Patch194: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.194
Patch195: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.195
Patch196: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.196
Patch197: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.197
Patch198: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.198
Patch199: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.199
Patch200: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.200
Patch201: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.201
Patch202: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.202
Patch203: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.203
Patch204: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.204
Patch205: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.205
Patch206: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.206
Patch207: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.207
Patch208: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.208
Patch209: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.209
Patch210: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.210
Patch211: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.211
Patch3000: vim-7.0-syntax.patch
Patch3002: vim-7.1-nowarnings.patch
@ -533,6 +569,42 @@ perl -pi -e "s,bin/nawk,bin/awk,g" runtime/tools/mve.awk
%patch173 -p0
%patch174 -p0
%patch175 -p0
%patch176 -p0
%patch177 -p0
%patch178 -p0
%patch179 -p0
%patch180 -p0
%patch181 -p0
%patch182 -p0
%patch183 -p0
%patch184 -p0
%patch185 -p0
%patch186 -p0
%patch187 -p0
%patch188 -p0
%patch189 -p0
%patch190 -p0
%patch191 -p0
%patch192 -p0
%patch193 -p0
%patch194 -p0
%patch195 -p0
%patch196 -p0
%patch197 -p0
%patch198 -p0
%patch199 -p0
%patch200 -p0
%patch201 -p0
%patch202 -p0
%patch203 -p0
%patch204 -p0
%patch205 -p0
%patch206 -p0
%patch207 -p0
%patch208 -p0
%patch209 -p0
%patch210 -p0
%patch211 -p0
# install spell files
@ -919,7 +991,10 @@ rm -rf $RPM_BUILD_ROOT
%{_datadir}/icons/hicolor/*/apps/*
%changelog
* Sat Dec 22 2007 Karsten Hopp <karsten@redhat.com> 7.1.%{nil}175-1
* Mon Jan 07 2008 Karsten Hopp <karsten@redhat.com> 7.1.211-1
- patchlevel 211
* Sat Dec 22 2007 Karsten Hopp <karsten@redhat.com> 7.1.175-1
- patchlevel 175
* Thu Nov 22 2007 Karsten Hopp <karsten@redhat.com> 7.1.159-1