local M = {} local keyopt = { nowait = true, buffer = true } function M.operate() if vim.opt.filetype:get() ~= "fern" then return end vim.b.my_fern_mode = "operate" vim.keymap.set("n", "", "(fern-action-mark:toggle)", keyopt) vim.keymap.set("n", "", "(fern-action-mark:clear)", keyopt) vim.keymap.set("n", "", "(fern-action-cancel)(fern-action-mark:clear)lua require('kyoh86.plug.fern.mode').view(v:false)", keyopt) vim.keymap.set("n", "N", "(fern-action-new-path)", keyopt) vim.keymap.set("n", "C", "(fern-action-copy)", keyopt) vim.keymap.set("n", "M", "(fern-action-move)", keyopt) vim.keymap.set("n", "D", "(fern-action-remove)", keyopt) vim.keymap.set("n", "R", "(fern-action-rename)", keyopt) vim.notify("Changed to operation mode", vim.log.levels.WARN) vim.cmd([[doautocmd User MyFernModeChanged]]) end function M.view(init) if vim.opt.filetype:get() ~= "fern" then return end vim.b.my_fern_mode = "view" if init then kyoh86.fa.fern.action.call("mark:clear") end vim.keymap.del("n", "") vim.keymap.del("n", "") vim.keymap.del("n", "", "(fern-action-cancel)", keyopt) vim.keymap.del("n", "N") vim.keymap.del("n", "C") vim.keymap.del("n", "M") vim.keymap.del("n", "D") vim.keymap.del("n", "R") vim.notify("Changed to viewing mode", vim.log.levels.WARN) vim.cmd([[doautocmd User MyFernModeChanged]]) end function M.toggle() if vim.opt.filetype:get() ~= "fern" then return end local mode = vim.tbl_get(vim.b, "my_fern_mode") if mode ~= "operate" then M.operate() else M.view(false) end end function M.setup() vim.keymap.set("n", "!", "(fern-action-hidden:toggle)", keyopt) vim.keymap.set("n", "", "(fern-action-reload:cursor)", keyopt) vim.keymap.set("n", "", "(fern-action-reload:all)", keyopt) vim.keymap.set("n", ">", "(fern-action-expand:in)", keyopt) vim.keymap.set("n", "<", "(fern-action-collapse)", keyopt) vim.keymap.set("n", "-", "(fern-action-leave)", keyopt) vim.keymap.set("n", "+", "(fern-action-enter)", keyopt) vim.keymap.set("n", "x", "(fern-action-open:above)", keyopt) vim.keymap.set("n", "h", "(fern-action-open:above)", keyopt) vim.keymap.set("n", "v", "(fern-action-open:left)", keyopt) vim.keymap.set("n", "", "(fern-action-open-or-expand)", keyopt) vim.keymap.set("n", "", "(fern-action-redraw)", keyopt) vim.keymap.set("n", "y", "(fern-action-yank:bufname)", keyopt) vim.keymap.set("n", "", "(fern-action-cda", keyopt) -- hint: 'g'oto dir vim.keymap.set("n", "", "(fern-action-include)", keyopt) vim.keymap.set("n", "", M.toggle, keyopt) end return M