From 0affef0abceec42770aa303ff56418399ec85564 Mon Sep 17 00:00:00 2001 From: rootiest Date: Sat, 14 Sep 2024 17:04:57 -0400 Subject: [PATCH] feat: add custom key mappings for visual mode text block movements --- lua/config/keymaps.lua | 42 +++++---------------------------- lua/data/func.lua | 25 ++++++++++++++++++++ lua/data/keys.lua | 53 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 84 insertions(+), 36 deletions(-) diff --git a/lua/config/keymaps.lua b/lua/config/keymaps.lua index a6bd586..9418a4a 100644 --- a/lua/config/keymaps.lua +++ b/lua/config/keymaps.lua @@ -14,13 +14,6 @@ local data = require("data") -- Add keymapper function local add_keymap = data.func.add_keymap --- local add_km = require("which-key").add - --- ━━━━━━━━━━━━━━━━━━━━━━━━━━ General Keybinds ━━━━━━━━━━━━━━━━━━━━━━━ --- Add keymaps for miscellaneous keybinds -for _, item in ipairs(data.keys.misc) do - add_keymap(item) -end -- ━━━━━━━━━━━━━━━━━━━━━━━━━━━ Group Keybinds ━━━━━━━━━━━━━━━━━━━━━━━━ -- Add keymaps for menu groups @@ -28,6 +21,12 @@ for _, item in ipairs(data.keys.groups) do add_keymap(item) end +-- ━━━━━━━━━━━━━━━━━━━━━━━━━━ General Keybinds ━━━━━━━━━━━━━━━━━━━━━━━ +-- Add keymaps for miscellaneous keybinds +for _, item in ipairs(data.keys.misc) do + add_keymap(item) +end + -- ━━━━━━━━━━━━━━━━━━━━━━━━━━━ Resizing splits ━━━━━━━━━━━━━━━━━━━━━━━━━━━ -- Add keymaps for resizing splits for _, map in ipairs(data.keys.splits.resize) do @@ -49,32 +48,3 @@ end -- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Overrides ━━━━━━━━━━━━━━━━━━━━━━━━━━ -- Add keymaps for overrides add_keymap(data.keys.overrides) - --- ━━━━━━━━━━━━━━━━━━━━━━━━━━━ Custom Mappings ━━━━━━━━━━━━━━━━━━━━━━━━━━━ --- Visual mode: Move selected block of text up -add_keymap("K", function() - data.func.move_visual(true) -end, "Move block of text up", "v") - --- Visual mode: Move selected block of text down -add_keymap("J", function() - data.func.move_visual(false) -end, "Move block of text down", "v") - --- Test Prompt: Enter your name -add_keymap("qP", function() - data.func.InputPrompt("Enter your name: ", function(input) - if input then - -- trim whitespace from end of input - input = input:gsub("%s+$", "") - print("👋😎 Hello " .. input .. "!") - else - print("Input was canceled") - end - end) -end, "Test Prompt") - --- Paste over text with overwrite -add_keymap("cp", function() - data.func.paste_overwrite() -end, "Paste overwrite", "n") diff --git a/lua/data/func.lua b/lua/data/func.lua index 28ab846..64168d3 100644 --- a/lua/data/func.lua +++ b/lua/data/func.lua @@ -455,6 +455,8 @@ function M.move_visual(up, multiplier) vim.cmd("norm gv") end +---@function Function to paste over text with overwrite +---@return nil function M.paste_overwrite() -- Get the register contents and type local register = vim.fn.getreginfo(vim.v.register or '"') @@ -490,6 +492,29 @@ function M.paste_overwrite() ) end +---@function Function to dump the current buffer to a register and format as a Lua table +---@param register string? The name of the register to dump the buffer to (defaults to unnamed register if nil) +---@return nil +function M.dump_buffer_to_table(register) + register = register or "" -- Default to unnamed register if not provided + + -- Get the lines from the current buffer + local lines = vim.api.nvim_buf_get_lines(0, 0, -1, false) + + -- Process the buffer contents + local result = {} + for _, line in ipairs(lines) do + local entry = line:gsub("%.lua$", "") -- Remove ".lua" extension + table.insert(result, '"' .. entry .. '"') + end + + -- Join the result into a single string and format as a Lua table + local output = "{ " .. table.concat(result, ", ") .. " }" + + -- Dump the result into a register + vim.fn.setreg(register, output) +end + ---@function Function to reload the user's Neovim configuration ---@return nil function M.reload_config() diff --git a/lua/data/keys.lua b/lua/data/keys.lua index 600c78d..c53ae20 100644 --- a/lua/data/keys.lua +++ b/lua/data/keys.lua @@ -440,6 +440,59 @@ M.misc = { mode = "n", hidden = true, }, + { -- Visual mode: Move selected block of text up + lhs = "K", + rhs = function() + require("data.func").move_visual(true) + end, + desc = "Move block of text up", + mode = "v", + }, + { -- Visual mode: Move selected block of text down + lhs = "J", + rhs = function() + require("data.func").move_visual(false) + end, + desc = "Move block of text down", + mode = "v", + }, + { -- Test Prompt: Enter your name + lhs = "qP", + rhs = function() + require("data.func").InputPrompt("Enter your name: ", function(input) + if input then + -- trim whitespace from end of input + input = input:gsub("%s+$", "") + print("👋😎 Hello " .. input .. "!") + else + print("Input was canceled") + end + end) + end, + desc = "Test Prompt", + }, + { -- Paste over text with overwrite + lhs = "cp", + rhs = function() + require("data.func").paste_overwrite() + end, + desc = "Paste overwrite", + mode = "n", + }, + { -- Dump buffer contents to a table in register + lhs = "bY", + rhs = function() + require("data.func").dump_buffer_to_table("+") + end, + desc = "Yank buffer as table", + mode = "n", + }, + { -- Yank buffer + lhs = "by", + rhs = "%y", + desc = "Yank buffer", + mode = "n", + }, } M.nekifoch = {