mirror of
https://github.com/Ascyii/typstar.git
synced 2026-01-01 05:24:24 -05:00
feat(snip): exclude snippets by trigger
This commit is contained in:
@@ -28,7 +28,7 @@ Math snippets:
|
|||||||
- Wrapping of any mathematical expression (see [operations](./lua/typstar/snippets/visual.lua), works nested, multiline and in visual mode via the [selection key](#installation)): `<expression><operation>` → `<operation>(<expression>)` (e.g. `(a^2+b^2)rt` → `sqrt(a^2+b^2)`, `lambdatd` → `tilde(lambda)`, `(1+1)sQ` → `[1+1]`, `(1+1)sq` → `[(1+1)]`)
|
- Wrapping of any mathematical expression (see [operations](./lua/typstar/snippets/visual.lua), works nested, multiline and in visual mode via the [selection key](#installation)): `<expression><operation>` → `<operation>(<expression>)` (e.g. `(a^2+b^2)rt` → `sqrt(a^2+b^2)`, `lambdatd` → `tilde(lambda)`, `(1+1)sQ` → `[1+1]`, `(1+1)sq` → `[(1+1)]`)
|
||||||
- Matrices: `<size>ma` and `<size>lma` (e.g. `23ma` → 2x3 matrix)
|
- Matrices: `<size>ma` and `<size>lma` (e.g. `23ma` → 2x3 matrix)
|
||||||
|
|
||||||
Note that you can enable and disable collections of snippets in the [config](#configuration).
|
Note that you can enable and disable single and modules of snippets in the [config](#configuration).
|
||||||
|
|
||||||
### Excalidraw
|
### Excalidraw
|
||||||
- Use `:TypstarInsertExcalidraw` to create a new drawing using the configured template, insert a figure displaying it and open it in Obsidian.
|
- Use `:TypstarInsertExcalidraw` to create a new drawing using the configured template, insert a figure displaying it and open it in Obsidian.
|
||||||
|
|||||||
@@ -6,15 +6,18 @@ local fmta = require('luasnip.extras.fmt').fmta
|
|||||||
local lsengines = require('luasnip.nodes.util.trig_engines')
|
local lsengines = require('luasnip.nodes.util.trig_engines')
|
||||||
local ts = vim.treesitter
|
local ts = vim.treesitter
|
||||||
|
|
||||||
|
local exclude_triggers_set = {}
|
||||||
local last_keystroke_time = nil
|
local last_keystroke_time = nil
|
||||||
vim.api.nvim_create_autocmd('TextChangedI', {
|
|
||||||
callback = function() last_keystroke_time = vim.loop.now() end,
|
|
||||||
})
|
|
||||||
local lexical_result_cache = {}
|
local lexical_result_cache = {}
|
||||||
local ts_markup_query = ts.query.parse('typst', '(text) @markup')
|
local ts_markup_query = ts.query.parse('typst', '(text) @markup')
|
||||||
local ts_math_query = ts.query.parse('typst', '(math) @math')
|
local ts_math_query = ts.query.parse('typst', '(math) @math')
|
||||||
local ts_string_query = ts.query.parse('typst', '(string) @string')
|
local ts_string_query = ts.query.parse('typst', '(string) @string')
|
||||||
|
|
||||||
|
utils.generate_bool_set(cfg.exclude, exclude_triggers_set)
|
||||||
|
vim.api.nvim_create_autocmd('TextChangedI', {
|
||||||
|
callback = function() last_keystroke_time = vim.loop.now() end,
|
||||||
|
})
|
||||||
|
|
||||||
M.in_math = function()
|
M.in_math = function()
|
||||||
local cursor = utils.get_cursor_pos()
|
local cursor = utils.get_cursor_pos()
|
||||||
return utils.cursor_within_treesitter_query(ts_math_query, 0, cursor)
|
return utils.cursor_within_treesitter_query(ts_math_query, 0, cursor)
|
||||||
@@ -121,7 +124,16 @@ function M.setup()
|
|||||||
if cfg.enable then
|
if cfg.enable then
|
||||||
local autosnippets = {}
|
local autosnippets = {}
|
||||||
for _, file in ipairs(cfg.modules) do
|
for _, file in ipairs(cfg.modules) do
|
||||||
vim.list_extend(autosnippets, require(('typstar.snippets.%s'):format(file)))
|
for _, sn in ipairs(require(('typstar.snippets.%s'):format(file))) do
|
||||||
|
local exclude
|
||||||
|
local is_start = sn.trigger:match('^%^%(\\s%*%)')
|
||||||
|
if is_start then
|
||||||
|
exclude = exclude_triggers_set[sn.trigger:sub(7)]
|
||||||
|
else
|
||||||
|
exclude = exclude_triggers_set[sn.trigger]
|
||||||
|
end
|
||||||
|
if not exclude then table.insert(autosnippets, sn) end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
luasnip.add_snippets('typst', autosnippets)
|
luasnip.add_snippets('typst', autosnippets)
|
||||||
local jsregexp_ok, _ = pcall(require, 'luasnip-jsregexp')
|
local jsregexp_ok, _ = pcall(require, 'luasnip-jsregexp')
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ local default_config = {
|
|||||||
'markup',
|
'markup',
|
||||||
'visual',
|
'visual',
|
||||||
},
|
},
|
||||||
|
exclude = {}, -- list of triggers to exclude
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ local i = ls.insert_node
|
|||||||
local s = ls.snippet_node
|
local s = ls.snippet_node
|
||||||
local t = ls.text_node
|
local t = ls.text_node
|
||||||
local helper = require('typstar.autosnippets')
|
local helper = require('typstar.autosnippets')
|
||||||
|
local utils = require('typstar.utils')
|
||||||
local snip = helper.snip
|
local snip = helper.snip
|
||||||
local cap = helper.cap
|
local cap = helper.cap
|
||||||
local math = helper.in_math
|
local math = helper.in_math
|
||||||
@@ -62,14 +63,8 @@ for latin, greek in pairs(greek_letters_map) do
|
|||||||
table.insert(greek_keys, latin:upper())
|
table.insert(greek_keys, latin:upper())
|
||||||
end
|
end
|
||||||
|
|
||||||
local generate_bool_set = function(arr, target)
|
utils.generate_bool_set(index_conflicts, index_conflicts_set)
|
||||||
for _, val in ipairs(arr) do
|
utils.generate_bool_set(punctuation_prepend_space, punctuation_prepend_space_set)
|
||||||
target[val] = true
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
generate_bool_set(index_conflicts, index_conflicts_set)
|
|
||||||
generate_bool_set(punctuation_prepend_space, punctuation_prepend_space_set)
|
|
||||||
|
|
||||||
greek_letters_map = greek_full
|
greek_letters_map = greek_full
|
||||||
trigger_greek = table.concat(greek_keys, '|')
|
trigger_greek = table.concat(greek_keys, '|')
|
||||||
|
|||||||
@@ -61,6 +61,12 @@ function M.urlencode(url)
|
|||||||
return url
|
return url
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function M.generate_bool_set(arr, target)
|
||||||
|
for _, val in ipairs(arr) do
|
||||||
|
target[val] = true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
function M.get_treesitter_root(bufnr) return ts.get_parser(bufnr):parse()[1]:root() end
|
function M.get_treesitter_root(bufnr) return ts.get_parser(bufnr):parse()[1]:root() end
|
||||||
|
|
||||||
function M.treesitter_match_start_end(match)
|
function M.treesitter_match_start_end(match)
|
||||||
|
|||||||
Reference in New Issue
Block a user