summaryrefslogtreecommitdiff
path: root/lisp/help-fns.el
diff options
context:
space:
mode:
authorStefan Monnier <monnier@iro.umontreal.ca>2004-04-29 18:46:13 +0000
committerStefan Monnier <monnier@iro.umontreal.ca>2004-04-29 18:46:13 +0000
commit3ff0a7e940fcd238439d985f67d223e2a071c74f (patch)
tree6b1e2a2004246d65027a3af0390d6aeadd3369e2 /lisp/help-fns.el
parent2ea0f8fde524c4998c0ab933cd27ecd50c54e09a (diff)
downloademacs-3ff0a7e940fcd238439d985f67d223e2a071c74f.tar.gz
(help-C-file-name): Use new subr-name.
Prepend `src/' to the file name. (help-C-source-directory, help-subr-name, help-find-C-source): Remove. (describe-function-1, describe-variable): Only find a C source file name if DOC is already loaded.
Diffstat (limited to 'lisp/help-fns.el')
-rw-r--r--lisp/help-fns.el60
1 files changed, 14 insertions, 46 deletions
diff --git a/lisp/help-fns.el b/lisp/help-fns.el
index 6a71a544638..4e57ea6d74e 100644
--- a/lisp/help-fns.el
+++ b/lisp/help-fns.el
@@ -216,27 +216,13 @@ ARGLIST can also be t or a string of the form \"(fun ARG1 ARG2 ...)\"."
(intern (upcase name))))))
arglist)))
-(defvar help-C-source-directory
- (let ((dir (expand-file-name "src" source-directory)))
- (when (and (file-directory-p dir) (file-readable-p dir))
- dir))
- "Directory where the C source files of Emacs can be found.
-If nil, do not try to find the source code of functions and variables
-defined in C.")
-
-(defun help-subr-name (subr)
- (let ((name (prin1-to-string subr)))
- (if (string-match "\\`#<subr \\(.*\\)>\\'" name)
- (match-string 1 name)
- (error "Unexpected subroutine print name: %s" name))))
-
(defun help-C-file-name (subr-or-var kind)
"Return the name of the C file where SUBR-OR-VAR is defined.
KIND should be `var' for a variable or `subr' for a subroutine."
(let ((docbuf (get-buffer-create " *DOC*"))
(name (if (eq 'var kind)
(concat "V" (symbol-name subr-or-var))
- (concat "F" (help-subr-name subr-or-var)))))
+ (concat "F" (subr-name subr-or-var)))))
(with-current-buffer docbuf
(goto-char (point-min))
(if (eobp)
@@ -246,31 +232,11 @@ KIND should be `var' for a variable or `subr' for a subroutine."
(re-search-backward "S\\(.*\\)")
(let ((file (match-string 1)))
(if (string-match "\\.\\(o\\|obj\\)\\'" file)
- (replace-match ".c" t t file)
+ (setq file (replace-match ".c" t t file)))
+ (if (string-match "\\.c\\'" file)
+ (concat "src/" file)
file)))))
-(defun help-find-C-source (fun-or-var file kind)
- "Find the source location where SUBR-OR-VAR is defined in FILE.
-KIND should be `var' for a variable or `subr' for a subroutine."
- (setq file (expand-file-name file help-C-source-directory))
- (unless (file-readable-p file)
- (error "The C source file %s is not available"
- (file-name-nondirectory file)))
- (if (eq 'fun kind)
- (setq fun-or-var (indirect-function fun-or-var)))
- (with-current-buffer (find-file-noselect file)
- (goto-char (point-min))
- (unless (re-search-forward
- (if (eq 'fun kind)
- (concat "DEFUN[ \t\n]*([ \t\n]*\""
- (regexp-quote (help-subr-name fun-or-var))
- "\"")
- (concat "DEFVAR[A-Z_]*[ \t\n]*([ \t\n]*\""
- (regexp-quote (symbol-name fun-or-var))))
- nil t)
- (error "Can't find source for %s" fun))
- (cons (current-buffer) (match-beginning 0))))
-
;;;###autoload
(defun describe-function-1 (function)
(let* ((def (if (symbolp function)
@@ -336,14 +302,16 @@ KIND should be `var' for a variable or `subr' for a subroutine."
(when (re-search-backward
"^;;; Generated autoloads from \\(.*\\)" nil t)
(setq file-name (match-string 1)))))))
- (when (and (null file-name) (subrp def) help-C-source-directory)
+ (when (and (null file-name) (subrp def))
;; Find the C source file name.
- (setq file-name (concat "src/" (help-C-file-name def 'subr))))
+ (setq file-name (if (get-buffer " *DOC*")
+ (help-C-file-name def 'subr)
+ 'C-source)))
(when file-name
(princ " in `")
;; We used to add .el to the file name,
;; but that's completely wrong when the user used load-file.
- (princ file-name)
+ (princ (if (eq file-name 'C-source) "C source code" file-name))
(princ "'")
;; Make a hyperlink to the library.
(with-current-buffer standard-output
@@ -576,13 +544,13 @@ it is displayed along with the global value."
(when (and (null file-name)
(integerp (get variable 'variable-documentation)))
;; It's a variable not defined in Elisp but in C.
- (if help-C-source-directory
- (setq file-name
- (concat "src/" (help-C-file-name variable 'var)))
- (princ "\n\nDefined in core C code.")))
+ (setq file-name
+ (if (get-buffer " *DOC*")
+ (help-C-file-name variable 'var)
+ 'C-source)))
(when file-name
(princ "\n\nDefined in `")
- (princ file-name)
+ (princ (if (eq file-name 'C-source) "C source code" file-name))
(princ "'.")
(with-current-buffer standard-output
(save-excursion