minimal extui fuzzy finder for neovim

feat(builtins): add keymap builtin

+39
+39
lua/artio/builtins.lua
··· 479 479 return builtins.diagnostics(props) 480 480 end 481 481 482 + ---@class artio.picker.keymaps.Props : artio.Picker.config 483 + ---@field modes? string[] defaults to all 484 + 485 + ---@param props? artio.picker.keymaps.Props 486 + builtins.keymaps = function(props) 487 + props = props or {} 488 + props.modes = props.modes or { "n", "i", "c", "v", "x", "s", "o", "t", "l" } 489 + 490 + ---@type vim.api.keyset.get_keymap[] 491 + local lst = vim.iter(props.modes):fold({}, function(keymaps, mode) 492 + vim.iter(vim.api.nvim_get_keymap(mode)):each(function(km) 493 + keymaps[#keymaps + 1] = km 494 + end) 495 + return keymaps 496 + end) 497 + 498 + return artio.generic( 499 + lst, 500 + extend({ 501 + prompt = "keymaps", 502 + format_item = function(km) 503 + return ("%s %s %s | %s"):format(km.mode, km.lhs, km.rhs, km.desc) 504 + end, 505 + ---@param km vim.api.keyset.get_keymap 506 + on_close = function(km, _) 507 + vim.schedule(function() 508 + local out = vim.api.nvim_cmd({ 509 + cmd = ("%smap"):format(km.mode), 510 + args = { km.lhs }, 511 + }, { 512 + output = true, 513 + }) 514 + vim.print(out) 515 + end) 516 + end, 517 + }, props) 518 + ) 519 + end 520 + 482 521 return builtins