>>258
はい! そういうことです. ありがとうございます.

>>259
一から書き直してみました.
funcallの後ろを ',(if ...) としないといけないのはわからなくはないけど納得いかない.


(defsubst keu:advice-enabled-p (func class name)
(ad-advice-enabled (ad-find-advice func class name)))

(defmacro keu:with-advice (on-or-off func class name &rest body)
"[internal] Evaluate BODY with NAME enabled/disabled."
(let ((onoff
(pcase on-or-off
(`'on t)
(`'off nil)
(_ (error "the first argument must be the symol 'on or 'off")))))
`(let ((enabled (not (not (keu:advice-enabled-p ,func ,class ,name)))))
(if (eq ,onoff enabled)
(progn ,@body)
(prog2 ; return value is that of BODY
(progn
(funcall ',(if onoff 'ad-enable-advice 'ad-disable-advice) ,func ,class ,name)
(ad-activate ,func))
(progn ,@body)
(progn
(funcall ',(if (not onoff) 'ad-enable-advice 'ad-disable-advice) ,func ,class ,name)
(ad-activate ,func)))))))