From mboxrd@z Thu Jan 1 00:00:00 1970 From: Nicolas Goaziou Subject: Re: [PATCH] Separate clocksum format for durations >= 1 day Date: Tue, 06 Nov 2012 11:57:25 +0100 Message-ID: <878vaf9ey2.fsf@gmail.com> References: <87y5ifacu3.fsf@gmail.com> <20121106103546.GA9407@c3po> Mime-Version: 1.0 Content-Type: text/plain Return-path: Received: from eggs.gnu.org ([208.118.235.92]:45844) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TVgug-00056z-9Z for emacs-orgmode@gnu.org; Tue, 06 Nov 2012 06:01:52 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1TVgua-0006Yp-B0 for emacs-orgmode@gnu.org; Tue, 06 Nov 2012 06:01:46 -0500 Received: from mail-wi0-f171.google.com ([209.85.212.171]:64797) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TVgua-0006Yg-1D for emacs-orgmode@gnu.org; Tue, 06 Nov 2012 06:01:40 -0500 Received: by mail-wi0-f171.google.com with SMTP id hj13so2946248wib.12 for ; Tue, 06 Nov 2012 03:01:39 -0800 (PST) In-Reply-To: <20121106103546.GA9407@c3po> (Toby Cubitt's message of "Tue, 6 Nov 2012 11:35:46 +0100") List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Sender: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org To: emacs-orgmode@gnu.org Toby Cubitt writes: >> I still think functions are the way to go. Three options in the >> defcustom: >> >> - One to provide regular time (i.e 14:40 or 3d 18:32) >> >> - One to provide decimal time with the highest unit available (i.e. >> 18,75 h or 2,5 d). >> >> - One free slot for an user-defined function. > > I like the flexibility of functions. But one drawback of this is that you > can't produce your "5 h 32 min" or "5,3 days" examples without defining a > new function. > > It would be nice if tweaking just the format (without > changing the numbers themselves) could be done by changing a simple > format string. > > Because the number of placeholders in a format string is fixed, I don't > see how to avoid the need for multiple format strings. Perhaps we need a > second defcustom that holds a list of format strings, to be used by the > functions in your first two choices. > > The first format string for durations < 1 day (or for all durations if > this is the only string in the list), the second for durations >= 1 day. > One nice thing is that this could easily be extended in the obvious way > if one wanted to allow different formats for durations >= 1 month or >>= 1 year. > > It's slightly ugly that the defaults for the format-string defcustom > would have to change depending on the value of the function defcustom. I > guess one could either have the format-string defcustom default to nil, > and use hard-coded defaults in the functions (which are overridden by a > non-nil format string value). Or put both functions and format strings > into a single defcustom, e.g. as a list with the function in the first > element. Actually the number of functions defined doesn't matter much. What matters is the number of functions exposed to the end-user, which is 0 in this situation (or 1 if he decides to write his own). Here, all is solved with one defcustom. You don't even need to create multiple functions for that. The defcustom can store `regular', `decimal' symbols or a function. Then you can write a generic duration format function that will be used across code base with the following template: #+begin_src emacs-lisp (defun org-build-format-duration (n) "Format duration N according to `org-duration-format' variable. N is the duration to display, as a number, expressed in minutes. Return formatted duration as a string." (cond ((functionp org-duration-format) (funcall org-duration-format)) ((eq org-duration-format 'regular) ...) ((eq org-duration-format 'decimal) ...) (t (error "Invalid `org-duration-format' value")))) #+end_src One variable exposed to the user. One function exposed to the developer. It's much simpler. Regards, -- Nicolas Goaziou