minimal extui fuzzy finder for neovim
at 117a633cd78430bc344c0bd8746d553030fdfc49 123 lines 3.1 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("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) 62 63-- == actions == 64 65local function wrap(fn) 66 return function() 67 (require("artio").wrap(fn))() 68 end 69end 70 71vim.keymap.set( 72 "i", 73 "<Plug>(artio-action-down)", 74 wrap(function(self) 75 self.idx = self.idx + 1 76 self.view:showmatches() -- adjust for scrolling 77 self.view:hlselect() 78 end) 79) 80vim.keymap.set( 81 "i", 82 "<Plug>(artio-action-up)", 83 wrap(function(self) 84 self.idx = self.idx - 1 85 self.view:showmatches() -- adjust for scrolling 86 self.view:hlselect() 87 end) 88) 89vim.keymap.set( 90 "i", 91 "<Plug>(artio-action-accept)", 92 wrap(function(self) 93 coroutine.resume(self.co, 0) 94 end) 95) 96vim.keymap.set( 97 "i", 98 "<Plug>(artio-action-cancel)", 99 wrap(function(self) 100 coroutine.resume(self.co, 1) 101 end) 102) 103vim.keymap.set( 104 "i", 105 "<Plug>(artio-action-mark)", 106 wrap(function(self) 107 local match = self.matches[self.idx] 108 if not match then 109 return 110 end 111 local idx = match[1] 112 self:mark(idx, not self.marked[idx]) 113 self.view:showmatches() -- redraw marker 114 self.view:hlselect() 115 end) 116) 117vim.keymap.set( 118 "i", 119 "<Plug>(artio-action-togglepreview)", 120 wrap(function(self) 121 self.view:togglepreview() 122 end) 123)