fix: get mark list from opts.bufnr instead of using :marks (#1935)
Should fix marks when going through builtin.builtin
This commit is contained in:
@@ -993,11 +993,45 @@ internal.colorscheme = function(opts)
|
|||||||
end
|
end
|
||||||
|
|
||||||
internal.marks = function(opts)
|
internal.marks = function(opts)
|
||||||
local marks = vim.api.nvim_exec("marks", true)
|
local local_marks = {
|
||||||
local marks_table = vim.fn.split(marks, "\n")
|
items = vim.fn.getmarklist(opts.bufnr),
|
||||||
|
name_func = function(_, line)
|
||||||
-- Pop off the header.
|
return vim.api.nvim_buf_get_lines(opts.bufnr, line - 1, line, false)[1]
|
||||||
table.remove(marks_table, 1)
|
end,
|
||||||
|
}
|
||||||
|
local global_marks = {
|
||||||
|
items = vim.fn.getmarklist(),
|
||||||
|
name_func = function(mark, _)
|
||||||
|
-- get buffer name if it is opened, otherwise get file name
|
||||||
|
return vim.api.nvim_get_mark(mark, {})[4]
|
||||||
|
end,
|
||||||
|
}
|
||||||
|
local marks_table = {}
|
||||||
|
local marks_others = {}
|
||||||
|
local bufname = vim.api.nvim_buf_get_name(opts.bufnr)
|
||||||
|
for _, cnf in ipairs { local_marks, global_marks } do
|
||||||
|
for _, v in ipairs(cnf.items) do
|
||||||
|
-- strip the first single quote character
|
||||||
|
local mark = string.sub(v.mark, 2, 3)
|
||||||
|
local _, lnum, col, _ = unpack(v.pos)
|
||||||
|
local name = cnf.name_func(mark, lnum)
|
||||||
|
-- same format to :marks command
|
||||||
|
local line = string.format("%s %6d %4d %s", mark, lnum, col - 1, name)
|
||||||
|
local row = {
|
||||||
|
line = line,
|
||||||
|
lnum = lnum,
|
||||||
|
col = col,
|
||||||
|
filename = v.file or bufname,
|
||||||
|
}
|
||||||
|
-- non alphanumeric marks goes to last
|
||||||
|
if mark:match "%w" then
|
||||||
|
table.insert(marks_table, row)
|
||||||
|
else
|
||||||
|
table.insert(marks_others, row)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
marks_table = vim.fn.extend(marks_table, marks_others)
|
||||||
|
|
||||||
pickers.new(opts, {
|
pickers.new(opts, {
|
||||||
prompt_title = "Marks",
|
prompt_title = "Marks",
|
||||||
|
|||||||
@@ -635,20 +635,15 @@ function make_entry.gen_from_apropos(opts)
|
|||||||
end
|
end
|
||||||
|
|
||||||
function make_entry.gen_from_marks(_)
|
function make_entry.gen_from_marks(_)
|
||||||
return function(line)
|
return function(item)
|
||||||
local split_value = utils.max_split(line, "%s+", 4)
|
|
||||||
|
|
||||||
local mark_value = split_value[1]
|
|
||||||
local cursor_position = vim.fn.getpos("'" .. mark_value)
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
value = line,
|
value = item.line,
|
||||||
ordinal = line,
|
ordinal = item.line,
|
||||||
display = line,
|
display = item.line,
|
||||||
lnum = cursor_position[2],
|
lnum = item.lnum,
|
||||||
col = cursor_position[3],
|
col = item.col,
|
||||||
start = cursor_position[2],
|
start = item.lnum,
|
||||||
filename = vim.api.nvim_buf_get_name(cursor_position[1]),
|
filename = item.filename,
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user