vim.o.timeout = true
vim.o.timeoutlen = 500

-- Delete
require("which-key").register({
  d = {
    name = "delete",
    b = { "<cmd>bd<cr>", "Delete buffer" },
    w = { "<C-w>c", "Delete window" },
  },
}, { prefix = "<leader>" })

-- buffer
require("which-key").register({
  ["["] = {
    b = { "<cmd>bprevious<cr>", "Previous buffer" },
  },
  ["]"] = {
    b = { "<cmd>bnext<cr>", "Next buffer" },
  },
})

-- window
require("which-key").register({
  w = {
    name = "window",
    ["|"] = { "<C-w>v", "Split window horizontally" },
    ["-"] = { "<C-w>s", "Split window vertically" },
    w = { "<C-w>w", "Switch window" },
  },
}, { prefix = "<leader>" })

-- better descriptions for navigation
require("which-key").register({
  ["<leader>"] = {
    f = { name = "file/find" },
    g = { name = "git" },
    l = { name = "lsp" },
    o = { name = "org" },
    s = { name = "search" },
    t = { name = "toggle" },
    x = { name = "diagnostics/quickfix" },
  },
  ["["] = { name = "prev" },
  ["]"] = { name = "next" },
  g = { name = "goto" },
})

-- Clear search with <esc>
require("which-key").register({
  ["<esc>"] = { "<cmd>noh<cr><esc>", "Escape and clear hlsearch", mode = { "n", "i" } },
})

-- better indenting
require("which-key").register({
  ["<"] = { "<gv", "Shift left" },
  [">"] = { ">gv", "Shift right" },
}, { mode = "v" })

-- better yank in visual mode
require("which-key").register({
  y = { "ygv<esc>", "Yank" },
}, { mode = "v" })
