"Return the full name of the elisp source of LIBRARY."
;; If the library is byte-compiled, try to find a source library by
;; the same name.
- (if (string-match "\\.el\\(c\\(\\..*\\)\\)\\'" library)
- (setq library (replace-match "" t t library 1)))
+ (if (string-match "\\.el\\(c\\(\\..*\\)?\\)\\'" library)
+ (setq library (replace-match "" t t library)))
(or (locate-file library
(or find-function-source-path load-path)
- (append (find-library-suffixes) ""))
+ (append (find-library-suffixes) '("")))
(error "Can't find library %s" library)))
;;;###autoload
`find-function-source-path', if non nil, otherwise in `load-path'."
(if (not variable)
(error "You didn't specify a variable"))
- (let ((library (or file (symbol-file variable))))
+ ;; Fixme: I think `symbol-file' should be fixed instead. -- fx
+ (let ((library (or file (symbol-file (cons 'defvar variable)))))
(find-function-search-for-symbol variable 'variable library)))
;;;###autoload
"Find the function that KEY invokes. KEY is a string.
Point is saved if FUNCTION is in the current buffer."
(interactive "kFind function on key: ")
- (save-excursion
- (let* ((event (and (eventp key) (aref key 0))) ; Null event OK below.
- (start (event-start event))
- (modifiers (event-modifiers event))
- (window (and (or (memq 'click modifiers) (memq 'down modifiers)
- (memq 'drag modifiers))
- (posn-window start))))
- ;; For a mouse button event, go to the button it applies to
- ;; to get the right key bindings. And go to the right place
- ;; in case the keymap depends on where you clicked.
- (when (windowp window)
- (set-buffer (window-buffer window))
- (goto-char (posn-point start)))
- (let ((defn (key-binding key))
- (key-desc (key-description key)))
- (if (or (null defn) (integerp defn))
- (message "%s is unbound" key-desc)
- (if (consp defn)
- (message "%s runs %s" key-desc (prin1-to-string defn))
- (find-function-other-window defn)))))))
+ (let (defn)
+ (save-excursion
+ (let* ((event (and (eventp key) (aref key 0))) ; Null event OK below.
+ (start (event-start event))
+ (modifiers (event-modifiers event))
+ (window (and (or (memq 'click modifiers) (memq 'down modifiers)
+ (memq 'drag modifiers))
+ (posn-window start))))
+ ;; For a mouse button event, go to the button it applies to
+ ;; to get the right key bindings. And go to the right place
+ ;; in case the keymap depends on where you clicked.
+ (when (windowp window)
+ (set-buffer (window-buffer window))
+ (goto-char (posn-point start)))
+ (setq defn (key-binding key))))
+ (let ((key-desc (key-description key)))
+ (if (or (null defn) (integerp defn))
+ (message "%s is unbound" key-desc)
+ (if (consp defn)
+ (message "%s runs %s" key-desc (prin1-to-string defn))
+ (find-function-other-window defn))))))
;;;###autoload
(defun find-function-at-point ()
(provide 'find-func)
+;;; arch-tag: 43ecd81c-74dc-4d9a-8f63-a61e55670d64
;;; find-func.el ends here