summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/eval.c44
-rw-r--r--src/main.c2
-rw-r--r--src/misc2.c7
-rw-r--r--src/option.c10
-rw-r--r--src/po/Makefile4
-rw-r--r--src/proto/eval.pro1
-rw-r--r--src/proto/message.pro2
-rw-r--r--src/syntax.c41
-rw-r--r--src/version.h4
9 files changed, 93 insertions, 22 deletions
diff --git a/src/eval.c b/src/eval.c
index f2cc2a0b7..ae36e6f30 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -643,6 +643,7 @@ static void init_tv __ARGS((typval_T *varp));
static long get_tv_number __ARGS((typval_T *varp));
static long get_tv_number_chk __ARGS((typval_T *varp, int *denote));
static linenr_T get_tv_lnum __ARGS((typval_T *argvars));
+static linenr_T get_tv_lnum_buf __ARGS((typval_T *argvars, buf_T *buf));
static char_u *get_tv_string __ARGS((typval_T *varp));
static char_u *get_tv_string_buf __ARGS((typval_T *varp, char_u *buf));
static char_u *get_tv_string_chk __ARGS((typval_T *varp));
@@ -9187,11 +9188,12 @@ f_getbufline(argvars, rettv)
buf = get_buf_tv(&argvars[0]);
--emsg_off;
- lnum = get_tv_lnum(&argvars[1]);
+ lnum = get_tv_lnum_buf(&argvars[1], buf);
if (argvars[2].v_type == VAR_UNKNOWN)
end = lnum;
else
- end = get_tv_lnum(&argvars[2]);
+ end = get_tv_lnum_buf(&argvars[2], buf);
+
get_buffer_lines(buf, lnum, end, TRUE, rettv);
}
@@ -15651,7 +15653,8 @@ get_tv_number_chk(varp, denote)
}
/*
- * Get the lnum from the first argument. Also accepts ".", "$", etc.
+ * Get the lnum from the first argument.
+ * Also accepts ".", "$", etc., but that only works for the current buffer.
* Returns -1 on error.
*/
static linenr_T
@@ -15673,6 +15676,24 @@ get_tv_lnum(argvars)
}
/*
+ * Get the lnum from the first argument.
+ * Also accepts "$", then "buf" is used.
+ * Returns 0 on error.
+ */
+ static linenr_T
+get_tv_lnum_buf(argvars, buf)
+ typval_T *argvars;
+ buf_T *buf;
+{
+ if (argvars[0].v_type == VAR_STRING
+ && argvars[0].vval.v_string != NULL
+ && argvars[0].vval.v_string[0] == '$'
+ && buf != NULL)
+ return buf->b_ml.ml_line_count;
+ return get_tv_number_chk(&argvars[0], NULL);
+}
+
+/*
* Get the string value of a variable.
* If it is a Number variable, the number is converted into a string.
* get_tv_string() uses a single, static buffer. YOU CAN ONLY USE IT ONCE!
@@ -18678,6 +18699,23 @@ store_session_globals(fd)
}
#endif
+/*
+ * Display script name where an item was last set.
+ * Should only be invoked when 'verbose' is non-zero.
+ */
+ void
+last_set_msg(scriptID)
+ scid_T scriptID;
+{
+ if (scriptID != 0)
+ {
+ verbose_enter();
+ MSG_PUTS(_("\n\tLast set from "));
+ MSG_PUTS(get_scriptname(scriptID));
+ verbose_leave();
+ }
+}
+
#endif /* FEAT_EVAL */
#if defined(FEAT_MODIFY_FNAME) || defined(FEAT_EVAL) || defined(PROTO)
diff --git a/src/main.c b/src/main.c
index 876289f67..380a57289 100644
--- a/src/main.c
+++ b/src/main.c
@@ -1034,7 +1034,7 @@ main_loop(cmdwin, noexmode)
emsg_on_display = FALSE; /* can delete error message now */
did_emsg = FALSE;
msg_didany = FALSE; /* reset lines_left in msg_start() */
- clear_sb_text(); /* clear scroll-back text */
+ may_clear_sb_text(); /* clear scroll-back text on next msg */
showruler(FALSE);
setcursor();
diff --git a/src/misc2.c b/src/misc2.c
index db6642ee9..d677b1b4c 100644
--- a/src/misc2.c
+++ b/src/misc2.c
@@ -870,10 +870,13 @@ lalloc(size, message)
if (releasing)
break;
releasing = TRUE;
- try_again = mf_release_all();
+
+ clear_sb_text(); /* free any scrollback text */
+ try_again = mf_release_all(); /* release as many blocks as possible */
#ifdef FEAT_EVAL
- try_again |= garbage_collect();
+ try_again |= garbage_collect(); /* cleanup recursive lists/dicts */
#endif
+
releasing = FALSE;
if (!try_again)
break;
diff --git a/src/option.c b/src/option.c
index e17721626..32eca0bf5 100644
--- a/src/option.c
+++ b/src/option.c
@@ -3814,15 +3814,7 @@ do_set(arg, opt_flags)
showoneopt(&options[opt_idx], opt_flags);
#ifdef FEAT_EVAL
if (p_verbose > 0)
- {
- if (options[opt_idx].scriptID != 0)
- {
- verbose_enter();
- MSG_PUTS(_("\n\tLast set from "));
- MSG_PUTS(get_scriptname(options[opt_idx].scriptID));
- verbose_leave();
- }
- }
+ last_set_msg(options[opt_idx].scriptID);
#endif
}
else
diff --git a/src/po/Makefile b/src/po/Makefile
index 617d4f970..f4281878b 100644
--- a/src/po/Makefile
+++ b/src/po/Makefile
@@ -27,6 +27,7 @@ LANGUAGES = \
zh_CN.UTF-8 \
zh_TW \
zh_TW.UTF-8 \
+# end marker
MOFILES = \
af.mo \
@@ -51,6 +52,7 @@ MOFILES = \
zh_CN.mo \
zh_TW.UTF-8.mo \
zh_TW.mo \
+# end marker
CONVERTED = \
cs.cp1250.mo \
@@ -60,6 +62,7 @@ CONVERTED = \
sk.cp1250.mo \
uk.cp1251.mo \
zh_CN.cp936.mo \
+# end marker
CHECKFILES = \
af.ck \
@@ -91,6 +94,7 @@ CHECKFILES = \
sk.cp1250.ck \
uk.cp1251.ck \
zh_CN.cp936.ck \
+# end marker
PACKAGE = vim
SHELL = /bin/sh
diff --git a/src/proto/eval.pro b/src/proto/eval.pro
index 86ea3968f..51fb26dfb 100644
--- a/src/proto/eval.pro
+++ b/src/proto/eval.pro
@@ -86,6 +86,7 @@ int func_has_abort __ARGS((void *cookie));
int read_viminfo_varlist __ARGS((vir_T *virp, int writing));
void write_viminfo_varlist __ARGS((FILE *fp));
int store_session_globals __ARGS((FILE *fd));
+void last_set_msg __ARGS((scid_T scriptID));
int modify_fname __ARGS((char_u *src, int *usedlen, char_u **fnamep, char_u **bufp, int *fnamelen));
char_u *do_string_sub __ARGS((char_u *str, char_u *pat, char_u *sub, char_u *flags));
/* vim: set ft=c : */
diff --git a/src/proto/message.pro b/src/proto/message.pro
index faa03680c..e0e2e6e81 100644
--- a/src/proto/message.pro
+++ b/src/proto/message.pro
@@ -39,7 +39,9 @@ void msg_puts_title __ARGS((char_u *s));
void msg_puts_long_attr __ARGS((char_u *longstr, int attr));
void msg_puts_long_len_attr __ARGS((char_u *longstr, int len, int attr));
void msg_puts_attr __ARGS((char_u *s, int attr));
+void may_clear_sb_text __ARGS((void));
void clear_sb_text __ARGS((void));
+void show_sb_text __ARGS((void));
int msg_use_printf __ARGS((void));
void mch_errmsg __ARGS((char *str));
void mch_msg __ARGS((char *str));
diff --git a/src/syntax.c b/src/syntax.c
index 714c90a99..99d9e6742 100644
--- a/src/syntax.c
+++ b/src/syntax.c
@@ -51,6 +51,9 @@ struct hl_group
#endif
int sg_link; /* link to this highlight group ID */
int sg_set; /* combination of SG_* flags */
+#ifdef FEAT_EVAL
+ scid_T sg_scriptID; /* script in which the group was last set */
+#endif
};
#define SG_TERM 1 /* term has been set */
@@ -6352,6 +6355,9 @@ do_highlight(line, forceit, init)
if (!init)
HL_TABLE()[from_id - 1].sg_set |= SG_LINK;
HL_TABLE()[from_id - 1].sg_link = to_id;
+#ifdef FEAT_EVAL
+ HL_TABLE()[from_id - 1].sg_scriptID = current_SID;
+#endif
redraw_all_later(NOT_VALID);
}
}
@@ -7101,6 +7107,9 @@ do_highlight(line, forceit, init)
#endif
else
set_hl_attr(idx);
+#ifdef FEAT_EVAL
+ HL_TABLE()[idx].sg_scriptID = current_SID;
+#endif
redraw_all_later(NOT_VALID);
}
vim_free(key);
@@ -7201,6 +7210,12 @@ highlight_clear(idx)
HL_TABLE()[idx].sg_font_name = NULL;
HL_TABLE()[idx].sg_gui_attr = 0;
#endif
+#ifdef FEAT_EVAL
+ /* Clear the script ID only when there is no link, since that is not
+ * cleared. */
+ if (HL_TABLE()[idx].sg_link == 0)
+ HL_TABLE()[idx].sg_scriptID = 0;
+#endif
}
#if defined(FEAT_GUI) || defined(PROTO)
@@ -7868,13 +7883,19 @@ highlight_list_one(id)
0, sgp->sg_font_name, "font");
#endif
- if (sgp->sg_link)
+ if (sgp->sg_link && !got_int)
{
(void)syn_list_header(didh, 9999, id);
+ didh = TRUE;
msg_puts_attr((char_u *)"links to", hl_attr(HLF_D));
msg_putchar(' ');
msg_outtrans(HL_TABLE()[HL_TABLE()[id - 1].sg_link - 1].sg_name);
}
+
+#ifdef FEAT_EVAL
+ if (didh && p_verbose > 0)
+ last_set_msg(sgp->sg_scriptID);
+#endif
}
static int
@@ -7890,6 +7911,8 @@ highlight_list_arg(id, didh, type, iarg, sarg, name)
char_u *ts;
int i;
+ if (got_int)
+ return FALSE;
if (type == LIST_STRING ? (sarg != NULL) : (iarg != 0))
{
ts = buf;
@@ -7915,10 +7938,12 @@ highlight_list_arg(id, didh, type, iarg, sarg, name)
(void)syn_list_header(didh,
(int)(vim_strsize(ts) + STRLEN(name) + 1), id);
didh = TRUE;
-
- MSG_PUTS_ATTR(name, hl_attr(HLF_D));
- MSG_PUTS_ATTR("=", hl_attr(HLF_D));
- msg_outtrans(ts);
+ if (!got_int)
+ {
+ MSG_PUTS_ATTR(name, hl_attr(HLF_D));
+ MSG_PUTS_ATTR("=", hl_attr(HLF_D));
+ msg_outtrans(ts);
+ }
}
return didh;
}
@@ -8068,11 +8093,17 @@ syn_list_header(did_header, outlen, id)
if (!did_header)
{
msg_putchar('\n');
+ if (got_int)
+ return TRUE;
msg_outtrans(HL_TABLE()[id - 1].sg_name);
endcol = 15;
}
else if (msg_col + outlen + 1 >= Columns)
+ {
msg_putchar('\n');
+ if (got_int)
+ return TRUE;
+ }
else
{
if (msg_col >= endcol) /* wrap around is like starting a new line */
diff --git a/src/version.h b/src/version.h
index 03557c29a..4d4421a64 100644
--- a/src/version.h
+++ b/src/version.h
@@ -36,5 +36,5 @@
#define VIM_VERSION_NODOT "vim70aa"
#define VIM_VERSION_SHORT "7.0aa"
#define VIM_VERSION_MEDIUM "7.0aa ALPHA"
-#define VIM_VERSION_LONG "VIM - Vi IMproved 7.0aa ALPHA (2005 Jul 27)"
-#define VIM_VERSION_LONG_DATE "VIM - Vi IMproved 7.0aa ALPHA (2005 Jul 27, compiled "
+#define VIM_VERSION_LONG "VIM - Vi IMproved 7.0aa ALPHA (2005 Jul 28)"
+#define VIM_VERSION_LONG_DATE "VIM - Vi IMproved 7.0aa ALPHA (2005 Jul 28, compiled "