summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorToby Vincent <tobyv@tobyvin.dev>2023-10-28 17:55:03 -0500
committerToby Vincent <tobyv@tobyvin.dev>2023-10-28 17:55:03 -0500
commit76dee3d2502e9edf5ddbe797ae6e01c6cbd190fe (patch)
tree65823e7773bbded6260d5f93ffb4267cb9ae9c6e
parentcfc1d095a4c4c8f39b968464afc5aaae8e7d995b (diff)
fix(nvim): cleanup misc util functions
-rw-r--r--nvim/.config/nvim/after/ftplugin/help.lua8
-rw-r--r--nvim/.config/nvim/lua/tobyvin/autocmds.lua18
-rw-r--r--nvim/.config/nvim/lua/tobyvin/commands.lua9
-rw-r--r--nvim/.config/nvim/lua/tobyvin/keymaps.lua3
-rw-r--r--nvim/.config/nvim/lua/tobyvin/utils.lua12
-rw-r--r--nvim/.config/nvim/lua/tobyvin/utils/dashboard.lua125
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