[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
defadvice and called-interactively-p
From: |
Frank Fischer |
Subject: |
defadvice and called-interactively-p |
Date: |
Wed, 6 Jun 2012 07:03:04 +0000 (UTC) |
User-agent: |
slrn/0.9.9p1 (Linux) |
Hi,
I have a problem when advising a function/command that uses
`called-interactively-p' but I have not been able to find a solution.
Suppose you have a command calling `called-interactively-p'
(defun myfunc ()
(interactive)
(message "MYFUNC %s" (called-interactively-p 'any)))
Now, when executing M-x myfunc RET the message line shows "MYFUNC t"
as expected. But when that function is advised
(defadvice myfunc (around around-myfunc activate)
ad-do-it)
executing M-x myfunc RET again shows "MYFUNC nil" this time. The
disassembled code of the advised function reads
0 constant nil
1 varbind ad-return-value
2 constant ad-Orig-myfunc
3 call 0
4 dup
5 varset ad-return-value
6 unbind 1
7 return
If I interpret that code correctly (I'm not sure) then the original
definition of `myfunc' is called in line 3 using something similar to
(funcall 'ad-Orig-myfunc) where `ad-Orig-myfunc' is the renamed
original function. This would explain (IMO) why
`called-interactivly-p' returns nil -- the original body has *not*
been called interactively but using a usual non-interactive function
call.
But of course, if the (interactive) behavior of `myfunc' depends on
the return value of `called-interactively-p' this would make the
advised function unusable in interactive calls.
Is there some way to make `called-interactively-p' behave "correctly"
in the advised body?
Thanks is advance,
Frank
- defadvice and called-interactively-p,
Frank Fischer <=
- Re: defadvice and called-interactively-p, Eric Abrahamsen, 2012/06/06
- Re: defadvice and called-interactively-p, Frank Fischer, 2012/06/06
- Re: defadvice and called-interactively-p, Eric Abrahamsen, 2012/06/06
- Re: defadvice and called-interactively-p, Frank Fischer, 2012/06/06
- Re: defadvice and called-interactively-p, Juanma Barranquero, 2012/06/07
- Re: defadvice and called-interactively-p, Frank Fischer, 2012/06/08
- Re: defadvice and called-interactively-p, Juanma Barranquero, 2012/06/08