Nathan Neff <[email protected]> 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
_______________________________________________
Emacs-orgmode mailing list
Please use `Reply All' to send replies to the list.
[email protected]
http://lists.gnu.org/mailman/listinfo/emacs-orgmode