summary refs log tree commit diff
path: root/.config/nvim/lua/config/snippets.lua
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--.config/nvim/lua/config/snippets.lua84
1 files changed, 29 insertions, 55 deletions
diff --git a/.config/nvim/lua/config/snippets.lua b/.config/nvim/lua/config/snippets.lua
index e0c260e..9cd0632 100644
--- a/.config/nvim/lua/config/snippets.lua
+++ b/.config/nvim/lua/config/snippets.lua
@@ -6,16 +6,24 @@ ls.config.set_config({
   enable_autosnippets = true,
   history = true,
   updateevents = 'TextChanged,TextChangedI',
-  override_builtin = true,
+  exit_roots = false, -- dont exit when reaching last node
   ext_opts = {
     [types.choiceNode] = {
-      active = {
-        virt_text = { { '◂    󰬊 ', 'NonText' } },
+      passive = {
+        virt_text = { { '󰬊 ', 'Conceal' } },
+        virt_text_pos = 'inline',
       },
     },
     [types.insertNode] = {
-      active = {
-        virt_text = { { '◂    󰬐 ', 'NonText' } },
+      passive = {
+        virt_text = { { '󰬐 ', 'Conceal' } },
+        virt_text_pos = 'inline',
+      },
+    },
+    [types.exitNode] = {
+      passive = {
+        virt_text = { { '$', 'Conceal' } },
+        virt_text_pos = 'inline',
       },
     },
   },
@@ -53,27 +61,6 @@ ls.config.set_config({
 require('luasnip.loaders.from_lua').lazy_load()
 require('luasnip.loaders.from_vscode').lazy_load({ include = {} })
 
--- keymaps
-vim.keymap.set({ 'i', 's' }, '<c-j>', function()
-  return vim.snippet.active({ direction = 1 }) and vim.snippet.jump(1)
-end, { silent = true, desc = 'snippet: jump next' })
-
-vim.keymap.set({ 'i', 's' }, '<c-k>', function()
-  return vim.snippet.active({ direction = -1 }) and vim.snippet.jump(-1)
-end, { silent = true, desc = 'snippet: jump prev' })
-
-vim.keymap.set({ 'i', 's' }, '<c-n>', function()
-  if ls.choice_active() then
-    ls.change_choice(1)
-  end
-end, { silent = true, desc = 'snippet: next choice' })
-
-vim.keymap.set({ 'i', 's' }, '<c-p>', function()
-  if ls.choice_active() then
-    ls.change_choice(-1)
-  end
-end, { silent = true, desc = 'snippet: prev choice' })
-
 -- usercmds
 vim.api.nvim_create_user_command('EditSnippets', require('luasnip.loaders').edit_snippet_files, {})
 
@@ -105,36 +92,23 @@ vim.api.nvim_create_user_command('EditSnippets', require('luasnip.loaders').edit
 vim.api.nvim_create_autocmd('ModeChanged', {
   pattern = '*',
   callback = function()
-    if ((vim.v.event.old_mode == 's' and vim.v.event.new_mode == 'n') or vim.v.event.old_mode == 'i')
-        and ls.session.current_nodes[vim.api.nvim_get_current_buf()]
-        and not ls.session.jump_active
-        and not require("blink.cmp").is_visible()
+    if
+      ((vim.v.event.old_mode == 's' or vim.v.event.old_mode == 'i') and vim.v.event.new_mode == 'n')
+      and ls.session.current_nodes[vim.api.nvim_get_current_buf()]
+      and not ls.session.jump_active
+      and not require('blink.cmp').is_visible()
     then
-      ls.unlink_current()
+      vim.schedule(ls.unlink_current)
     end
-  end
+  end,
 })
 
--- attach to builtin snippet hooks
-vim.snippet.expand = ls.lsp_expand
-vim.snippet.active = function(filter)
-  filter = filter or {}
-  filter.direction = filter.direction or 1
-  if filter.direction == 1 then
-    return ls.expand_or_jumpable()
-  else
-    return ls.jumpable(filter.direction)
-  end
-end
-vim.snippet.jump = function(direction)
-  if direction == 1 then
-    if ls.expandable() then
-      return ls.expand_or_jump()
-    else
-      return ls.jumpable(1) and ls.jump(1)
-    end
-  else
-    return ls.jumpable(-1) and ls.jump(-1)
-  end
-end
-vim.snippet.stop = ls.unlink_current
+-- expand/jump keymaps handled by blink
+
+vim.keymap.set({ 'i', 's' }, '<c-n>', function()
+  return ls.choice_active() and ls.change_choice(1)
+end, { silent = true, desc = 'luasnip: next choice' })
+
+vim.keymap.set({ 'i', 's' }, '<c-p>', function()
+  return ls.choice_active() and ls.change_choice(-1)
+end, { silent = true, desc = 'luasnip: prev choice' })