🐻 minimal ui2 fuzzy finder for Neovim codeberg.org/comfysage/artio.nvim
3
fork

Configure Feed

Select the types of activity you want to include in your feed.

feat(builtins): create `quickfix` builtin

robin 3c4ab66c e89201a1

+72 -14
+6
doc/artio.txt
··· 335 335 336 336 Plug: `<Plug>(artio-keymaps)`. 337 337 338 + builtins.quickfix() *artio-keymaps* 339 + 340 + show current quickfix list. allows previewing items and updating the list. 341 + 342 + Plug: `<Plug>(artio-quickfix)`. 343 + 338 344 vim:tw=78:ts=8:noet:ft=help:norl:
+48 -14
lua/artio/builtins.lua
··· 144 144 get_icon = config.get().opts.use_icons and function(item) 145 145 return require("mini.icons").get("file", item.v[1]) 146 146 end or nil, 147 - hl_item = function(item) 148 - local name_end = string.find(item.text, ":") - 1 149 - local lnum_end = string.find(item.text, ":", name_end + 2) - 1 150 - local col_end = string.find(item.text, ":", lnum_end + 2) - 1 151 - 152 - return { 153 - { { 0, name_end }, "Title" }, 154 - { { name_end, name_end + 1 }, "NonText" }, 155 - { { name_end + 1, lnum_end }, "Number" }, 156 - { { lnum_end, lnum_end + 1 }, "NonText" }, 157 - { { lnum_end + 1, col_end }, "Number" }, 158 - { { col_end, col_end + 1 }, "NonText" }, 159 - } 160 - end, 147 + hl_item = utils.hl_qfitem, 161 148 actions = extend( 162 149 {}, 163 150 utils.make_setqflistactions(function(item) ··· 606 593 vim.print(out) 607 594 end) 608 595 end, 596 + }, props) 597 + ) 598 + end 599 + 600 + builtins.quickfix = function(props) 601 + props = props or {} 602 + 603 + local qfid = vim.fn.getqflist({ id = 0 }).id 604 + local qflist = vim.fn.getqflist({ id = qfid, items = 0 }).items 605 + 606 + return artio.generic( 607 + vim 608 + .iter(ipairs(qflist)) 609 + :map(function(_, item) 610 + item.name = vim.fn.bufname(item.bufnr) 611 + return item 612 + end) 613 + :totable(), 614 + extend({ 615 + prompt = "quickfix", 616 + on_close = function(_, idx) 617 + artio.schedule(function() 618 + vim.cmd([[copen]]) 619 + local win = vim.fn.getqflist({ id = qfid, winid = 0 }).winid 620 + vim.api.nvim_win_set_cursor(win, { idx, 0 }) 621 + end) 622 + end, 623 + format_item = function(item) 624 + return string.format("%s:%d:%d:%s", item.name, item.lnum, item.col, item.text) 625 + end, 626 + preview_item = function(item) 627 + return item.bufnr, 628 + function(w) 629 + vim.api.nvim_set_option_value("cursorline", true, { scope = "local", win = w }) 630 + vim.api.nvim_win_set_cursor(w, { item.lnum, item.col }) 631 + end 632 + end, 633 + get_icon = config.get().opts.use_icons and function(item) 634 + return require("mini.icons").get("file", item.v.name) 635 + end or nil, 636 + hl_item = utils.hl_qfitem, 637 + actions = extend( 638 + {}, 639 + utils.make_setqflistactions(function(item) 640 + return item.v 641 + end) 642 + ), 609 643 }, props) 610 644 ) 611 645 end
+15
lua/artio/utils.lua
··· 126 126 } 127 127 end 128 128 129 + function utils.hl_qfitem(item) 130 + local name_end = string.find(item.text, ":") - 1 131 + local lnum_end = string.find(item.text, ":", name_end + 2) - 1 132 + local col_end = string.find(item.text, ":", lnum_end + 2) - 1 133 + 134 + return { 135 + { { 0, name_end }, "Title" }, 136 + { { name_end, name_end + 1 }, "NonText" }, 137 + { { name_end + 1, lnum_end }, "Number" }, 138 + { { lnum_end, lnum_end + 1 }, "NonText" }, 139 + { { lnum_end + 1, col_end }, "Number" }, 140 + { { col_end, col_end + 1 }, "NonText" }, 141 + } 142 + end 143 + 129 144 return utils
+3
plugin/artio.lua
··· 100 100 vim.keymap.set("n", "<Plug>(artio-keymaps)", function() 101 101 return require("artio.builtins").keymaps() 102 102 end) 103 + vim.keymap.set("n", "<Plug>(artio-quickfix)", function() 104 + return require("artio.builtins").quickfix() 105 + end) 103 106 104 107 -- == actions == 105 108