summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2005-09-25 22:20:24 +0000
committerBram Moolenaar <Bram@vim.org>2005-09-25 22:20:24 +0000
commit4463f296d0744915fa25dbd893821833043f9a25 (patch)
tree6fb51a6e33ab971e1a4f90dee47683788fc3d1ce
parent1e01546026ce909b5fe56c05867f28e77d1b6eb3 (diff)
updated for version 7.0150v7.0150
-rw-r--r--runtime/compiler/rubyunit.vim41
-rw-r--r--runtime/doc/todo.txt27
-rw-r--r--runtime/doc/version7.txt8
-rw-r--r--runtime/spell/en/en_US.diff10
-rw-r--r--src/eval.c159
-rw-r--r--src/ex_cmds.c8
-rw-r--r--src/menu.c8
-rw-r--r--src/testdir/test58.in20
8 files changed, 195 insertions, 86 deletions
diff --git a/runtime/compiler/rubyunit.vim b/runtime/compiler/rubyunit.vim
new file mode 100644
index 0000000000..88bf3a60df
--- /dev/null
+++ b/runtime/compiler/rubyunit.vim
@@ -0,0 +1,41 @@
+" Vim compiler file
+" Language: Test::Unit - Ruby Unit Testing Framework
+" Maintainer: Doug Kearns <djkea2 at gus.gscit.monash.edu.au>
+" Info: $Id$
+" URL: http://vim-ruby.sourceforge.net
+" Anon CVS: See above site
+" Licence: GPL (http://www.gnu.org)
+" Disclaimer:
+" This program is distributed in the hope that it will be useful,
+" but WITHOUT ANY WARRANTY; without even the implied warranty of
+" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+" GNU General Public License for more details.
+" ----------------------------------------------------------------------------
+
+if exists("current_compiler")
+ finish
+endif
+let current_compiler = "rubyunit"
+
+if exists(":CompilerSet") != 2 " older Vim always used :setlocal
+ command -nargs=* CompilerSet setlocal <args>
+endif
+
+let s:cpo_save = &cpo
+set cpo-=C
+
+CompilerSet makeprg=testrb
+
+CompilerSet errorformat=\%W\ %\\+%\\d%\\+)\ Failure:,
+ \%C%m\ [%f:%l]:,
+ \%E\ %\\+%\\d%\\+)\ Error:,
+ \%C%m:,
+ \%C\ \ \ \ %f:%l:%.%#,
+ \%C%m,
+ \%Z\ %#,
+ \%-G%.%#
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
+
+" vim: nowrap sw=2 sts=2 ts=8 ff=unix:
diff --git a/runtime/doc/todo.txt b/runtime/doc/todo.txt
index 6f353bc711..88ea517803 100644
--- a/runtime/doc/todo.txt
+++ b/runtime/doc/todo.txt
@@ -1,4 +1,4 @@
-*todo.txt* For Vim version 7.0aa. Last change: 2005 Sep 20
+*todo.txt* For Vim version 7.0aa. Last change: 2005 Sep 25
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -30,21 +30,19 @@ be worked on, but only if you sponsor Vim development. See |sponsor|.
*known-bugs*
-------------------- Known bugs and current work -----------------------
-Test11 fails sometimes. (athena, huge features)
-
-ml_get errors: :%s/^\_s\+$//gc
-And: Insert mode in one window, long file, click in other window, short file.
-
-'scrolljump' negative used as a percentage, e.g. -50 is 50% of window height?
-
Spelling:
-- suggestion for "a an" includes "an an", which is marked bad. Check
- suggestions for not being a bad word (when split)?
+- Suggestions for "the the" includes "thee the" but not "the thee"?
- CTRL-X s doesn't consider 'spellcapcheck'.
-- Have spellbadword() return a list with bad word and reason it's bad?
- (rare/local/bad/caps)
+- Spellbadword() returns a list with bad word and reason it's bad.
+ This doesn't work when highlighting is the same for some mistakes.
- spellsuggest() needs a way to require a capital. A flag or context?
-- Underscore in REP items stands for space.
+
+Win32: Composing char appears on next position. (Tony Mechelynck)
+
+Support subdirectories in plugin directory? (Nikolai Weibull)
+
+Change 'include' so that it can match the file name when \zs and \ze are
+included. (docs already done tentatively).
ccomplete:
- How to use a popup menu?
@@ -594,8 +592,7 @@ Win32 GUI known bugs:
Opposite of 'linespace': 'columnspace'.
7 At the hit-enter prompt scrolling now no longer works. Need to use the
keyboard to get around this. Pretend <CR> was hit when the user tries to
- scroll? Need to be able to get out of hit-enter prompt with the mouse
- anyway.
+ scroll?
7 Scrollbar width doesn't change when selecting other windows appearance.
Also background color of Toolbar and rectangle below vert. scrollbar.
7 "!start /min cmd" should run in a minimized window, instead of using
diff --git a/runtime/doc/version7.txt b/runtime/doc/version7.txt
index d9845715e3..b77530ac26 100644
--- a/runtime/doc/version7.txt
+++ b/runtime/doc/version7.txt
@@ -1,4 +1,4 @@
-*version7.txt* For Vim version 7.0aa. Last change: 2005 Sep 15
+*version7.txt* For Vim version 7.0aa. Last change: 2005 Sep 23
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -600,6 +600,9 @@ When 'verbose' is set the output of the ":map", ":abbreviate", ":command",
"1gd" can be used like "gd" but ignores matches in a {} block that ends before
the cursor position. Likewise for "1gD" and "gD".
+'scrolljump' can be set to a negative number to scroll a percentage of the
+window height.
+
==============================================================================
IMPROVEMENTS *improvements-7*
@@ -817,6 +820,9 @@ closing a fold with the mouse by clicking on the '-'.
input() takes an optional completion argument to specify the type of
completion supported for the input. (Yegappan Lakshmanan)
+"dp" works with more than two buffers in diff mode if there is only one where
+'modifiable' is set.
+
==============================================================================
COMPILE TIME CHANGES *compile-changes-7*
diff --git a/runtime/spell/en/en_US.diff b/runtime/spell/en/en_US.diff
index f947be92aa..f42dc036e2 100644
--- a/runtime/spell/en/en_US.diff
+++ b/runtime/spell/en/en_US.diff
@@ -195,7 +195,7 @@
+ REP an_a a
+ REP a_an an
*** en_US.orig.dic Fri Apr 15 13:20:36 2005
---- en_US.dic Tue Aug 16 17:03:31 2005
+--- en_US.dic Wed Sep 21 11:36:06 2005
***************
*** 5944,5946 ****
bk
@@ -565,12 +565,16 @@
Zubenelgenubi/M
***************
*** 62077 ****
---- 62077,62084 ----
+--- 62077,62088 ----
zymurgy/S
+ nd
+ the the/!
+ a a/!
++ an an/!
+ a an/!
+ an a/!
-+ an an/!
++ the a/!
++ the an/!
++ a the/!
++ an the/!
+ PayPal
diff --git a/src/eval.c b/src/eval.c
index 2365b3fede..206bbfbfaf 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -409,7 +409,8 @@ static listitem_T *list_find __ARGS((list_T *l, long n));
static long list_idx_of_item __ARGS((list_T *l, listitem_T *item));
static void list_append __ARGS((list_T *l, listitem_T *item));
static int list_append_tv __ARGS((list_T *l, typval_T *tv));
-static int list_append_string __ARGS((list_T *l, char_u *str));
+static int list_append_string __ARGS((list_T *l, char_u *str, int len));
+static int list_append_number __ARGS((list_T *l, varnumber_T n));
static int list_insert_tv __ARGS((list_T *l, typval_T *tv, listitem_T *item));
static int list_extend __ARGS((list_T *l1, list_T *l2, listitem_T *bef));
static int list_concat __ARGS((list_T *l1, list_T *l2, typval_T *tv));
@@ -2551,7 +2552,6 @@ set_var_lval(lp, endp, rettv, copy, op)
char_u *op;
{
int cc;
- listitem_T *ni;
listitem_T *ri;
dictitem_T *di;
@@ -2603,16 +2603,11 @@ set_var_lval(lp, endp, rettv, copy, op)
if (lp->ll_li->li_next == NULL)
{
/* Need to add an empty item. */
- ni = listitem_alloc();
- if (ni == NULL)
+ if (list_append_number(lp->ll_list, 0) == FAIL)
{
ri = NULL;
break;
}
- ni->li_tv.v_type = VAR_NUMBER;
- ni->li_tv.v_lock = 0;
- ni->li_tv.vval.v_number = 0;
- list_append(lp->ll_list, ni);
}
lp->ll_li = lp->ll_li->li_next;
++lp->ll_n1;
@@ -3598,6 +3593,7 @@ typedef enum
* Handle zero level expression.
* This calls eval1() and handles error message and nextcmd.
* Put the result in "rettv" when returning OK and "evaluate" is TRUE.
+ * Note: "rettv.v_lock" is not set.
* Return OK or FAIL.
*/
static int
@@ -3638,6 +3634,8 @@ eval0(arg, rettv, nextcmd, evaluate)
* "arg" must point to the first non-white of the expression.
* "arg" is advanced to the next non-white after the recognized expression.
*
+ * Note: "rettv.v_lock" is not set.
+ *
* Return OK or FAIL.
*/
static int
@@ -5557,12 +5555,14 @@ list_append_dict(list, dict)
/*
* Make a copy of "str" and append it as an item to list "l".
+ * When "len" >= 0 use "str[len]".
* Returns FAIL when out of memory.
*/
static int
-list_append_string(l, str)
+list_append_string(l, str, len)
list_T *l;
char_u *str;
+ int len;
{
listitem_T *li = listitem_alloc();
@@ -5571,12 +5571,34 @@ list_append_string(l, str)
list_append(l, li);
li->li_tv.v_type = VAR_STRING;
li->li_tv.v_lock = 0;
- if ((li->li_tv.vval.v_string = vim_strsave(str)) == NULL)
+ if ((li->li_tv.vval.v_string = len >= 0 ? vim_strnsave(str, len)
+ : vim_strsave(str)) == NULL)
return FAIL;
return OK;
}
/*
+ * Append "n" to list "l".
+ * Returns FAIL when out of memory.
+ */
+ static int
+list_append_number(l, n)
+ list_T *l;
+ varnumber_T n;
+{
+ listitem_T *li;
+
+ li = listitem_alloc();
+ if (li == NULL)
+ return FAIL;
+ li->li_tv.v_type = VAR_NUMBER;
+ li->li_tv.v_lock = 0;
+ li->li_tv.vval.v_number = n;
+ list_append(l, li);
+ return OK;
+}
+
+/*
* Insert typval_T "tv" in list "l" before "item".
* If "item" is NULL append at the end.
* Return FAIL when out of memory.
@@ -6864,7 +6886,7 @@ static struct fst
{"simplify", 1, 1, f_simplify},
{"sort", 1, 2, f_sort},
{"soundfold", 1, 1, f_soundfold},
- {"spellbadword", 0, 0, f_spellbadword},
+ {"spellbadword", 0, 1, f_spellbadword},
{"spellsuggest", 1, 2, f_spellsuggest},
{"split", 1, 3, f_split},
#ifdef HAVE_STRFTIME
@@ -8842,6 +8864,7 @@ filter_map_one(tv, expr, map, remp)
{
/* map(): replace the list item value */
clear_tv(tv);
+ rettv.v_lock = 0;
*tv = rettv;
}
else
@@ -9261,7 +9284,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)) == FAIL)
+ if (list_append_string(l, ml_get_buf(buf, start++, FALSE), -1)
+ == FAIL)
break;
}
}
@@ -10855,25 +10879,25 @@ f_input(argvars, rettv)
defstr = get_tv_string_buf_chk(&argvars[1], buf);
if (defstr != NULL)
stuffReadbuffSpec(defstr);
- }
- if (argvars[2].v_type != VAR_UNKNOWN)
- {
- char_u *xp_name;
- int xp_namelen;
- long argt;
+ if (argvars[2].v_type != VAR_UNKNOWN)
+ {
+ char_u *xp_name;
+ int xp_namelen;
+ long argt;
- rettv->vval.v_string = NULL;
+ rettv->vval.v_string = NULL;
- xp_name = get_tv_string_buf_chk(&argvars[2], buf);
- if (xp_name == NULL)
- return;
+ xp_name = get_tv_string_buf_chk(&argvars[2], buf);
+ if (xp_name == NULL)
+ return;
- xp_namelen = STRLEN(xp_name);
+ xp_namelen = STRLEN(xp_name);
- if (parse_compl_arg(xp_name, xp_namelen, &xp_type, &argt, &xp_arg)
- == FAIL)
- return;
+ if (parse_compl_arg(xp_name, xp_namelen, &xp_type, &argt,
+ &xp_arg) == FAIL)
+ return;
+ }
}
if (defstr != NULL)
@@ -11713,14 +11737,11 @@ find_some_match(argvars, rettv, type)
{
if (regmatch.endp[i] == NULL)
break;
- li = listitem_alloc();
- if (li == NULL)
+ if (list_append_string(rettv->vval.v_list,
+ regmatch.startp[i],
+ (int)(regmatch.endp[i] - regmatch.startp[i]))
+ == FAIL)
break;
- li->li_tv.v_type = VAR_STRING;
- li->li_tv.v_lock = 0;
- li->li_tv.vval.v_string = vim_strnsave(regmatch.startp[i],
- (int)(regmatch.endp[i] - regmatch.startp[i]));
- list_append(rettv->vval.v_list, li);
}
}
else if (type == 2)
@@ -12112,7 +12133,6 @@ f_range(argvars, rettv)
long stride = 1;
long i;
list_T *l;
- listitem_T *li;
int error = FALSE;
start = get_tv_number_chk(&argvars[0], &error);
@@ -12145,15 +12165,8 @@ f_range(argvars, rettv)
++l->lv_refcount;
for (i = start; stride > 0 ? i <= end : i >= end; i += stride)
- {
- li = listitem_alloc();
- if (li == NULL)
+ if (list_append_number(l, (varnumber_T)i) == FAIL)
break;
- li->li_tv.v_type = VAR_NUMBER;
- li->li_tv.v_lock = 0;
- li->li_tv.vval.v_number = i;
- list_append(l, li);
- }
}
}
}
@@ -13887,17 +13900,57 @@ f_spellbadword(argvars, rettv)
typval_T *argvars;
typval_T *rettv;
{
+ char_u *word = (char_u *)"";
+#ifdef FEAT_SYN_HL
int len;
+ int attr = 0;
+ list_T *l;
+#endif
- rettv->vval.v_string = NULL;
- rettv->v_type = VAR_STRING;
+ l = list_alloc();
+ if (l == NULL)
+ return;
+ rettv->v_type = VAR_LIST;
+ rettv->vval.v_list = l;
+ ++l->lv_refcount;
#ifdef FEAT_SYN_HL
- /* Find the start and length of the badly spelled word. */
- len = spell_move_to(curwin, FORWARD, TRUE, TRUE, NULL);
- if (len != 0)
- rettv->vval.v_string = vim_strnsave(ml_get_cursor(), len);
+ if (argvars[0].v_type == VAR_UNKNOWN)
+ {
+ /* Find the start and length of the badly spelled word. */
+ len = spell_move_to(curwin, FORWARD, TRUE, TRUE, &attr);
+ if (len != 0)
+ word = ml_get_cursor();
+ }
+ else if (curwin->w_p_spell && *curbuf->b_p_spl != NUL)
+ {
+ char_u *str = get_tv_string_chk(&argvars[0]);
+ int capcol = -1;
+
+ if (str != NULL)
+ {
+ /* Check the argument for spelling. */
+ while (*str != NUL)
+ {
+ len = spell_check(curwin, str, &attr, &capcol);
+ if (attr != 0)
+ {
+ word = str;
+ break;
+ }
+ str += len;
+ }
+ }
+ }
#endif
+
+ list_append_string(l, word, len);
+ list_append_string(l, (char_u *)(
+ attr == highlight_attr[HLF_SPB] ? "bad" :
+ attr == highlight_attr[HLF_SPR] ? "rare" :
+ attr == highlight_attr[HLF_SPL] ? "local" :
+ attr == highlight_attr[HLF_SPC] ? "caps" :
+ ""), -1);
}
/*
@@ -13969,7 +14022,6 @@ f_split(argvars, rettv)
char_u patbuf[NUMBUFLEN];
char_u *save_cpo;
int match;
- listitem_T *ni;
list_T *l;
colnr_T col = 0;
int keepempty = FALSE;
@@ -14017,13 +14069,8 @@ f_split(argvars, rettv)
if (keepempty || end > str || (l->lv_len > 0 && *str != NUL
&& match && end < regmatch.endp[0]))
{
- ni = listitem_alloc();
- if (ni == NULL)
+ if (list_append_string(l, str, (int)(end - str)) == FAIL)
break;
- ni->li_tv.v_type = VAR_STRING;
- ni->li_tv.v_lock = 0;
- ni->li_tv.vval.v_string = vim_strnsave(str, end - str);
- list_append(l, ni);
}
if (!match)
break;
@@ -14583,7 +14630,7 @@ f_tagfiles(argvars, rettv)
get_tagfname(TRUE, NULL);
for (;;)
if (get_tagfname(FALSE, fname) == FAIL
- || list_append_string(l, fname) == FAIL)
+ || list_append_string(l, fname, -1) == FAIL)
break;
}
diff --git a/src/ex_cmds.c b/src/ex_cmds.c
index c35ad38622..84c5b49f27 100644
--- a/src/ex_cmds.c
+++ b/src/ex_cmds.c
@@ -4520,6 +4520,14 @@ do_sub(eap)
sublen = vim_regsub_multi(&regmatch, sub_firstlnum,
sub, sub_firstline, FALSE, p_magic, TRUE);
+ /* When the match included the "$" of the last line it may
+ * include one line too much. */
+ if (nmatch > curbuf->b_ml.ml_line_count - sub_firstlnum + 1)
+ {
+ nmatch = curbuf->b_ml.ml_line_count - sub_firstlnum + 1;
+ skip_match = TRUE;
+ }
+
/* Need room for:
* - result so far in new_start (not for first sub in line)
* - original text up to match
diff --git a/src/menu.c b/src/menu.c
index c92a812cad..4e220c748f 100644
--- a/src/menu.c
+++ b/src/menu.c
@@ -2109,7 +2109,11 @@ ex_emenu(eap)
/* Found the menu, so execute.
* Use the Insert mode entry when returning to Insert mode. */
- if (restart_edit && !current_SID)
+ if (restart_edit
+#ifdef FEAT_EVAL
+ && !current_SID
+#endif
+ )
{
mode = (char_u *)"Insert";
idx = MENU_INDEX_INSERT;
@@ -2168,10 +2172,12 @@ ex_emenu(eap)
{
/* When executing a script or function execute the commands right now.
* Otherwise put them in the typeahead buffer. */
+#ifdef FEAT_En
if (current_SID != 0)
exec_normal_cmd(menu->strings[idx], menu->noremap[idx],
menu->silent[idx]);
else
+#endif
ins_typebuf(menu->strings[idx], menu->noremap[idx], 0,
TRUE, menu->silent[idx]);
}
diff --git a/src/testdir/test58.in b/src/testdir/test58.in
index b3902f13c2..dacefd4377 100644
--- a/src/testdir/test58.in
+++ b/src/testdir/test58.in
@@ -29,7 +29,7 @@ STARTTEST
normal 0f:]s
let prevbad = ''
while 1
- let bad = spellbadword()
+ let [bad, a] = spellbadword()
if bad == '' || bad == prevbad || bad == 'badend'
break
endif
@@ -60,31 +60,31 @@ gg:/^addstart/+1,/^addend/-1w! Xtest.latin1.add
:mkspell! Xtest.latin1.add.spl Xtest.latin1.add
:set spellfile=Xtest.latin1.add
/^test2:
-]s:let str = spellbadword()
+]s:let [str, a] = spellbadword()
:$put =str
:set spl=Xtest_us.latin1.spl
/^test2:
-]smm:let str = spellbadword()
+]smm:let [str, a] = spellbadword()
:$put =str
-`m]s:let str = spellbadword()
+`m]s:let [str, a] = spellbadword()
:$put =str
:set spl=Xtest_gb.latin1.spl
/^test2:
-]smm:let str = spellbadword()
+]smm:let [str, a] = spellbadword()
:$put =str
-`m]s:let str = spellbadword()
+`m]s:let [str, a] = spellbadword()
:$put =str
:set spl=Xtest_nz.latin1.spl
/^test2:
-]smm:let str = spellbadword()
+]smm:let [str, a] = spellbadword()
:$put =str
-`m]s:let str = spellbadword()
+`m]s:let [str, a] = spellbadword()
:$put =str
:set spl=Xtest_ca.latin1.spl
/^test2:
-]smm:let str = spellbadword()
+]smm:let [str, a] = spellbadword()
:$put =str
-`m]s:let str = spellbadword()
+`m]s:let [str, a] = spellbadword()
:$put =str
:"
:" Postponed prefixes