diff options
-rw-r--r-- | nvim/.config/nvim/after/ftplugin/help.lua | 8 | ||||
-rw-r--r-- | nvim/.config/nvim/lua/tobyvin/autocmds.lua | 18 | ||||
-rw-r--r-- | nvim/.config/nvim/lua/tobyvin/commands.lua | 9 | ||||
-rw-r--r-- | nvim/.config/nvim/lua/tobyvin/keymaps.lua | 3 | ||||
-rw-r--r-- | nvim/.config/nvim/lua/tobyvin/utils.lua | 12 | ||||
-rw-r--r-- | nvim/.config/nvim/lua/tobyvin/utils/dashboard.lua | 125 |
6 files changed, 92 insertions, 83 deletions
diff --git a/nvim/.config/nvim/after/ftplugin/help.lua b/nvim/.config/nvim/after/ftplugin/help.lua index 315a837..29ca4c2 100644 --- a/nvim/.config/nvim/after/ftplugin/help.lua +++ b/nvim/.config/nvim/after/ftplugin/help.lua @@ -1,8 +1,2 @@ -local win = vim.fn.win_getid(vim.fn.winnr("#")) -local buf = vim.api.nvim_win_get_buf(win) - -if vim.api.nvim_win_get_width(win) >= vim.bo[buf].textwidth + 80 then - vim.cmd.wincmd("L") -end - +vim.cmd.wincmd("L") vim.opt_local.colorcolumn = nil diff --git a/nvim/.config/nvim/lua/tobyvin/autocmds.lua b/nvim/.config/nvim/lua/tobyvin/autocmds.lua index e995472..d304cbf 100644 --- a/nvim/.config/nvim/lua/tobyvin/autocmds.lua +++ b/nvim/.config/nvim/lua/tobyvin/autocmds.lua @@ -30,7 +30,11 @@ vim.api.nvim_create_autocmd("VimEnter", { callback = function() if vim.fn.argc() == 0 then local curr_buf = vim.api.nvim_get_current_buf() - require("tobyvin.utils.dashboard").setup() + local bufnr = require("tobyvin.utils.dashboard").setup() + vim.keymap.set("n", "<leader>sr", require("tobyvin.utils.session").read, { + buffer = bufnr, + desc = "read session", + }) vim.api.nvim_buf_delete(curr_buf, {}) end end, @@ -61,6 +65,11 @@ vim.api.nvim_create_autocmd("BufWritePre", { local file = vim.loop.fs_realpath(args.match) or args.match local parent = vim.fn.fnamemodify(file, ":h") + + if not parent then + return + end + local stat = vim.loop.fs_stat(parent) if not stat then @@ -86,10 +95,3 @@ vim.api.nvim_create_autocmd("BufWritePre", { end, desc = "Trim whitespace on write", }) - -vim.api.nvim_create_autocmd("FileType", { - group = augroup, - pattern = "qf", - command = "wincmd J", - desc = "unfocus quickfix window", -}) diff --git a/nvim/.config/nvim/lua/tobyvin/commands.lua b/nvim/.config/nvim/lua/tobyvin/commands.lua index 00bd280..cc3ab51 100644 --- a/nvim/.config/nvim/lua/tobyvin/commands.lua +++ b/nvim/.config/nvim/lua/tobyvin/commands.lua @@ -1,3 +1,12 @@ +local session = require("tobyvin.utils.session") + vim.api.nvim_create_user_command("W", "w", { desc = "write" }) vim.api.nvim_create_user_command("Q", "q", { desc = "quit" }) vim.api.nvim_create_user_command("Wq", "wq", { desc = "write quit" }) +vim.api.nvim_create_user_command("SessionRead", session.read, { desc = "read session" }) +vim.api.nvim_create_user_command("SessionWrite", session.write, { desc = "write session" }) +vim.api.nvim_create_user_command("Scratch", function(cmdln) + local bufnr = vim.api.nvim_create_buf(true, true) + vim.bo[bufnr].filetype = cmdln.args[1] + vim.api.nvim_set_current_buf(bufnr) +end, { nargs = "?", desc = "scratch buffer", complete = "filetype" }) diff --git a/nvim/.config/nvim/lua/tobyvin/keymaps.lua b/nvim/.config/nvim/lua/tobyvin/keymaps.lua index 638f3b5..a01557a 100644 --- a/nvim/.config/nvim/lua/tobyvin/keymaps.lua +++ b/nvim/.config/nvim/lua/tobyvin/keymaps.lua @@ -13,9 +13,6 @@ vim.keymap.set({ "n", "v" }, "<leader>Y", [["+Y]], { desc = "yank lines into sel vim.keymap.set({ "n", "v" }, "<leader>p", [["+p]], { desc = "put lines from selection register" }) vim.keymap.set({ "n", "v" }, "<leader>P", [["+P]], { desc = "put lines from selection register" }) -vim.keymap.set("n", "<leader>sr", require("tobyvin.utils.session").read, { desc = "read session" }) -vim.keymap.set("n", "<leader>sw", require("tobyvin.utils.session").write, { desc = "write session" }) - vim.keymap.set("n", "gqq", function() local cursor = vim.api.nvim_win_get_cursor(0) vim.cmd.normal("gggqG") diff --git a/nvim/.config/nvim/lua/tobyvin/utils.lua b/nvim/.config/nvim/lua/tobyvin/utils.lua index 79e7c44..af54cae 100644 --- a/nvim/.config/nvim/lua/tobyvin/utils.lua +++ b/nvim/.config/nvim/lua/tobyvin/utils.lua @@ -5,6 +5,7 @@ function M.inspect(v) return v end +---Register callback to run when a lsp server matching a filter attaches to a buffer ---@param on_attach fun(client: lsp.Client, buffer: integer): boolean|nil ---@param filter vim.lsp.get_clients.filter|nil function M.on_attach(on_attach, filter) @@ -28,10 +29,15 @@ function M.on_attach(on_attach, filter) }) end ---- Merges two or more highlights. +---Merges two or more highlights groups into a new highlight group. +--- +---**Note**: This will overwrite any existing group named <name>. If you would like to both merge +---*and* overwrite a group, specify it both as <name>, as well as in the list of groups to merge. +--- +---E.g. extend_hl(ns, "Normal", "Normal", "Special", { fg = "#333333" }, { other_ns, "Specific" }) ---@param ns integer Namespace ----@param name string name of new hl ----@param ... string|table|{ [1]: integer, [2]: string|table } Two or more hl names, definitions, or tuples of {ns, name|definition} +---@param name string name of new hightlight group. ---If you want to groups into an existing group, add <name> to the list of groups to merge.* +---@param ... string|table|{ [1]: integer, [2]: string|table } Two or more highlight group names, anonymous highlight definitions, or tuples in the form of { namespace, name|definition } function M.extend_hl(ns, name, ...) local hl = {} diff --git a/nvim/.config/nvim/lua/tobyvin/utils/dashboard.lua b/nvim/.config/nvim/lua/tobyvin/utils/dashboard.lua index 89ca286..b128baf 100644 --- a/nvim/.config/nvim/lua/tobyvin/utils/dashboard.lua +++ b/nvim/.config/nvim/lua/tobyvin/utils/dashboard.lua @@ -21,17 +21,6 @@ local function pad_horz(lines, width) return padded end ----@param lines string[] ----@return string[] -local function pad_top(lines, height) - if #lines < height then - for _ = 1, (height - #lines) do - table.insert(lines, 1, "") - end - end - return lines -end - ---@class Dashboard ---@field sections (string[] | fun():string[])[] ---@field rendered string[][] @@ -54,7 +43,7 @@ local M = { job = Job:new({ command = "cowsay", writer = job }) end - return pad_top(job:sync(), (vim.api.nvim_win_get_height(0) / 3) - 3) + return job:sync() end, { " ███╗ ██╗███████╗ ██████╗ ██╗ ██╗██╗███╗ ███╗ ", @@ -84,47 +73,63 @@ local M = { }, } -function M.render(index) - if M.buf == nil or not vim.api.nvim_buf_is_valid(M.buf) then - M.create_buf() - end +function M.render(bufnr, index) + local width = vim.api.nvim_win_get_width(0) + local height = vim.api.nvim_win_get_height(0) - local width = vim.api.nvim_win_get_width(M.win) local rendered = {} + local dashboard = vim.b[bufnr].dashboard or {} + local mid_height = 0 for i, section in pairs(M.sections) do - if M.rendered[i] == nil or index == nil or index == i then + if dashboard[i] == nil or index == nil or index == i then if type(section) == "table" then - M.rendered[i] = pad_horz(section, width) + dashboard[i] = pad_horz(section, width) elseif type(section) == "function" then - M.rendered[i] = pad_horz(section(), width) + dashboard[i] = pad_horz(section(), width) end end - vim.list_extend(rendered, M.rendered[i]) + if i < (#M.sections / 2) then + mid_height = mid_height + #dashboard[i] + elseif i == math.ceil(#M.sections / 2) then + mid_height = mid_height + math.ceil(#dashboard[i] / 2) + end + + vim.list_extend(rendered, dashboard[i]) table.insert(rendered, "") end - vim.bo[M.buf].modifiable = true - vim.api.nvim_buf_set_lines(M.buf, 0, -1, false, rendered) - vim.bo[M.buf].modifiable = false + if mid_height < math.ceil(height / 3) then + for _ = 1, (math.ceil(height / 3) - mid_height) do + table.insert(rendered, 1, "") + end + end + + vim.bo[bufnr].modifiable = true + vim.api.nvim_buf_set_lines(bufnr, 0, -1, false, rendered) + vim.bo[bufnr].modifiable = false + vim.b[bufnr].dashboard = dashboard end -function M.create_buf() - M.buf = vim.api.nvim_create_buf(false, true) - M.win = vim.api.nvim_get_current_win() - vim.api.nvim_set_current_buf(M.buf) - - vim.bo[M.buf].textwidth = 0 - vim.bo[M.buf].bufhidden = "wipe" - vim.bo[M.buf].buflisted = false - vim.bo[M.buf].matchpairs = "" - vim.bo[M.buf].swapfile = false - vim.bo[M.buf].buftype = "nofile" - vim.bo[M.buf].filetype = "dashboard" - vim.bo[M.buf].synmaxcol = 0 - - local opts = { scope = "local", win = M.win } +function M.initialize() + local bufnr = vim.api.nvim_create_buf(false, true) + vim.api.nvim_set_current_buf(bufnr) + local winid = vim.api.nvim_get_current_win() + + vim.bo[bufnr].textwidth = 0 + vim.bo[bufnr].bufhidden = "wipe" + vim.bo[bufnr].buflisted = false + vim.bo[bufnr].matchpairs = "" + vim.bo[bufnr].swapfile = false + vim.bo[bufnr].buftype = "nofile" + vim.bo[bufnr].filetype = "dashboard" + vim.bo[bufnr].synmaxcol = 0 + + vim.b[bufnr].dashboard = {} + vim.b[bufnr].dashboard.augroup = vim.api.nvim_create_augroup("dashboard", { clear = true }) + + local opts = { scope = "local", win = winid } vim.api.nvim_set_option_value("wrap", false, opts) vim.api.nvim_set_option_value("colorcolumn", "", opts) vim.api.nvim_set_option_value("foldlevel", 999, opts) @@ -137,42 +142,38 @@ function M.create_buf() vim.api.nvim_set_option_value("spell", false, opts) vim.api.nvim_set_option_value("signcolumn", "no", opts) - M.augroup = vim.api.nvim_create_augroup("dashboard", { clear = true }) - vim.api.nvim_create_autocmd({ "BufHidden", "BufDelete", "BufLeave" }, { - group = M.augroup, - pattern = { "*" }, - callback = function(args) - if args.buf == M.buf then - vim.api.nvim_del_augroup_by_id(M.augroup) - M.buf = nil - M.win = nil - M.augroup = nil - return true - end - end, - desc = "clear dashboard autocmds", - }) + return bufnr end function M.setup() - if M.buf == nil or not vim.api.nvim_buf_is_valid(M.buf) then - M.create_buf() - end + local augroup = vim.api.nvim_create_augroup("dashboard", { clear = true }) + local bufnr = M.initialize() vim.keymap.set("n", "<C-n>", function() - M.render(1) - end, { desc = "next cowsay", buffer = M.buf }) + M.render(bufnr, 1) + end, { desc = "next cowsay", buffer = bufnr }) vim.api.nvim_create_autocmd("User", { - group = M.augroup, + group = augroup, pattern = { "LazyVimStarted", "LazyLoad", "LazyCheck" }, callback = function() - M.render(3) + M.render(bufnr, 3) end, desc = "dashboard lazy stats", }) - M:render() + vim.api.nvim_create_autocmd({ "BufHidden", "BufDelete", "BufLeave" }, { + group = augroup, + buffer = bufnr, + callback = function() + vim.api.nvim_del_augroup_by_id(augroup) + return true + end, + desc = "clear dashboard autocmds", + }) + + M.render(bufnr) + return bufnr end return M |