From 50634a190daf25a4e48840df73c0adaa9271bb96 Mon Sep 17 00:00:00 2001 From: arne314 <73391160+arne314@users.noreply.github.com> Date: Fri, 27 Jun 2025 17:48:56 +0200 Subject: [PATCH] feat(snip): `smart_jump()` for node traversal --- flake.nix | 7 ++++--- lua/typstar/init.lua | 20 +++++++++++++++++++- 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/flake.nix b/flake.nix index 67bdf3b..a4f602f 100644 --- a/flake.nix +++ b/flake.nix @@ -52,11 +52,12 @@ store_selection_keys = "", }) - require('typstar').setup() + local typstar = require('typstar') + typstar.setup({}) vim.keymap.set({'n', 'i'}, '', 'TypstarToggleSnippets', { silent = true, noremap = true }) - vim.keymap.set({'n', 'i'}, '', function() ls.jump( 1) end, { silent = true, noremap = true }) - vim.keymap.set({'n', 'i'}, '', function() ls.jump(-1) end, { silent = true, noremap = true }) + vim.keymap.set({'n', 'i'}, '', 'TypstarSmartJump', { silent = true, noremap = true }) + vim.keymap.set({'n', 'i'}, '', 'TypstarSmartJumpBack', { silent = true, noremap = true }) EOF ''; plugins = [ diff --git a/lua/typstar/init.lua b/lua/typstar/init.lua index e0c49eb..5bfe148 100644 --- a/lua/typstar/init.lua +++ b/lua/typstar/init.lua @@ -1,6 +1,7 @@ local M = {} local config = require('typstar.config') +local luasnip = nil M.setup = function(args) config.merge_config(args) @@ -9,6 +10,8 @@ M.setup = function(args) local anki = require('typstar.anki') vim.api.nvim_create_user_command('TypstarToggleSnippets', autosnippets.toggle_autosnippets, {}) + vim.api.nvim_create_user_command('TypstarSmartJump', function() M.smart_jump(1) end, {}) + vim.api.nvim_create_user_command('TypstarSmartJumpBack', function() M.smart_jump(-1) end, {}) vim.api.nvim_create_user_command('TypstarInsertExcalidraw', excalidraw.insert_drawing, {}) vim.api.nvim_create_user_command('TypstarOpenExcalidraw', excalidraw.open_drawing, {}) @@ -19,8 +22,23 @@ M.setup = function(args) vim.api.nvim_create_user_command('TypstarAnkiForceReimport', anki.scan_force_reimport, {}) vim.api.nvim_create_user_command('TypstarAnkiForceCurrent', anki.scan_force_current, {}) vim.api.nvim_create_user_command('TypstarAnkiForceCurrentReimport', anki.scan_force_current_reimport, {}) - autosnippets.setup() end +-- source: https://github.com/lentilus/fastex.nvim +M.smart_jump = function(length, x, y, tries) + if luasnip == nil then luasnip = require('luasnip') end + local x2, y2 = unpack(vim.api.nvim_win_get_cursor(0)) + local tries = tries or 0 + + if tries > 10 then return end + if x == nil or y == nil then + x, y = x2, y2 + end + if x == x2 and y == y2 then + luasnip.jump(length) + vim.schedule(function() M.smart_jump(length, x, y, tries + 1) end) + end +end + return M