emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
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


  reply	other threads:[~2021-09-02  7:50 UTC|newest]

Thread overview: 7+ 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]
2024-02-14 12:37           ` Ihor Radchenko

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).