diff options
| author | triethyl <triethylammonium@pm.me> | 2025-08-08 11:53:06 -0400 |
|---|---|---|
| committer | triethyl <triethylammonium@pm.me> | 2025-08-08 11:53:06 -0400 |
| commit | 283792fb3a53520f76da105b5f0b4cb8a0663b5c (patch) | |
| tree | 35ead502e645f70c4f48505902c4e5abaff02a98 /pkgs/custom-neovim/config/lua/plugins/mini | |
| parent | 0d0c8343f3bf3be022a3b7d9d2ccb0769aae95f9 (diff) | |
neovim: add extra mini.files features
Diffstat (limited to 'pkgs/custom-neovim/config/lua/plugins/mini')
| -rw-r--r-- | pkgs/custom-neovim/config/lua/plugins/mini/files.lua | 73 |
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, +}) |
