From: Anders Johansson <mejlaandersj@gmail.com>
To: Nicolas Goaziou <mail@nicolasgoaziou.fr>
Cc: org-mode-email <emacs-orgmode@gnu.org>, Timothy <tecosaur@gmail.com>
Subject: Re: [PATCH] Fix bug assuming canonical duration units in org-agenda-format-items
Date: Thu, 2 Sep 2021 09:47:07 +0200 [thread overview]
Message-ID: <CAKJdtO_zt-PYJsZ__FYHVoN5H74X06SSsCzJRHTrOu02OK4kAQ@mail.gmail.com> (raw)
In-Reply-To: <87zgsx5upu.fsf@nicolasgoaziou.fr>
> >> 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 parent reply other threads:[~2021-09-02 7:50 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-08-09 14:41 [PATCH] Fix bug assuming canonical duration units in org-agenda-format-items Anders Johansson
2021-08-11 9:39 ` Nicolas Goaziou
2021-08-31 13:55 ` Timothy
2021-08-31 15:46 ` Anders Johansson
2021-08-31 18:34 ` Nicolas Goaziou
2021-09-02 7:47 ` Anders Johansson [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.orgmode.org/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=CAKJdtO_zt-PYJsZ__FYHVoN5H74X06SSsCzJRHTrOu02OK4kAQ@mail.gmail.com \
--to=mejlaandersj@gmail.com \
--cc=emacs-orgmode@gnu.org \
--cc=mail@nicolasgoaziou.fr \
--cc=tecosaur@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).