mirror of
https://github.com/neovim/neovim.git
synced 2025-02-25 18:55:25 -06:00
This reverts commit 8b8ecf44f2
.
It is causing performance problems on exit.
Fix #21082.
This commit is contained in:
parent
0371d0f7af
commit
3b75485043
@ -1380,18 +1380,21 @@ void mark_col_adjust(linenr_T lnum, colnr_T mincol, linenr_T lnum_amount, long c
|
||||
|
||||
// When deleting lines, this may create duplicate marks in the
|
||||
// jumplist. They will be removed here for the specified window.
|
||||
// When "checktail" is true, removes tail jump if it matches current position.
|
||||
void cleanup_jumplist(win_T *wp, bool checktail)
|
||||
// When "loadfiles" is true first ensure entries have the "fnum" field set
|
||||
// (this may be a bit slow).
|
||||
void cleanup_jumplist(win_T *wp, bool loadfiles)
|
||||
{
|
||||
int i;
|
||||
|
||||
// Load all the files from the jump list. This is
|
||||
// needed to properly clean up duplicate entries, but will take some
|
||||
// time.
|
||||
for (i = 0; i < wp->w_jumplistlen; i++) {
|
||||
if ((wp->w_jumplist[i].fmark.fnum == 0)
|
||||
&& (wp->w_jumplist[i].fmark.mark.lnum != 0)) {
|
||||
fname2fnum(&wp->w_jumplist[i]);
|
||||
if (loadfiles) {
|
||||
// If specified, load all the files from the jump list. This is
|
||||
// needed to properly clean up duplicate entries, but will take some
|
||||
// time.
|
||||
for (i = 0; i < wp->w_jumplistlen; i++) {
|
||||
if ((wp->w_jumplist[i].fmark.fnum == 0)
|
||||
&& (wp->w_jumplist[i].fmark.mark.lnum != 0)) {
|
||||
fname2fnum(&wp->w_jumplist[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1439,8 +1442,8 @@ void cleanup_jumplist(win_T *wp, bool checktail)
|
||||
|
||||
// When pointer is below last jump, remove the jump if it matches the current
|
||||
// line. This avoids useless/phantom jumps. #9805
|
||||
if (checktail && wp->w_jumplistlen
|
||||
&& wp->w_jumplistidx == wp->w_jumplistlen) {
|
||||
if (loadfiles // otherwise (i.e.: Shada), last entry should be kept
|
||||
&& wp->w_jumplistlen && wp->w_jumplistidx == wp->w_jumplistlen) {
|
||||
const xfmark_T *fm_last = &wp->w_jumplist[wp->w_jumplistlen - 1];
|
||||
if (fm_last->fmark.fnum == curbuf->b_fnum
|
||||
&& fm_last->fmark.mark.lnum == wp->w_cursor.lnum) {
|
||||
|
@ -2667,8 +2667,6 @@ static ShaDaWriteResult shada_write(ShaDaWriteDef *const sd_writer, ShaDaReadDef
|
||||
}
|
||||
|
||||
// Initialize jump list
|
||||
setpcmark();
|
||||
cleanup_jumplist(curwin, false);
|
||||
wms->jumps_size = shada_init_jumps(wms->jumps, &removable_bufs);
|
||||
|
||||
const bool search_highlighted = !(no_hlsearch
|
||||
@ -4038,13 +4036,11 @@ static bool shada_removable(const char *name)
|
||||
static inline size_t shada_init_jumps(PossiblyFreedShadaEntry *jumps,
|
||||
khash_t(bufset) *const removable_bufs)
|
||||
{
|
||||
if (!curwin->w_jumplistlen) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Initialize jump list
|
||||
size_t jumps_size = 0;
|
||||
const void *jump_iter = NULL;
|
||||
|
||||
setpcmark();
|
||||
cleanup_jumplist(curwin, false);
|
||||
do {
|
||||
xfmark_T fm;
|
||||
jump_iter = mark_jumplist_iter(jump_iter, curwin, &fm);
|
||||
@ -4117,7 +4113,6 @@ void shada_encode_jumps(msgpack_sbuffer *const sbuf)
|
||||
khash_t(bufset) removable_bufs = KHASH_EMPTY_TABLE(bufset);
|
||||
find_removable_bufs(&removable_bufs);
|
||||
PossiblyFreedShadaEntry jumps[JUMPLISTSIZE];
|
||||
cleanup_jumplist(curwin, true);
|
||||
size_t jumps_size = shada_init_jumps(jumps, &removable_bufs);
|
||||
msgpack_packer packer;
|
||||
msgpack_packer_init(&packer, sbuf, msgpack_sbuffer_write);
|
||||
|
@ -1807,9 +1807,11 @@ describe('API', function()
|
||||
},
|
||||
|
||||
['jumps'] = eval(([[
|
||||
filter(map(getjumplist()[0], 'filter(
|
||||
{ "f": expand("#".v:val.bufnr.":p"), "l": v:val.lnum },
|
||||
{ k, v -> k != "l" || v != 1 })'), '!empty(v:val.f)')
|
||||
filter(map(add(
|
||||
getjumplist()[0], { 'bufnr': bufnr('%'), 'lnum': getcurpos()[1] }),
|
||||
'filter(
|
||||
{ "f": expand("#".v:val.bufnr.":p"), "l": v:val.lnum },
|
||||
{ k, v -> k != "l" || v != 1 })'), '!empty(v:val.f)')
|
||||
]]):gsub('\n', '')),
|
||||
|
||||
['bufs'] = eval([[
|
||||
|
@ -287,9 +287,11 @@ describe('context functions', function()
|
||||
|
||||
local with_jumps = {
|
||||
['jumps'] = eval(([[
|
||||
filter(map(getjumplist()[0], 'filter(
|
||||
{ "f": expand("#".v:val.bufnr.":p"), "l": v:val.lnum },
|
||||
{ k, v -> k != "l" || v != 1 })'), '!empty(v:val.f)')
|
||||
filter(map(add(
|
||||
getjumplist()[0], { 'bufnr': bufnr('%'), 'lnum': getcurpos()[1] }),
|
||||
'filter(
|
||||
{ "f": expand("#".v:val.bufnr.":p"), "l": v:val.lnum },
|
||||
{ k, v -> k != "l" || v != 1 })'), '!empty(v:val.f)')
|
||||
]]):gsub('\n', ''))
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user