[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[debbugs-tracker] bug#19915: closed (25.0.50; defadvice for `org-store-l

From: GNU bug Tracking System
Subject: [debbugs-tracker] bug#19915: closed (25.0.50; defadvice for `org-store-link' makes code fail because of `org-called-interactively-p')
Date: Wed, 03 Jan 2018 17:10:02 +0000

Your message dated Wed, 03 Jan 2018 18:09:55 +0100
with message-id <address@hidden>
and subject line Re: bug#19915: 25.0.50; defadvice for `org-store-link' makes 
code fail because of `org-called-interactively-p'
has caused the debbugs.gnu.org bug report #19915,
regarding 25.0.50; defadvice for `org-store-link' makes code fail because of 
to be marked as done.

(If you believe you have received this mail in error, please contact

19915: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=19915
GNU Bug Tracking System
Contact address@hidden with problems
--- Begin Message --- Subject: 25.0.50; defadvice for `org-store-link' makes code fail because of `org-called-interactively-p' Date: Sat, 21 Feb 2015 12:14:44 -0800 (PST)
In an attempt to work around bug #19914, I tried advising
`org-store-link', as follows:

(defadvice org-store-link (before foo activate) "Reset `foo' to nil."
  (setq foo nil)) ; A defvar'd variable.

With that advice, this part of the `org-store-link' code fails:

 ;; Return the link
 (if (not (and (or (org-called-interactively-p 'any)
                   executing-kbd-macro) link))
     (or agenda-link (and link (org-make-link-string link desc)))
   (push (list link desc) org-stored-links)
   (message "Stored: %s" (or desc link))
   (when custom-id
     (setq link (concat "file:" (abbreviate-file-name
                                 (buffer-file-name)) "::#" custom-id))
     (push (list link desc) org-stored-links))
   (car org-stored-links))

The call to `org-called-interactively-p' returns nil, when it should
return non-nil (I invoked `org-store-link' interactively).  The result
is that `org-stored-links' is not updated.  If I unadvise the function
then there is no such problem.

The doc string of `called-interactively-p', which is used by
`org-called-interactively-p', says this, which seems relevant here:

  This function is very brittle, it may fail to return the intended
  result when the code is debugged, advised, or instrumented in some
  form.  Some macros and special forms (such as `condition-case') may
  also sometimes wrap their bodies in a `lambda', so any call to
  `called-interactively-p' from those bodies will indicate whether that
  lambda (rather than the surrounding function) was called

The Org code should presumably be changed following this part of that
doc string:

  Instead of using this function, it is cleaner and more reliable to
  give your function an extra optional argument whose `interactive' spec
  specifies non-nil unconditionally ("p" is a good way to do this), or
  via (not (or executing-kbd-macro noninteractive)).

The Org code uses `org-called-interactively-p' all over the place, it
seems.  Dunno whether other occurrences are as problematic as this one.

In GNU Emacs (i686-pc-mingw32)
 of 2014-10-20 on LEG570
Bzr revision: 118168 address@hidden
Windowing system distributor `Microsoft Corp.', version 6.1.7601
Configured using:
 `configure --enable-checking=yes,glyphs CPPFLAGS=-DGLYPH_DEBUG=1'

--- End Message ---
--- Begin Message --- Subject: Re: bug#19915: 25.0.50; defadvice for `org-store-link' makes code fail because of `org-called-interactively-p' Date: Wed, 03 Jan 2018 18:09:55 +0100 User-agent: Gnus/5.13 (Gnus v5.13) Emacs/25.3 (gnu/linux)

Drew Adams <address@hidden> writes:

> And yes, `advice-add' does not have the same problem.
> But it is a shame to limit users to recent Emacs versions
> just because Org uses `called-interactively' instead of
> adding an argument that indicates whether the command is
> called interactively (as Emacs recommends).

I removed call to `called-interactively-p' in `org-store-link' (in
development version).

Thank you.


Nicolas Goaziou                                                0x80A93738

--- End Message ---

reply via email to

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