1
.gitignore
vendored
1
.gitignore
vendored
@@ -0,0 +1 @@
|
|||||||
|
**/test**
|
||||||
|
|||||||
@@ -0,0 +1,78 @@
|
|||||||
|
local M = {}
|
||||||
|
|
||||||
|
local function highlight_todo_items()
|
||||||
|
local lines = vim.api.nvim_buf_get_lines(0, 0, -1, false)
|
||||||
|
for i, line in ipairs(lines) do
|
||||||
|
if line:match("^✔ ") then
|
||||||
|
vim.api.nvim_buf_add_highlight(0, -1, "TodoDoneHighlight", i - 1, 0, 3)
|
||||||
|
vim.api.nvim_buf_add_highlight(0, -1, "TodoDone", i - 1, 3, -1)
|
||||||
|
elseif line:match("^● ") then
|
||||||
|
vim.api.nvim_buf_add_highlight(0, -1, "TodoPendingHighlight", i - 1, 0, 3)
|
||||||
|
vim.api.nvim_buf_add_highlight(0, -1, "TodoPending", i - 1, 3, -1)
|
||||||
|
elseif line:match("^⚠ ") then
|
||||||
|
vim.api.nvim_buf_add_highlight(0, -1, "TodoImportantHighlight", i - 1, 0, 3)
|
||||||
|
vim.api.nvim_buf_add_highlight(0, -1, "TodoImportant", i - 1, 3, -1)
|
||||||
|
else
|
||||||
|
vim.api.nvim_buf_add_highlight(0, -1, "Normal", i - 1, 0, -1)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local function replace_task_symbols()
|
||||||
|
local lines = vim.api.nvim_buf_get_lines(0, 0, -1, false)
|
||||||
|
for i, line in ipairs(lines) do
|
||||||
|
if line:match("^x ") then
|
||||||
|
vim.api.nvim_buf_set_text(0, i - 1, 0, i - 1, 1, { "✔" })
|
||||||
|
elseif line:match("^- ") then
|
||||||
|
vim.api.nvim_buf_set_text(0, i - 1, 0, i - 1, 1, { "●" })
|
||||||
|
elseif line:match("^! ") then
|
||||||
|
vim.api.nvim_buf_set_text(0, i - 1, 0, i - 1, 1, { "⚠" })
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function M.setup()
|
||||||
|
vim.api.nvim_set_hl(0, "TodoDoneHighlight", { fg = "#00FF00", bold = true })
|
||||||
|
vim.api.nvim_set_hl(0, "TodoPendingHighlight", { fg = "#FFFF00", bold = true })
|
||||||
|
vim.api.nvim_set_hl(0, "TodoImportantHighlight", { fg = "#FF0000", bold = true })
|
||||||
|
vim.api.nvim_set_hl(0, "TodoDone", { link = "Comment" })
|
||||||
|
vim.api.nvim_set_hl(0, "TodoPending", { link = "Identifier" })
|
||||||
|
vim.api.nvim_set_hl(0, "TodoImportant", { link = "Error" })
|
||||||
|
vim.api.nvim_create_autocmd({ "BufRead", "BufNewFile" }, {
|
||||||
|
pattern = "*.udi",
|
||||||
|
callback = function()
|
||||||
|
vim.bo.filetype = "udi"
|
||||||
|
vim.opt_local.conceallevel = 2
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
vim.api.nvim_create_autocmd("FileType", {
|
||||||
|
pattern = "udi",
|
||||||
|
callback = function()
|
||||||
|
replace_task_symbols()
|
||||||
|
highlight_todo_items()
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
vim.api.nvim_create_autocmd("TextChangedI", {
|
||||||
|
pattern = "*.udi",
|
||||||
|
callback = function()
|
||||||
|
replace_task_symbols()
|
||||||
|
highlight_todo_items()
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
end
|
||||||
|
|
||||||
|
function M.toggle_todo()
|
||||||
|
local line = vim.api.nvim_get_current_line()
|
||||||
|
if line:match("^✔ ") then
|
||||||
|
vim.api.nvim_set_current_line("●" .. line:sub(4))
|
||||||
|
elseif line:match("^● ") then
|
||||||
|
vim.api.nvim_set_current_line("✔" .. line:sub(4))
|
||||||
|
elseif line:match("^⚠ ") then
|
||||||
|
vim.api.nvim_set_current_line("✔" .. line:sub(4))
|
||||||
|
end
|
||||||
|
highlight_todo_items()
|
||||||
|
end
|
||||||
|
|
||||||
|
vim.api.nvim_set_keymap("n", "<leader>t", ":lua require('udivim').toggle_todo()<CR>", { noremap = true, silent = true })
|
||||||
|
|
||||||
|
return M
|
||||||
|
|||||||
Reference in New Issue
Block a user