Use <C-x> when in insert mode and it will prepend the line with an empty todo item.
75 lines
2.7 KiB
Lua
75 lines
2.7 KiB
Lua
local map = vim.keymap.set
|
|
|
|
vim.opt.tabstop = 2
|
|
vim.opt.shiftwidth = 2
|
|
vim.opt.softtabstop = 2
|
|
|
|
if require("core.util").is_available("which-key") then
|
|
require("which-key").add({
|
|
{ "<localleader>c", group = "codecells" },
|
|
{ "<localleader>e", group = "criticmarkup" },
|
|
})
|
|
end
|
|
|
|
-- add tasks w/ <C-x>
|
|
map({ "i" }, "<C-x>", function()
|
|
local line = vim.api.nvim_get_current_line()
|
|
local cursor = vim.api.nvim_win_get_cursor(0)
|
|
-- remove existing prefixes if any
|
|
-- TODO: Improved matching for e.g. '- [ ]' already on line, or indented '-'
|
|
-- and add task on line below if line is already populated
|
|
local updated_line = line:gsub("^%s*[-*]%s*", "", 1)
|
|
vim.api.nvim_set_current_line(updated_line)
|
|
vim.api.nvim_win_set_cursor(0, { cursor[1], #updated_line })
|
|
vim.api.nvim_put({ "- [ ] " }, "c", true, true)
|
|
end)
|
|
|
|
if require("core.util").is_available("zk") and require("zk.util").notebook_root(vim.fn.expand("%:p")) ~= nil then
|
|
map("n", "<CR>", "<cmd>lua vim.lsp.buf.definition()<cr>", { silent = true })
|
|
end
|
|
|
|
if require("core.util").is_available("mdeval") then
|
|
-- execute code cells
|
|
if vim.fn.mapcheck("<localleader>cc") == "" then
|
|
map("n", "<localleader>cc", require("mdeval").eval_code_block, { silent = true, desc = "evaluate code block" })
|
|
end
|
|
if vim.fn.mapcheck("<localleader>cx") == "" then
|
|
map(
|
|
"n",
|
|
"<localleader>cx",
|
|
require("mdeval").eval_clean_results,
|
|
{ silent = true, desc = "clear code results" }
|
|
)
|
|
end
|
|
end
|
|
|
|
-- jump to beginning of previous/ next cell code
|
|
map("n", "]c", "/^```<cr>}:nohl<cr>", { desc = "next code cell" })
|
|
map("n", "[c", "?^```<cr>n}:nohl<cr>", { desc = "previous code cell" })
|
|
-- insert cell header above/below
|
|
map("n", "<localleader>co", "o```python<cr><cr>```<esc>k", { desc = "Insert code cell below" })
|
|
map("n", "<localleader>cO", "O```python<cr><cr>```<esc>k", { desc = "Insert code cell above" })
|
|
|
|
if require("core.util").is_available("which-key") then
|
|
require("which-key").add({ "<localleader>p", group = "prose" })
|
|
end
|
|
-- show nice md preview in browser (auto-syncs scrolling)
|
|
local peek_key = "<localleader>po"
|
|
if require("core.util").is_available("peek") then
|
|
map("n", peek_key, function()
|
|
local peek = require("peek")
|
|
if peek.is_open() then
|
|
peek.close()
|
|
else
|
|
peek.open()
|
|
end
|
|
end, { desc = "show md preview" })
|
|
elseif vim.fn.exists(":MarkdownPreviewToggle") > 0 then
|
|
map("n", peek_key, "<Plug>MarkdownPreviewToggle", { desc = "show md preview" })
|
|
end
|
|
|
|
-- create mindmaps directly from markdown! requires external executable
|
|
if vim.fn.executable("markmap") then
|
|
map("n", "<leader>pm", "<cmd>MarkmapOpen<cr>", { desc = "open md mindmap" })
|
|
map("n", "<leader>pM", "<cmd>MarkmapWatch<cr>", { desc = "watch for md mindmap" })
|
|
end
|