minimal extui fuzzy finder for neovim

feat(builtins): add smart fuzzy finder

+42
+42
lua/artio/builtins.lua
··· 175 175 }) 176 176 end 177 177 178 + builtins.smart = function() 179 + local lst = find_files() 180 + 181 + local pwd = vim.fn.getcwd() 182 + local recentlst = vim 183 + .iter(find_buffers()) 184 + :map(function(buf) 185 + local v = vim.api.nvim_buf_get_name(buf) 186 + return vim.fs.relpath(pwd, v) or v 187 + end) 188 + :totable() 189 + 190 + return artio.pick({ 191 + prompt = "smart", 192 + items = vim.tbl_keys(vim.iter({ lst, recentlst }):fold({}, function(items, l) 193 + for i = 1, #l do 194 + items[l[i]] = true 195 + end 196 + return items 197 + end)), 198 + fn = artio.mergesorters(artio.sorter, function(l, _) 199 + return vim 200 + .iter(l) 201 + :map(function(v) 202 + return { v.id, {}, vim.tbl_contains(recentlst, v.text) and 100 or 0 } 203 + end) 204 + :totable() 205 + end), 206 + on_close = function(text, _) 207 + vim.schedule(function() 208 + vim.cmd.edit(text) 209 + end) 210 + end, 211 + get_icon = config.get().opts.use_icons and function(item) 212 + return require("mini.icons").get("file", item.v) 213 + end or nil, 214 + preview_item = function(item) 215 + return vim.fn.bufadd(item) 216 + end, 217 + }) 218 + end 219 + 178 220 return builtins