From 066b0ed41292b4d1a8715a5cd043e0a3084fe568 Mon Sep 17 00:00:00 2001 From: Lyz Date: Fri, 7 Mar 2025 14:04:21 +0100 Subject: [PATCH] feat: allow user to set the default todo keyword --- lua/orgmode/config/defaults.lua | 1 + lua/orgmode/config/init.lua | 1 + lua/orgmode/objects/todo_keywords/init.lua | 10 +++++++++- 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/lua/orgmode/config/defaults.lua b/lua/orgmode/config/defaults.lua index 6053137e3..4be030961 100644 --- a/lua/orgmode/config/defaults.lua +++ b/lua/orgmode/config/defaults.lua @@ -3,6 +3,7 @@ local DefaultConfig = { org_agenda_files = '', org_default_notes_file = '', org_todo_keywords = { 'TODO', '|', 'DONE' }, + org_default_todo_keyword = nil, org_todo_repeat_to_state = nil, org_todo_keyword_faces = {}, org_deadline_warning_days = 14, diff --git a/lua/orgmode/config/init.lua b/lua/orgmode/config/init.lua index 713cf2d03..c95e85a53 100644 --- a/lua/orgmode/config/init.lua +++ b/lua/orgmode/config/init.lua @@ -200,6 +200,7 @@ function Config:get_todo_keywords() end self.todo_keywords = TodoKeywords:new({ org_todo_keywords = self.opts.org_todo_keywords, + org_default_todo_keyword = self.opts.org_default_todo_keyword, org_todo_keyword_faces = self.opts.org_todo_keyword_faces, }) return self.todo_keywords diff --git a/lua/orgmode/objects/todo_keywords/init.lua b/lua/orgmode/objects/todo_keywords/init.lua index bb6a85bfd..38e685a1b 100644 --- a/lua/orgmode/objects/todo_keywords/init.lua +++ b/lua/orgmode/objects/todo_keywords/init.lua @@ -3,16 +3,18 @@ local TodoKeyword = require('orgmode.objects.todo_keywords.todo_keyword') ---@class OrgTodoKeywords ---@field org_todo_keywords string[] +---@field org_default_todo_keyword string[] ---@field org_todo_keyword_faces table ---@field todo_keywords OrgTodoKeyword[] local TodoKeywords = {} TodoKeywords.__index = TodoKeywords ----@param opts { org_todo_keywords: string[], org_todo_keyword_faces: table } +---@param opts { org_todo_keywords: string[], org_default_todo_keyword: string[], org_todo_keyword_faces: table } ---@return OrgTodoKeywords function TodoKeywords:new(opts) local this = setmetatable({ org_todo_keywords = opts.org_todo_keywords, + org_default_todo_keyword = opts.org_default_todo_keyword, org_todo_keyword_faces = opts.org_todo_keyword_faces, }, self) this:_parse() @@ -47,6 +49,12 @@ end ---@param type OrgTodoKeywordType ---@return OrgTodoKeyword function TodoKeywords:first_by_type(type) + if type == 'TODO' and self.org_default_todo_keyword ~= nil then + local default_todo = self:find(self.org_default_todo_keyword) + if default_todo ~= nil then + return default_todo + end + end for _, keyword in ipairs(self.todo_keywords) do if type == keyword.type then return keyword