;;; help-fns.el --- Complex help functions
;; Copyright (C) 1985, 1986, 1993, 1994, 1998, 1999, 2000, 2001,
-;; 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
+;; 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
;; Maintainer: FSF
;; Keywords: help, internal
src-file
file-name)))
+(declare-function ad-get-advice-info "advice" (function))
+
;;;###autoload
(defun describe-function-1 (function)
- (let* ((advised (and (featurep 'advice) (ad-get-advice-info function)))
+ (let* ((advised (and (symbolp function) (featurep 'advice)
+ (ad-get-advice-info function)))
;; If the function is advised, use the symbol that has the
;; real definition, if that symbol is already set up.
(real-function
(symbol-function real-function)
function))
file-name string
- (beg (if (commandp def) "an interactive " "a ")))
+ (beg (if (commandp def) "an interactive " "a "))
+ (pt1 (with-current-buffer (help-buffer) (point))))
(setq string
(cond ((or (stringp def)
(vectorp def))
(re-search-backward "`\\([^`']+\\)'" nil t)
(help-xref-button 1 'help-function-def real-function file-name))))
(princ ".")
- (terpri)
+ (with-current-buffer (help-buffer)
+ (fill-region-as-paragraph (save-excursion (goto-char pt1) (forward-line 0) (point))
+ (point)))
+ (terpri)(terpri)
(when (commandp function)
+ (let ((pt2 (with-current-buffer (help-buffer) (point))))
(if (and (eq function 'self-insert-command)
(eq (key-binding "a") 'self-insert-command)
(eq (key-binding "b") 'self-insert-command)
(princ "'"))
(when keys
- (princ (if remapped " which is bound to " "It is bound to "))
+ (princ (if remapped ", which is bound to " "It is bound to "))
;; If lots of ordinary text characters run this command,
;; don't mention them one by one.
(if (< (length non-modified-keys) 10)
(princ "many ordinary text characters"))))
(when (or remapped keys non-modified-keys)
(princ ".")
- (terpri)))))
+ (terpri))))
+ (with-current-buffer (help-buffer) (fill-region-as-paragraph pt2 (point)))
+ (terpri)))
(let* ((arglist (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 def)
+ (unless (keymapp function)
(let* ((use (cond
(usage (setq doc (cdr usage)) (car usage))
((listp arglist)
(insert (format " since %s" (nth 2 obsolete))))
(insert ";\n"
(if (stringp (car obsolete)) (car obsolete)
- (format "use `%s' instead." (car obsolete)))
+ (if (null (car obsolete)) ""
+ (format "use `%s' instead." (car obsolete))))
"\n"))
(insert "\n"
(or doc "Not documented.")))))))
(terpri)
(let* ((alias (condition-case nil
- (indirect-variable variable)
- (error variable)))
+ (indirect-variable variable)
+ (error variable)))
(obsolete (get variable 'byte-obsolete-variable))
(safe-var (get variable 'safe-local-variable))
(doc (or (documentation-property variable 'variable-documentation)
(if (cdr obsolete) (princ (format " since %s" (cdr obsolete))))
(princ ";\n ")
(princ (if (stringp (car obsolete)) (car obsolete)
- (format "use `%s' instead." (car obsolete))))
+ (if (null (car obsolete)) ""
+ (format "use `%s' instead." (car obsolete)))))
(terpri))
(when safe-var
(setq extra-line t)
(princ "Documentation:\n")
(with-current-buffer standard-output
(insert (or doc "Not documented as a variable."))))
- ;; Make a link to customize if this variable can be customized.
- (when (custom-variable-p variable)
- (let ((customize-label "customize"))
+
+ (let ((customize-label "customize")
+ (initialization-file "initialization file"))
+ ;; All variables can be set; some can be customized
+ (when (and (symbolp variable) (not (custom-variable-p variable)))
(terpri)
(terpri)
- (princ (concat "You can " customize-label " this variable."))
+ (princ (concat "You can set this variable in your "
+ initialization-file "."))
+ (with-current-buffer standard-output
+ (save-excursion
+ (re-search-backward
+ (concat "\\(" initialization-file "\\)") nil t)
+ (help-xref-button 1 'help-info-variable variable
+ "(emacs)Init File"))))
+ ;; Make a link to customize if this variable can be customized.
+ (when (custom-variable-p variable)
+ (terpri)
+ (terpri)
+ (princ (concat "You can " customize-label " this variable"))
+ (princ (concat " or set it in your " initialization-file "."))
(with-current-buffer standard-output
(save-excursion
(re-search-backward
(concat "\\(" customize-label "\\)") nil t)
- (help-xref-button 1 'help-customize-variable variable))))
+ (help-xref-button 1 'help-customize-variable variable))
+ (save-excursion
+ (re-search-backward
+ (concat "\\(" initialization-file "\\)") nil t)
+ (help-xref-button 1 'help-info-variable variable
+ "(emacs)Init File")
+ )
+ ))
;; Note variable's version or package version
(let ((output (describe-variable-custom-version-info variable)))
(when output