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: Juri Linkov <juri <at> linkov.net>
Cc: tracker <at> debbugs.gnu.org
Subject: bug#35487: closed (Make visiting function from help-mode more
 customizable)
Date: Tue, 28 May 2019 21:11:01 +0000
[Message part 1 (text/plain, inline)]
Your message dated Wed, 29 May 2019 00:09:58 +0300
with message-id <878suqcml5.fsf <at> mail.linkov.net>
and subject line Re: bug#35487: Make visiting function from help-mode more customizable
has caused the debbugs.gnu.org bug report #35487,
regarding Make visiting function from help-mode more customizable
to be marked as done.

(If you believe you have received this mail in error, please contact
help-debbugs <at> 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: 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)


[Message part 3 (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.


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.