unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
* Path & Demo: Source View in Help Buffers
@ 2021-09-22  8:59 Arthur Miller
  2021-09-22 10:55 ` Tassilo Horn
  0 siblings, 1 reply; 8+ messages in thread
From: Arthur Miller @ 2021-09-22  8:59 UTC (permalink / raw)
  To: emacs-devel

[-- Attachment #1: Type: text/plain, Size: 772 bytes --]


I had some fun and implemented somewhat different version of how code is
fetched, and buttonized toggle function.

Since I really didn't got much more input than what Martin gave me yesterday, I
have had some fun and recorded a small demo of how it looks like:

https://youtu.be/yiS1eXdgcYI

Sorry, but I don't have better place to put it on, use yt-download if you prefer
not to open it in a web browser. It is just a two minute of me showing how it
looks when used in practice. I reason that looking at the code is one thing,
seeing it is the other.

I have also changed it a bit, and pasting the source after the navigation
buttons. so they don't jump out of the screen when a function is very big. Don't
know if it is better strategy, it is just a prototype anyway.


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-Display-source-code-in-help-mode-buffers.patch --]
[-- Type: text/x-patch, Size: 8814 bytes --]

From cd49759ff81466e31e4c96276dcdb2ff6d378d0f Mon Sep 17 00:00:00 2001
From: Arthur Miller <arthur.miller@live.com>
Date: Wed, 22 Sep 2021 01:47:41 +0200
Subject: [PATCH] Display source code in 'help-mode' buffers

* lisp/help-mode.el (help-mode-inline-source): New option.
(help--fetch-c-src): New function.
(help--fetch-lisp-src): New function.
(help--insert-source): New function.
(help--remove-source): New function.
(help--toggle-source-view): New function.
(help-source-view): New button.
(help-make-xrefs): Check for 'help-mode-inline-source' and
call 'help--insert-source' to perform insertion when possible.
---
 lisp/help-mode.el | 165 ++++++++++++++++++++++++++++++++++++++++++++--
 1 file changed, 160 insertions(+), 5 deletions(-)

diff --git a/lisp/help-mode.el b/lisp/help-mode.el
index 551cf7e1a3..bec7d25270 100644
--- a/lisp/help-mode.el
+++ b/lisp/help-mode.el
@@ -149,6 +149,16 @@ help-mode-hook
   "Hook run by `help-mode'."
   :type 'hook
   :group 'help)
+
+(defcustom help-mode-inline-source nil
+  "Display inlined source code in `help-mode' buffers.
+
+When enabled the source code of a symbol currently shown in the
+help-buffer will be displayed inlined in the help buffer, if the
+source code for the symbol is available."
+  :type 'boolean
+  :group 'help
+  :version "28.1")
 \f
 ;; Button types used by help
 
@@ -367,6 +377,11 @@ 'help-news
     (view-buffer-other-window (find-file-noselect file))
     (goto-char pos))
   'help-echo (purecopy "mouse-2, RET: show corresponding NEWS announcement"))
+
+(define-button-type 'help-source-view
+  :supertype 'help-xref
+  'help-function #'help-toggle-source-view
+  'help-echo (purecopy "mouse-2, RET: toggle source view in help-buffer"))
 \f
 (defvar bookmark-make-record-function)
 (defvar help-mode--current-data nil)
@@ -503,6 +518,115 @@ describe-symbol-backends
     and a frame), inserts the description of that symbol in the current buffer
     and returns that text as well.")
 
+(defun help--fetch-c-src (symbol type file)
+  "Find C source code for a Lisp SYMBOL in a FILE.
+
+symbol - the symbol to find.
+type - the type as obtained by 'describe-*' functions.
+file - the source file to search in."
+  (let (src beg)
+    (setq file (expand-file-name file source-directory))
+    (when (file-readable-p file)
+      (with-temp-buffer
+        (insert-file-contents-literally file)
+        (delay-mode-hooks (funcall 'c-mode))
+        (goto-char (point-min))
+        (unless type
+          (require 'find-func)
+          ;; Either or both an alias and its target might be advised.
+          (setq symbol (find-function-advised-original
+		            (indirect-function
+		             (find-function-advised-original symbol)))))
+        (when (re-search-forward
+	       (if type
+		   (concat "DEFVAR[A-Z_]*[ \t\n]*([ \t\n]*\""
+			   (regexp-quote (symbol-name symbol))
+			   "\"")
+	         (concat "DEFUN[ \t\n]*([ \t\n]*\""
+		         (regexp-quote (subr-name (advice--cd*r symbol)))
+		         "\""))
+	       nil t)
+          (if type ;; defvar here
+              (progn
+                (goto-char (line-beginning-position))
+                (skip-chars-forward "[\s\t\n\r]")
+                (setq beg (point))
+                (re-search-forward ");$" nil t)
+                (narrow-to-region beg (point)))
+            ;;(narrow-to-defun)
+            (and (re-search-backward "DEFUN" nil t)
+                 (setq beg (point))
+                 (re-search-forward ")[\n\s\t\r]*{")
+                 (re-search-forward "^}[\n\s\t\r]+")
+                 (narrow-to-region beg (point))))
+          (if (fboundp 'font-lock-ensure)
+               (font-lock-ensure)
+             (with-no-warnings (font-lock-fontify-buffer)))
+          (setq src (buffer-string)))))
+    src))
+
+(defun help--fetch-lisp-src (symbol type file)
+  "Find emacs-lisp source code for a Lisp SYMBOL in a FILE.
+
+symbol - the symbol to find.
+type - the type as obtained by 'describe-*' functions.
+file - the source file to search in."
+  (let (src pos)
+    (when file
+      (setq file (or file (find-lisp-object-file-name symbol type))))
+    (with-temp-buffer
+      (insert-file-contents file)
+      (delay-mode-hooks (funcall 'emacs-lisp-mode))
+      (require 'find-func)
+      ;; Either or both an alias and its target might be advised.
+      ;; (setq symbol (find-function-advised-original
+      ;;   	    (indirect-function
+      ;;   	     (find-function-advised-original symbol)))))
+      (setq pos (cdr (find-function-search-for-symbol symbol type file)))
+      (when pos
+        (goto-char pos)
+        (forward-sexp)
+        (narrow-to-region pos (point))
+        (if (fboundp 'font-lock-ensure)
+            (font-lock-ensure)
+          (with-no-warnings (font-lock-fontify-buffer)))
+        (setq src (buffer-string))))
+    src))
+
+(defun help--insert-source ()
+  "Fnd and insert source for the current symbol into the help-mode
+buffer."
+  (with-silent-modifications
+    (with-current-buffer (help-buffer)
+      (save-excursion
+        (let* ((file (plist-get help-mode--current-data :file))
+               (type (plist-get help-mode--current-data :type))
+               (sym (plist-get help-mode--current-data :symbol))
+               (src "Source code not available."))
+          (when (eq file 'C-source)
+            (setq file (help-C-file-name (indirect-function sym) 'fun)))
+          (setq src (if (string-suffix-p ".c" file)
+                        (help--fetch-c-src sym type file)
+                      (help--fetch-lisp-src sym type file)))
+          (goto-char (point-max))
+          (let ((end (point)))
+            (when (search-backward "View Source Code:" nil t)
+              (delete-region (point) end)
+              (help-insert-xref-button "Hide Source Code:" 'help-source-view)
+              (insert (concat "\n" src "\n")))))))))
+
+(defun help--remove-source ()
+  "Remove source code from the help buffer when present."
+  (with-current-buffer (help-buffer)
+    (with-silent-modifications
+      (save-excursion
+        (goto-char (point-max))
+        (let ((end (point)))
+          (when (search-backward "Hide Source Code:" nil t)
+            (delete-region (point) end)
+            (help-insert-xref-button
+             "View Source Code:" 'help-source-view)))))))
+
 ;;;###autoload
 (defun help-make-xrefs (&optional buffer)
   "Parse and hyperlink documentation cross-references in the given BUFFER.
@@ -664,7 +788,25 @@ help-make-xrefs
             (help-insert-xref-button help-forward-label 'help-forward
                                      (current-buffer)))
           (when (or help-xref-stack help-xref-forward-stack)
-            (insert "\n")))
+            (insert "\n"))
+          (insert "\n")
+          ;; get source string if needed and available
+          ;; describe-symbol does not produce 'current-data' plist
+          (unless help-mode--current-data
+            (save-excursion
+              (goto-char (point-min))
+              (when (re-search-forward "\\.\\(el\\|c\\)" nil t)
+                (goto-char (- (point) 2))
+                (let ((props (get-text-property (point) 'help-args)))
+                  (when props
+                    (setq help-mode--current-data
+                          (list :symbol (nth 0 props)
+                                :file (nth 1 props))))))))
+          (if help-mode-inline-source
+              (progn
+                (insert "View Source Code:") ;; just a little hack
+                (help--insert-source))
+            (help-insert-xref-button "View Source Code:" 'help-source-view)))
         (set-buffer-modified-p old-modified)))))
 
 ;;;###autoload
@@ -819,10 +961,23 @@ help-do-xref
                         (append args (list (generate-new-buffer-name "*info*")))
                       args))))
 
-;; The doc string is meant to explain what buttons do.
-(defun help-follow-mouse ()
-  "Follow the cross-reference that you click on."
-  (declare (obsolete nil "28.1"))
+(defun help-toggle-source-view ()
+  "Toggle source code display in help buffer for the current symbol."
+  (interactive)
+  (when (get-buffer-window (help-buffer))
+    (with-current-buffer (help-buffer)
+      (unless (plist-get help-mode--current-data :file)
+        (error "Source file for the current help item is not defined"))
+      (save-excursion
+        (goto-char (point-min))
+        (if (search-forward "Hide Source Code:" nil t)
+            (help--remove-source)
+          (help--insert-source))))))
+
+  ;; The doc string is meant to explain what buttons do.
+  (defun help-follow-mouse ()
+    "Follow the cross-reference that you click on."
+    (declare (obsolete nil "28.1"))
   (interactive)
   (error "No cross-reference here"))
 
-- 
2.33.0


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: Path & Demo: Source View in Help Buffers
  2021-09-22  8:59 Path & Demo: Source View in Help Buffers Arthur Miller
@ 2021-09-22 10:55 ` Tassilo Horn
  2021-09-22 11:06   ` Arthur Miller
  0 siblings, 1 reply; 8+ messages in thread
From: Tassilo Horn @ 2021-09-22 10:55 UTC (permalink / raw)
  To: emacs-devel

Arthur Miller <arthur.miller@live.com> writes:

Hi Arthur,

> I had some fun and implemented somewhat different version of how code
> is fetched, and buttonized toggle function.
>
> Since I really didn't got much more input than what Martin gave me
> yesterday, I have had some fun and recorded a small demo of how it
> looks like:
>
> https://youtu.be/yiS1eXdgcYI

Really cool.  I like it. :-)

Out of curiosity, why do you have fboundp-checks for font-lock-ensure in
the code?  That's always true, isn't it?

Bye,
Tassilo



^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: Path & Demo: Source View in Help Buffers
  2021-09-22 10:55 ` Tassilo Horn
@ 2021-09-22 11:06   ` Arthur Miller
  2021-09-22 11:32     ` Tassilo Horn
  0 siblings, 1 reply; 8+ messages in thread
From: Arthur Miller @ 2021-09-22 11:06 UTC (permalink / raw)
  To: Tassilo Horn; +Cc: emacs-devel

Tassilo Horn <tsdh@gnu.org> writes:

> Arthur Miller <arthur.miller@live.com> writes:
>
> Hi Arthur,
>
>> I had some fun and implemented somewhat different version of how code
>> is fetched, and buttonized toggle function.
>>
>> Since I really didn't got much more input than what Martin gave me
>> yesterday, I have had some fun and recorded a small demo of how it
>> looks like:
>>
>> https://youtu.be/yiS1eXdgcYI
>
> Really cool.  I like it. :-)
Thanks!

> Out of curiosity, why do you have fboundp-checks for font-lock-ensure in
> the code?  That's always true, isn't it?

I don't know. Since font-lock has all its stuff abstracted into buffer local
function variables, I am not sure if I can count it is not nil?

If I can I would gladly remove the check. I appreciate advice, I am not so
familiar with all the details of everything.



^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: Path & Demo: Source View in Help Buffers
  2021-09-22 11:06   ` Arthur Miller
@ 2021-09-22 11:32     ` Tassilo Horn
  2021-09-22 12:01       ` Arthur Miller
  2021-09-22 13:42       ` Arthur Miller
  0 siblings, 2 replies; 8+ messages in thread
From: Tassilo Horn @ 2021-09-22 11:32 UTC (permalink / raw)
  To: emacs-devel

Arthur Miller <arthur.miller@live.com> writes:

>> Out of curiosity, why do you have fboundp-checks for font-lock-ensure
>> in the code?  That's always true, isn't it?
>
> I don't know. Since font-lock has all its stuff abstracted into buffer
> local function variables, I am not sure if I can count it is not nil?

But it's no buffer-local variable, it's a function.  If you have emacs
25.1 upwards, you have `font-lock-ensure'.

> If I can I would gladly remove the check. I appreciate advice, I am
> not so familiar with all the details of everything.

I think that's a common check for 3rd-party packages which want to keep
supporting emacs 24.  But since you are hacking emacs core, there's no
need for that unless the function/variable is only defined if some
configure option is given or some lib is available.  But none of the
latter applies to font-lock.el.

Bye,
Tassilo



^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: Path & Demo: Source View in Help Buffers
  2021-09-22 11:32     ` Tassilo Horn
@ 2021-09-22 12:01       ` Arthur Miller
  2021-09-22 13:42       ` Arthur Miller
  1 sibling, 0 replies; 8+ messages in thread
From: Arthur Miller @ 2021-09-22 12:01 UTC (permalink / raw)
  To: Tassilo Horn; +Cc: emacs-devel

Tassilo Horn <tsdh@gnu.org> writes:

> Arthur Miller <arthur.miller@live.com> writes:
>
>>> Out of curiosity, why do you have fboundp-checks for font-lock-ensure
>>> in the code?  That's always true, isn't it?
>>
>> I don't know. Since font-lock has all its stuff abstracted into buffer
>> local function variables, I am not sure if I can count it is not nil?
>
> But it's no buffer-local variable, it's a function.  If you have emacs
> 25.1 upwards, you have `font-lock-ensure'.
>
>> If I can I would gladly remove the check. I appreciate advice, I am
>> not so familiar with all the details of everything.
>
> I think that's a common check for 3rd-party packages which want to keep
> supporting emacs 24.  But since you are hacking emacs core, there's no
> need for that unless the function/variable is only defined if some
> configure option is given or some lib is available.  But none of the
> latter applies to font-lock.el.

Allright, thank you. I didn't know so much about font lock :).



^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: Path & Demo: Source View in Help Buffers
  2021-09-22 11:32     ` Tassilo Horn
  2021-09-22 12:01       ` Arthur Miller
@ 2021-09-22 13:42       ` Arthur Miller
  2021-09-22 14:08         ` Tassilo Horn
  1 sibling, 1 reply; 8+ messages in thread
From: Arthur Miller @ 2021-09-22 13:42 UTC (permalink / raw)
  To: Tassilo Horn; +Cc: emacs-devel

[-- Attachment #1: Type: text/plain, Size: 1079 bytes --]

Tassilo Horn <tsdh@gnu.org> writes:

> Arthur Miller <arthur.miller@live.com> writes:
>
>>> Out of curiosity, why do you have fboundp-checks for font-lock-ensure
>>> in the code?  That's always true, isn't it?
>>
>> I don't know. Since font-lock has all its stuff abstracted into buffer
>> local function variables, I am not sure if I can count it is not nil?
>
> But it's no buffer-local variable, it's a function.  If you have emacs
> 25.1 upwards, you have `font-lock-ensure'.
>
>> If I can I would gladly remove the check. I appreciate advice, I am
>> not so familiar with all the details of everything.
>
> I think that's a common check for 3rd-party packages which want to keep
> supporting emacs 24.  But since you are hacking emacs core, there's no
> need for that unless the function/variable is only defined if some
> configure option is given or some lib is available.  But none of the
> latter applies to font-lock.el.
>

Yes, I have tested now, it works fine. I did even som minor refactoring.

Don't know if anyone else cares at all, anyway here is updated patch.


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-Display-source-code-in-help-mode-buffers.patch --]
[-- Type: text/x-patch, Size: 8239 bytes --]

From 63f6f0a9806c8326b8913f5d6856d841c019b4d0 Mon Sep 17 00:00:00 2001
From: Arthur Miller <arthur.miller@live.com>
Date: Wed, 22 Sep 2021 15:33:56 +0200
Subject: [PATCH] Display source code in 'help-mode' buffers

* lisp/help-mode.el (help-mode-inline-source): New option.
(help--fetch-c-src): New function.
(help--fetch-lisp-src): New function.
(help--insert-source): New function.
(help--remove-source): New function.
(help--toggle-source-view): New function.
(help-source-view): New button.
(help-make-xrefs): Check for 'help-mode-inline-source' and
call 'help--insert-source' to perform insertion when possible.
---
 lisp/help-mode.el | 152 ++++++++++++++++++++++++++++++++++++++++++++--
 1 file changed, 147 insertions(+), 5 deletions(-)

diff --git a/lisp/help-mode.el b/lisp/help-mode.el
index 551cf7e1a3..dc6a532c63 100644
--- a/lisp/help-mode.el
+++ b/lisp/help-mode.el
@@ -149,6 +149,16 @@ help-mode-hook
   "Hook run by `help-mode'."
   :type 'hook
   :group 'help)
+
+(defcustom help-mode-inline-source nil
+  "Display inlined source code in `help-mode' buffers.
+
+When enabled the source code of a symbol currently shown in the
+help-buffer will be displayed inlined in the help buffer, if the
+source code for the symbol is available."
+  :type 'boolean
+  :group 'help
+  :version "28.1")
 \f
 ;; Button types used by help
 
@@ -367,6 +377,11 @@ 'help-news
     (view-buffer-other-window (find-file-noselect file))
     (goto-char pos))
   'help-echo (purecopy "mouse-2, RET: show corresponding NEWS announcement"))
+
+(define-button-type 'help-source-view
+  :supertype 'help-xref
+  'help-function #'help-toggle-source-view
+  'help-echo (purecopy "mouse-2, RET: toggle source view in help-buffer"))
 \f
 (defvar bookmark-make-record-function)
 (defvar help-mode--current-data nil)
@@ -503,6 +518,102 @@ describe-symbol-backends
     and a frame), inserts the description of that symbol in the current buffer
     and returns that text as well.")
 
+(defun help--fetch-c-src (symbol type file)
+  "Find C source code for a Lisp SYMBOL in a FILE.
+
+symbol - the symbol to find.
+type - the type as obtained by 'describe-*' functions.
+file - the source file to search in."
+  (let (src beg)
+    (setq file (expand-file-name file source-directory))
+    (when (file-readable-p file)
+      (with-temp-buffer
+        (insert-file-contents-literally file)
+        (delay-mode-hooks (funcall 'c-mode))
+        (goto-char (point-min))
+        (unless type
+          ;; Either or both an alias and its target might be advised.
+          (setq symbol (find-function-advised-original
+		            (indirect-function
+		             (find-function-advised-original symbol)))))
+        (when (re-search-forward
+	       (if type
+		   (concat "DEFVAR[A-Z_]*[ \t\n]*([ \t\n]*\""
+			   (regexp-quote (symbol-name symbol))
+			   "\"")
+	         (concat "DEFUN[ \t\n]*([ \t\n]*\""
+		         (regexp-quote (subr-name (advice--cd*r symbol)))
+		         "\""))
+	       nil t)
+          (if type
+              (and (re-search-backward "DEFVAR" nil t)
+                   (setq beg (point))
+                   (re-search-forward ");$" nil t))
+            (and (re-search-backward "DEFUN" nil t)
+                 (setq beg (point))
+                 (re-search-forward ")[\n\s\t\r]*{")
+                 (re-search-forward "^}[\n\s\t\r]+")))
+          (narrow-to-region beg (point))
+          (with-no-warnings (font-lock-fontify-buffer))
+          (setq src (buffer-string)))))
+    src))
+
+(defun help--fetch-lisp-src (symbol type file)
+  "Find emacs-lisp source code for a Lisp SYMBOL in a FILE.
+
+symbol - the symbol to find.
+type - the type as obtained by 'describe-*' functions.
+file - the source file to search in."
+  (let (src pos)
+    (when file
+      (setq file (or file (find-lisp-object-file-name symbol type))))
+    (with-temp-buffer
+      (insert-file-contents file)
+      (delay-mode-hooks (funcall 'emacs-lisp-mode))
+      (setq pos (cdr (find-function-search-for-symbol symbol type file)))
+      (when pos
+        (goto-char pos)
+        (forward-sexp)
+        (narrow-to-region pos (point))
+        (with-no-warnings (font-lock-fontify-buffer))
+        (setq src (buffer-string))))
+    src))
+
+(defun help--insert-source ()
+  "Fnd and insert source for the current symbol into the help-mode
+buffer."
+  (with-silent-modifications
+    (with-current-buffer (help-buffer)
+      (save-excursion
+        (let* ((file (plist-get help-mode--current-data :file))
+               (type (plist-get help-mode--current-data :type))
+               (sym (plist-get help-mode--current-data :symbol))
+               (src "Source code not available."))
+          (require 'find-func)
+          (when (eq file 'C-source)
+            (setq file (help-C-file-name (indirect-function sym) 'fun)))
+          (setq src (if (string-suffix-p ".c" file)
+                        (help--fetch-c-src sym type file)
+                      (help--fetch-lisp-src sym type file)))
+          (goto-char (point-max))
+          (let ((end (point)))
+            (when (search-backward "View Source Code:" nil t)
+              (delete-region (point) end)
+              (help-insert-xref-button "Hide Source Code:" 'help-source-view)
+              (insert (concat "\n" src "\n")))))))))
+
+(defun help--remove-source ()
+  "Remove source code from the help buffer when present."
+  (with-current-buffer (help-buffer)
+    (with-silent-modifications
+      (save-excursion
+        (goto-char (point-max))
+        (let ((end (point)))
+          (when (search-backward "Hide Source Code:" nil t)
+            (delete-region (point) end)
+            (help-insert-xref-button
+             "View Source Code:" 'help-source-view)))))))
+
 ;;;###autoload
 (defun help-make-xrefs (&optional buffer)
   "Parse and hyperlink documentation cross-references in the given BUFFER.
@@ -664,7 +775,25 @@ help-make-xrefs
             (help-insert-xref-button help-forward-label 'help-forward
                                      (current-buffer)))
           (when (or help-xref-stack help-xref-forward-stack)
-            (insert "\n")))
+            (insert "\n"))
+          (insert "\n")
+          ;; get source string if needed and available
+          ;; describe-symbol does not produce 'current-data' plist
+          (unless help-mode--current-data
+            (save-excursion
+              (goto-char (point-min))
+              (when (re-search-forward "\\.\\(el\\|c\\)" nil t)
+                (goto-char (- (point) 2))
+                (let ((props (get-text-property (point) 'help-args)))
+                  (when props
+                    (setq help-mode--current-data
+                          (list :symbol (nth 0 props)
+                                :file (nth 1 props))))))))
+          (if help-mode-inline-source
+              (progn
+                (insert "View Source Code:") ;; just a little hack
+                (help--insert-source))
+            (help-insert-xref-button "View Source Code:" 'help-source-view)))
         (set-buffer-modified-p old-modified)))))
 
 ;;;###autoload
@@ -819,10 +948,23 @@ help-do-xref
                         (append args (list (generate-new-buffer-name "*info*")))
                       args))))
 
-;; The doc string is meant to explain what buttons do.
-(defun help-follow-mouse ()
-  "Follow the cross-reference that you click on."
-  (declare (obsolete nil "28.1"))
+(defun help-toggle-source-view ()
+  "Toggle source code display in help buffer for the current symbol."
+  (interactive)
+  (when (get-buffer-window (help-buffer))
+    (with-current-buffer (help-buffer)
+      (unless (plist-get help-mode--current-data :file)
+        (error "Source file for the current help item is not defined"))
+      (save-excursion
+        (goto-char (point-min))
+        (if (search-forward "Hide Source Code:" nil t)
+            (help--remove-source)
+          (help--insert-source))))))
+
+  ;; The doc string is meant to explain what buttons do.
+  (defun help-follow-mouse ()
+    "Follow the cross-reference that you click on."
+    (declare (obsolete nil "28.1"))
   (interactive)
   (error "No cross-reference here"))
 
-- 
2.33.0


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: Path & Demo: Source View in Help Buffers
  2021-09-22 13:42       ` Arthur Miller
@ 2021-09-22 14:08         ` Tassilo Horn
  2021-09-22 16:50           ` Arthur Miller
  0 siblings, 1 reply; 8+ messages in thread
From: Tassilo Horn @ 2021-09-22 14:08 UTC (permalink / raw)
  To: emacs-devel

Arthur Miller <arthur.miller@live.com> writes:

>> I think that's a common check for 3rd-party packages which want to keep
>> supporting emacs 24.  But since you are hacking emacs core, there's no
>> need for that unless the function/variable is only defined if some
>> configure option is given or some lib is available.  But none of the
>> latter applies to font-lock.el.
>
> Yes, I have tested now, it works fine. I did even som minor
> refactoring.
>
> Don't know if anyone else cares at all,

I don't know either. :-)

> anyway here is updated patch.

--8<---------------cut here---------------start------------->8---
+(defun help--insert-source ()
+  "Fnd and insert source for the current symbol into the help-mode
+buffer."
--8<---------------cut here---------------end--------------->8---

Nitpick: There's an "i" missing in "F[i]nd" and checkdoc wants the first
sentence on the first line.

Aside from that, I think it would be useful if one could jump from the
shown inlined code into the source file, too.  Then one doesn't have to
navigate back to the filename.{c,el} link.  Maybe it could even jump to
the line corresponding to the location of point in the inlined code?  At
least the lines offset is easy to calculate.

Bye,
Tassilo



^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: Path & Demo: Source View in Help Buffers
  2021-09-22 14:08         ` Tassilo Horn
@ 2021-09-22 16:50           ` Arthur Miller
  0 siblings, 0 replies; 8+ messages in thread
From: Arthur Miller @ 2021-09-22 16:50 UTC (permalink / raw)
  To: Tassilo Horn; +Cc: emacs-devel

Tassilo Horn <tsdh@gnu.org> writes:

> Arthur Miller <arthur.miller@live.com> writes:
>
>>> I think that's a common check for 3rd-party packages which want to keep
>>> supporting emacs 24.  But since you are hacking emacs core, there's no
>>> need for that unless the function/variable is only defined if some
>>> configure option is given or some lib is available.  But none of the
>>> latter applies to font-lock.el.
>>
>> Yes, I have tested now, it works fine. I did even som minor
>> refactoring.
>>
>> Don't know if anyone else cares at all,
>
> I don't know either. :-)
>
>> anyway here is updated patch.
>
> +(defun help--insert-source ()
> +  "Fnd and insert source for the current symbol into the help-mode
> +buffer."
>
> Nitpick: There's an "i" missing in "F[i]nd" and checkdoc wants the first
> sentence on the first line.
:-) Haha, thanks. Yes, I didn't notice it spilled over to next line. Will try to
reword it. It is just internal function, and function name should be enough
self-documenting for most people.

> Aside from that, I think it would be useful if one could jump from the
> shown inlined code into the source file, too.  Then one doesn't have to
> navigate back to the filename.{c,el} link.  Maybe it could even jump to
> the line corresponding to the location of point in the inlined code?  At
> least the lines offset is easy to calculate.

I know; I was thinking of that one, but it will have to be at some other time if
at all. It is not difficult to do at all, but I don't want to spend more time on
the patch if it's not interesting to include it.



^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2021-09-22 16:50 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2021-09-22  8:59 Path & Demo: Source View in Help Buffers Arthur Miller
2021-09-22 10:55 ` Tassilo Horn
2021-09-22 11:06   ` Arthur Miller
2021-09-22 11:32     ` Tassilo Horn
2021-09-22 12:01       ` Arthur Miller
2021-09-22 13:42       ` Arthur Miller
2021-09-22 14:08         ` Tassilo Horn
2021-09-22 16:50           ` Arthur Miller

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).