[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH] Fix bug assuming canonical duration units in org-agenda-form
From: |
Anders Johansson |
Subject: |
Re: [PATCH] Fix bug assuming canonical duration units in org-agenda-format-items |
Date: |
Thu, 2 Sep 2021 09:47:07 +0200 |
> >> I think a proper fix would be to change `org-duration-from-minutes' so
> >> it removes any unknown unit from what is provided from fmt or
> >> `org-duration-format', and defaults to (special . h:mm) if nothing is
> >> left.
> >>
> >> WDYT?
> >>
> > Perhaps. I don't understand `org-duration-from-minutes` well enough to
> > change it.
>
> You don't really need to understand it. I suggest using a filter as the
> very first step of the function.
>
> > I guess the stripping of unknown units from fmt or
> > `org-duration-format` would then have to compare either against
> > `org-duration-units` or `org-duration-canonical-units` depending on
> > the canonical argument.
>
> Exactly.
>
>
> Regards,
> --
> Nicolas Goaziou
Included is a patch for the filtering (I assumed cl-intersection was
reasonable to use since cl-lib is a requirement).
However, I do not think this is enough, since it can cause quite
unexpected results when canonical is used without specifying the
format, Hence, I do think the previous patch should also be applied.
For my case, org-duration-format is (("m") ("w") ("d") (special . h:mm)).
This call to org-duration-from-minutes (like in org-agenda-format-item):
(org-duration-from-minutes MINUTES nil t)
will then result in a full format amounting to (("d")), (since
"special" is not part of the canonical units), which is hardly what is
expected for the agenda.
Best,
Anders Johansson
[PATCH] Ensure valid duration format in org-duration-from-minutes
Filter out any elements of the duration format that is not in
org-duration-units or org-duration-canonical-units.
---
lisp/org-duration.el | 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)
diff --git a/lisp/org-duration.el b/lisp/org-duration.el
index e627d0936..eb4b6075f 100644
--- a/lisp/org-duration.el
+++ b/lisp/org-duration.el
@@ -314,13 +314,19 @@ (defun org-duration-from-minutes (minutes
&optional fmt canonical)
"Return duration string for a given number of MINUTES.
Format duration according to `org-duration-format' or FMT, when
-non-nil.
+non-nil. Invalid units in the duration format are discarded.
When optional argument CANONICAL is non-nil, ignore
`org-duration-units' and use standard time units value.
Raise an error if expected format is unknown."
- (pcase (or fmt org-duration-format)
+ (pcase (cl-intersection
+ (or fmt org-duration-format)
+ (if canonical
+ org-duration-canonical-units
+ org-duration-units)
+ :key #'car
+ :test #'equal)
(`h:mm
(format "%d:%02d" (/ minutes 60) (mod minutes 60)))
(`h:mm:ss
--
2.33.0
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- Re: [PATCH] Fix bug assuming canonical duration units in org-agenda-format-items,
Anders Johansson <=