mirror of
https://github.com/neovim/neovim.git
synced 2025-09-07 20:08:17 +00:00

committed by
Justin M. Keyes

parent
a011f8a321
commit
35362495c9
@@ -319,6 +319,9 @@ Macro/|recording| behavior
|
|||||||
macros and 'keymap' at the same time. This also means you can use |:imap| on
|
macros and 'keymap' at the same time. This also means you can use |:imap| on
|
||||||
the results of keys from 'keymap'.
|
the results of keys from 'keymap'.
|
||||||
|
|
||||||
|
Motion:
|
||||||
|
The |jumplist| avoids useless/phantom jumps.
|
||||||
|
|
||||||
Normal commands:
|
Normal commands:
|
||||||
|Q| is the same as |gQ|
|
|Q| is the same as |gQ|
|
||||||
|
|
||||||
|
@@ -1188,9 +1188,23 @@ void cleanup_jumplist(void)
|
|||||||
xfree(curwin->w_jumplist[from].fname);
|
xfree(curwin->w_jumplist[from].fname);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (curwin->w_jumplistidx == curwin->w_jumplistlen)
|
if (curwin->w_jumplistidx == curwin->w_jumplistlen) {
|
||||||
curwin->w_jumplistidx = to;
|
curwin->w_jumplistidx = to;
|
||||||
|
}
|
||||||
curwin->w_jumplistlen = to;
|
curwin->w_jumplistlen = to;
|
||||||
|
|
||||||
|
// When pointer is below last jump, remove the jump if it matches the current
|
||||||
|
// line. This avoids useless/phantom jumps. #9805
|
||||||
|
if (curwin->w_jumplistlen
|
||||||
|
&& curwin->w_jumplistidx == curwin->w_jumplistlen) {
|
||||||
|
const xfmark_T *fm_last = &curwin->w_jumplist[curwin->w_jumplistlen - 1];
|
||||||
|
if (fm_last->fmark.fnum == curbuf->b_fnum
|
||||||
|
&& fm_last->fmark.mark.lnum == curwin->w_cursor.lnum) {
|
||||||
|
xfree(fm_last->fname);
|
||||||
|
curwin->w_jumplistlen--;
|
||||||
|
curwin->w_jumplistidx--;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@@ -2739,8 +2739,8 @@ static ShaDaWriteResult shada_write(ShaDaWriteDef *const sd_writer,
|
|||||||
|
|
||||||
// Initialize jump list
|
// Initialize jump list
|
||||||
const void *jump_iter = NULL;
|
const void *jump_iter = NULL;
|
||||||
setpcmark();
|
|
||||||
cleanup_jumplist();
|
cleanup_jumplist();
|
||||||
|
setpcmark();
|
||||||
do {
|
do {
|
||||||
xfmark_T fm;
|
xfmark_T fm;
|
||||||
jump_iter = mark_jumplist_iter(jump_iter, curwin, &fm);
|
jump_iter = mark_jumplist_iter(jump_iter, curwin, &fm);
|
||||||
|
48
test/functional/normal/jump_spec.lua
Normal file
48
test/functional/normal/jump_spec.lua
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
local helpers = require('test.functional.helpers')(after_each)
|
||||||
|
|
||||||
|
local clear = helpers.clear
|
||||||
|
local command = helpers.command
|
||||||
|
local eq = helpers.eq
|
||||||
|
local funcs = helpers.funcs
|
||||||
|
local feed = helpers.feed
|
||||||
|
local write_file = helpers.write_file
|
||||||
|
|
||||||
|
describe('jumplist', function()
|
||||||
|
local fname1 = 'Xtest-functional-normal-jump'
|
||||||
|
local fname2 = fname1..'2'
|
||||||
|
before_each(clear)
|
||||||
|
after_each(function()
|
||||||
|
os.remove(fname1)
|
||||||
|
os.remove(fname2)
|
||||||
|
end)
|
||||||
|
|
||||||
|
it('does not add a new entry on startup', function()
|
||||||
|
eq('\n jump line col file/text\n>', funcs.execute('jumps'))
|
||||||
|
end)
|
||||||
|
|
||||||
|
it('does not require two <C-O> strokes to jump back', function()
|
||||||
|
write_file(fname1, 'first file contents')
|
||||||
|
write_file(fname2, 'second file contents')
|
||||||
|
|
||||||
|
command('args '..fname1..' '..fname2)
|
||||||
|
local buf1 = funcs.bufnr(fname1)
|
||||||
|
local buf2 = funcs.bufnr(fname2)
|
||||||
|
|
||||||
|
command('next')
|
||||||
|
feed('<C-O>')
|
||||||
|
eq(buf1, funcs.bufnr('%'))
|
||||||
|
|
||||||
|
command('first')
|
||||||
|
command('snext')
|
||||||
|
feed('<C-O>')
|
||||||
|
eq(buf1, funcs.bufnr('%'))
|
||||||
|
feed('<C-I>')
|
||||||
|
eq(buf2, funcs.bufnr('%'))
|
||||||
|
feed('<C-O>')
|
||||||
|
eq(buf1, funcs.bufnr('%'))
|
||||||
|
|
||||||
|
command('drop '..fname2)
|
||||||
|
feed('<C-O>')
|
||||||
|
eq(buf1, funcs.bufnr('%'))
|
||||||
|
end)
|
||||||
|
end)
|
@@ -189,9 +189,6 @@ describe('ShaDa support code', function()
|
|||||||
eq(1, nvim_current_line())
|
eq(1, nvim_current_line())
|
||||||
nvim_command('execute "normal! \\<C-o>"')
|
nvim_command('execute "normal! \\<C-o>"')
|
||||||
eq(testfilename, funcs.bufname('%'))
|
eq(testfilename, funcs.bufname('%'))
|
||||||
eq(1, nvim_current_line())
|
|
||||||
nvim_command('execute "normal! \\<C-o>"')
|
|
||||||
eq(testfilename, funcs.bufname('%'))
|
|
||||||
eq(2, nvim_current_line())
|
eq(2, nvim_current_line())
|
||||||
nvim_command('execute "normal! \\<C-o>"')
|
nvim_command('execute "normal! \\<C-o>"')
|
||||||
eq(testfilename_2, funcs.bufname('%'))
|
eq(testfilename_2, funcs.bufname('%'))
|
||||||
@@ -199,6 +196,9 @@ describe('ShaDa support code', function()
|
|||||||
nvim_command('execute "normal! \\<C-o>"')
|
nvim_command('execute "normal! \\<C-o>"')
|
||||||
eq(testfilename_2, funcs.bufname('%'))
|
eq(testfilename_2, funcs.bufname('%'))
|
||||||
eq(2, nvim_current_line())
|
eq(2, nvim_current_line())
|
||||||
|
nvim_command('execute "normal! \\<C-o>"')
|
||||||
|
eq(testfilename_2, funcs.bufname('%'))
|
||||||
|
eq(2, nvim_current_line())
|
||||||
end)
|
end)
|
||||||
|
|
||||||
it('is able to dump and restore change list', function()
|
it('is able to dump and restore change list', function()
|
||||||
|
@@ -912,12 +912,11 @@ describe('ShaDa jumps support code', function()
|
|||||||
eq('', curbufmeths.get_name())
|
eq('', curbufmeths.get_name())
|
||||||
eq('\n'
|
eq('\n'
|
||||||
.. ' jump line col file/text\n'
|
.. ' jump line col file/text\n'
|
||||||
.. ' 6 2 0 ' .. mock_file_path .. 'c\n'
|
.. ' 5 2 0 ' .. mock_file_path .. 'c\n'
|
||||||
.. ' 5 2 0 ' .. mock_file_path .. 'd\n'
|
.. ' 4 2 0 ' .. mock_file_path .. 'd\n'
|
||||||
.. ' 4 3 0 ' .. mock_file_path .. 'd\n'
|
.. ' 3 3 0 ' .. mock_file_path .. 'd\n'
|
||||||
.. ' 3 2 0 ' .. mock_file_path .. 'e\n'
|
.. ' 2 2 0 ' .. mock_file_path .. 'e\n'
|
||||||
.. ' 2 2 0 ' .. mock_file_path .. 'f\n'
|
.. ' 1 2 0 ' .. mock_file_path .. 'f\n'
|
||||||
.. ' 1 1 0 \n'
|
|
||||||
.. '>', redir_exec('jumps'))
|
.. '>', redir_exec('jumps'))
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user