emacs-orgmode
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Orgmode] Re: Can this function be written better?


From: Bernt Hansen
Subject: [Orgmode] Re: Can this function be written better?
Date: Mon, 06 Dec 2010 16:53:36 -0500
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/23.2 (gnu/linux)

Nathan Neff <address@hidden> writes:

> I'd like to be able to easily toggle the showing/hiding of CLOSED clock
> items in the agenda.
>
> I have a function that does exactly that.  My Lisp is terrible (I bet that's
> never been said before :-) and I want to try to improve it.
>
> Any suggestions how to improve/refactor the following function?
>
> (defun njn/agenda-toggle-show-closed()
>   "Toggle whether closed clock thingies are shown in the agenda"
>   (interactive)
>   (if (eq njn/org-agenda-show-closed 't)
>       (progn (setq org-agenda-log-mode-items (quote (clock)))
>            (setq njn/org-agenda-show-closed nil)
>            (message "NOT Showing closed clock entries in agenda"))
>     (progn (setq org-agenda-log-mode-items (quote (closed clock)))
>          (setq njn/org-agenda-show-closed 't)
>          (message "Showing closed clock entries in agenda"))
>     ))
>

Hi Nate,

I would probably write it like this: (but I'm no emacs-lisp expert
either)

(defun njn/agenda-toggle-show-closed()
  "Toggle whether closed clock thingies are shown in the agenda"
  (interactive)
  (setq njn/org-agenda-show-closed (not njn/org-agenda-show-closed))
  (setq org-agenda-log-mode-items (if njn/org-agenda-show-closed
                                      (quote (closed clock))
                                    (quote (clock))))
  (message "%sShowing closed clock entries in agenda" (if 
njn/org-agenda-show-closed "" "NOT ")))

You have a bug in your version - the test and report is backwards.
When njn/org-agenda-show-closed is t you don't show closed items and
when it's nil you do.

- You don't need to check for equality with 't (and you don't need to
  quote t)
  - everything non-nil is true
  - you can just check that directly in the (if ... )

My version basically does this:
  1. toggle the boolean njn/org-agenda-shot-closed
  2. set org-agenda-log-mode-items based on the boolean
  3. report the value

HTH,
Bernt



reply via email to

[Prev in Thread] Current Thread [Next in Thread]