unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
* Loading when viewing docstring of autoloaded function
@ 2012-06-23  9:44 Chong Yidong
  2012-06-23 13:07 ` Drew Adams
                   ` (2 more replies)
  0 siblings, 3 replies; 14+ messages in thread
From: Chong Yidong @ 2012-06-23  9:44 UTC (permalink / raw)
  To: emacs-devel

It's a long-standing problem that documentation viewed with C-h * might
not make much sense if it refers to stuff defined in a library that has
not yet been loaded.

The most annoying aspect is that autoloaded functions often have
docstrings containing key substitution constructs, which are expanded
into `M-x FOO' because the relevant keymaps are not yet defined.  I'd
like to suggest a simple workaround: if an autoloaded function contains
key substitution constructs, just outright load the library where it was
defined.  There's not much point in being conservative about loading
libraries, since it is so fast nowadays.  See attached patch.

Alternatively, we could introduce a full-blown solution by adding a new
docstring substitution construct to invoke library loading, but I'm not
sure we need that.

Opinions?


=== modified file 'lisp/help-fns.el'
*** lisp/help-fns.el	2012-06-11 20:35:00 +0000
--- lisp/help-fns.el	2012-06-23 07:15:55 +0000
***************
*** 534,541 ****
        (let* ((advertised (gethash def advertised-signature-table t))
  	     (arglist (if (listp advertised)
  			  advertised (help-function-arglist def)))
! 	     (doc (condition-case err (documentation function)
!                     (error (format "No Doc! %S" err))))
  	     (usage (help-split-fundoc doc function)))
  	(with-current-buffer standard-output
  	  ;; If definition is a keymap, skip arglist note.
--- 534,550 ----
        (let* ((advertised (gethash def advertised-signature-table t))
  	     (arglist (if (listp advertised)
  			  advertised (help-function-arglist def)))
! 	     (doc-raw (condition-case err
! 			  (documentation function t)
! 			(error (format "No Doc! %S" err))))
! 	     ;; If the function is autoloaded, and its docstring has
! 	     ;; key substitution constructs, load the library.
! 	     (doc (progn
! 		    (and (eq (car-safe def) 'autoload)
! 			 (string-match "\\([^\\]=\\|[^=]\\|\\`\\)\\\\[[{<]"
! 				       doc-raw)
! 			 (load (cadr def) t))
! 		    (substitute-command-keys doc-raw)))
  	     (usage (help-split-fundoc doc function)))
  	(with-current-buffer standard-output
  	  ;; If definition is a keymap, skip arglist note.




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

end of thread, other threads:[~2012-07-02 18:15 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-06-23  9:44 Loading when viewing docstring of autoloaded function Chong Yidong
2012-06-23 13:07 ` Drew Adams
2012-07-02 15:47   ` Samuel Bronson
2012-07-02 16:13     ` Drew Adams
2012-07-02 16:21     ` Stefan Monnier
2012-07-02 17:20       ` Samuel Bronson
2012-07-02 18:15         ` Stefan Monnier
2012-06-23 14:12 ` Stefan Monnier
2012-06-23 20:22 ` Štěpán Němec
2012-06-24  5:09   ` Stefan Monnier
2012-06-24  6:25     ` Leo
2012-06-24  6:39       ` Andreas Röhler
2012-06-24  9:03         ` Chong Yidong
2012-06-24 14:38           ` Andreas Röhler

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