mirror of
https://github.com/Ascyii/typstar.git
synced 2026-01-01 05:24:24 -05:00
feat(draw): auto export rnote on save
This commit is contained in:
@@ -18,9 +18,10 @@ local default_config = {
|
|||||||
},
|
},
|
||||||
rnote = {
|
rnote = {
|
||||||
assetsDir = 'assets',
|
assetsDir = 'assets',
|
||||||
|
exportCommand = 'rnote-cli export doc --no-background --no-pattern --on-conflict overwrite --output-file %s %s',
|
||||||
filename = 'drawing-%Y-%m-%d-%H-%M-%S',
|
filename = 'drawing-%Y-%m-%d-%H-%M-%S',
|
||||||
fileExtension = '.rnote',
|
fileExtension = '.rnote',
|
||||||
fileExtensionInserted = '.rnote.svg',
|
fileExtensionInserted = '.rnote.svg', -- valid rnote export type
|
||||||
uriOpenCommand = 'xdg-open', -- see comment above for excalidraw
|
uriOpenCommand = 'xdg-open', -- see comment above for excalidraw
|
||||||
templatePath = {},
|
templatePath = {},
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ local affix = [[
|
|||||||
local config_excalidraw = config.config.excalidraw
|
local config_excalidraw = config.config.excalidraw
|
||||||
local config_rnote = config.config.rnote
|
local config_rnote = config.config.rnote
|
||||||
|
|
||||||
local function launch_excalidraw(path)
|
local function launch_excalidraw(path, path_inserted)
|
||||||
print(string.format('Opening %s in Obsidian Excalidraw', path))
|
print(string.format('Opening %s in Obsidian Excalidraw', path))
|
||||||
utils.run_shell_command(
|
utils.run_shell_command(
|
||||||
string.format('%s "obsidian://open?path=%s"', config_excalidraw.uriOpenCommand, utils.urlencode(path)),
|
string.format('%s "obsidian://open?path=%s"', config_excalidraw.uriOpenCommand, utils.urlencode(path)),
|
||||||
@@ -18,9 +18,32 @@ local function launch_excalidraw(path)
|
|||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
local function launch_rnote(path)
|
local rnote_watched = {}
|
||||||
|
|
||||||
|
local function auto_export_rnote(path, path_inserted)
|
||||||
|
if rnote_watched[path] then return end
|
||||||
|
rnote_watched[path] = true
|
||||||
|
local job_id = -1
|
||||||
|
local last_export = 0
|
||||||
|
|
||||||
|
local run_export = function(err, filename)
|
||||||
|
local time = vim.uv.now()
|
||||||
|
if err ~= nil or time - last_export < 800 then return end
|
||||||
|
|
||||||
|
if job_id == -1 then
|
||||||
|
last_export = time
|
||||||
|
local cmd = string.format(config_rnote.exportCommand, path_inserted, path)
|
||||||
|
job_id = utils.run_shell_command(cmd, false, nil, { on_exit = function() job_id = -1 end })
|
||||||
|
end
|
||||||
|
end
|
||||||
|
local watcher = vim.uv.new_fs_event()
|
||||||
|
watcher:start(path, {}, vim.schedule_wrap(run_export))
|
||||||
|
end
|
||||||
|
|
||||||
|
local function launch_rnote(path, path_inserted)
|
||||||
print(string.format('Opening %s in Rnote', path))
|
print(string.format('Opening %s in Rnote', path))
|
||||||
utils.run_shell_command(string.format('%s %s', config_rnote.uriOpenCommand, path), false)
|
utils.run_shell_command(string.format('%s %s', config_rnote.uriOpenCommand, path), false)
|
||||||
|
auto_export_rnote(path, path_inserted)
|
||||||
end
|
end
|
||||||
|
|
||||||
local function insert_drawing(provider)
|
local function insert_drawing(provider)
|
||||||
@@ -47,7 +70,7 @@ local function insert_drawing(provider)
|
|||||||
end
|
end
|
||||||
|
|
||||||
utils.insert_text_block(string.format(provider[2], path_inserted))
|
utils.insert_text_block(string.format(provider[2], path_inserted))
|
||||||
provider[3](path)
|
provider[3](path, path_inserted)
|
||||||
end
|
end
|
||||||
|
|
||||||
local excalidraw = {
|
local excalidraw = {
|
||||||
@@ -72,7 +95,8 @@ function M.open_drawing()
|
|||||||
local filename = line:match('"(.*)' .. string.gsub(cfg.fileExtensionInserted, '%.', '%%%.'))
|
local filename = line:match('"(.*)' .. string.gsub(cfg.fileExtensionInserted, '%.', '%%%.'))
|
||||||
if filename ~= nil and filename:match('^%s*$') == nil then
|
if filename ~= nil and filename:match('^%s*$') == nil then
|
||||||
local path = vim.fn.expand('%:p:h') .. '/' .. filename .. cfg.fileExtension
|
local path = vim.fn.expand('%:p:h') .. '/' .. filename .. cfg.fileExtension
|
||||||
provider[3](path) -- launch program
|
local path_inserted = vim.fn.expand('%:p:h') .. '/' .. filename .. cfg.fileExtensionInserted
|
||||||
|
provider[3](path, path_inserted) -- launch program
|
||||||
break
|
break
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -26,8 +26,9 @@ function M.insert_text_block(snip)
|
|||||||
vim.api.nvim_buf_set_lines(vim.api.nvim_get_current_buf(), line_num, line_num, false, lines)
|
vim.api.nvim_buf_set_lines(vim.api.nvim_get_current_buf(), line_num, line_num, false, lines)
|
||||||
end
|
end
|
||||||
|
|
||||||
function M.run_shell_command(cmd, show_output, extra_handler)
|
function M.run_shell_command(cmd, show_output, extra_handler, opts)
|
||||||
extra_handler = extra_handler or function(msg) end
|
extra_handler = extra_handler or function(msg) end
|
||||||
|
opts = opts or { on_exit = function() end }
|
||||||
local handle_output = function(data, err)
|
local handle_output = function(data, err)
|
||||||
local msg = table.concat(data, '\n')
|
local msg = table.concat(data, '\n')
|
||||||
if not string.match(msg, '^%s*$') then
|
if not string.match(msg, '^%s*$') then
|
||||||
@@ -37,14 +38,14 @@ function M.run_shell_command(cmd, show_output, extra_handler)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
if show_output then
|
if show_output then
|
||||||
vim.fn.jobstart(cmd, {
|
return vim.fn.jobstart(cmd, vim.tbl_deep_extend({
|
||||||
on_stdout = function(_, data, _) handle_output(data, false) end,
|
on_stdout = function(_, data, _) handle_output(data, false) end,
|
||||||
on_stderr = function(_, data, _) handle_output(data, true) end,
|
on_stderr = function(_, data, _) handle_output(data, true) end,
|
||||||
stdout_buffered = false,
|
stdout_buffered = false,
|
||||||
stderr_buffered = true,
|
stderr_buffered = true,
|
||||||
})
|
}, opts, "force"))
|
||||||
else
|
else
|
||||||
vim.fn.jobstart(cmd)
|
return vim.fn.jobstart(cmd, opts)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user