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("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)