mirror of
https://github.com/neovim/neovim.git
synced 2025-10-01 15:38:33 +00:00
Merge pull request #5600 from jamessan/vim-7.4.1640
vim-patch:7.4.1640,7.4.1647,7.4.1650,7.4.1664
This commit is contained in:
@@ -836,7 +836,7 @@ char *encode_tv2json(typval_T *tv, size_t *len)
|
||||
msgpack_pack_double(packer, (double) (flt))
|
||||
|
||||
#define TYPVAL_ENCODE_CONV_FUNC(fun) \
|
||||
return conv_error(_("E951: Error while dumping %s, %s: " \
|
||||
return conv_error(_("E5004: Error while dumping %s, %s: " \
|
||||
"attempt to dump function reference"), \
|
||||
mpstack, objname)
|
||||
|
||||
@@ -880,7 +880,7 @@ char *encode_tv2json(typval_T *tv, size_t *len)
|
||||
#define TYPVAL_ENCODE_CONV_LIST_BETWEEN_ITEMS()
|
||||
|
||||
#define TYPVAL_ENCODE_CONV_RECURSE(val, conv_type) \
|
||||
return conv_error(_("E952: Unable to dump %s: " \
|
||||
return conv_error(_("E5005: Unable to dump %s: " \
|
||||
"container references itself in %s"), \
|
||||
mpstack, objname)
|
||||
|
||||
|
@@ -482,9 +482,11 @@ qf_init_ext (
|
||||
|
||||
p_str += len;
|
||||
} else if (tv->v_type == VAR_LIST) {
|
||||
/* Get the next line from the supplied list */
|
||||
while (p_li && p_li->li_tv.v_type != VAR_STRING)
|
||||
p_li = p_li->li_next; /* Skip non-string items */
|
||||
// Get the next line from the supplied list
|
||||
while (p_li && (p_li->li_tv.v_type != VAR_STRING
|
||||
|| p_li->li_tv.vval.v_string == NULL)) {
|
||||
p_li = p_li->li_next; // Skip non-string items
|
||||
}
|
||||
|
||||
if (!p_li) /* End of the list */
|
||||
break;
|
||||
@@ -910,7 +912,9 @@ static int qf_add_entry(qf_info_T *qi, qfline_T **prevp, char_u *dir,
|
||||
if (qi->qf_lists[qi->qf_curlist].qf_count == 0) {
|
||||
/* first element in the list */
|
||||
qi->qf_lists[qi->qf_curlist].qf_start = qfp;
|
||||
qfp->qf_prev = qfp; /* first element points to itself */
|
||||
qi->qf_lists[qi->qf_curlist].qf_ptr = qfp;
|
||||
qi->qf_lists[qi->qf_curlist].qf_index = 0;
|
||||
qfp->qf_prev = qfp; // first element points to itself
|
||||
} else {
|
||||
assert(*prevp);
|
||||
qfp->qf_prev = *prevp;
|
||||
@@ -1254,6 +1258,32 @@ static char_u *qf_guess_filepath(char_u *filename)
|
||||
|
||||
}
|
||||
|
||||
/// When loading a file from the quickfix, the auto commands may modify it.
|
||||
/// This may invalidate the current quickfix entry. This function checks
|
||||
/// whether a entry is still present in the quickfix.
|
||||
/// Similar to location list.
|
||||
static bool is_qf_entry_present(qf_info_T *qi, qfline_T *qf_ptr)
|
||||
{
|
||||
qf_list_T *qfl;
|
||||
qfline_T *qfp;
|
||||
int i;
|
||||
|
||||
qfl = &qi->qf_lists[qi->qf_curlist];
|
||||
|
||||
// Search for the entry in the current list
|
||||
for (i = 0, qfp = qfl->qf_start; i < qfl->qf_count; i++, qfp = qfp->qf_next) {
|
||||
if (qfp == qf_ptr) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (i == qfl->qf_count) { // Entry is not found
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/*
|
||||
* jump to a quickfix line
|
||||
* if dir == FORWARD go "errornr" valid entries forward
|
||||
@@ -1585,14 +1615,29 @@ win_found:
|
||||
oldwin == curwin ? curwin : NULL);
|
||||
}
|
||||
} else {
|
||||
int old_qf_curlist = qi->qf_curlist;
|
||||
bool is_abort = false;
|
||||
|
||||
ok = buflist_getfile(qf_ptr->qf_fnum, (linenr_T)1,
|
||||
GETF_SETMARK | GETF_SWITCH, forceit);
|
||||
if (qi != &ql_info && !win_valid(oldwin)) {
|
||||
EMSG(_("E924: Current window was closed"));
|
||||
is_abort = true;
|
||||
opened_window = false;
|
||||
} else if (old_qf_curlist != qi->qf_curlist
|
||||
|| !is_qf_entry_present(qi, qf_ptr)) {
|
||||
if (qi == &ql_info) {
|
||||
EMSG(_("E925: Current quickfix was changed"));
|
||||
} else {
|
||||
EMSG(_("E926: Current location list was changed"));
|
||||
}
|
||||
is_abort = true;
|
||||
}
|
||||
|
||||
if (is_abort) {
|
||||
ok = false;
|
||||
qi = NULL;
|
||||
qf_ptr = NULL;
|
||||
opened_window = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -3580,7 +3625,9 @@ int set_errorlist(win_T *wp, list_T *list, int action, char_u *title)
|
||||
else
|
||||
qi->qf_lists[qi->qf_curlist].qf_nonevalid = FALSE;
|
||||
qi->qf_lists[qi->qf_curlist].qf_ptr = qi->qf_lists[qi->qf_curlist].qf_start;
|
||||
qi->qf_lists[qi->qf_curlist].qf_index = 1;
|
||||
if (qi->qf_lists[qi->qf_curlist].qf_count > 0) {
|
||||
qi->qf_lists[qi->qf_curlist].qf_index = 1;
|
||||
}
|
||||
|
||||
qf_update_buffer(qi);
|
||||
|
||||
|
@@ -691,7 +691,7 @@ char *u_get_undo_file_name(const char *const buf_ffname, const bool reading)
|
||||
int ret;
|
||||
char *failed_dir;
|
||||
if ((ret = os_mkdir_recurse(dir_name, 0755, &failed_dir)) != 0) {
|
||||
EMSG3(_("E926: Unable to create directory \"%s\" for undo file: %s"),
|
||||
EMSG3(_("E5003: Unable to create directory \"%s\" for undo file: %s"),
|
||||
failed_dir, os_strerror(ret));
|
||||
xfree(failed_dir);
|
||||
} else {
|
||||
|
@@ -747,7 +747,7 @@ static int included_patches[] = {
|
||||
1700,
|
||||
// 1699,
|
||||
// 1698 NA
|
||||
// 1697,
|
||||
1697,
|
||||
// 1696,
|
||||
1695,
|
||||
// 1694 NA
|
||||
@@ -780,7 +780,7 @@ static int included_patches[] = {
|
||||
// 1667 NA
|
||||
// 1666 NA
|
||||
// 1665 NA
|
||||
// 1664,
|
||||
1664,
|
||||
1663,
|
||||
// 1662 NA
|
||||
// 1661 NA
|
||||
@@ -794,17 +794,17 @@ static int included_patches[] = {
|
||||
// 1653 NA
|
||||
1652,
|
||||
// 1651 NA
|
||||
// 1650,
|
||||
1650,
|
||||
1649,
|
||||
1648,
|
||||
// 1647,
|
||||
1647,
|
||||
// 1646 NA
|
||||
// 1645,
|
||||
// 1644,
|
||||
1643,
|
||||
1642,
|
||||
1641,
|
||||
// 1640,
|
||||
1640,
|
||||
// 1639,
|
||||
// 1638,
|
||||
// 1637 NA
|
||||
|
Reference in New Issue
Block a user