[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: defadvice and called-interactively-p
From: |
Eric Abrahamsen |
Subject: |
Re: defadvice and called-interactively-p |
Date: |
Wed, 06 Jun 2012 15:55:31 +0800 |
User-agent: |
Gnus/5.130006 (Ma Gnus v0.6) Emacs/24.1.50 (gnu/linux) |
On Wed, Jun 06 2012, Frank Fischer wrote:
> On 2012-06-06, Eric Abrahamsen <eric@ericabrahamsen.net> wrote:
>> On Wed, Jun 06 2012, Frank Fischer wrote:
>>
>>> 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)
>>
>> While you're waiting for an answer from someone who really understand
>> how all this works, I've found that I need to add an (interactive)
>> statement to the defadvice form as well, in order to preserve
>> interactive state. Give it a shot, anyway!
>
> I've tried this and it does not make a difference. And according to the
> elisp manual it should not do: 17.10 states
>
> The interactive form is present if the original function or some
> piece of advice specifies one.
>
> Anyway, the result is the same.
Yup, it was just a guess. Another thing you're probably already
perfectly aware of: the docstring for called-interactively-p says,
"This function is meant for implementing advice and other
function-modifying features."
If called-interactively-p is meant to go in the advice, not the
original functions, the behavior you're seeing is probably the whole
point of how it works.
Okay, enough from me…
--
GNU Emacs 24.1.50.1 (i686-pc-linux-gnu, GTK+ Version 2.24.10)
of 2012-06-06 on pellet