From 71e87d48fb82c4f6dc6421f6d1d05d7152cb13de Mon Sep 17 00:00:00 2001 From: Harivansh Rathi Date: Tue, 31 Mar 2026 00:09:59 -0400 Subject: [PATCH] nvim fix --- .gitignore | 1 + config/nvim/lua/plugins/oil.lua | 128 +++++++++++++++++++++++--------- config/nvim/plugin/autocmds.lua | 21 ++++++ 3 files changed, 116 insertions(+), 34 deletions(-) diff --git a/.gitignore b/.gitignore index 3c4d89a..91e39ad 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,4 @@ result .bw-session config/karabiner/assets/ config/karabiner/automatic_backups/ +tmp/ diff --git a/config/nvim/lua/plugins/oil.lua b/config/nvim/lua/plugins/oil.lua index 053426e..0e03e08 100644 --- a/config/nvim/lua/plugins/oil.lua +++ b/config/nvim/lua/plugins/oil.lua @@ -1,31 +1,9 @@ -vim.g.canola = { - columns = { "icon" }, - delete = { wipe = false, recursive = true }, - hidden = { enabled = false }, - keymaps = { - ["g?"] = { callback = "actions.show_help", mode = "n" }, - [""] = "actions.select", - [""] = { callback = "actions.select", opts = { vertical = true } }, - [""] = { callback = "actions.select", opts = { horizontal = true } }, - [""] = "actions.preview", - [""] = { callback = "actions.close", mode = "n" }, - ["-"] = { callback = "actions.parent", mode = "n" }, - ["g."] = { callback = "actions.toggle_hidden", mode = "n" }, - [""] = false, - }, -} - -vim.pack.add { +vim.pack.add({ "https://github.com/barrettruth/canola.nvim", "https://github.com/barrettruth/canola-collection", -} +}, { load = function() end }) -vim.cmd.packadd "canola-collection" - -map("n", "-", "Canola") -map("n", "e", "Canola") - -local ns = vim.api.nvim_create_namespace "canola_git_trailing" +local ns = vim.api.nvim_create_namespace("canola_git_trailing") local symbols = { M = { "M", "DiagnosticWarn" }, A = { "A", "DiagnosticOk" }, @@ -72,13 +50,95 @@ local function apply_git_status(buf) end end -vim.api.nvim_create_autocmd("User", { - pattern = "CanolaReadPost", - callback = function(args) - local buf = args.buf - apply_git_status(buf) - vim.defer_fn(function() apply_git_status(buf) end, 500) - end, -}) +return { + { + "barrettruth/canola.nvim", + cmd = "Canola", + before = function() + pcall(vim.cmd.packadd, "nvim-web-devicons") + pcall(vim.cmd.packadd, "nonicons.nvim") -return { "barrettruth/canola.nvim" } + vim.g.canola = { + columns = { "icon" }, + hidden = { enabled = false }, + highlights = { filename = {}, columns = true }, + save = "auto", + extglob = true, + delete = { wipe = false, recursive = true }, + float = { border = "single" }, + keymaps = { + ["g?"] = { callback = "actions.show_help", mode = "n" }, + [""] = "actions.select", + [""] = { callback = "actions.select", opts = { vertical = true } }, + [""] = { callback = "actions.select", opts = { horizontal = true } }, + [""] = "actions.preview", + [""] = { callback = "actions.close", mode = "n" }, + ["-"] = { callback = "actions.parent", mode = "n" }, + ["g."] = { callback = "actions.toggle_hidden", mode = "n" }, + [""] = false, + }, + } + end, + after = function() + vim.cmd.packadd("canola-collection") + + local augroup = vim.api.nvim_create_augroup("UserCanolaConfig", { clear = true }) + local detail_columns = { "git_status", "permissions", "owner", "size", "mtime" } + local base_columns = vim.deepcopy(vim.g.canola.columns or {}) + local show_all = false + + vim.api.nvim_create_autocmd("FileType", { + group = augroup, + pattern = "canola", + callback = function(args) + local bufnr = args.buf + + vim.keymap.set("n", "gC", function() + show_all = not show_all + require("canola").set_columns(show_all and detail_columns or base_columns) + end, { + buffer = bufnr, + desc = "toggle canola columns", + }) + + vim.keymap.set("n", "gX", function() + local canola = require("canola") + local entry = canola.get_cursor_entry() + local dir = canola.get_current_dir() + if not entry or not dir then return end + + vim.ui.input({ prompt = "chmod: ", default = "755" }, function(mode) + if not mode then return end + + vim.uv.fs_chmod(dir .. entry.name, tonumber(mode, 8), function(err) + if err then + vim.schedule(function() vim.notify(err, vim.log.levels.ERROR) end) + return + end + + vim.schedule(function() require("canola.actions").refresh.callback() end) + end) + end) + end, { + buffer = bufnr, + desc = "chmod entry", + }) + end, + }) + + vim.api.nvim_create_autocmd("User", { + group = augroup, + pattern = "CanolaReadPost", + callback = function(args) + local buf = args.buf + apply_git_status(buf) + vim.defer_fn(function() apply_git_status(buf) end, 500) + end, + }) + end, + keys = { + { "-", "Canola" }, + { "e", "Canola" }, + }, + }, +} diff --git a/config/nvim/plugin/autocmds.lua b/config/nvim/plugin/autocmds.lua index 17adc55..2026a35 100644 --- a/config/nvim/plugin/autocmds.lua +++ b/config/nvim/plugin/autocmds.lua @@ -1,6 +1,13 @@ local api = vim.api local augroup = api.nvim_create_augroup("UserAutocmds", { clear = true }) +local function maybe_load_canola(bufnr) + local name = api.nvim_buf_get_name(bufnr) + if name == "" or vim.fn.isdirectory(name) == 0 then return end + + pcall(vim.cmd, "silent keepalt Canola " .. vim.fn.fnameescape(name)) +end + api.nvim_create_autocmd("TextYankPost", { group = augroup, callback = function() vim.highlight.on_yank { higroup = "Visual", timeout = 200 } end, @@ -15,6 +22,20 @@ api.nvim_create_autocmd("BufReadPost", { end, }) +api.nvim_create_autocmd("BufEnter", { + group = augroup, + nested = true, + callback = function(args) + if vim.v.vim_did_enter == 1 then maybe_load_canola(args.buf) end + end, +}) + +api.nvim_create_autocmd("VimEnter", { + group = augroup, + nested = true, + callback = function() maybe_load_canola(0) end, +}) + api.nvim_create_autocmd("VimResized", { group = augroup, callback = function()