Skip to content

Commit 9375eef

Browse files
committed
strategy 1 (Alex's): create an out file
1 parent 64cc3c1 commit 9375eef

File tree

2 files changed

+116
-0
lines changed

2 files changed

+116
-0
lines changed

lua/nvim-tree.lua

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ local colors = require "nvim-tree.colors"
77
local renderer = require "nvim-tree.renderer"
88
local view = require "nvim-tree.view"
99
local utils = require "nvim-tree.utils"
10+
local actions = require "nvim-tree.actions"
1011
local change_dir = require "nvim-tree.actions.root.change-dir"
1112
local legacy = require "nvim-tree.legacy"
1213
local core = require "nvim-tree.core"
@@ -319,6 +320,7 @@ local function setup_vim_commands()
319320
api.nvim_create_user_command("NvimTreeCollapseKeepBuffers", function()
320321
collapse_all.fn(true)
321322
end, { bar = true })
323+
api.nvim_create_user_command("NvimTreeCreateOnAttach", actions.create_on_attach, {})
322324
end
323325

324326
function M.change_dir(name)

lua/nvim-tree/actions/init.lua

Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -395,4 +395,118 @@ function M.setup(opts)
395395
log.raw("config", "%s\n", vim.inspect(M.mappings))
396396
end
397397

398+
local LEGACY_TO_ON_ATTACH = {
399+
edit = { inject = true, fn = "Api.node.open.edit" },
400+
edit_in_place = { inject = true, fn = "Api.node.open.replace_tree_buffer" },
401+
edit_no_picker = { inject = true, fn = "Api.node.open.no_window_picker" },
402+
cd = { inject = true, fn = "Api.tree.change_root_to_node" },
403+
vsplit = { inject = true, fn = "Api.node.open.vertical" },
404+
split = { inject = true, fn = "Api.node.open.horizontal" },
405+
tabnew = { inject = true, fn = "Api.node.open.tab" },
406+
prev_sibling = { inject = true, fn = "Api.node.navigate.sibling.prev" },
407+
next_sibling = { inject = true, fn = "Api.node.navigate.sibling.next" },
408+
parent_node = { inject = true, fn = "Api.node.navigate.parent" },
409+
close_node = { inject = true, fn = "Api.node.navigate.parent_close" },
410+
preview = { inject = true, fn = "Api.node.open.preview" },
411+
first_sibling = { inject = true, fn = "Api.node.navigate.sibling.first" },
412+
last_sibling = { inject = true, fn = "Api.node.navigate.sibling.last" },
413+
toggle_git_ignored = { inject = false, fn = "Api.tree.toggle_gitignore_filter" },
414+
toggle_dotfiles = { inject = false, fn = "Api.tree.toggle_hidden_filter" },
415+
toggle_custom = { inject = false, fn = "Api.tree.toggle_custom_filter" },
416+
refresh = { inject = true, fn = "Api.tree.reload" },
417+
create = { inject = true, fn = "Api.fs.create" },
418+
remove = { inject = true, fn = "Api.fs.remove" },
419+
trash = { inject = true, fn = "Api.fs.trash" },
420+
rename = { inject = true, fn = "Api.fs.rename" },
421+
full_rename = { inject = true, fn = "Api.fs.rename_sub" },
422+
cut = { inject = true, fn = "Api.fs.cut" },
423+
copy = { inject = true, fn = "Api.fs.copy.node" },
424+
paste = { inject = true, fn = "Api.fs.paste" },
425+
copy_name = { inject = true, fn = "Api.fs.copy.filename" },
426+
copy_path = { inject = true, fn = "Api.fs.copy.relative_path" },
427+
copy_absolute_path = { inject = true, fn = "Api.fs.copy.absolute_path" },
428+
prev_diag_item = { inject = true, fn = "Api.node.navigate.diagnostics.next" },
429+
prev_git_item = { inject = true, fn = "Api.node.navigate.git.next" },
430+
next_diag_item = { inject = true, fn = "Api.node.navigate.diagnostics.prev" },
431+
next_git_item = { inject = true, fn = "Api.node.navigate.git.prev" },
432+
dir_up = { inject = true, fn = "Api.tree.change_root_to_parent" },
433+
system_open = { inject = true, fn = "Api.node.run.system" },
434+
live_filter = { inject = false, fn = "Api.live_filter.start" },
435+
clear_live_filter = { inject = false, fn = "Api.live_filter.clear" },
436+
close = { inject = true, fn = "Api.tree.close" },
437+
collapse_all = { inject = false, fn = "Api.tree.collapse_all" },
438+
expand_all = { inject = true, fn = "Api.tree.expand_all" },
439+
search_node = { inject = false, fn = "Api.tree.search_node" },
440+
run_file_command = { inject = true, fn = "Api.node.run.cmd" },
441+
toggle_file_info = { inject = true, fn = "Api.node.show_info_popup" },
442+
toggle_help = { inject = false, fn = "Api.tree.toggle_help" },
443+
toggle_mark = { inject = true, fn = "Api.marks.toggle" },
444+
bulk_move = { inject = false, fn = "Api.marks.bulk.move" },
445+
}
446+
447+
function M.create_on_attach()
448+
local keymaps = {}
449+
local max_key = 0
450+
451+
for _, m in ipairs(M.mappings) do
452+
if LEGACY_TO_ON_ATTACH[m.action] then
453+
if type(m.key) == "table" then
454+
for _, k in ipairs(m.key) do
455+
table.insert(keymaps, {
456+
key = k,
457+
action = LEGACY_TO_ON_ATTACH[m.action],
458+
})
459+
max_key = math.max(#k, max_key)
460+
end
461+
else
462+
table.insert(keymaps, {
463+
key = m.key,
464+
action = LEGACY_TO_ON_ATTACH[m.action],
465+
})
466+
max_key = math.max(#m.key, max_key)
467+
end
468+
end
469+
end
470+
471+
local out = [[
472+
local Api = require("nvim-tree.api")
473+
474+
local function on_attach(bufnr)
475+
local function map(key, fn)
476+
vim.keymap.set("n", key, function()
477+
fn()
478+
end, { buffer = bufnr, noremap = true })
479+
end
480+
481+
local function map_inject_node(key, fn)
482+
vim.keymap.set("n", key, function(node)
483+
fn(node)
484+
end, { buffer = bufnr, noremap = true })
485+
end
486+
487+
]]
488+
489+
local fmt_inject = string.format("%%s map_inject_node(%%-%d.%ds %%s)\n", max_key + 3, max_key + 3)
490+
local fmt_no_inject = string.format("%%s map (%%-%d.%ds %%s)\n", max_key + 3, max_key + 3)
491+
for _, m in ipairs(keymaps) do
492+
if m.action.inject then
493+
out = string.format(fmt_inject, out, "'" .. m.key .. "',", m.action.fn)
494+
else
495+
out = string.format(fmt_no_inject, out, "'" .. m.key .. "',", m.action.fn)
496+
end
497+
end
498+
out = out .. [[
499+
end
500+
]]
501+
502+
local FILE_NAME = "/tmp/nvim-tree-on_attach.lua"
503+
os.remove(FILE_NAME)
504+
local file = io.open(FILE_NAME, "a")
505+
io.output(file)
506+
io.write(out)
507+
io.close(file)
508+
509+
print("wrote on_attach to " .. FILE_NAME)
510+
end
511+
398512
return M

0 commit comments

Comments
 (0)