diff options
| author | TheSiahxyz <164138827+TheSiahxyz@users.noreply.github.com> | 2025-01-24 20:35:27 +0900 |
|---|---|---|
| committer | TheSiahxyz <164138827+TheSiahxyz@users.noreply.github.com> | 2025-01-24 20:35:27 +0900 |
| commit | c80a54e42b52ce297f0f2f71af23c562832025c7 (patch) | |
| tree | dcce8bb977a770f473325d48f6f70b21d9818a40 /ar/.config/TheSiahxyz/lua/thesiahxyz/utils/cheatsheet/init.lua | |
init
Diffstat (limited to 'ar/.config/TheSiahxyz/lua/thesiahxyz/utils/cheatsheet/init.lua')
| -rw-r--r-- | ar/.config/TheSiahxyz/lua/thesiahxyz/utils/cheatsheet/init.lua | 116 |
1 files changed, 116 insertions, 0 deletions
diff --git a/ar/.config/TheSiahxyz/lua/thesiahxyz/utils/cheatsheet/init.lua b/ar/.config/TheSiahxyz/lua/thesiahxyz/utils/cheatsheet/init.lua new file mode 100644 index 0000000..c4cc1f0 --- /dev/null +++ b/ar/.config/TheSiahxyz/lua/thesiahxyz/utils/cheatsheet/init.lua @@ -0,0 +1,116 @@ +local M = {} +local api = vim.api +local config = require("thesiahxyz.utils.cheatsheet") -- Load cheatsheet options + +local function capitalize(str) + return (str:gsub("^%l", string.upper)) +end + +M.get_mappings = function(mappings, tb_to_add) + local excluded_groups = config.cheatsheet.excluded_groups + + for _, v in ipairs(mappings) do + local desc = v.desc + + if not desc or (select(2, desc:gsub("%S+", "")) <= 1) or string.find(desc, "\n") then + goto continue + end + + local heading = desc:match("%S+") -- Get first word + heading = (v.mode ~= "n" and heading .. " (" .. v.mode .. ")") or heading + + if + vim.tbl_contains(excluded_groups, heading) + or vim.tbl_contains(excluded_groups, desc:match("%S+")) + or string.find(v.lhs, "<Plug>") + then + goto continue + end + + heading = capitalize(heading) + + if not tb_to_add[heading] then + tb_to_add[heading] = {} + end + + local keybind = string.sub(v.lhs, 1, 1) == " " and "<leader> +" .. v.lhs or v.lhs + + desc = v.desc:match("%s(.+)") -- Remove first word from description + desc = capitalize(desc) + + table.insert(tb_to_add[heading], { desc, keybind }) + + ::continue:: + end +end + +M.organize_mappings = function() + local tb_to_add = {} + local modes = { "n", "i", "v", "t" } + + for _, mode in ipairs(modes) do + local keymaps = api.nvim_get_keymap(mode) + M.get_mappings(keymaps, tb_to_add) + + local bufkeymaps = api.nvim_buf_get_keymap(0, mode) + M.get_mappings(bufkeymaps, tb_to_add) + end + + return tb_to_add +end + +M.rand_hlgroup = function() + local hlgroups = { + "blue", + "red", + "green", + "yellow", + "orange", + "baby_pink", + "purple", + "white", + "cyan", + "vibrant_green", + "teal", + } + + return "ThesiahHead" .. hlgroups[math.random(1, #hlgroups)] +end + +M.autocmds = function(buf, win) + -- Set buffer options to make it searchable and navigable + vim.bo[buf].buflisted = true + vim.bo[buf].buftype = "" -- Treat it as a regular buffer + vim.bo[buf].swapfile = false + vim.bo[buf].modifiable = false -- Prevent accidental edits + vim.bo[buf].readonly = false -- Enable navigation and search + vim.bo[buf].filetype = "cheatsheet" -- Optional, to customize behavior + + -- Create autocmd group for cheatsheet + local group_id = api.nvim_create_augroup("ThesiahCheatsheet", { clear = true }) + + -- Clean up when buffer is closed + api.nvim_create_autocmd("BufWinLeave", { + group = group_id, + buffer = buf, + callback = function() + vim.g.thesiah_cheatsheet_displayed = false + api.nvim_del_augroup_by_id(group_id) + end, + }) + + -- Keymaps for cheatsheet buffer + vim.keymap.set("n", "q", function() + api.nvim_buf_delete(buf, { force = true }) + end, { buffer = buf }) + + vim.keymap.set("n", "<ESC>", function() + api.nvim_buf_delete(buf, { force = true }) + end, { buffer = buf }) +end + +M.state = { + mappings_tb = {}, +} + +return M |
