feat(anki): nvim integration

This commit is contained in:
arne314
2024-12-31 17:36:27 +01:00
parent 7bacdd53c1
commit 1c844e482b
9 changed files with 82 additions and 11 deletions

32
lua/typstar/anki.lua Normal file
View File

@@ -0,0 +1,32 @@
local M = {}
local config = require('typstar.config')
local utils = require('typstar.utils')
local cfg = config.config.anki
local function run_typstar_anki(args)
local cwd = vim.fn.getcwd()
local anki_key = ''
if cfg.ankiKey ~= nil then
anki_key = ' --anki-key ' .. cfg.ankiKey
end
local cmd = string.format(
'%s --root-dir %s --typst-cmd %s --anki-url %s %s %s',
cfg.typstarAnkiCmd, cwd, cfg.typstCmd, cfg.ankiUrl, anki_key, args)
utils.run_shell_command(cmd, true)
end
function M.scan()
run_typstar_anki('')
end
function M.scan_force()
run_typstar_anki('--force-scan ' .. vim.fn.getcwd())
end
function M.scan_force_current()
run_typstar_anki('--force-scan ' .. vim.fn.expand('%:p'))
end
return M

View File

@@ -2,6 +2,12 @@ local M = {}
local default_config = {
typstarRoot = '~/typstar',
anki = {
typstarAnkiCmd = 'typstar-anki',
typstCmd = 'typst',
ankiUrl = 'http://127.0.0.1:8765',
ankiKey = nil,
},
excalidraw = {
assetsDir = 'assets',
filename = 'drawing-%Y-%m-%d-%H-%M-%S',

View File

@@ -11,7 +11,9 @@ local affix = [[
local function launch_obsidian(path)
print(string.format('Opening %s in Excalidraw', path))
utils.run_shell_command(string.format('%s "obsidian://open?path=%s"', cfg.uriOpenCommand, utils.urlencode(path)))
utils.run_shell_command(
string.format('%s "obsidian://open?path=%s"', cfg.uriOpenCommand, utils.urlencode(path)), false
)
end
function M.insert_drawing()
@@ -27,7 +29,7 @@ function M.insert_drawing()
for pattern, template_path in pairs(cfg.templatePath) do
if string.match(path, pattern) then
found_match = true
utils.run_shell_command(string.format('cat %s > %s', template_path, path)) -- don't copy file metadata
utils.run_shell_command(string.format('cat %s > %s', template_path, path), false) -- don't copy file metadata
break
end
end

View File

@@ -4,11 +4,19 @@ local config = require('typstar.config')
M.setup = function(args)
config.merge_config(args)
local excalidraw = require('typstar.excalidraw')
local autosnippets = require('typstar.autosnippets')
local excalidraw = require('typstar.excalidraw')
local anki = require('typstar.anki')
vim.api.nvim_create_user_command('TypstarToggleSnippets', autosnippets.toggle_autosnippets, {})
vim.api.nvim_create_user_command('TypstarInsertExcalidraw', excalidraw.insert_drawing, {})
vim.api.nvim_create_user_command('TypstarOpenExcalidraw', excalidraw.open_drawing, {})
vim.api.nvim_create_user_command('TypstarToggleSnippets', autosnippets.toggle_autosnippets, {})
vim.api.nvim_create_user_command('TypstarAnkiScan', anki.scan, {})
vim.api.nvim_create_user_command('TypstarAnkiForce', anki.scan_force, {})
vim.api.nvim_create_user_command('TypstarAnkiForceCurrent', anki.scan_force_current, {})
autosnippets.setup()
end

View File

@@ -26,8 +26,31 @@ function M.insert_text_block(snip)
vim.api.nvim_buf_set_lines(vim.api.nvim_get_current_buf(), line_num, line_num, false, lines)
end
function M.run_shell_command(cmd)
vim.fn.jobstart(cmd)
function M.run_shell_command(cmd, show_output)
local handle_output = function(data, err)
local msg = table.concat(data, '\n')
if not string.match(msg, '^%s*$') then
local level = err and vim.log.levels.ERROR or vim.log.levels.INFO
vim.notify(msg, level)
end
end
if show_output then
vim.fn.jobstart(
cmd,
{
on_stdout = function(_, data, _)
handle_output(data, false)
end,
on_stderr = function(_, data, _)
handle_output(data, true)
end,
stdout_buffered = false,
stderr_buffered = true,
}
)
else
vim.fn.jobstart(cmd)
end
end
function M.char_to_hex(c)