[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] master 3f88856 1/2: Factor out the lambda from help-functi
From: |
Lars Ingebrigtsen |
Subject: |
[Emacs-diffs] master 3f88856 1/2: Factor out the lambda from help-function-def |
Date: |
Fri, 11 Oct 2019 16:13:59 -0400 (EDT) |
branch: master
commit 3f8885638a667dadcd9c38c1da07d143c9341b9a
Author: Lars Ingebrigtsen <address@hidden>
Commit: Lars Ingebrigtsen <address@hidden>
Factor out the lambda from help-function-def
* lisp/help-mode.el (help-function-def--button-function): Factor
out into own function for easier reuse.
(help-function-def): ... from the lambda here.
---
lisp/help-mode.el | 50 ++++++++++++++++++++++++++------------------------
1 file changed, 26 insertions(+), 24 deletions(-)
diff --git a/lisp/help-mode.el b/lisp/help-mode.el
index efc0b8f..054a1ef 100644
--- a/lisp/help-mode.el
+++ b/lisp/help-mode.el
@@ -190,32 +190,34 @@ The format is (FUNCTION ARGS...).")
(customize-face v))
'help-echo (purecopy "mouse-2, RET: customize face"))
+(defun help-function-def--button-function (fun &optional file type)
+ (or file
+ (setq file (find-lisp-object-file-name fun type)))
+ (if (not file)
+ (message "Unable to find defining file")
+ (require 'find-func)
+ (when (eq file 'C-source)
+ (setq file
+ (help-C-file-name (indirect-function fun) 'fun)))
+ ;; Don't use find-function-noselect because it follows
+ ;; aliases (which fails for built-in functions).
+ (let* ((location
+ (find-function-search-for-symbol fun type file))
+ (position (cdr location)))
+ (pop-to-buffer (car location))
+ (run-hooks 'find-function-after-hook)
+ (if position
+ (progn
+ ;; Widen the buffer if necessary to go to this position.
+ (when (or (< position (point-min))
+ (> position (point-max)))
+ (widen))
+ (goto-char position))
+ (message "Unable to find location in file")))))
+
(define-button-type 'help-function-def
:supertype 'help-xref
- 'help-function (lambda (fun &optional file type)
- (or file
- (setq file (find-lisp-object-file-name fun type)))
- (if (not file)
- (message "Unable to find defining file")
- (require 'find-func)
- (when (eq file 'C-source)
- (setq file
- (help-C-file-name (indirect-function fun) 'fun)))
- ;; Don't use find-function-noselect because it follows
- ;; aliases (which fails for built-in functions).
- (let* ((location
- (find-function-search-for-symbol fun type file))
- (position (cdr location)))
- (pop-to-buffer (car location))
- (run-hooks 'find-function-after-hook)
- (if position
- (progn
- ;; Widen the buffer if necessary to go to this
position.
- (when (or (< position (point-min))
- (> position (point-max)))
- (widen))
- (goto-char position))
- (message "Unable to find location in file")))))
+ 'help-function #'help-function-def--button-function
'help-echo (purecopy "mouse-2, RET: find function's definition"))
(define-button-type 'help-function-cmacro ; FIXME: Obsolete since 24.4.