summaryrefslogtreecommitdiff
path: root/pkgs/custom-neovim/config
diff options
context:
space:
mode:
authortriethyl <triethylammonium@pm.me>2025-08-08 11:53:06 -0400
committertriethyl <triethylammonium@pm.me>2025-08-08 11:53:06 -0400
commit283792fb3a53520f76da105b5f0b4cb8a0663b5c (patch)
tree35ead502e645f70c4f48505902c4e5abaff02a98 /pkgs/custom-neovim/config
parent0d0c8343f3bf3be022a3b7d9d2ccb0769aae95f9 (diff)
neovim: add extra mini.files features
Diffstat (limited to 'pkgs/custom-neovim/config')
-rw-r--r--pkgs/custom-neovim/config/lua/plugins/mini/files.lua73
1 files changed, 72 insertions, 1 deletions
diff --git a/pkgs/custom-neovim/config/lua/plugins/mini/files.lua b/pkgs/custom-neovim/config/lua/plugins/mini/files.lua
index e6745ae..1dc1c3e 100644
--- a/pkgs/custom-neovim/config/lua/plugins/mini/files.lua
+++ b/pkgs/custom-neovim/config/lua/plugins/mini/files.lua
@@ -2,7 +2,7 @@ require("mini.files").setup {
mappings = {
close = '<esc>',
go_in = 'L',
- go_in_plus = '<c-l>',
+ go_in_plus = "<cr>",
go_out = 'H',
go_out_plus = '<c-h>',
mark_goto = "'",
@@ -18,3 +18,74 @@ require("mini.files").setup {
preview = true,
},
}
+
+-- Set focused directory as current working directory
+local set_cwd = function()
+ local path = (MiniFiles.get_fs_entry() or {}).path
+ if path == nil then return vim.notify('Cursor is not on valid entry') end
+ vim.fn.chdir(vim.fs.dirname(path))
+end
+
+-- Yank in register full path of entry under cursor
+local yank_path = function()
+ local path = (MiniFiles.get_fs_entry() or {}).path
+ if path == nil then return vim.notify('Cursor is not on valid entry') end
+ vim.fn.setreg(vim.v.register, path)
+end
+
+-- Open path with system default handler (useful for non-text files)
+local ui_open = function() vim.ui.open(MiniFiles.get_fs_entry().path) end
+
+vim.api.nvim_create_autocmd('User', {
+ pattern = 'MiniFilesBufferCreate',
+ callback = function(args)
+ local b = args.data.buf_id
+ vim.keymap.set('n', 'g~', set_cwd, { buffer = b, desc = 'Set cwd' })
+ vim.keymap.set('n', 'gX', ui_open, { buffer = b, desc = 'OS open' })
+ vim.keymap.set('n', 'gy', yank_path, { buffer = b, desc = 'Yank path' })
+ end,
+})
+
+-- Add custom bookmarks.
+local set_mark = function(id, path, desc)
+ MiniFiles.set_bookmark(id, path, { desc = desc })
+end
+
+vim.api.nvim_create_autocmd('User', {
+ pattern = 'MiniFilesExplorerOpen',
+ callback = function()
+ set_mark('w', vim.fn.getcwd, 'Working directory') -- callable
+ set_mark('~', '~', 'Home directory')
+ end,
+})
+
+-- Add split keys
+local map_split = function(buf_id, lhs, direction)
+ local rhs = function()
+ -- Make new window and set it as target
+ local cur_target = MiniFiles.get_explorer_state().target_window
+ local new_target = vim.api.nvim_win_call(cur_target, function()
+ vim.cmd(direction .. ' split')
+ return vim.api.nvim_get_current_win()
+ end)
+
+ MiniFiles.set_target_window(new_target)
+
+ MiniFiles.go_in()
+ end
+
+ -- Adding `desc` will result into `show_help` entries
+ local desc = 'Split ' .. direction
+ vim.keymap.set('n', lhs, rhs, { buffer = buf_id, desc = desc })
+end
+
+vim.api.nvim_create_autocmd('User', {
+ pattern = 'MiniFilesBufferCreate',
+ callback = function(args)
+ local buf_id = args.data.buf_id
+ -- Tweak keys to your liking
+ map_split(buf_id, '<C-s>', 'belowright horizontal')
+ map_split(buf_id, '<C-v>', 'belowright vertical')
+ map_split(buf_id, '<C-t>', 'tab')
+ end,
+})