|
bug#3984: 23.0.96; defadvice of call-interactively defeats interactive-p: msg#00646bug-gnu-emacs-gnu
> > Can someone please explain why this happens, or how to work > around it? > > Because the implementation of interactive-p (and > called-interactively-p) > is brittle: it looks at the latest stack frames to see the name of the > caller, so if you add things between the call to `call-interactively' > and the corresponding function call, it gets confused. > > To work around it, don't use `interactive-p' and instead add > an optional > argument (call it `interactive') to your function and pass it an > explicit non-nil value from the interactive spec. Unfortunately, the code with `interactive-p' is not mine. The defadvice is mine, but it needs to work for user functions, including those that call `interactive-p' or `called-interactively-p'. Is there no way the Emacs implementation could be fixed to handle this better? Couldn't it take into consideration the `ad-*' stuff that results from advising `call-interactively'? IOW, couldn't it look for `call-interactively' in its advised form also?
|
|
||||||||||||||||||||||||||
| News | Mail Home | sitemap | FAQ | advertise |