Skip to content

Commit bbb6d48

Browse files
authored
feat(api): add api.config.mappings.default_on_attach (#2037)
1 parent 1b45344 commit bbb6d48

File tree

5 files changed

+90
-72
lines changed

5 files changed

+90
-72
lines changed

doc/nvim-tree-lua.txt

Lines changed: 76 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -1425,6 +1425,13 @@ api.tree.toggle_help() *nvim-tree.api.tree.toggle_help()*
14251425
- navigate.prev
14261426
- navigate.select
14271427

1428+
*nvim-tree.api.config.mappings.default_on_attach()*
1429+
api.config.mappings.default_on_attach({bufnr})
1430+
Set all |nvim-tree-mappings-default|. Call from your |nvim-tree.on_attach|
1431+
1432+
Parameters: ~
1433+
{bufnr} (number) nvim-tree buffer number passed to |nvim-tree.on_attach|
1434+
14281435
api.config.mappings.active() *nvim-tree.api.config.mappings.active()*
14291436
Deprecated: only functions when using legacy |nvim-tree.view.mappings|
14301437
Retrieve a clone of the currently active mappings: defaults + user.
@@ -1490,67 +1497,80 @@ will be applied.
14901497

14911498
You are encouraged to copy these to your own |nvim-tree.on_attach| function.
14921499
>
1493-
local on_attach = function(bufnr)
1500+
local api = require('nvim-tree.api')
1501+
1502+
local function opts(desc)
1503+
return { desc = 'nvim-tree: ' .. desc, buffer = bufnr, noremap = true, silent = true, nowait = true }
1504+
end
1505+
1506+
-- BEGIN_DEFAULT_ON_ATTACH
1507+
vim.keymap.set('n', '<C-]>', api.tree.change_root_to_node, opts('CD'))
1508+
vim.keymap.set('n', '<C-e>', api.node.open.replace_tree_buffer, opts('Open: In Place'))
1509+
vim.keymap.set('n', '<C-k>', api.node.show_info_popup, opts('Info'))
1510+
vim.keymap.set('n', '<C-r>', api.fs.rename_sub, opts('Rename: Omit Filename'))
1511+
vim.keymap.set('n', '<C-t>', api.node.open.tab, opts('Open: New Tab'))
1512+
vim.keymap.set('n', '<C-v>', api.node.open.vertical, opts('Open: Vertical Split'))
1513+
vim.keymap.set('n', '<C-x>', api.node.open.horizontal, opts('Open: Horizontal Split'))
1514+
vim.keymap.set('n', '<BS>', api.node.navigate.parent_close, opts('Close Directory'))
1515+
vim.keymap.set('n', '<CR>', api.node.open.edit, opts('Open'))
1516+
vim.keymap.set('n', '<Tab>', api.node.open.preview, opts('Open Preview'))
1517+
vim.keymap.set('n', '>', api.node.navigate.sibling.next, opts('Next Sibling'))
1518+
vim.keymap.set('n', '<', api.node.navigate.sibling.prev, opts('Previous Sibling'))
1519+
vim.keymap.set('n', '.', api.node.run.cmd, opts('Run Command'))
1520+
vim.keymap.set('n', '-', api.tree.change_root_to_parent, opts('Up'))
1521+
vim.keymap.set('n', 'a', api.fs.create, opts('Create'))
1522+
vim.keymap.set('n', 'bmv', api.marks.bulk.move, opts('Move Bookmarked'))
1523+
vim.keymap.set('n', 'B', api.tree.toggle_no_buffer_filter, opts('Toggle No Buffer'))
1524+
vim.keymap.set('n', 'c', api.fs.copy.node, opts('Copy'))
1525+
vim.keymap.set('n', 'C', api.tree.toggle_git_clean_filter, opts('Toggle Git Clean'))
1526+
vim.keymap.set('n', '[c', api.node.navigate.git.prev, opts('Prev Git'))
1527+
vim.keymap.set('n', ']c', api.node.navigate.git.next, opts('Next Git'))
1528+
vim.keymap.set('n', 'd', api.fs.remove, opts('Delete'))
1529+
vim.keymap.set('n', 'D', api.fs.trash, opts('Trash'))
1530+
vim.keymap.set('n', 'E', api.tree.expand_all, opts('Expand All'))
1531+
vim.keymap.set('n', 'e', api.fs.rename_basename, opts('Rename: Basename'))
1532+
vim.keymap.set('n', ']e', api.node.navigate.diagnostics.next, opts('Next Diagnostic'))
1533+
vim.keymap.set('n', '[e', api.node.navigate.diagnostics.prev, opts('Prev Diagnostic'))
1534+
vim.keymap.set('n', 'F', api.live_filter.clear, opts('Clean Filter'))
1535+
vim.keymap.set('n', 'f', api.live_filter.start, opts('Filter'))
1536+
vim.keymap.set('n', 'g?', api.tree.toggle_help, opts('Help'))
1537+
vim.keymap.set('n', 'gy', api.fs.copy.absolute_path, opts('Copy Absolute Path'))
1538+
vim.keymap.set('n', 'H', api.tree.toggle_hidden_filter, opts('Toggle Dotfiles'))
1539+
vim.keymap.set('n', 'I', api.tree.toggle_gitignore_filter, opts('Toggle Git Ignore'))
1540+
vim.keymap.set('n', 'J', api.node.navigate.sibling.last, opts('Last Sibling'))
1541+
vim.keymap.set('n', 'K', api.node.navigate.sibling.first, opts('First Sibling'))
1542+
vim.keymap.set('n', 'm', api.marks.toggle, opts('Toggle Bookmark'))
1543+
vim.keymap.set('n', 'o', api.node.open.edit, opts('Open'))
1544+
vim.keymap.set('n', 'O', api.node.open.no_window_picker, opts('Open: No Window Picker'))
1545+
vim.keymap.set('n', 'p', api.fs.paste, opts('Paste'))
1546+
vim.keymap.set('n', 'P', api.node.navigate.parent, opts('Parent Directory'))
1547+
vim.keymap.set('n', 'q', api.tree.close, opts('Close'))
1548+
vim.keymap.set('n', 'r', api.fs.rename, opts('Rename'))
1549+
vim.keymap.set('n', 'R', api.tree.reload, opts('Refresh'))
1550+
vim.keymap.set('n', 's', api.node.run.system, opts('Run System'))
1551+
vim.keymap.set('n', 'S', api.tree.search_node, opts('Search'))
1552+
vim.keymap.set('n', 'U', api.tree.toggle_custom_filter, opts('Toggle Hidden'))
1553+
vim.keymap.set('n', 'W', api.tree.collapse_all, opts('Collapse'))
1554+
vim.keymap.set('n', 'x', api.fs.cut, opts('Cut'))
1555+
vim.keymap.set('n', 'y', api.fs.copy.filename, opts('Copy Name'))
1556+
vim.keymap.set('n', 'Y', api.fs.copy.relative_path, opts('Copy Relative Path'))
1557+
vim.keymap.set('n', '<2-LeftMouse>', api.node.open.edit, opts('Open'))
1558+
vim.keymap.set('n', '<2-RightMouse>', api.tree.change_root_to_node, opts('CD'))
1559+
-- END_DEFAULT_ON_ATTACH
1560+
<
1561+
Alternatively, you may apply these default mappings from your |nvim-tree.on_attach| via
1562+
|nvim-tree.api.config.mappings.default_on_attach()| e.g.
1563+
>
1564+
local function my_on_attach(bufnr)
14941565
local api = require('nvim-tree.api')
14951566
1496-
-- BEGIN_DEFAULT_ON_ATTACH
1497-
local opts = function(desc)
1567+
local function opts(desc)
14981568
return { desc = 'nvim-tree: ' .. desc, buffer = bufnr, noremap = true, silent = true, nowait = true }
14991569
end
15001570
1501-
vim.keymap.set('n', '<C-]>', api.tree.change_root_to_node, opts('CD'))
1502-
vim.keymap.set('n', '<C-e>', api.node.open.replace_tree_buffer, opts('Open: In Place'))
1503-
vim.keymap.set('n', '<C-k>', api.node.show_info_popup, opts('Info'))
1504-
vim.keymap.set('n', '<C-r>', api.fs.rename_sub, opts('Rename: Omit Filename'))
1505-
vim.keymap.set('n', '<C-t>', api.node.open.tab, opts('Open: New Tab'))
1506-
vim.keymap.set('n', '<C-v>', api.node.open.vertical, opts('Open: Vertical Split'))
1507-
vim.keymap.set('n', '<C-x>', api.node.open.horizontal, opts('Open: Horizontal Split'))
1508-
vim.keymap.set('n', '<BS>', api.node.navigate.parent_close, opts('Close Directory'))
1509-
vim.keymap.set('n', '<CR>', api.node.open.edit, opts('Open'))
1510-
vim.keymap.set('n', '<Tab>', api.node.open.preview, opts('Open Preview'))
1511-
vim.keymap.set('n', '>', api.node.navigate.sibling.next, opts('Next Sibling'))
1512-
vim.keymap.set('n', '<', api.node.navigate.sibling.prev, opts('Previous Sibling'))
1513-
vim.keymap.set('n', '.', api.node.run.cmd, opts('Run Command'))
1514-
vim.keymap.set('n', '-', api.tree.change_root_to_parent, opts('Up'))
1515-
vim.keymap.set('n', 'a', api.fs.create, opts('Create'))
1516-
vim.keymap.set('n', 'bmv', api.marks.bulk.move, opts('Move Bookmarked'))
1517-
vim.keymap.set('n', 'B', api.tree.toggle_no_buffer_filter, opts('Toggle No Buffer'))
1518-
vim.keymap.set('n', 'c', api.fs.copy.node, opts('Copy'))
1519-
vim.keymap.set('n', 'C', api.tree.toggle_git_clean_filter, opts('Toggle Git Clean'))
1520-
vim.keymap.set('n', '[c', api.node.navigate.git.prev, opts('Prev Git'))
1521-
vim.keymap.set('n', ']c', api.node.navigate.git.next, opts('Next Git'))
1522-
vim.keymap.set('n', 'd', api.fs.remove, opts('Delete'))
1523-
vim.keymap.set('n', 'D', api.fs.trash, opts('Trash'))
1524-
vim.keymap.set('n', 'E', api.tree.expand_all, opts('Expand All'))
1525-
vim.keymap.set('n', 'e', api.fs.rename_basename, opts('Rename: Basename'))
1526-
vim.keymap.set('n', ']e', api.node.navigate.diagnostics.next, opts('Next Diagnostic'))
1527-
vim.keymap.set('n', '[e', api.node.navigate.diagnostics.prev, opts('Prev Diagnostic'))
1528-
vim.keymap.set('n', 'F', api.live_filter.clear, opts('Clean Filter'))
1529-
vim.keymap.set('n', 'f', api.live_filter.start, opts('Filter'))
1530-
vim.keymap.set('n', 'g?', api.tree.toggle_help, opts('Help'))
1531-
vim.keymap.set('n', 'gy', api.fs.copy.absolute_path, opts('Copy Absolute Path'))
1532-
vim.keymap.set('n', 'H', api.tree.toggle_hidden_filter, opts('Toggle Dotfiles'))
1533-
vim.keymap.set('n', 'I', api.tree.toggle_gitignore_filter, opts('Toggle Git Ignore'))
1534-
vim.keymap.set('n', 'J', api.node.navigate.sibling.last, opts('Last Sibling'))
1535-
vim.keymap.set('n', 'K', api.node.navigate.sibling.first, opts('First Sibling'))
1536-
vim.keymap.set('n', 'm', api.marks.toggle, opts('Toggle Bookmark'))
1537-
vim.keymap.set('n', 'o', api.node.open.edit, opts('Open'))
1538-
vim.keymap.set('n', 'O', api.node.open.no_window_picker, opts('Open: No Window Picker'))
1539-
vim.keymap.set('n', 'p', api.fs.paste, opts('Paste'))
1540-
vim.keymap.set('n', 'P', api.node.navigate.parent, opts('Parent Directory'))
1541-
vim.keymap.set('n', 'q', api.tree.close, opts('Close'))
1542-
vim.keymap.set('n', 'r', api.fs.rename, opts('Rename'))
1543-
vim.keymap.set('n', 'R', api.tree.reload, opts('Refresh'))
1544-
vim.keymap.set('n', 's', api.node.run.system, opts('Run System'))
1545-
vim.keymap.set('n', 'S', api.tree.search_node, opts('Search'))
1546-
vim.keymap.set('n', 'U', api.tree.toggle_custom_filter, opts('Toggle Hidden'))
1547-
vim.keymap.set('n', 'W', api.tree.collapse_all, opts('Collapse'))
1548-
vim.keymap.set('n', 'x', api.fs.cut, opts('Cut'))
1549-
vim.keymap.set('n', 'y', api.fs.copy.filename, opts('Copy Name'))
1550-
vim.keymap.set('n', 'Y', api.fs.copy.relative_path, opts('Copy Relative Path'))
1551-
vim.keymap.set('n', '<2-LeftMouse>', api.node.open.edit, opts('Open'))
1552-
vim.keymap.set('n', '<2-RightMouse>', api.tree.change_root_to_node, opts('CD'))
1553-
-- END_DEFAULT_ON_ATTACH
1571+
api.config.mappings.default_on_attach(bufnr)
1572+
1573+
-- your removals and mappings go here
15541574
end
15551575
<
15561576
==============================================================================

lua/nvim-tree/api.lua

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,8 @@ Api.marks.navigate.next = require("nvim-tree.marks.navigation").next
170170
Api.marks.navigate.prev = require("nvim-tree.marks.navigation").prev
171171
Api.marks.navigate.select = require("nvim-tree.marks.navigation").select
172172

173+
Api.config.mappings.default_on_attach = require("nvim-tree.keymap").default_on_attach
174+
173175
Api.config.mappings.active = function()
174176
return require("nvim-tree.keymap-legacy").active_mappings_clone()
175177
end

lua/nvim-tree/keymap-legacy.lua

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,11 +37,10 @@ local BEGIN_ON_ATTACH = [[
3737
-- Please see https://github.com/nvim-tree/nvim-tree.lua/wiki/Migrating-To-on_attach for assistance in migrating.
3838
--
3939
40-
local api = require('nvim-tree.api')
40+
local function on_attach(bufnr)
41+
local api = require('nvim-tree.api')
4142
42-
local on_attach = function(bufnr)
43-
44-
local opts = function(desc)
43+
local function opts(desc)
4544
return { desc = 'nvim-tree: ' .. desc, buffer = bufnr, noremap = true, silent = true, nowait = true }
4645
end
4746
]]

lua/nvim-tree/keymap.lua

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
1-
local api = require "nvim-tree.api"
2-
31
local M = {}
42

53
-- stylua: ignore start
64
function M.default_on_attach(bufnr)
7-
-- BEGIN_DEFAULT_ON_ATTACH
8-
local opts = function(desc)
5+
local api = require('nvim-tree.api')
6+
7+
local function opts(desc)
98
return { desc = 'nvim-tree: ' .. desc, buffer = bufnr, noremap = true, silent = true, nowait = true }
109
end
1110

11+
-- BEGIN_DEFAULT_ON_ATTACH
1212
vim.keymap.set('n', '<C-]>', api.tree.change_root_to_node, opts('CD'))
1313
vim.keymap.set('n', '<C-e>', api.node.open.replace_tree_buffer, opts('Open: In Place'))
1414
vim.keymap.set('n', '<C-k>', api.node.show_info_popup, opts('Info'))

scripts/update-help.sh

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -29,16 +29,13 @@ begin="BEGIN_DEFAULT_ON_ATTACH"
2929
end="END_DEFAULT_ON_ATTACH"
3030

3131
# scrape DEFAULT_ON_ATTACH, indented at 2
32-
sed -n -e "/${begin}/,/${end}/{ /${begin}/d; /${end}/d; p; }" lua/nvim-tree/keymap.lua > /tmp/DEFAULT_ON_ATTACH.2.lua
32+
sed -n -e "/${begin}/,/${end}/{ /${begin}/d; /${end}/d; p; }" lua/nvim-tree/keymap.lua > /tmp/DEFAULT_ON_ATTACH.lua
3333

34-
# indent some more
35-
sed -e "s/^ / /" /tmp/DEFAULT_ON_ATTACH.2.lua > /tmp/DEFAULT_ON_ATTACH.4.lua
36-
37-
# help, indented at 4
38-
sed -i -e "/${begin}/,/${end}/{ /${begin}/{p; r /tmp/DEFAULT_ON_ATTACH.4.lua
34+
# help
35+
sed -i -e "/${begin}/,/${end}/{ /${begin}/{p; r /tmp/DEFAULT_ON_ATTACH.lua
3936
}; /${end}/p; d; }" doc/nvim-tree-lua.txt
4037

41-
# legacy keymap, indented at 2
42-
sed -i -e "/${begin}/,/${end}/{ /${begin}/{p; r /tmp/DEFAULT_ON_ATTACH.2.lua
38+
# legacy keymap
39+
sed -i -e "/${begin}/,/${end}/{ /${begin}/{p; r /tmp/DEFAULT_ON_ATTACH.lua
4340
}; /${end}/p; d; }" lua/nvim-tree/keymap-legacy.lua
4441

0 commit comments

Comments
 (0)