[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: How to see that a variable holds t
From: |
Andreas Politz |
Subject: |
Re: How to see that a variable holds t |
Date: |
Sun, 03 Jan 2010 20:25:30 +0100 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/23.1 (gnu/linux) |
Cecil Westerhof <Cecil@decebal.nl> writes:
> At the moment I have the following function:
> (defun switch-gnus-idle-daemon-do-log ()
> (interactive)
> (setq gnus-idle-daemon-do-log
> (case gnus-idle-daemon-do-log
> (10 t)
> (otherwise 10)))
> (message "gnus-idle-daemon-do-log: %s" gnus-idle-daemon-do-log))
>
> I know that it looks like overkill a case for switching to two values,
> but I expect that in the future there will be more values.
>
> What I really would like is;
> (defun switch-gnus-idle-daemon-do-log ()
> (interactive)
> (setq gnus-idle-daemon-do-log
> (case gnus-idle-daemon-do-log
> (t 10)
> (otherwise t)))
> (message "gnus-idle-daemon-do-log: %s" gnus-idle-daemon-do-log))
>
> Because I would like the default to be t and not 10. (For when the value
> is not one of the defined values.) But when I do this, it is always set
> to 10, because the case does not make a difference between t and 10. How
> do I solve this?
I guess you need a different form/macro.
(defmacro case2 (expr &rest keylist)
(declare (indent 1))
(let ((true (make-symbol "true"))
(expr-var (make-symbol "expr-var")))
`(let ((,expr-var (eval ,expr)))
(when (eq ,expr-var t)
(setq ,expr-var ',true))
(case ,expr-var
,@(mapcar #'(lambda (kl)
(cond
((listp (car kl))
(cons (substitute true t (car kl))
(cdr kl)))
((eq (car kl) t)
(cons true (cdr kl)))
(t kl)))
keylist)))))
-ap