@@ -395,4 +395,118 @@ function M.setup(opts)
395395 log .raw (" config" , " %s\n " , vim .inspect (M .mappings ))
396396end
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 fmtInject = string.format (" %%s map_inject_node(%%-%d.%ds %%s)\n " , max_key + 3 , max_key + 3 )
490+ local fmtNoInject = 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 (fmtInject , out , " '" .. m .key .. " '," , m .action .fn )
494+ else
495+ out = string.format (fmtNoInject , 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+
398512return M
0 commit comments