From 4ca905ab431e1d00d176a6ec0ec0e92073b3927d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Fl=C3=BCgge?= Date: Mon, 4 Sep 2023 00:41:48 +0200 Subject: [PATCH 1/2] fix(date): persist all attributes passed by options Store all attributes passed as option via Date:set, especially date_only. --- lua/orgmode/objects/date.lua | 30 ++++++++++++++++++------------ 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/lua/orgmode/objects/date.lua b/lua/orgmode/objects/date.lua index 724a8fc6b..549289177 100644 --- a/lua/orgmode/objects/date.lua +++ b/lua/orgmode/objects/date.lua @@ -95,21 +95,27 @@ end ---@param time table ---@return OrgDate function Date:from_time_table(time) - local range_diff = self.timestamp_end and self.timestamp_end - self.timestamp or 0 - local timestamp = os.time(set_date_opts(time, {}, true)) + local timestamp_end = time.timestamp_end or self.timestamp_end + local timestamp = time.timestamp or self.timestamp + local range_diff = timestamp_end and timestamp_end - timestamp or 0 + timestamp = os.time(set_date_opts(time, {}, true)) local opts = set_date_opts(os.date('*t', timestamp)) - opts.date_only = self.date_only - opts.dayname = self.dayname - opts.adjustments = self.adjustments - opts.type = self.type - opts.active = self.active - opts.range = self.range - if self.timestamp_end then + if time.date_only ~= nil then + opts.date_only = time.date_only + else + opts.date_only = self.date_only + end + opts.dayname = time.dayname or self.dayname + opts.adjustments = time.adjustments or self.adjustments + opts.type = time.type or self.type + opts.active = time.active or self.active + opts.range = time.range or self.range + if time.timestamp_end or self.timestamp_end then opts.timestamp_end = timestamp + range_diff end - opts.is_date_range_start = self.is_date_range_start - opts.is_date_range_end = self.is_date_range_end - opts.related_date_range = self.related_date_range + opts.is_date_range_start = time.is_date_range_start or self.is_date_range_start + opts.is_date_range_end = time.is_date_range_end or self.is_date_range_end + opts.related_date_range = time.related_date_range or self.related_date_range return Date:new(opts) end From f689066a9c39431417e76baa594a63138f6d6013 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Fl=C3=BCgge?= Date: Mon, 27 May 2024 22:50:16 +0200 Subject: [PATCH 2/2] chore: minimize adjustable attributes Minimize adjustable attributes to the smallest possible subset, that is actually needed. --- lua/orgmode/objects/date.lua | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/lua/orgmode/objects/date.lua b/lua/orgmode/objects/date.lua index 549289177..6e9e147bd 100644 --- a/lua/orgmode/objects/date.lua +++ b/lua/orgmode/objects/date.lua @@ -95,8 +95,8 @@ end ---@param time table ---@return OrgDate function Date:from_time_table(time) - local timestamp_end = time.timestamp_end or self.timestamp_end - local timestamp = time.timestamp or self.timestamp + local timestamp_end = self.timestamp_end + local timestamp = self.timestamp local range_diff = timestamp_end and timestamp_end - timestamp or 0 timestamp = os.time(set_date_opts(time, {}, true)) local opts = set_date_opts(os.date('*t', timestamp)) @@ -105,17 +105,17 @@ function Date:from_time_table(time) else opts.date_only = self.date_only end - opts.dayname = time.dayname or self.dayname - opts.adjustments = time.adjustments or self.adjustments - opts.type = time.type or self.type - opts.active = time.active or self.active - opts.range = time.range or self.range - if time.timestamp_end or self.timestamp_end then + opts.dayname = self.dayname + opts.adjustments = self.adjustments + opts.type = self.type + opts.active = self.active + opts.range = self.range + if self.timestamp_end then opts.timestamp_end = timestamp + range_diff end - opts.is_date_range_start = time.is_date_range_start or self.is_date_range_start - opts.is_date_range_end = time.is_date_range_end or self.is_date_range_end - opts.related_date_range = time.related_date_range or self.related_date_range + opts.is_date_range_start = self.is_date_range_start + opts.is_date_range_end = self.is_date_range_end + opts.related_date_range = self.related_date_range return Date:new(opts) end