Conditiona vim.keymap.set

I would like to create a keymapping like this:

vim.keymap.set("n", "<leader>b", function()
  local status_ok, buffer_manager = pcall(require, "buffer_manager")
  if not status_ok then
    return [[:ls<CR>:b<space>]]
  else
    return "<cmd>lua  buffer_manager.ui.toggle_quick_menu()<cr>"
end
end, 
{ desc = "List opened buffers" } )

Has someone tested something like that?

-- Reference: https://stackoverflow.com/a/73290052/2571881
vim.keymap.set("n", "<leader>b", function()
	local status_ok, _ = pcall(require, "buffer_manager")
		if not status_ok then
      return ':ls<CR>:b<space>'
	  else
      return ":lua require('buffer_manager.ui').toggle_quick_menu()<cr>"
	  end
	end, 
  { desc = "List opened buffers" , expr = true, replace_keycodes = true}
)

You don’t need to return the code, you need to call it

vim.keymap.set("n", "<leader>b", function()
  local status_ok, buffer_manager = pcall(require, "buffer_manager")
  if not status_ok then
    vim.cmd([[:ls<CR>:b<space>]]) -- double check this one
  else
    buffer_manager.ui.toggle_quick_menu()
end
end, 
{ desc = "List opened buffers" } )
1 Like