From a0a04beaac8aea4fab1b1eff545194db0ad72a61 Mon Sep 17 00:00:00 2001 From: Alexander Lay-Calvert Date: Sat, 24 Sep 2022 13:50:52 -0400 Subject: [PATCH] Added toggling todos from a visual selection by passing ranges into the Telekasten command --- lua/telekasten.lua | 50 ++++++++++++++++++++++++++----------------- plugin/telekasten.vim | 2 +- 2 files changed, 31 insertions(+), 21 deletions(-) diff --git a/lua/telekasten.lua b/lua/telekasten.lua index 7899894..5e7678c 100644 --- a/lua/telekasten.lua +++ b/lua/telekasten.lua @@ -1532,8 +1532,7 @@ local function PreviewImg(opts) preview_type = "media", attach_mappings = function(prompt_bufnr, map) - actions.select_default:replace(function() - actions.close(prompt_bufnr) + actions.select_default:replace(function() actions.close(prompt_bufnr) end) map("i", "", picker_actions.yank_img_link(opts)) map("i", "", picker_actions.paste_img_link(opts)) @@ -2718,28 +2717,39 @@ local function ToggleTodo(opts) -- - [x] by - -- enter insert mode if opts.i == true opts = opts or {} - local linenr = vim.api.nvim_win_get_cursor(0)[1] - local curline = vim.api.nvim_buf_get_lines(0, linenr - 1, linenr, false)[1] - local stripped = vim.trim(curline) - local repline - if - vim.startswith(stripped, "- ") and not vim.startswith(stripped, "- [") - then - repline = curline:gsub("%- ", "- [ ] ", 1) - else - if vim.startswith(stripped, "- [ ]") then - repline = curline:gsub("%- %[ %]", "- [x]", 1) + -- Neovim sends wrong visual selection when using a mapping + -- See https://github.com/neovim/neovim/issues/15144 + vim.cmd("execute 'normal! \\'") + local startline = vim.api.nvim_buf_get_mark(0, "<")[1] + local endline = vim.api.nvim_buf_get_mark(0, ">")[1] + local cursorlinenr = vim.api.nvim_win_get_cursor(0)[1] + if startline == 0 or endline == 0 then + startline = cursorlinenr + endline = cursorlinenr + end + for curlinenr = startline, endline do + local curline = vim.api.nvim_buf_get_lines(0, curlinenr - 1, curlinenr, false)[1] + local stripped = vim.trim(curline) + local repline + if + vim.startswith(stripped, "- ") and not vim.startswith(stripped, "- [") + then + repline = curline:gsub("%- ", "- [ ] ", 1) else - if vim.startswith(stripped, "- [x]") then - repline = curline:gsub("%- %[x%]", "-", 1) + if vim.startswith(stripped, "- [ ]") then + repline = curline:gsub("%- %[ %]", "- [x]", 1) else - repline = curline:gsub("(%S)", "- [ ] %1", 1) + if vim.startswith(stripped, "- [x]") then + repline = curline:gsub("%- %[x%]", "-", 1) + else + repline = curline:gsub("(%S)", "- [ ] %1", 1) + end end end - end - vim.api.nvim_buf_set_lines(0, linenr - 1, linenr, false, { repline }) - if opts.i then - vim.api.nvim_feedkeys("A", "m", false) + vim.api.nvim_buf_set_lines(0, curlinenr - 1, curlinenr, false, { repline }) + if opts.i then + vim.api.nvim_feedkeys("A", "m", false) + end end end diff --git a/plugin/telekasten.vim b/plugin/telekasten.vim index fefba0b..24011eb 100644 --- a/plugin/telekasten.vim +++ b/plugin/telekasten.vim @@ -8,7 +8,7 @@ function! s:telekasten_complete(arg,line,pos) return join(l:candidates, "\n") endfunction -command! -nargs=? -complete=custom,s:telekasten_complete Telekasten lua require('telekasten').panel() +command! -nargs=? -range -complete=custom,s:telekasten_complete Telekasten lua require('telekasten').panel() " overriding does not work -- so this is done by the plugin now in post_open() " au BufNewFile,BufRead *.markdown,*.mdown,*.mkd,*.mkdn,*.mdwn,*.md setf telekasten