help-gnu-emacs
[Top][All Lists]
Advanced

[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






reply via email to

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