@@ -395,4 +395,118 @@ function M.setup(opts)
395
395
log .raw (" config" , " %s\n " , vim .inspect (M .mappings ))
396
396
end
397
397
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
+
398
512
return M
0 commit comments