Subject: bug#8304: closed (Re: bug#8304: 23.2; ad-read-advised-function default to func at point)

From: [email-masked] (GNU bug Tracking System)
Date: Mon, 23 May 2011 14:41:02 +0000

Your bug report

#8304: 23.2; ad-read-advised-function default to func at point

which was filed against the emacs package, has been closed.

The explanation is attached below, along with your original report.
If you require more details, please reply to [email-masked].

-- 
8304: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=8304
GNU Bug Tracking System
Contact [email-masked] with problems

Subject: Re: bug#8304: 23.2; ad-read-advised-function default to func at point
From: Stefan Monnier <[email-masked]>
To: Kevin Ryde <[email-masked]>
Cc: [email-masked]
Date: Mon, 23 May 2011 11:40:31 -0300
List-Id: <debbugs-submit.debbugs.gnu.org>

> You must have more trouble getting any comments, then getting sensible
> comments, then getting more or less grammatical comments, without
> worrying about full stops!

I like to think of it the other way: forcing people to be careful about
punctuation also forces them to be more careful in general ;-)

> 2011-05-22  Kevin Ryde  <[email-masked]>

> 	* emacs-lisp/advice.el (ad-read-advised-function): Use
> 	`function-called-at-point' as the default default, if it has
> 	advice and passes PREDICATE.

Thank you, installed in the trunk,

        Stefan

Subject: 23.2; ad-read-advised-function default to func at point
From: Kevin Ryde <[email-masked]>
To: [email-masked]
Date: Mon, 21 Mar 2011 10:52:21 +1100
List-Id: <debbugs-submit.debbugs.gnu.org>

When using the advice.el things interactively, eg. ad-disable-advice or
ad-activate, it'd be good if the read for the function name defaulted to
a func at point.

Currently I think it only offers the most recently defined advice, so
with

    (defadvice doctor (around no-doctoring activate)
      "Disable the doctor."
      (error "The doctor is at a medical conference in Barbados"))
    (defadvice dunnet (around no-games activate)
      "Disable games."
      (error "Shouldn't you be working?"))

An M-x ad-disable-advice with point on either "doctor" or "dunnet"
offers "dunnet", where I hoped that on "doctor" it would offer doctor.

2011-03-20  Kevin Ryde  <[email-masked]>

	* emacs-lisp/advice.el (ad-read-advised-function): Use
	`function-called-at-point' as the default default, if the func at
	point has advice, and passes PREDICATE.

--- advice.el.~1.68.~	2009-10-08 11:00:28.000000000 +1100
+++ advice.el	2011-03-21 10:37:14.000000000 +1100
@@ -2200,16 +2200,29 @@
 ;; @@ Interactive input functions:
 ;; ===============================
 
+(declare-function 'function-called-at-point "help")
+
 (defun ad-read-advised-function (&optional prompt predicate default)
   "Read name of advised function with completion from the minibuffer.
 An optional PROMPT will be used to prompt for the function.  PREDICATE
-plays the same role as for `try-completion' (which see).  DEFAULT will
-be returned on empty input (defaults to the first advised function for
-which PREDICATE returns non-nil)."
+plays the same role as for `try-completion' (which see).
+
+DEFAULT is returned on empty input.  DEFAULT defaults to the
+function name at point if it's advised and passes PREDICATE,
+otherwise to the first advised function which passes PREDICATE."
   (if (null ad-advised-functions)
       (error "ad-read-advised-function: There are no advised functions"))
   (setq default
 	(or default
+	    ;; prefer func name at point, if it's in ad-advised-functions etc
+	    (let ((function (progn
+			      (require 'help)
+			      (function-called-at-point))))
+	      (and function
+		   (assoc (symbol-name function) ad-advised-functions)
+		   (or (null predicate)
+		       (funcall predicate function))
+		   function))
 	    (ad-do-advised-functions (function)
 	      (if (or (null predicate)
 		      (funcall predicate function))

In GNU Emacs 23.2.1 (i486-pc-linux-gnu, GTK+ Version 2.20.0)
 of 2010-05-16 on raven, modified by Debian
configured using `configure  '--build' 'i486-linux-gnu' '--build' 'i486-linux-gnu' '--prefix=/usr' '--sharedstatedir=/var/lib' '--libexecdir=/usr/lib' '--localstatedir=/var/lib' '--infodir=/usr/share/info' '--mandir=/usr/share/man' '--with-pop=yes' '--enable-locallisppath=/etc/emacs23:/etc/emacs:/usr/local/share/emacs/23.2/site-lisp:/usr/local/share/emacs/site-lisp:/usr/share/emacs/23.2/site-lisp:/usr/share/emacs/site-lisp:/usr/share/emacs/23.2/leim' '--with-x=yes' '--with-x-toolkit=gtk' '--with-toolkit-scroll-bars' 'build_alias=i486-linux-gnu' 'CFLAGS=-DDEBIAN -g -O2' 'LDFLAGS=-g' 'CPPFLAGS=''

Important settings:
  value of $LC_ALL: nil
  value of $LC_COLLATE: nil
  value of $LC_CTYPE: nil
  value of $LC_MESSAGES: nil
  value of $LC_MONETARY: nil
  value of $LC_NUMERIC: nil
  value of $LC_TIME: nil
  value of $LANG: en_AU
  value of $XMODIFIERS: nil
  locale-coding-system: iso-latin-1-unix
  default enable-multibyte-characters: t