chore: refacto binding initialization (inverse mapping table)

This commit is contained in:
kiyan
2021-02-23 00:28:45 +01:00
committed by Kiyan
parent 491fd68d62
commit 905afba209
4 changed files with 76 additions and 116 deletions

View File

@@ -51,31 +51,39 @@ function M.get_icon_state()
}
end
local function get_lua_cb(cb_name)
return string.format(":lua require'nvim-tree'.on_keypress('%s')<CR>", cb_name)
end
function M.get_bindings()
local keybindings = vim.g.nvim_tree_bindings or {}
return {
edit = keybindings.edit or {'<CR>', 'o'},
edit_vsplit = keybindings.edit_vsplit or '<C-v>',
edit_split = keybindings.edit_split or '<C-x>',
edit_tab = keybindings.edit_tab or '<C-t>',
close_node = keybindings.close_node or {'<S-CR>', '<BS>'},
preview = keybindings.preview or '<Tab>',
toggle_ignored = keybindings.toggle_ignored or 'I',
toggle_dotfiles = keybindings.toggle_dotfiles or 'H',
refresh = keybindings.refresh or 'R',
cd = keybindings.cd or '<C-]>',
create = keybindings.create or 'a',
remove = keybindings.remove or 'd',
rename = keybindings.rename or 'r',
full_rename = keybindings.full_rename or '<C-r>',
cut = keybindings.cut or 'x',
copy = keybindings.copy or 'c',
paste = keybindings.paste or 'p',
prev_git_item = keybindings.prev_git_item or '[c',
next_git_item = keybindings.next_git_item or ']c',
dir_up = keybindings.dir_up or '-',
close = keybindings.close or 'q',
}
return vim.tbl_extend('force', {
["<CR>"] = get_lua_cb("edit"),
["o"] = get_lua_cb("edit"),
["<2-LeftMouse>"] = get_lua_cb("edit"),
["<2-RightMouse>"] = get_lua_cb("cd"),
["<C-]>"] = get_lua_cb("cd"),
["<C-v>"] = get_lua_cb("vsplit"),
["<C-x>"] = get_lua_cb("split"),
["<C-t>"] = get_lua_cb("tabnew"),
["<BS>"] = get_lua_cb("close_node"),
["<S-CR>"] = get_lua_cb("close_node"),
["<Tab>"] = get_lua_cb("preview"),
["I"] = get_lua_cb("toggle_ignored"),
["H"] = get_lua_cb("toggle_dotfiles"),
["R"] = get_lua_cb("refresh"),
["a"] = get_lua_cb("create"),
["d"] = get_lua_cb("remove"),
["r"] = get_lua_cb("rename"),
["<C-r>"] = get_lua_cb("full_rename"),
["x"] = get_lua_cb("cut"),
["c"] = get_lua_cb("copy"),
["p"] = get_lua_cb("paste"),
["[c"] = get_lua_cb("prev_git_item"),
["]c"] = get_lua_cb("next_git_item"),
["-"] = get_lua_cb("dir_up"),
["q"] = get_lua_cb("close"),
}, keybindings)
end
function M.window_options()

View File

@@ -211,9 +211,9 @@ function M.open_file(mode, filename)
end
if type(ecmd) == 'string' then
api.nvim_command(string.format('%s %s', ecmd, vim.fn.fnameescape(filename)))
api.nvim_command(string.format('%s %s', ecmd, vim.fn.fnameescape(filename)))
else
ecmd()
ecmd()
end
if mode == 'preview' then
@@ -243,54 +243,22 @@ function M.change_dir(foldername)
M.init(false, M.Tree.bufnr ~= nil)
end
local function set_mapping(buf, key, fn)
api.nvim_buf_set_keymap(buf, 'n', key, ':lua require"nvim-tree".'..fn..'<cr>', {
nowait = true, noremap = true, silent = true
})
local function set_mapping(buf, key, cb)
api.nvim_buf_set_keymap(buf, 'n', key, cb, {
nowait = true, noremap = true, silent = true
})
end
local function set_mappings()
if vim.g.nvim_tree_disable_keybindings == 1 then
return
return
end
local buf = M.Tree.bufnr
local bindings = config.get_bindings()
local mappings = {
['<2-LeftMouse>'] = 'on_keypress("edit")';
['<2-RightMouse>'] = 'on_keypress("cd")';
[bindings.cd] = 'on_keypress("cd")';
[bindings.edit] = 'on_keypress("edit")';
[bindings.edit_vsplit] = 'on_keypress("vsplit")';
[bindings.edit_split] = 'on_keypress("split")';
[bindings.edit_tab] = 'on_keypress("tabnew")';
[bindings.close_node] = 'on_keypress("close_node")';
[bindings.toggle_ignored] = 'on_keypress("toggle_ignored")';
[bindings.toggle_dotfiles] = 'on_keypress("toggle_dotfiles")';
[bindings.refresh] = 'on_keypress("refresh")';
[bindings.create] = 'on_keypress("create")';
[bindings.remove] = 'on_keypress("remove")';
[bindings.rename] = 'on_keypress("rename")';
[bindings.full_rename] = 'on_keypress("full_rename")';
[bindings.preview] = 'on_keypress("preview")';
[bindings.cut] = 'on_keypress("cut")';
[bindings.copy] = 'on_keypress("copy")';
[bindings.paste] = 'on_keypress("paste")';
[bindings.prev_git_item] = 'on_keypress("prev_git_item")';
[bindings.next_git_item] = 'on_keypress("next_git_item")';
[bindings.dir_up] = 'on_keypress("dir_up")';
[bindings.close] = 'on_keypress("close")';
}
for k,v in pairs(mappings) do
if type(k) == 'table' then
for _, key in pairs(k) do
set_mapping(buf, key, v)
end
else
set_mapping(buf, k, v)
end
for key,cb in pairs(bindings) do
set_mapping(buf, key, cb)
end
end