minimal extui fuzzy finder for neovim
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)