unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
* bug#8304: 23.2; ad-read-advised-function default to func at point
@ 2011-03-20 23:52 Kevin Ryde
  2011-03-21 14:40 ` Stefan Monnier
  0 siblings, 1 reply; 4+ messages in thread
From: Kevin Ryde @ 2011-03-20 23:52 UTC (permalink / raw)
  To: 8304

[-- Attachment #1: Type: text/plain, Size: 852 bytes --]

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  <user42@zip.com.au>

	* 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.


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: advice.el.read-default.diff --]
[-- Type: text/x-diff, Size: 1490 bytes --]

--- 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))

[-- Attachment #3: Type: text/plain, Size: 1054 bytes --]




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

^ permalink raw reply	[flat|nested] 4+ messages in thread

* bug#8304: 23.2; ad-read-advised-function default to func at point
  2011-03-20 23:52 bug#8304: 23.2; ad-read-advised-function default to func at point Kevin Ryde
@ 2011-03-21 14:40 ` Stefan Monnier
  2011-05-22  0:29   ` Kevin Ryde
  0 siblings, 1 reply; 4+ messages in thread
From: Stefan Monnier @ 2011-03-21 14:40 UTC (permalink / raw)
  To: Kevin Ryde; +Cc: 8304

> 	* 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.

Sounds like a fine change.

> -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."

Actually, I don't think the docstring should document what `default' will
default to.  Actually, AFAICT the `default' argument is never used.

> +	    ;; prefer func name at point, if it's in ad-advised-functions etc

Comments should start with a capital and end with a "." or some other
appropriate punctuation.


        Stefan





^ permalink raw reply	[flat|nested] 4+ messages in thread

* bug#8304: 23.2; ad-read-advised-function default to func at point
  2011-03-21 14:40 ` Stefan Monnier
@ 2011-05-22  0:29   ` Kevin Ryde
  2011-05-23 14:40     ` Stefan Monnier
  0 siblings, 1 reply; 4+ messages in thread
From: Kevin Ryde @ 2011-05-22  0:29 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: 8304

[-- Attachment #1: Type: text/plain, Size: 925 bytes --]

Stefan Monnier <monnier@iro.umontreal.ca> writes:
>
> Actually, I don't think the docstring should document what `default' will
> default to.

Oh, well, it has done, and if you're using it programmatically then you
will likely want to know.  I shortened it per below.

> Actually, AFAICT the `default' argument is never used.

No doubt it's in emulation of completing-read, so you can offer a
particular default in context.  Seems like a good thing on the whole.

> Comments should start with a capital and end with a "." or some other
> appropriate punctuation.

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



2011-05-22  Kevin Ryde  <user42@zip.com.au>

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


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: advice.el.read-default-2.diff --]
[-- Type: text/x-diff, Size: 1370 bytes --]

--- advice.el.~1.68.~	2009-10-08 11:00:28.000000000 +1100
+++ advice.el	2011-05-22 10:19:27.000000000 +1000
@@ -2200,16 +2200,27 @@
 ;; @@ 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)."
+be returned on empty input (defaults to the first advised function or
+function at point for which PREDICATE returns non-nil)."
   (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))

[-- Attachment #3: Type: text/plain, Size: 106 bytes --]



-- 
Restaurant jargon elucidated for the layman:
"Special" -- almost gone bad and has to be sold today.

^ permalink raw reply	[flat|nested] 4+ messages in thread

* bug#8304: 23.2; ad-read-advised-function default to func at point
  2011-05-22  0:29   ` Kevin Ryde
@ 2011-05-23 14:40     ` Stefan Monnier
  0 siblings, 0 replies; 4+ messages in thread
From: Stefan Monnier @ 2011-05-23 14:40 UTC (permalink / raw)
  To: Kevin Ryde; +Cc: 8304-done

> 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  <user42@zip.com.au>

> 	* 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





^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2011-05-23 14:40 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-03-20 23:52 bug#8304: 23.2; ad-read-advised-function default to func at point Kevin Ryde
2011-03-21 14:40 ` Stefan Monnier
2011-05-22  0:29   ` Kevin Ryde
2011-05-23 14:40     ` Stefan Monnier

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).