changeset 105386:f004275b4271

* help-fns.el (help-function-arglist): Don't check advertised-signature-table. (describe-function-1): Do it here instead so it also applies to subrs. * emacs-lisp/eldoc.el (eldoc-get-fnsym-args-string): Obey advertised-signature-table.
author Stefan Monnier <monnier@iro.umontreal.ca>
date Fri, 02 Oct 2009 14:36:54 +0000
parents e0e4a0d9a3bc
children e9079a7fb794
files lisp/ChangeLog lisp/emacs-lisp/eldoc.el lisp/help-fns.el
diffstat 3 files changed, 27 insertions(+), 14 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/ChangeLog	Fri Oct 02 13:37:38 2009 +0000
+++ b/lisp/ChangeLog	Fri Oct 02 14:36:54 2009 +0000
@@ -1,3 +1,12 @@
+2009-10-02  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+	* emacs-lisp/eldoc.el (eldoc-get-fnsym-args-string):
+	Obey advertised-signature-table.
+
+	* help-fns.el (help-function-arglist): Don't check
+	advertised-signature-table.
+	(describe-function-1): Do it here instead so it also applies to subrs.
+
 2009-10-02  Michael Albinus  <michael.albinus@gmx.de>
 
 	* simple.el (start-file-process): Say in the doc-string, that file
@@ -9,8 +18,8 @@
 	(ange-ftp-delete-directory): Implement RECURSIVE case.  Change to
 	root directory ("device busy" error otherwise).
 
-	* net/tramp-smb.el (tramp-smb-handle-make-directory-internal): Flush
-	file properties of created directory.
+	* net/tramp-smb.el (tramp-smb-handle-make-directory-internal):
+	Flush file properties of created directory.
 
 2009-10-02  Eli Zaretskii  <eliz@gnu.org>
 
--- a/lisp/emacs-lisp/eldoc.el	Fri Oct 02 13:37:38 2009 +0000
+++ b/lisp/emacs-lisp/eldoc.el	Fri Oct 02 14:36:54 2009 +0000
@@ -290,11 +290,14 @@
 former calls `eldoc-argument-case'; the latter gives the
 function name `font-lock-function-name-face', and optionally
 highlights argument number INDEX."
-  (let (args doc)
+  (let (args doc advertised)
     (cond ((not (and sym (symbolp sym) (fboundp sym))))
 	  ((and (eq sym (aref eldoc-last-data 0))
 		(eq 'function (aref eldoc-last-data 2)))
 	   (setq doc (aref eldoc-last-data 1)))
+	  ((listp (setq advertised (gethash (indirect-function sym)
+					    advertised-signature-table t)))
+	   (setq args advertised))
 	  ((setq doc (help-split-fundoc (documentation sym t) sym))
 	   (setq args (car doc))
 	   ;; Remove any enclosing (), since e-function-argstring adds them.
--- a/lisp/help-fns.el	Fri Oct 02 13:37:38 2009 +0000
+++ b/lisp/help-fns.el	Fri Oct 02 14:36:54 2009 +0000
@@ -101,15 +101,13 @@
   ;; Handle symbols aliased to other symbols.
   (if (and (symbolp def) (fboundp def)) (setq def (indirect-function def)))
   ;; If definition is a macro, find the function inside it.
-  (let ((advertised (gethash def advertised-signature-table t)))
-    (if (listp advertised) advertised
-      (if (eq (car-safe def) 'macro) (setq def (cdr def)))
-      (cond
-       ((byte-code-function-p def) (aref def 0))
-       ((eq (car-safe def) 'lambda) (nth 1 def))
-       ((and (eq (car-safe def) 'autoload) (not (eq (nth 4 def) 'keymap)))
-        "[Arg list not available until function definition is loaded.]")
-       (t t)))))
+  (if (eq (car-safe def) 'macro) (setq def (cdr def)))
+  (cond
+   ((byte-code-function-p def) (aref def 0))
+   ((eq (car-safe def) 'lambda) (nth 1 def))
+   ((and (eq (car-safe def) 'autoload) (not (eq (nth 4 def) 'keymap)))
+    "[Arg list not available until function definition is loaded.]")
+   (t t)))
 
 (defun help-make-usage (function arglist)
   (cons (if (symbolp function) function 'anonymous)
@@ -469,14 +467,17 @@
 		(re-search-backward "`\\([^`']+\\)'" nil t)
 		(help-xref-button 1 'help-function-cmacro function lib)))))
 	(princ ".\n\n"))
-      (let* ((arglist (help-function-arglist def))
+      (let* ((advertised (gethash def advertised-signature-table t))
+	     (arglist (if (listp advertised)
+			  advertised (help-function-arglist def)))
 	     (doc (documentation function))
 	     (usage (help-split-fundoc doc function)))
 	(with-current-buffer standard-output
 	  ;; If definition is a keymap, skip arglist note.
 	  (unless (keymapp function)
+	    (if usage (setq doc (cdr usage)))
 	    (let* ((use (cond
-			 (usage (setq doc (cdr usage)) (car usage))
+			 ((and usage (not (listp advertised))) (car usage))
 			 ((listp arglist)
 			  (format "%S" (help-make-usage function arglist)))
 			 ((stringp arglist) arglist)