From aa5351d41fab283ce71a4073545cb0eac7846922 Mon Sep 17 00:00:00 2001 From: rootiest Date: Tue, 24 Sep 2024 14:50:14 -0400 Subject: [PATCH] feat: add multicursor support with new keybindings --- lua/config/keymaps.lua | 6 ++ lua/data/keys.lua | 149 +++++++++++++++++++++++++++++++++++++++++ lua/plugins/util.lua | 15 +++++ 3 files changed, 170 insertions(+) diff --git a/lua/config/keymaps.lua b/lua/config/keymaps.lua index 9418a4a..f6c7a60 100644 --- a/lua/config/keymaps.lua +++ b/lua/config/keymaps.lua @@ -45,6 +45,12 @@ for _, map in ipairs(data.keys.splits.swap) do add_keymap(map[1], map[2], map[3], data.types.all_modes) end +-- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ MultiCursor ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +-- Add keymaps for multicursor +for _, item in ipairs(data.keys.multicursor) do + add_keymap(item) +end + -- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Overrides ━━━━━━━━━━━━━━━━━━━━━━━━━━ -- Add keymaps for overrides add_keymap(data.keys.overrides) diff --git a/lua/data/keys.lua b/lua/data/keys.lua index 923272a..299c3b2 100644 --- a/lua/data/keys.lua +++ b/lua/data/keys.lua @@ -572,6 +572,155 @@ M.groups = { }, } +M.multicursor = { + { + "", + function() + require("multicursor-nvim").addCursor("k") + end, + mode = { "n", "v" }, + desc = "Add Cursor Above", + }, + { + "", + function() + require("multicursor-nvim").addCursor("j") + end, + mode = { "n", "v" }, + desc = "Add Cursor Below", + }, + { + "", + function() + require("multicursor-nvim").addCursor("*") + end, + desc = "Add Cursor and Skip Word", + mode = { "n", "v" }, + }, + { + "", + function() + require("multicursor-nvim").skipCursor("*") + end, + desc = "Skip Word", + mode = { "n", "v" }, + }, + { + "", + function() + require("multicursor-nvim").nextCursor() + end, + desc = "Next Cursor", + mode = { "n", "v" }, + }, + { + "", + function() + require("multicursor-nvim").prevCursor() + end, + desc = "Previous Cursor", + mode = { "n", "v" }, + }, + { + "x", + function() + require("multicursor-nvim").deleteCursor() + end, + desc = "Delete Cursor", + mode = { "n", "v" }, + }, + { + "", + function() + require("multicursor-nvim").handleMouse() + end, + desc = "Add/Remove Cursor", + mode = "n", + }, + { + "", + function() + if require("multicursor-nvim").cursorsEnabled() then + require("multicursor-nvim").disableCursors() -- Stop other cursors from moving, allowing main cursor repositioning. + else + require("multicursor-nvim").addCursor() -- Add a cursor if none are enabled. + end + end, + desc = "Add Cursor", + mode = { "n", "v" }, + }, + { + "", + function() + if not require("multicursor-nvim").cursorsEnabled() then + require("multicursor-nvim").enableCursors() -- Enable cursors. + elseif require("multicursor-nvim").hasCursors() then + require("multicursor-nvim").clearCursors() -- Clear all cursors. + else + -- Default handler can be defined here if needed. + end + end, + desc = "Escape Handler", + mode = "n", + }, + { + "a", + function() + require("multicursor-nvim").alignCursors() + end, + desc = "Align Cursors", + mode = "n", + }, + { + "S", + function() + require("multicursor-nvim").splitCursors() + end, + desc = "Split Cursors", + mode = "v", + }, + { + "I", + function() + require("multicursor-nvim").insertVisual() + end, + desc = "Insert Visual", + mode = "v", + }, + { + "A", + function() + require("multicursor-nvim").appendVisual() + end, + desc = "Append Visual", + mode = "v", + }, + { + "M", + function() + require("multicursor-nvim").matchCursors() + end, + desc = "Match Cursors", + mode = "v", + }, + { + "t", + function() + require("multicursor-nvim").transposeCursors(1) + end, + desc = "Transpose Cursors  ", + mode = "v", + }, + { + "T", + function() + require("multicursor-nvim").transposeCursors(-1) + end, + desc = "Transpose Cursors  ", + mode = "v", + }, +} + M.nvimup = { { -- Update Neovim from source "quU", diff --git a/lua/plugins/util.lua b/lua/plugins/util.lua index 51f7573..645377a 100644 --- a/lua/plugins/util.lua +++ b/lua/plugins/util.lua @@ -169,4 +169,19 @@ return { { -- Timer "alex-popov-tech/timer.nvim", }, + { -- Multicursor + "jake-stewart/multicursor.nvim", + branch = "1.0", + config = function() + local mc = require("multicursor-nvim") + + mc.setup() + + -- Customize how cursors look. + vim.api.nvim_set_hl(0, "MultiCursorCursor", { link = "Cursor" }) + vim.api.nvim_set_hl(0, "MultiCursorVisual", { link = "Visual" }) + vim.api.nvim_set_hl(0, "MultiCursorDisabledCursor", { link = "Visual" }) + vim.api.nvim_set_hl(0, "MultiCursorDisabledVisual", { link = "Visual" }) + end, + }, }