minimal extui fuzzy finder for neovim
at ad99e16f04438f09e5c4ed8cdae1d39879f063be 129 lines 3.3 kB view raw
1if vim.g.loaded_artio then 2 return 3end 4 5vim.g.loaded_artio = true 6 7local augroup = vim.api.nvim_create_augroup("artio:hl", {}) 8 9vim.api.nvim_create_autocmd({ "UIEnter", "ColorScheme" }, { 10 group = augroup, 11 callback = function() 12 local hi = function(name, opts) 13 opts.default = true 14 vim.api.nvim_set_hl(0, name, opts) 15 end 16 17 local normal_hl = vim.api.nvim_get_hl(0, { name = "Normal" }) 18 local msgarea_hl = vim.api.nvim_get_hl(0, { name = "MsgArea" }) 19 20 hi("ArtioNormal", { fg = normal_hl.fg, bg = msgarea_hl.bg }) 21 hi("ArtioPrompt", { link = "Title" }) 22 23 local cursor_hl = vim.api.nvim_get_hl(0, { name = "Cursor" }) 24 local cursorline_hl = vim.api.nvim_get_hl(0, { name = "CursorLine" }) 25 hi("ArtioSel", { fg = cursor_hl.bg, bg = cursorline_hl.bg }) 26 hi("ArtioPointer", { fg = cursor_hl.bg }) 27 28 hi("ArtioMatch", { link = "PmenuMatch" }) 29 hi("ArtioMarker", { link = "DiagnosticWarn" }) 30 end, 31}) 32 33-- == pickers == 34 35vim.keymap.set("n", "<Plug>(artio-files)", function() 36 return require("artio.builtins").files() 37end) 38vim.keymap.set("n", "<Plug>(artio-oldfiles)", function() 39 return require("artio.builtins").oldfiles() 40end) 41vim.keymap.set("n", "<Plug>(artio-grep)", function() 42 return require("artio.builtins").grep() 43end) 44vim.keymap.set("n", "<Plug>(artio-helptags)", function() 45 return require("artio.builtins").helptags() 46end) 47vim.keymap.set("n", "<Plug>(artio-buffergrep)", function() 48 return require("artio.builtins").buffergrep() 49end) 50vim.keymap.set("n", "<Plug>(artio-buffers)", function() 51 return require("artio.builtins").buffers() 52end) 53vim.keymap.set("n", "<Plug>(artio-smart)", function() 54 return require("artio.builtins").smart() 55end) 56vim.keymap.set("n", "<Plug>(artio-highlights)", function() 57 return require("artio.builtins").highlights() 58end) 59vim.keymap.set("n", "<Plug>(artio-colorschemes)", function() 60 return require("artio.builtins").colorschemes() 61end) 62vim.keymap.set("n", "<Plug>(artio-diagnostics)", function() 63 return require("artio.builtins").diagnostics() 64end) 65vim.keymap.set("n", "<Plug>(artio-diagnostics-buffer)", function() 66 return require("artio.builtins").diagnostics_buffer() 67end) 68 69-- == actions == 70 71local function wrap(fn) 72 return function() 73 (require("artio").wrap(fn))() 74 end 75end 76 77vim.keymap.set( 78 "i", 79 "<Plug>(artio-action-down)", 80 wrap(function(self) 81 self.idx = self.idx + 1 82 self.view:showmatches() -- adjust for scrolling 83 self.view:hlselect() 84 end) 85) 86vim.keymap.set( 87 "i", 88 "<Plug>(artio-action-up)", 89 wrap(function(self) 90 self.idx = self.idx - 1 91 self.view:showmatches() -- adjust for scrolling 92 self.view:hlselect() 93 end) 94) 95vim.keymap.set( 96 "i", 97 "<Plug>(artio-action-accept)", 98 wrap(function(self) 99 self:accept() 100 end) 101) 102vim.keymap.set( 103 "i", 104 "<Plug>(artio-action-cancel)", 105 wrap(function(self) 106 self:cancel() 107 end) 108) 109vim.keymap.set( 110 "i", 111 "<Plug>(artio-action-mark)", 112 wrap(function(self) 113 local match = self.matches[self.idx] 114 if not match then 115 return 116 end 117 local idx = match[1] 118 self:mark(idx, not self.marked[idx]) 119 self.view:showmatches() -- redraw marker 120 self.view:hlselect() 121 end) 122) 123vim.keymap.set( 124 "i", 125 "<Plug>(artio-action-togglepreview)", 126 wrap(function(self) 127 self.view:togglepreview() 128 end) 129)