From 7f8410ff4b0de20caeb240a40ae80588d1a6e538 Mon Sep 17 00:00:00 2001 From: Michiel van den Heuvel Date: Tue, 27 Jun 2023 14:42:03 +0200 Subject: Move confirmation and selection functions up --- init.lua | 158 +++++++++++++++++++++++++++++++-------------------------------- 1 file changed, 79 insertions(+), 79 deletions(-) (limited to 'init.lua') diff --git a/init.lua b/init.lua index 843bfdc..0498ae5 100644 --- a/init.lua +++ b/init.lua @@ -307,85 +307,6 @@ local function lsp_range_to_vis_range(win, lsp_range) return {start = start_pos, finish = finish_pos} end --- open a doc_pos using the vis command -local function vis_open_doc_pos(doc_pos, cmd, win) - if win and win ~= vis.win then - vis.win = win - end - assert(cmd) - if vis.win.file.path ~= doc_pos.file then - vis:command(string.format('%s \'%s\'', cmd, doc_pos.file)) - vis.win.selection:to(doc_pos.line, doc_pos.col) - vis:command('lspc-open') - else - vis.win.selection:to(doc_pos.line, doc_pos.col) - end -end - --- Support jumping between document positions --- Stack of edited document positions -local doc_pos_history = {} - -local function vis_push_doc_pos(win) - local old_doc_pos = vis_get_doc_pos(win) - table.insert(doc_pos_history, old_doc_pos) -end - --- open a new doc_pos remembering the old if it is replaced -local function vis_open_new_doc_pos(doc_pos, cmd, win) - win = win or vis.win - if cmd == 'e' then - vis_push_doc_pos(win) - end - - vis_open_doc_pos(doc_pos, cmd, win) -end - -local function vis_pop_doc_pos(win) - local last_doc_pos = table.remove(doc_pos_history) - if not last_doc_pos then - return 'Document history is empty' - end - - vis_open_doc_pos(last_doc_pos, 'e', win) -end - --- apply a textEdit received from the language server -local function vis_apply_textEdit(win, file, textEdit) - assert(win.file == file) - - local range = lsp_range_to_vis_range(win, textEdit.range) - - file:delete(range) - file:insert(range.start, textEdit.newText) - - win.selection.anchored = false - win.selection.pos = range.start + string.len(textEdit.newText) - - win:draw() -end - --- apply a list of textEdits received from the language server -local function vis_apply_textEdits(win, file, textEdits) - assert(win.file == file) - - local edits = {} - for _, textEdit in ipairs(textEdits) do - local range = lsp_range_to_vis_range(win, textEdit.range) - table.insert(edits, { - mark = file:mark_set(range.start), - len = range.finish - range.start, - newText = textEdit.newText, - }) - end - for _, edit in ipairs(edits) do - local pos = file:mark_get(edit.mark) - file:delete(pos, edit.len) - file:insert(pos, edit.newText) - end - win:draw() -end - -- concatenate all numeric values in choices and pass it on stdin to lspc.menu_cmd local function lspc_select(choices) local menu_input = '' @@ -478,6 +399,85 @@ local function lspc_confirm(prompt) return choice == 'yes' end +-- open a doc_pos using the vis command +local function vis_open_doc_pos(doc_pos, cmd, win) + if win and win ~= vis.win then + vis.win = win + end + assert(cmd) + if vis.win.file.path ~= doc_pos.file then + vis:command(string.format('%s \'%s\'', cmd, doc_pos.file)) + vis.win.selection:to(doc_pos.line, doc_pos.col) + vis:command('lspc-open') + else + vis.win.selection:to(doc_pos.line, doc_pos.col) + end +end + +-- Support jumping between document positions +-- Stack of edited document positions +local doc_pos_history = {} + +local function vis_push_doc_pos(win) + local old_doc_pos = vis_get_doc_pos(win) + table.insert(doc_pos_history, old_doc_pos) +end + +-- open a new doc_pos remembering the old if it is replaced +local function vis_open_new_doc_pos(doc_pos, cmd, win) + win = win or vis.win + if cmd == 'e' then + vis_push_doc_pos(win) + end + + vis_open_doc_pos(doc_pos, cmd, win) +end + +local function vis_pop_doc_pos(win) + local last_doc_pos = table.remove(doc_pos_history) + if not last_doc_pos then + return 'Document history is empty' + end + + vis_open_doc_pos(last_doc_pos, 'e', win) +end + +-- apply a textEdit received from the language server +local function vis_apply_textEdit(win, file, textEdit) + assert(win.file == file) + + local range = lsp_range_to_vis_range(win, textEdit.range) + + file:delete(range) + file:insert(range.start, textEdit.newText) + + win.selection.anchored = false + win.selection.pos = range.start + string.len(textEdit.newText) + + win:draw() +end + +-- apply a list of textEdits received from the language server +local function vis_apply_textEdits(win, file, textEdits) + assert(win.file == file) + + local edits = {} + for _, textEdit in ipairs(textEdits) do + local range = lsp_range_to_vis_range(win, textEdit.range) + table.insert(edits, { + mark = file:mark_set(range.start), + len = range.finish - range.start, + newText = textEdit.newText, + }) + end + for _, edit in ipairs(edits) do + local pos = file:mark_get(edit.mark) + file:delete(pos, edit.len) + file:insert(pos, edit.newText) + end + win:draw() +end + -- apply a WorkspaceEdit received from the language server local function vis_apply_workspaceEdit(_, _, workspaceEdit) local file_edits = workspaceEdit.changes -- cgit v1.2.3