GNU bug report logs - #35487
Make visiting function from help-mode more customizable

Previous Next

Package: emacs;

Reported by: Tak Kunihiro <tkk <at> misasa.okayama-u.ac.jp>

Date: Mon, 29 Apr 2019 12:31:02 UTC

Severity: wishlist

Tags: patch

Done: Juri Linkov <juri <at> linkov.net>

Bug is archived. No further changes may be made.

Full log


View this message in rfc822 format

From: help-debbugs <at> gnu.org (GNU bug Tracking System)
To: Tak Kunihiro <tkk <at> misasa.okayama-u.ac.jp>
Subject: bug#35487: closed (Re: bug#35487: Make visiting function from
 help-mode more customizable)
Date: Tue, 28 May 2019 21:11:02 +0000
[Message part 1 (text/plain, inline)]
Your bug report

#35487: Make visiting function from help-mode more customizable

which was filed against the emacs package, has been closed.

The explanation is attached below, along with your original report.
If you require more details, please reply to 35487 <at> debbugs.gnu.org.

-- 
35487: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=35487
GNU Bug Tracking System
Contact help-debbugs <at> gnu.org with problems
[Message part 2 (message/rfc822, inline)]
From: Juri Linkov <juri <at> linkov.net>
To: Tak Kunihiro <homeros.misasa <at> gmail.com>
Cc: 35487-done <at> debbugs.gnu.org, martin rudalics <rudalics <at> gmx.at>,
 tkk <at> misasa.okayama-u.ac.jp
Subject: Re: bug#35487: Make visiting function from help-mode more customizable
Date: Wed, 29 May 2019 00:09:58 +0300
> I configured `f' in help-mode in following way based on comments
> and now it works good.
>
> Thank you Juri and Martin for the responses!

You are welcome.  Since it works good, I'm closing this request.

[Message part 3 (message/rfc822, inline)]
From: Tak Kunihiro <tkk <at> misasa.okayama-u.ac.jp>
To: bug-gnu-emacs <at> gnu.org
Cc: tkk <at> misasa.okayama-u.ac.jp
Subject: Make visiting function from help-mode more customizable
Date: Mon, 29 Apr 2019 21:30:14 +0900 (JST)
* Message

I often want to visit function from help-mode in `this window' in
stead of `other window'.  To do so, I found that to revise
help-function in help-function-def works.

I propose to (1) move help-function described as lambda function out
of button definition and (2) make function to visit function from
help-mode customizable.

After the revision, I can visit function from help-mode in `this
windows' as shown below.

#+begin_src emacs-lisp
(define-key help-mode-map (kbd "f")
  (lambda ()
    (interactive)
    (let ((help-switch-buffer-function 'switch-to-buffer))
      (push-button))))
#+end_src

I attach commit log and patch.


* Commit log

Author: Tak Kunihiro <tkk <at> misasa.okayama-u.ac.jp>

    Make visiting function from help-mode more customizable
    
    * lisp/help-mode.el
    (define-button-type): Move definition of help-function out.
    (help-switch-buffer-function): Function to display buffer in help-mode.
    (help-find-function): Define help-function using a new variable
    `help-switch-buffer-function'.

* Patch

diff --git a/lisp/help-mode.el b/lisp/help-mode.el
index 6cc3f0d4f7..4e01e73181 100644
--- a/lisp/help-mode.el
+++ b/lisp/help-mode.el
@@ -192,32 +192,39 @@ 'help-customize-face
 
 (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-find-function
   'help-echo (purecopy "mouse-2, RET: find function's definition"))
 
+(defvar help-switch-buffer-function 'pop-to-buffer
+  "Function to display buffer in help-mode.")
+
+(defun help-find-function (fun &optional file type)
+  "Find object shown in help-mode."
+  (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))
+      (funcall help-switch-buffer-function (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-cmacro ; FIXME: Obsolete since 24.4.
   :supertype 'help-xref
   'help-function (lambda (fun file)



This bug report was last modified 5 years and 364 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.