* Patch proposal: display symbol source code in help buffers @ 2021-09-19 19:50 Arthur Miller 2021-09-20 5:46 ` Lars Ingebrigtsen 2021-09-20 5:59 ` Eli Zaretskii 0 siblings, 2 replies; 58+ messages in thread From: Arthur Miller @ 2021-09-19 19:50 UTC (permalink / raw) To: emacs-devel [-- Attachment #1: Type: text/plain, Size: 1719 bytes --] Here is my second proposal to bring built-in help on par with external offerings. This one is little bit more than just three lines as the previous one was, so I would really appreciate if I could get some thorough review and testing. It works fine for me, but Emacs source code is big; so there is always possibility that something is not displaying correctly. I had thoughts of writing automated test, a scraper sort of like autloads collects help to collect docs from files and than call new help routines and compare results, but that would be far more involved than actually hacking help-mode :). What I am worried about is how does it work with compressed sources? How do I test it and what would I need to do to get it to work? Do I need to manually decompress tar-ed sources or is it already taken care? I believe, and I hope, that it is, but I am really not at home with how that part of Emacs work. I appreciate advice and help there, also if someone can test. Another thing: can I assume that all DEFVAR_LISP statements in .c files end with a ');$'? I am using this in a regexp to fetch the entire source for those defvars. I have tried to be as least intrusive as I could, so everything is in help-mode. There is also a defcustom defaulting to nil to enable/disable this, and I think it should always stay at nil since this can be cpu intensive. I think it actually works quite well, I see no hickups, but I do run Emacs from surce directory, and I use it as 'source-directory'. By the way, this patch expects sources to be found in what this variable shows. If this would be acceptable, I can write some NEWS and manual, unless someone more english language savvy would like to help with that one. [-- 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: 5749 bytes --] From 58eac63f759146cf7a601e1ae974dd373c837957 Mon Sep 17 00:00:00 2001 From: Arthur Miller <arthur.miller@live.com> Date: Sun, 19 Sep 2021 21:28:01 +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--symbol-source'): New function. ('help-make-xrefs): Check for 'help-mode-inline-source' and call 'help--symbol-source' to perform insertion when possible. --- lisp/help-mode.el | 110 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 110 insertions(+) diff --git a/lisp/help-mode.el b/lisp/help-mode.el index 551cf7e1a3..935c54a6eb 100644 --- a/lisp/help-mode.el +++ b/lisp/help-mode.el @@ -149,6 +149,15 @@ help-mode-hook "Hook run by `help-mode'." :type 'hook :group 'help) + +(defcustom help-mode-inline-source nil + "Display inlined source code for SYMBOL in `help-mode' buffer. + +When enabled the source code of a symbol 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 @@ -503,6 +512,91 @@ 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 (sym type file) + "Find C source code for a Lisp symbol in a `file'. + +sym is the symbol to find. +type is the type as obtained by 'describe-*' functions. +file is the source file to search in." + (let (src pos) + (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 sym (find-function-advised-original + (indirect-function + (find-function-advised-original sym))))) + (when (re-search-forward + (if type + (concat "DEFVAR[A-Z_]*[ \t\n]*([ \t\n]*\"" + (regexp-quote (symbol-name sym)) + "\"") + (concat "DEFUN[ \t\n]*([ \t\n]*\"" + (regexp-quote (subr-name (advice--cd*r sym))) + "\"")) + nil t) + (if type ;; defvar here + (progn + (goto-char (line-beginning-position)) + (skip-chars-forward "[:blank:]") + (setq pos (point)) + (re-search-forward ");$" nil t) + (narrow-to-region pos (point))) + (narrow-to-defun)) + (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 (sym type file) + "Find emacs-lisp source code for a Lisp symbol in a `file'. + +sym is the symbol to find. +type is the type as obtained by 'describe-*' functions. +file is the source file to search in." + (let (src pos sxp) + (when file + (setq file (or file (find-lisp-object-file-name sym type)))) + (with-temp-buffer + (insert-file-contents file) + (delay-mode-hooks (funcall 'emacs-lisp-mode)) + (require 'find-func) + (setq pos (cdr (find-function-search-for-symbol sym type file))) + (when pos + (goto-char pos) + (forward-sexp) + (setq sxp (buffer-substring-no-properties pos (point))) + (when sxp + (erase-buffer) + (insert sxp) + (if (fboundp 'font-lock-ensure) + (font-lock-ensure) + (with-no-warnings (font-lock-fontify-buffer))) + (setq src (buffer-string))))) + src)) + +(defun help--symbol-source () + "Fnd and return string to be inserted in help-mode buffer for the +source code of the symbol. + +Used internally for `help-make-refs'." + (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) + (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))) + (if src src "Source code not available."))) + ;;;###autoload (defun help-make-xrefs (&optional buffer) "Parse and hyperlink documentation cross-references in the given BUFFER. @@ -651,6 +745,22 @@ help-make-xrefs (while (and (not (bobp)) (bolp)) (delete-char -1)) (insert "\n") + ;; get source string if needed and available + (when help-mode-inline-source + (insert "\nSource Code: \n") + ;; 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)))))))) + (insert (help--symbol-source)) + (insert "\n")) (when (or help-xref-stack help-xref-forward-stack) (insert "\n")) ;; Make a back-reference in this buffer if appropriate. -- 2.33.0 ^ permalink raw reply related [flat|nested] 58+ messages in thread
* Re: Patch proposal: display symbol source code in help buffers 2021-09-19 19:50 Patch proposal: display symbol source code in help buffers Arthur Miller @ 2021-09-20 5:46 ` Lars Ingebrigtsen 2021-09-20 6:09 ` Stefan Kangas 2021-09-20 15:23 ` Arthur Miller 2021-09-20 5:59 ` Eli Zaretskii 1 sibling, 2 replies; 58+ messages in thread From: Lars Ingebrigtsen @ 2021-09-20 5:46 UTC (permalink / raw) To: Arthur Miller; +Cc: emacs-devel Arthur Miller <arthur.miller@live.com> writes: > Here is my second proposal to bring built-in help on par with external > offerings. I haven't tried the patch, but this is for showing the source code of the function/variable in question in the *Help* buffer? I'm not quite sure I understand the utility of that -- if you want to look at the source, you can just hit the `s' key. And then you get all the proper language-related Emacs stuff in that buffer -- looking at sources is usually nicer in the correct major mode than in other buffers. So I don't understand who'd want this. -- (domestic pets only, the antidote for overdose, milk.) bloggy blog: http://lars.ingebrigtsen.no ^ permalink raw reply [flat|nested] 58+ messages in thread
* Re: Patch proposal: display symbol source code in help buffers 2021-09-20 5:46 ` Lars Ingebrigtsen @ 2021-09-20 6:09 ` Stefan Kangas 2021-09-20 6:14 ` Lars Ingebrigtsen ` (2 more replies) 2021-09-20 15:23 ` Arthur Miller 1 sibling, 3 replies; 58+ messages in thread From: Stefan Kangas @ 2021-09-20 6:09 UTC (permalink / raw) To: Lars Ingebrigtsen, Arthur Miller; +Cc: emacs-devel Lars Ingebrigtsen <larsi@gnus.org> writes: > I haven't tried the patch, but this is for showing the source code of > the function/variable in question in the *Help* buffer? I'm not quite > sure I understand the utility of that -- if you want to look at the > source, you can just hit the `s' key. And then you get all the proper > language-related Emacs stuff in that buffer -- looking at sources is > usually nicer in the correct major mode than in other buffers. > > So I don't understand who'd want this. I believe this is a feature in helpful.el: https://github.com/Wilfred/helpful/blob/master/screenshots/helpful_source.png FWIW, I personally also ask myself why/how this is useful. Is it because some users don't know that you can get to the source code? That said, I don't see any reason not to have this as an optional feature, if some users find that it works well for them. ^ permalink raw reply [flat|nested] 58+ messages in thread
* Re: Patch proposal: display symbol source code in help buffers 2021-09-20 6:09 ` Stefan Kangas @ 2021-09-20 6:14 ` Lars Ingebrigtsen 2021-09-20 7:17 ` Ihor Radchenko 2021-09-20 6:47 ` Eli Zaretskii 2021-09-20 14:55 ` Arthur Miller 2 siblings, 1 reply; 58+ messages in thread From: Lars Ingebrigtsen @ 2021-09-20 6:14 UTC (permalink / raw) To: Stefan Kangas; +Cc: Arthur Miller, emacs-devel Stefan Kangas <stefankangas@gmail.com> writes: > FWIW, I personally also ask myself why/how this is useful. Is it > because some users don't know that you can get to the source code? > > That said, I don't see any reason not to have this as an optional > feature, if some users find that it works well for them. The user would have to know about the user option to turn it on... On the other hand, as we've discussed in the "profile" issue, we might have a profile that switches all stuff like this on, which makes the issue of discovery moot. I'm not against the feature per se, but I'm just puzzled that somebody would want this feature. :-) -- (domestic pets only, the antidote for overdose, milk.) bloggy blog: http://lars.ingebrigtsen.no ^ permalink raw reply [flat|nested] 58+ messages in thread
* Re: Patch proposal: display symbol source code in help buffers 2021-09-20 6:14 ` Lars Ingebrigtsen @ 2021-09-20 7:17 ` Ihor Radchenko 2021-09-20 7:43 ` Stefan Kangas 2021-09-20 15:27 ` Arthur Miller 0 siblings, 2 replies; 58+ messages in thread From: Ihor Radchenko @ 2021-09-20 7:17 UTC (permalink / raw) To: Lars Ingebrigtsen; +Cc: Stefan Kangas, Arthur Miller, emacs-devel Lars Ingebrigtsen <larsi@gnus.org> writes: > I'm not against the feature per se, but I'm just puzzled that somebody > would want this feature. :-) Consider scenario when you are editing some-file.el and narrowed the buffer to a defun A. Then, you need to examine source code of another function B also defined in some-file.el. Opening help buffer for B is easy - <F1> f <RET> with point at the B's call. However, without source code being shown in the help buffer, if I try to hit s, the narrowing is removed and the point is moved to a function definition. Not convenient. Of course, one can create indirect buffer for some-file.el, widen, and jump to B's definition. However, I personally find help buffer with source code more comfortable. Best, Ihor ^ permalink raw reply [flat|nested] 58+ messages in thread
* Re: Patch proposal: display symbol source code in help buffers 2021-09-20 7:17 ` Ihor Radchenko @ 2021-09-20 7:43 ` Stefan Kangas 2021-09-20 8:29 ` martin rudalics ` (2 more replies) 2021-09-20 15:27 ` Arthur Miller 1 sibling, 3 replies; 58+ messages in thread From: Stefan Kangas @ 2021-09-20 7:43 UTC (permalink / raw) To: Ihor Radchenko, Lars Ingebrigtsen; +Cc: Arthur Miller, emacs-devel Ihor Radchenko <yantar92@gmail.com> writes: > Consider scenario when you are editing some-file.el and narrowed the > buffer to a defun A. Then, you need to examine source code of another > function B also defined in some-file.el. > > Opening help buffer for B is easy - <F1> f <RET> with point at the B's > call. However, without source code being shown in the help buffer, if I > try to hit s, the narrowing is removed and the point is moved to a > function definition. Not convenient. I'm not arguing against the new feature here, but is the above a bug? It seems to me that `help-view-source' should respect the users narrowing, for example by querying to open a new indirect buffer or something in that case. ^ permalink raw reply [flat|nested] 58+ messages in thread
* Re: Patch proposal: display symbol source code in help buffers 2021-09-20 7:43 ` Stefan Kangas @ 2021-09-20 8:29 ` martin rudalics 2021-09-20 9:04 ` Ihor Radchenko 2021-09-20 15:01 ` Arthur Miller 2 siblings, 0 replies; 58+ messages in thread From: martin rudalics @ 2021-09-20 8:29 UTC (permalink / raw) To: Stefan Kangas, Ihor Radchenko, Lars Ingebrigtsen Cc: Arthur Miller, emacs-devel > It seems to me that `help-view-source' should respect the users > narrowing, for example by querying to open a new indirect buffer or > something in that case. We now have 'widen-automatically' for that. martin ^ permalink raw reply [flat|nested] 58+ messages in thread
* Re: Patch proposal: display symbol source code in help buffers 2021-09-20 7:43 ` Stefan Kangas 2021-09-20 8:29 ` martin rudalics @ 2021-09-20 9:04 ` Ihor Radchenko 2021-09-20 23:45 ` Arthur Miller 2021-09-21 4:16 ` Lars Ingebrigtsen 2021-09-20 15:01 ` Arthur Miller 2 siblings, 2 replies; 58+ messages in thread From: Ihor Radchenko @ 2021-09-20 9:04 UTC (permalink / raw) To: Stefan Kangas; +Cc: Lars Ingebrigtsen, Arthur Miller, emacs-devel Stefan Kangas <stefankangas@gmail.com> writes: >> Opening help buffer for B is easy - <F1> f <RET> with point at the B's >> call. However, without source code being shown in the help buffer, if I >> try to hit s, the narrowing is removed and the point is moved to a >> function definition. Not convenient. > > I'm not arguing against the new feature here, but is the above a bug? My comment was to resolve your puzzled state about usefulness of the new feature ;) > It seems to me that `help-view-source' should respect the users > narrowing, for example by querying to open a new indirect buffer or > something in that case. That would make sense. Yet, even without narrowing, I personally do not like that the point moves from the defun I am working on to other function definition. Also, a subtle difference between showing the source code in help buffer and jumping to the defun is how much text is shown. In the help buffer, source code is effectively "narrowed" to defun - no surrounding code is shown. Best, Ihor ^ permalink raw reply [flat|nested] 58+ messages in thread
* Re: Patch proposal: display symbol source code in help buffers 2021-09-20 9:04 ` Ihor Radchenko @ 2021-09-20 23:45 ` Arthur Miller 2021-09-21 4:16 ` Lars Ingebrigtsen 1 sibling, 0 replies; 58+ messages in thread From: Arthur Miller @ 2021-09-20 23:45 UTC (permalink / raw) To: Ihor Radchenko; +Cc: Lars Ingebrigtsen, Stefan Kangas, emacs-devel Ihor Radchenko <yantar92@gmail.com> writes: > Stefan Kangas <stefankangas@gmail.com> writes: > >>> Opening help buffer for B is easy - <F1> f <RET> with point at the B's >>> call. However, without source code being shown in the help buffer, if I >>> try to hit s, the narrowing is removed and the point is moved to a >>> function definition. Not convenient. >> >> I'm not arguing against the new feature here, but is the above a bug? > > My comment was to resolve your puzzled state about usefulness of the new > feature ;) Yes. Thank you very much :). I realized that later. It seems like I was reading thread upside-down. Just me being goofy after nights of baby feeding and 3 hours cycle living. >> It seems to me that `help-view-source' should respect the users >> narrowing, for example by querying to open a new indirect buffer or >> something in that case. > > That would make sense. Yet, even without narrowing, I personally do not > like that the point moves from the defun I am working on to other > function definition. > > Also, a subtle difference between showing the source code in help buffer > and jumping to the defun is how much text is shown. In the help buffer, > source code is effectively "narrowed" to defun - no surrounding code is > shown. > > Best, > Ihor ^ permalink raw reply [flat|nested] 58+ messages in thread
* Re: Patch proposal: display symbol source code in help buffers 2021-09-20 9:04 ` Ihor Radchenko 2021-09-20 23:45 ` Arthur Miller @ 2021-09-21 4:16 ` Lars Ingebrigtsen 2021-09-21 6:59 ` Ihor Radchenko 2021-09-21 8:34 ` martin rudalics 1 sibling, 2 replies; 58+ messages in thread From: Lars Ingebrigtsen @ 2021-09-21 4:16 UTC (permalink / raw) To: Ihor Radchenko; +Cc: Stefan Kangas, Arthur Miller, emacs-devel Ihor Radchenko <yantar92@gmail.com> writes: > That would make sense. Yet, even without narrowing, I personally do not > like that the point moves from the defun I am working on to other > function definition. Yes, that is pretty annoying. Perhaps `help-function-def--button-function' should push-mark before going to the position? Then `C-x C-x' would bring you back to where you were... -- (domestic pets only, the antidote for overdose, milk.) bloggy blog: http://lars.ingebrigtsen.no ^ permalink raw reply [flat|nested] 58+ messages in thread
* Re: Patch proposal: display symbol source code in help buffers 2021-09-21 4:16 ` Lars Ingebrigtsen @ 2021-09-21 6:59 ` Ihor Radchenko 2021-09-21 7:41 ` Stefan Kangas 2021-09-21 8:34 ` martin rudalics 1 sibling, 1 reply; 58+ messages in thread From: Ihor Radchenko @ 2021-09-21 6:59 UTC (permalink / raw) To: Lars Ingebrigtsen; +Cc: Stefan Kangas, Arthur Miller, emacs-devel [-- Attachment #1: Type: text/plain, Size: 582 bytes --] Lars Ingebrigtsen <larsi@gnus.org> writes: > Ihor Radchenko <yantar92@gmail.com> writes: > >> That would make sense. Yet, even without narrowing, I personally do not >> like that the point moves from the defun I am working on to other >> function definition. > > Yes, that is pretty annoying. Perhaps > `help-function-def--button-function' should push-mark before going to > the position? Then `C-x C-x' would bring you back to where you were... I like this idea. Maybe we can simply change the default value of find-function-after-hook like in the attached patch? Best, Ihor [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #2: 0001-Save-position-in-mark-ring-before-jumping-to-definit.patch --] [-- Type: text/x-diff, Size: 1605 bytes --] From 31f841b1e3921f7b2039656ed8f409b3b715741f Mon Sep 17 00:00:00 2001 Message-Id: <31f841b1e3921f7b2039656ed8f409b3b715741f.1632207397.git.yantar92@gmail.com> From: Ihor Radchenko <yantar92@gmail.com> Date: Tue, 21 Sep 2021 14:50:52 +0800 Subject: [PATCH] Save position in mark ring before jumping to definition * lisp/emacs-lisp/find-func.el (find-function-after-hook): `push-mark' is added to default value of the hook. Following up: https://lists.gnu.org/archive/html/emacs-devel/2021-09/msg01561.html --- etc/NEWS | 3 +++ lisp/emacs-lisp/find-func.el | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/etc/NEWS b/etc/NEWS index 2bdcb6434b..2132e8babc 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -648,7 +648,10 @@ clicking the "X" icon in the tool bar. --- *** 'g' ('revert-buffer') in 'help-mode' no longer requires confirmation. +*** Jumping to function/variable source now saves mark before moving point +Jumping to source from "*Help*" buffer moves the point when the source buffer is already open. Now, the old point is pushed to mark ring. +--- ** File Locks +++ diff --git a/lisp/emacs-lisp/find-func.el b/lisp/emacs-lisp/find-func.el index 303039d653..b984fb3870 100644 --- a/lisp/emacs-lisp/find-func.el +++ b/lisp/emacs-lisp/find-func.el @@ -165,7 +165,7 @@ find-function-recenter-line :group 'find-function :version "20.3") -(defcustom find-function-after-hook nil +(defcustom find-function-after-hook '(push-mark) "Hook run after finding symbol definition. See the functions `find-function' and `find-variable'." -- 2.32.0 ^ permalink raw reply related [flat|nested] 58+ messages in thread
* Re: Patch proposal: display symbol source code in help buffers 2021-09-21 6:59 ` Ihor Radchenko @ 2021-09-21 7:41 ` Stefan Kangas 2021-09-21 8:38 ` Eli Zaretskii 0 siblings, 1 reply; 58+ messages in thread From: Stefan Kangas @ 2021-09-21 7:41 UTC (permalink / raw) To: Ihor Radchenko, Lars Ingebrigtsen; +Cc: Arthur Miller, emacs-devel Ihor Radchenko <yantar92@gmail.com> writes: > I like this idea. Maybe we can simply change the default value of > find-function-after-hook like in the attached patch? We generally prefer not to add hooks like this if we can avoid it. We can usually just change the code instead. For example, in this case maybe we could just call `push-mark' at the end of `help-function-def--button-function'. ^ permalink raw reply [flat|nested] 58+ messages in thread
* Re: Patch proposal: display symbol source code in help buffers 2021-09-21 7:41 ` Stefan Kangas @ 2021-09-21 8:38 ` Eli Zaretskii 2021-09-21 9:17 ` Ihor Radchenko 0 siblings, 1 reply; 58+ messages in thread From: Eli Zaretskii @ 2021-09-21 8:38 UTC (permalink / raw) To: Stefan Kangas; +Cc: larsi, yantar92, arthur.miller, emacs-devel > From: Stefan Kangas <stefankangas@gmail.com> > Date: Tue, 21 Sep 2021 00:41:22 -0700 > Cc: Arthur Miller <arthur.miller@live.com>, emacs-devel@gnu.org > > Ihor Radchenko <yantar92@gmail.com> writes: > > > I like this idea. Maybe we can simply change the default value of > > find-function-after-hook like in the attached patch? > > We generally prefer not to add hooks like this if we can avoid it. We > can usually just change the code instead. > > For example, in this case maybe we could just call `push-mark' at the > end of `help-function-def--button-function'. Indeed, especially since the proposed change to find-func.el would affect all users of that package. ^ permalink raw reply [flat|nested] 58+ messages in thread
* Re: Patch proposal: display symbol source code in help buffers 2021-09-21 8:38 ` Eli Zaretskii @ 2021-09-21 9:17 ` Ihor Radchenko 2021-09-21 16:49 ` Lars Ingebrigtsen 0 siblings, 1 reply; 58+ messages in thread From: Ihor Radchenko @ 2021-09-21 9:17 UTC (permalink / raw) To: Eli Zaretskii; +Cc: larsi, Stefan Kangas, arthur.miller, emacs-devel [-- Attachment #1: Type: text/plain, Size: 682 bytes --] Eli Zaretskii <eliz@gnu.org> writes: >> Ihor Radchenko <yantar92@gmail.com> writes: >> >> > I like this idea. Maybe we can simply change the default value of >> > find-function-after-hook like in the attached patch? >> >> We generally prefer not to add hooks like this if we can avoid it. We >> can usually just change the code instead. >> >> For example, in this case maybe we could just call `push-mark' at the >> end of `help-function-def--button-function'. > > Indeed, especially since the proposed change to find-func.el would > affect all users of that package. Agree. I updated the patch and also added support for widen-automatically variable. See below. Best, Ihor [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #2: 0001-Save-position-in-mark-ring-before-jumping-to-definit.patch --] [-- Type: text/x-diff, Size: 1555 bytes --] From e94ae3711796679e330637921b980f970b9d7025 Mon Sep 17 00:00:00 2001 Message-Id: <e94ae3711796679e330637921b980f970b9d7025.1632215537.git.yantar92@gmail.com> From: Ihor Radchenko <yantar92@gmail.com> Date: Tue, 21 Sep 2021 17:00:50 +0800 Subject: [PATCH 1/2] Save position in mark ring before jumping to definition * lisp/help-mode.el (help-function-def--button-function): Current point is saved in the mark ring before jumping to definition. Following up: https://lists.gnu.org/archive/html/emacs-devel/2021-09/msg01561.html --- etc/NEWS | 3 +++ lisp/help-mode.el | 1 + 2 files changed, 4 insertions(+) diff --git a/etc/NEWS b/etc/NEWS index 2bdcb6434b..2132e8babc 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -648,7 +648,10 @@ clicking the "X" icon in the tool bar. --- *** 'g' ('revert-buffer') in 'help-mode' no longer requires confirmation. +*** Jumping to function/variable source now saves mark before moving point +Jumping to source from "*Help*" buffer moves the point when the source buffer is already open. Now, the old point is pushed to mark ring. +--- ** File Locks +++ diff --git a/lisp/help-mode.el b/lisp/help-mode.el index 551cf7e1a3..57655db337 100644 --- a/lisp/help-mode.el +++ b/lisp/help-mode.el @@ -268,6 +268,7 @@ help-function-def--button-function (when (or (< position (point-min)) (> position (point-max))) (widen)) + (push-mark nil t) (goto-char position)) (message "Unable to find location in file"))))) -- 2.32.0 [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #3: 0002-Honor-widen-automatically-in-help-function-def-butto.patch --] [-- Type: text/x-diff, Size: 1573 bytes --] From 109bd7192b5b672508b9fa1d53c10a5a8aec3846 Mon Sep 17 00:00:00 2001 Message-Id: <109bd7192b5b672508b9fa1d53c10a5a8aec3846.1632215537.git.yantar92@gmail.com> In-Reply-To: <e94ae3711796679e330637921b980f970b9d7025.1632215537.git.yantar92@gmail.com> References: <e94ae3711796679e330637921b980f970b9d7025.1632215537.git.yantar92@gmail.com> From: Ihor Radchenko <yantar92@gmail.com> Date: Tue, 21 Sep 2021 17:10:10 +0800 Subject: [PATCH 2/2] Honor widen-automatically in help-function-def--button-function * lisp/help-mode.el (help-function-def--button-function): Ask user to widen the buffer when `widen-automatically' is set to nil. --- lisp/help-mode.el | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/lisp/help-mode.el b/lisp/help-mode.el index 57655db337..5d566ca083 100644 --- a/lisp/help-mode.el +++ b/lisp/help-mode.el @@ -263,11 +263,14 @@ help-function-def--button-function (pop-to-buffer (car location)) (run-hooks 'find-function-after-hook) (if position - (progn + (catch :exit ;; Widen the buffer if necessary to go to this position. (when (or (< position (point-min)) (> position (point-max))) - (widen)) + (if (or widen-automatically + (yes-or-no-p "The location is outside narrowing. Widen? ")) + (widen) + (throw :exit nil))) (push-mark nil t) (goto-char position)) (message "Unable to find location in file"))))) -- 2.32.0 ^ permalink raw reply related [flat|nested] 58+ messages in thread
* Re: Patch proposal: display symbol source code in help buffers 2021-09-21 9:17 ` Ihor Radchenko @ 2021-09-21 16:49 ` Lars Ingebrigtsen 2021-10-01 7:05 ` Ihor Radchenko 0 siblings, 1 reply; 58+ messages in thread From: Lars Ingebrigtsen @ 2021-09-21 16:49 UTC (permalink / raw) To: Ihor Radchenko; +Cc: Eli Zaretskii, Stefan Kangas, arthur.miller, emacs-devel Ihor Radchenko <yantar92@gmail.com> writes: > Agree. I updated the patch and also added support for > widen-automatically variable. See below. [...] > diff --git a/lisp/help-mode.el b/lisp/help-mode.el > index 551cf7e1a3..57655db337 100644 > --- a/lisp/help-mode.el > +++ b/lisp/help-mode.el > @@ -268,6 +268,7 @@ help-function-def--button-function > (when (or (< position (point-min)) > (> position (point-max))) > (widen)) > + (push-mark nil t) I was thinking something slightly more subtle. That is, if we've just opened the file (i.e., it has not been displayed before), we should not push the mark. And if point didn't move, we shouldn't push the mark either, I think. -- (domestic pets only, the antidote for overdose, milk.) bloggy blog: http://lars.ingebrigtsen.no ^ permalink raw reply [flat|nested] 58+ messages in thread
* Re: Patch proposal: display symbol source code in help buffers 2021-09-21 16:49 ` Lars Ingebrigtsen @ 2021-10-01 7:05 ` Ihor Radchenko 2021-10-01 7:09 ` Lars Ingebrigtsen 2021-10-01 7:24 ` Eli Zaretskii 0 siblings, 2 replies; 58+ messages in thread From: Ihor Radchenko @ 2021-10-01 7:05 UTC (permalink / raw) To: Lars Ingebrigtsen Cc: Eli Zaretskii, Stefan Kangas, arthur.miller, emacs-devel [-- Attachment #1: Type: text/plain, Size: 1062 bytes --] Lars Ingebrigtsen <larsi@gnus.org> writes: > I was thinking something slightly more subtle. That is, if we've just > opened the file (i.e., it has not been displayed before), we should not > push the mark. And if point didn't move, we shouldn't push the mark > either, I think. I agree that there is not much reason to push mark when point does not move. I slightly disagree about the case of opening new file. I personally find it useful when the first element added to mark ring is BOB. When cycling across mark ring, BOB is a nice visual indication that I already looked across the whole ring, especially if I am searching for mark that is actually not in the mark ring (though I thought otherwise). On the other hand, it is rather a matter of personal preference. Not pushing BOB to mark ring might be a better default. Even if it not, we would probably need to change other places across the code to add BOB consistently. That's a whole other discussion. See the updated patch. Hopefully I got the news entry for Emacs 29.1 right. Best, Ihor [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #2: 0001-Save-position-in-mark-ring-before-jumping-to-definit.patch --] [-- Type: text/x-diff, Size: 1763 bytes --] From e8d71f7e9fe111965f81b8627f27530d2ce80048 Mon Sep 17 00:00:00 2001 Message-Id: <e8d71f7e9fe111965f81b8627f27530d2ce80048.1633071433.git.yantar92@gmail.com> From: Ihor Radchenko <yantar92@gmail.com> Date: Fri, 1 Oct 2021 14:56:43 +0800 Subject: [PATCH] Save position in mark ring before jumping to definition * lisp/help-mode.el (help-function-def--button-function): Current point is saved in the mark ring before jumping to definition. Following up: https://lists.gnu.org/archive/html/emacs-devel/2021-09/msg01561.html --- etc/NEWS | 3 +++ lisp/help-mode.el | 5 +++++ 2 files changed, 8 insertions(+) diff --git a/etc/NEWS b/etc/NEWS index d0e41baaeb..1dfcc1ae09 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -29,6 +29,9 @@ applies, and please also update docstrings as needed. \f * Changes in Emacs 29.1 +** Help +*** Jumping to function/variable source now saves mark before moving point +Jumping to source from "*Help*" buffer moves the point when the source buffer is already open. Now, the old point is pushed to mark ring. \f * Editing Changes in Emacs 29.1 diff --git a/lisp/help-mode.el b/lisp/help-mode.el index 0b404fe89f..0dc4229006 100644 --- a/lisp/help-mode.el +++ b/lisp/help-mode.el @@ -273,6 +273,11 @@ help-function-def--button-function (when (or (< position (point-min)) (> position (point-max))) (widen)) + ;; Save mark for the old location, unless we just opened + ;; the buffer or the point is not actually going to move. + (unless (or (= 1 (point)) + (= (point) position)) + (push-mark nil t)) (goto-char position)) (message "Unable to find location in file"))))) -- 2.32.0 ^ permalink raw reply related [flat|nested] 58+ messages in thread
* Re: Patch proposal: display symbol source code in help buffers 2021-10-01 7:05 ` Ihor Radchenko @ 2021-10-01 7:09 ` Lars Ingebrigtsen 2021-10-01 7:21 ` Ihor Radchenko 2021-10-01 7:24 ` Eli Zaretskii 1 sibling, 1 reply; 58+ messages in thread From: Lars Ingebrigtsen @ 2021-10-01 7:09 UTC (permalink / raw) To: Ihor Radchenko; +Cc: Eli Zaretskii, Stefan Kangas, arthur.miller, emacs-devel Ihor Radchenko <yantar92@gmail.com> writes: > I slightly disagree about the case of opening new file. I personally > find it useful when the first element added to mark ring is BOB. When > cycling across mark ring, BOB is a nice visual indication that I already > looked across the whole ring, especially if I am searching for mark that > is actually not in the mark ring (though I thought otherwise). Yes, perhaps it'd be more consistent (and easier to reason about) if we pushed the mark even if we newly opened the file. (And since there wouldn't be any marks in the buffer anyway, this shouldn't get in the way of anybody's work flow, I think.) So I've pushed your patch with that change. -- (domestic pets only, the antidote for overdose, milk.) bloggy blog: http://lars.ingebrigtsen.no ^ permalink raw reply [flat|nested] 58+ messages in thread
* Re: Patch proposal: display symbol source code in help buffers 2021-10-01 7:09 ` Lars Ingebrigtsen @ 2021-10-01 7:21 ` Ihor Radchenko 2021-10-01 7:21 ` Lars Ingebrigtsen 0 siblings, 1 reply; 58+ messages in thread From: Ihor Radchenko @ 2021-10-01 7:21 UTC (permalink / raw) To: Lars Ingebrigtsen Cc: Eli Zaretskii, Stefan Kangas, arthur.miller, emacs-devel Lars Ingebrigtsen <larsi@gnus.org> writes: > So I've pushed your patch with that change. Thanks! What about the other patch (Honor widen-automatically in help-function-def--button-function)? Best, Ihor ^ permalink raw reply [flat|nested] 58+ messages in thread
* Re: Patch proposal: display symbol source code in help buffers 2021-10-01 7:21 ` Ihor Radchenko @ 2021-10-01 7:21 ` Lars Ingebrigtsen 2021-10-01 9:04 ` Ihor Radchenko 0 siblings, 1 reply; 58+ messages in thread From: Lars Ingebrigtsen @ 2021-10-01 7:21 UTC (permalink / raw) To: Ihor Radchenko; +Cc: Eli Zaretskii, Stefan Kangas, arthur.miller, emacs-devel Ihor Radchenko <yantar92@gmail.com> writes: > What about the other patch (Honor widen-automatically in > help-function-def--button-function)? Could you re-post that patch? :-) -- (domestic pets only, the antidote for overdose, milk.) bloggy blog: http://lars.ingebrigtsen.no ^ permalink raw reply [flat|nested] 58+ messages in thread
* Re: Patch proposal: display symbol source code in help buffers 2021-10-01 7:21 ` Lars Ingebrigtsen @ 2021-10-01 9:04 ` Ihor Radchenko 2021-10-01 12:20 ` Lars Ingebrigtsen 0 siblings, 1 reply; 58+ messages in thread From: Ihor Radchenko @ 2021-10-01 9:04 UTC (permalink / raw) To: Lars Ingebrigtsen Cc: Eli Zaretskii, Stefan Kangas, arthur.miller, emacs-devel [-- Attachment #1: Type: text/plain, Size: 242 bytes --] Lars Ingebrigtsen <larsi@gnus.org> writes: > Ihor Radchenko <yantar92@gmail.com> writes: > >> What about the other patch (Honor widen-automatically in >> help-function-def--button-function)? > > Could you re-post that patch? :-) Attached [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #2: 0001-Honor-widen-automatically-in-help-function-def-butto.patch --] [-- Type: text/x-diff, Size: 1420 bytes --] From 635b8cab71d9f296bdef68dafd1d124213b777c2 Mon Sep 17 00:00:00 2001 Message-Id: <635b8cab71d9f296bdef68dafd1d124213b777c2.1633078979.git.yantar92@gmail.com> From: Ihor Radchenko <yantar92@gmail.com> Date: Fri, 1 Oct 2021 17:02:06 +0800 Subject: [PATCH] Honor widen-automatically in help-function-def--button-function * lisp/help-mode.el (help-function-def--button-function): Ask user to widen the buffer when `widen-automatically' is set to nil. --- lisp/help-mode.el | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/lisp/help-mode.el b/lisp/help-mode.el index d61b1bdc62..2132a143c7 100644 --- a/lisp/help-mode.el +++ b/lisp/help-mode.el @@ -268,11 +268,14 @@ help-function-def--button-function (pop-to-buffer (car location)) (run-hooks 'find-function-after-hook) (if position - (progn + (catch :exit ;; Widen the buffer if necessary to go to this position. (when (or (< position (point-min)) (> position (point-max))) - (widen)) + (if (or widen-automatically + (yes-or-no-p "The location is outside narrowing. Widen? ")) + (widen) + (throw :exit nil))) ;; Save mark for the old location, unless the point is not ;; actually going to move. (unless (= (point) position) -- 2.32.0 ^ permalink raw reply related [flat|nested] 58+ messages in thread
* Re: Patch proposal: display symbol source code in help buffers 2021-10-01 9:04 ` Ihor Radchenko @ 2021-10-01 12:20 ` Lars Ingebrigtsen 0 siblings, 0 replies; 58+ messages in thread From: Lars Ingebrigtsen @ 2021-10-01 12:20 UTC (permalink / raw) To: Ihor Radchenko; +Cc: Eli Zaretskii, Stefan Kangas, arthur.miller, emacs-devel Ihor Radchenko <yantar92@gmail.com> writes: > * lisp/help-mode.el (help-function-def--button-function): Ask user to > widen the buffer when `widen-automatically' is set to nil. I think that makes sense -- that user option was introduced to handle stuff like this. Does anybody object to making help-function-def--button-function heed it instead of always widening? -- (domestic pets only, the antidote for overdose, milk.) bloggy blog: http://lars.ingebrigtsen.no ^ permalink raw reply [flat|nested] 58+ messages in thread
* Re: Patch proposal: display symbol source code in help buffers 2021-10-01 7:05 ` Ihor Radchenko 2021-10-01 7:09 ` Lars Ingebrigtsen @ 2021-10-01 7:24 ` Eli Zaretskii 2021-10-01 9:08 ` Ihor Radchenko 1 sibling, 1 reply; 58+ messages in thread From: Eli Zaretskii @ 2021-10-01 7:24 UTC (permalink / raw) To: Ihor Radchenko; +Cc: larsi, stefankangas, arthur.miller, emacs-devel > From: Ihor Radchenko <yantar92@gmail.com> > Cc: Eli Zaretskii <eliz@gnu.org>, Stefan Kangas <stefankangas@gmail.com>, > arthur.miller@live.com, emacs-devel@gnu.org > Date: Fri, 01 Oct 2021 15:05:57 +0800 > > + ;; Save mark for the old location, unless we just opened > + ;; the buffer or the point is not actually going to move. > + (unless (or (= 1 (point)) > + (= (point) position)) > + (push-mark nil t)) This assumes that if point is at BOB, we "just opened the buffer"? What if the user moves point, then returns to BOB? And why do you use 1 instead of point-min? ^ permalink raw reply [flat|nested] 58+ messages in thread
* Re: Patch proposal: display symbol source code in help buffers 2021-10-01 7:24 ` Eli Zaretskii @ 2021-10-01 9:08 ` Ihor Radchenko 2021-10-01 10:24 ` Eli Zaretskii 0 siblings, 1 reply; 58+ messages in thread From: Ihor Radchenko @ 2021-10-01 9:08 UTC (permalink / raw) To: Eli Zaretskii; +Cc: larsi, stefankangas, arthur.miller, emacs-devel Eli Zaretskii <eliz@gnu.org> writes: >> From: Ihor Radchenko <yantar92@gmail.com> >> Cc: Eli Zaretskii <eliz@gnu.org>, Stefan Kangas <stefankangas@gmail.com>, >> arthur.miller@live.com, emacs-devel@gnu.org >> Date: Fri, 01 Oct 2021 15:05:57 +0800 >> >> + ;; Save mark for the old location, unless we just opened >> + ;; the buffer or the point is not actually going to move. >> + (unless (or (= 1 (point)) >> + (= (point) position)) >> + (push-mark nil t)) > > This assumes that if point is at BOB, we "just opened the buffer"? > What if the user moves point, then returns to BOB? Lars applied the patch without (= 1...) clause, so it does not matter anymore. > And why do you use 1 instead of point-min? Mostly because I prefer to state it explicitly to not confuse BOB with beginning of a narrow. Is there any scenario when BOB is not at 1? Best, Ihor ^ permalink raw reply [flat|nested] 58+ messages in thread
* Re: Patch proposal: display symbol source code in help buffers 2021-10-01 9:08 ` Ihor Radchenko @ 2021-10-01 10:24 ` Eli Zaretskii 2021-10-01 14:14 ` Ihor Radchenko 0 siblings, 1 reply; 58+ messages in thread From: Eli Zaretskii @ 2021-10-01 10:24 UTC (permalink / raw) To: Ihor Radchenko; +Cc: larsi, stefankangas, arthur.miller, emacs-devel > From: Ihor Radchenko <yantar92@gmail.com> > Cc: larsi@gnus.org, stefankangas@gmail.com, arthur.miller@live.com, > emacs-devel@gnu.org > Date: Fri, 01 Oct 2021 17:08:14 +0800 > > > This assumes that if point is at BOB, we "just opened the buffer"? > > What if the user moves point, then returns to BOB? > > Lars applied the patch without (= 1...) clause, so it does not matter > anymore. And I sent my comment before I saw that Lars already installed, so it doesn't matter anymore. > > And why do you use 1 instead of point-min? > > Mostly because I prefer to state it explicitly to not confuse BOB with > beginning of a narrow. Is there any scenario when BOB is not at 1? When the buffer is narrowed, of course. Suppose some Help function decides for some reason to narrow the buffer: then 1 won't work anymore the way you intended. ^ permalink raw reply [flat|nested] 58+ messages in thread
* Re: Patch proposal: display symbol source code in help buffers 2021-10-01 10:24 ` Eli Zaretskii @ 2021-10-01 14:14 ` Ihor Radchenko 0 siblings, 0 replies; 58+ messages in thread From: Ihor Radchenko @ 2021-10-01 14:14 UTC (permalink / raw) To: Eli Zaretskii; +Cc: larsi, stefankangas, arthur.miller, emacs-devel Eli Zaretskii <eliz@gnu.org> writes: >> > And why do you use 1 instead of point-min? >> >> Mostly because I prefer to state it explicitly to not confuse BOB with >> beginning of a narrow. Is there any scenario when BOB is not at 1? > > When the buffer is narrowed, of course. Suppose some Help function > decides for some reason to narrow the buffer: then 1 won't work > anymore the way you intended. I understand. But then (point-min) will not be the actual beginning of (bare) buffer. That's why I used 1 explicitly to not confuse beginning of norrowed part of the buffer with the actual beginning of the buffer. Best, Ihor ^ permalink raw reply [flat|nested] 58+ messages in thread
* Re: Patch proposal: display symbol source code in help buffers 2021-09-21 4:16 ` Lars Ingebrigtsen 2021-09-21 6:59 ` Ihor Radchenko @ 2021-09-21 8:34 ` martin rudalics 1 sibling, 0 replies; 58+ messages in thread From: martin rudalics @ 2021-09-21 8:34 UTC (permalink / raw) To: Lars Ingebrigtsen, Ihor Radchenko Cc: Stefan Kangas, Arthur Miller, emacs-devel > Yes, that is pretty annoying. Perhaps > `help-function-def--button-function' should push-mark before going to > the position? Then `C-x C-x' would bring you back to where you were... Let's add this to a list of things TODO for *Help* buffers. martin ^ permalink raw reply [flat|nested] 58+ messages in thread
* Re: Patch proposal: display symbol source code in help buffers 2021-09-20 7:43 ` Stefan Kangas 2021-09-20 8:29 ` martin rudalics 2021-09-20 9:04 ` Ihor Radchenko @ 2021-09-20 15:01 ` Arthur Miller 2021-09-21 7:41 ` Stefan Kangas 2 siblings, 1 reply; 58+ messages in thread From: Arthur Miller @ 2021-09-20 15:01 UTC (permalink / raw) To: Stefan Kangas; +Cc: Lars Ingebrigtsen, Ihor Radchenko, emacs-devel Stefan Kangas <stefankangas@gmail.com> writes: > Ihor Radchenko <yantar92@gmail.com> writes: > >> Consider scenario when you are editing some-file.el and narrowed the >> buffer to a defun A. Then, you need to examine source code of another >> function B also defined in some-file.el. >> >> Opening help buffer for B is easy - <F1> f <RET> with point at the B's >> call. However, without source code being shown in the help buffer, if I >> try to hit s, the narrowing is removed and the point is moved to a >> function definition. Not convenient. > > I'm not arguing against the new feature here, but is the above a bug? > > It seems to me that `help-view-source' should respect the users > narrowing, for example by querying to open a new indirect buffer or > something in that case. Is that a bug in my patch or in the original help functionality? I am not working with files buffers if they are open. I insert file from the disk, at least I hope that is the way how insrt-file-content works, into a temporary buffer, and I work solely in that temporary buffer, when I am done I copy buffer-string into the help buffer. Otherwise if it does screw up user's narrowing, than it is a bug, at least not-intended behaviour. I would than appreciate a tip what is the cause so I can fix it. ^ permalink raw reply [flat|nested] 58+ messages in thread
* Re: Patch proposal: display symbol source code in help buffers 2021-09-20 15:01 ` Arthur Miller @ 2021-09-21 7:41 ` Stefan Kangas 0 siblings, 0 replies; 58+ messages in thread From: Stefan Kangas @ 2021-09-21 7:41 UTC (permalink / raw) To: Arthur Miller; +Cc: Lars Ingebrigtsen, Ihor Radchenko, emacs-devel Arthur Miller <arthur.miller@live.com> writes: > Is that a bug in my patch or in the original help functionality? IIUC, it is in the original help functionality. ^ permalink raw reply [flat|nested] 58+ messages in thread
* Re: Patch proposal: display symbol source code in help buffers 2021-09-20 7:17 ` Ihor Radchenko 2021-09-20 7:43 ` Stefan Kangas @ 2021-09-20 15:27 ` Arthur Miller 1 sibling, 0 replies; 58+ messages in thread From: Arthur Miller @ 2021-09-20 15:27 UTC (permalink / raw) To: Ihor Radchenko; +Cc: Lars Ingebrigtsen, Stefan Kangas, emacs-devel Ihor Radchenko <yantar92@gmail.com> writes: > Lars Ingebrigtsen <larsi@gnus.org> writes: > >> I'm not against the feature per se, but I'm just puzzled that somebody >> would want this feature. :-) > > Consider scenario when you are editing some-file.el and narrowed the > buffer to a defun A. Then, you need to examine source code of another > function B also defined in some-file.el. > > Opening help buffer for B is easy - <F1> f <RET> with point at the B's > call. However, without source code being shown in the help buffer, if I > try to hit s, the narrowing is removed and the point is moved to a > function definition. Not convenient. > > Of course, one can create indirect buffer for some-file.el, widen, and > jump to B's definition. However, I personally find help buffer with > source code more comfortable. > > Best, > Ihor Oh, I saw just part of your mail answered by Stefan K (I think) and completely missunderstood :). Should read entire thread before I answer anything. I just wrote to Eli in other answer; sometimes when you work with a source file, it is convenient to just display a source of a function from other file, without switching to other file. Sometimes it is convenient to first read the docs, and than to maybe see the source, and if it is not enough, than to open the source file. It is all about the workflow, and on per-case basis. And yes, this one does not screw narrowing at all; at least I have not intended to. ^ permalink raw reply [flat|nested] 58+ messages in thread
* Re: Patch proposal: display symbol source code in help buffers 2021-09-20 6:09 ` Stefan Kangas 2021-09-20 6:14 ` Lars Ingebrigtsen @ 2021-09-20 6:47 ` Eli Zaretskii 2021-09-20 15:27 ` Arthur Miller 2021-09-20 14:55 ` Arthur Miller 2 siblings, 1 reply; 58+ messages in thread From: Eli Zaretskii @ 2021-09-20 6:47 UTC (permalink / raw) To: Stefan Kangas; +Cc: larsi, arthur.miller, emacs-devel > From: Stefan Kangas <stefankangas@gmail.com> > Date: Sun, 19 Sep 2021 23:09:51 -0700 > Cc: emacs-devel@gnu.org > > Lars Ingebrigtsen <larsi@gnus.org> writes: > > > So I don't understand who'd want this. > > I believe this is a feature in helpful.el: > > https://github.com/Wilfred/helpful/blob/master/screenshots/helpful_source.png > > FWIW, I personally also ask myself why/how this is useful. Is it > because some users don't know that you can get to the source code? > > That said, I don't see any reason not to have this as an optional > feature, if some users find that it works well for them. So this is only for those who'd like to see the source by default, instead of explicitly requesting that? ^ permalink raw reply [flat|nested] 58+ messages in thread
* Re: Patch proposal: display symbol source code in help buffers 2021-09-20 6:47 ` Eli Zaretskii @ 2021-09-20 15:27 ` Arthur Miller 0 siblings, 0 replies; 58+ messages in thread From: Arthur Miller @ 2021-09-20 15:27 UTC (permalink / raw) To: Eli Zaretskii; +Cc: larsi, Stefan Kangas, emacs-devel Eli Zaretskii <eliz@gnu.org> writes: >> From: Stefan Kangas <stefankangas@gmail.com> >> Date: Sun, 19 Sep 2021 23:09:51 -0700 >> Cc: emacs-devel@gnu.org >> >> Lars Ingebrigtsen <larsi@gnus.org> writes: >> >> > So I don't understand who'd want this. >> >> I believe this is a feature in helpful.el: >> >> https://github.com/Wilfred/helpful/blob/master/screenshots/helpful_source.png >> >> FWIW, I personally also ask myself why/how this is useful. Is it >> because some users don't know that you can get to the source code? >> >> That said, I don't see any reason not to have this as an optional >> feature, if some users find that it works well for them. > > So this is only for those who'd like to see the source by default, > instead of explicitly requesting that? Yes of course! A strictly opt-in feature. Defcustom is for that purpose. ^ permalink raw reply [flat|nested] 58+ messages in thread
* Re: Patch proposal: display symbol source code in help buffers 2021-09-20 6:09 ` Stefan Kangas 2021-09-20 6:14 ` Lars Ingebrigtsen 2021-09-20 6:47 ` Eli Zaretskii @ 2021-09-20 14:55 ` Arthur Miller 2021-09-21 4:18 ` Lars Ingebrigtsen 2 siblings, 1 reply; 58+ messages in thread From: Arthur Miller @ 2021-09-20 14:55 UTC (permalink / raw) To: Stefan Kangas; +Cc: Lars Ingebrigtsen, emacs-devel Stefan Kangas <stefankangas@gmail.com> writes: > Lars Ingebrigtsen <larsi@gnus.org> writes: > >> I haven't tried the patch, but this is for showing the source code of >> the function/variable in question in the *Help* buffer? Yes, that is a feature of Helpful. We had some discussion last week, which I started by asking if we can get Helpful in i Emacs. I thought to have Helpful as "advanced" help enabled in Emacs as-is, but some peopel expressed that would be better to refactor it. Also, when looking at Helfpul sources it would some refactoring to reomve dependency on some external libraries. Since Helfpul does not use Emacs help-mode buffer, and nothing of built-in help-mode infrastructure but implements everythin on it's own, I am of opinion that it takes less effort to implement comparable features from scratch. Helpful author(s) have also not said anything, either for or against, I cc:d willfred when I posted on the mail list. >> I'm not quite >> sure I understand the utility of that To me it has been useful when I was learning, it still is; it is kind of nice to be able to see the code together with the docs. It also makes, at least me, more inclined to look at the sources when it is thrown at my face directly to see what is going on, than if I have to take extra action to look at the sources. >> sure I understand the utility of that -- if you want to look at the >> source, you can just hit the `s' key. And then you get all the proper >> language-related Emacs stuff in that buffer -- looking at sources is >> usually nicer in the correct major mode than in other buffers. Yes, I agree that it is easy to hit 's' key. Often I would like to see functions called in a function, and it that case I would anyway open the source file. But there are cases when it is good enough to just glimpse through the source and confirm what is going on. Most of the times I don't want to look at the source at all, but if it is already there, I am actually more inclined to look at the source than if it wasn't there. Another feature compared to Helfpul (or anti-feature, depends whom you ask), is that built-in help does not focus the help buffer, while Helpful shifts focus. Many time I just want to glimpse on the source to confirm if my understanding is correct, and I will maybe scroll other buffer (I like two-buffer setup), so I prefer my cursor not to jump over to help buffer every time as it does with helpful. >> So I don't understand who'd want this. People who are used to Helpful; people not used to Elisp at all, > I believe this is a feature in helpful.el: > > https://github.com/Wilfred/helpful/blob/master/screenshots/helpful_source.png > > FWIW, I personally also ask myself why/how this is useful. Is it > because some users don't know that you can get to the source code? > > That said, I don't see any reason not to have this as an optional > feature, if some users find that it works well for them. Of course, this can be/is cpu intensive so it should always be an opt-in feature. I have put in a defcustom to enable/disable this, and it is nil by default. I think that my implementation is slightly more effective than one in Helpful, but that would be just very slightly, and probably does not matter when it comes to compressed sources which have to be decompressed to be shown. ^ permalink raw reply [flat|nested] 58+ messages in thread
* Re: Patch proposal: display symbol source code in help buffers 2021-09-20 14:55 ` Arthur Miller @ 2021-09-21 4:18 ` Lars Ingebrigtsen 2021-09-21 10:26 ` Arthur Miller 0 siblings, 1 reply; 58+ messages in thread From: Lars Ingebrigtsen @ 2021-09-21 4:18 UTC (permalink / raw) To: Arthur Miller; +Cc: Stefan Kangas, emacs-devel Arthur Miller <arthur.miller@live.com> writes: > Another feature compared to Helfpul (or anti-feature, depends whom you > ask), is that built-in help does not focus the help buffer, while > Helpful shifts focus. (This is the `help-window-select' user option in Emacs, by the way.) -- (domestic pets only, the antidote for overdose, milk.) bloggy blog: http://lars.ingebrigtsen.no ^ permalink raw reply [flat|nested] 58+ messages in thread
* Re: Patch proposal: display symbol source code in help buffers 2021-09-21 4:18 ` Lars Ingebrigtsen @ 2021-09-21 10:26 ` Arthur Miller 0 siblings, 0 replies; 58+ messages in thread From: Arthur Miller @ 2021-09-21 10:26 UTC (permalink / raw) To: Lars Ingebrigtsen; +Cc: Stefan Kangas, emacs-devel Lars Ingebrigtsen <larsi@gnus.org> writes: > Arthur Miller <arthur.miller@live.com> writes: > >> Another feature compared to Helfpul (or anti-feature, depends whom you >> ask), is that built-in help does not focus the help buffer, while >> Helpful shifts focus. > > (This is the `help-window-select' user option in Emacs, by the way.) Ah, didn't know about that one :). Should have looked more. I prefer to not select the help window automatically, because I don't like to shift focus from what I work with. ^ permalink raw reply [flat|nested] 58+ messages in thread
* Re: Patch proposal: display symbol source code in help buffers 2021-09-20 5:46 ` Lars Ingebrigtsen 2021-09-20 6:09 ` Stefan Kangas @ 2021-09-20 15:23 ` Arthur Miller 1 sibling, 0 replies; 58+ messages in thread From: Arthur Miller @ 2021-09-20 15:23 UTC (permalink / raw) To: Lars Ingebrigtsen; +Cc: emacs-devel Lars Ingebrigtsen <larsi@gnus.org> writes: > Arthur Miller <arthur.miller@live.com> writes: > >> Here is my second proposal to bring built-in help on par with external >> offerings. > > I haven't tried the patch, but this is for showing the source code of > the function/variable in question in the *Help* buffer? I'm not quite > sure I understand the utility of that -- if you want to look at the > source, you can just hit the `s' key. And then you get all the proper > language-related Emacs stuff in that buffer -- looking at sources is > usually nicer in the correct major mode than in other buffers. > > So I don't understand who'd want this. Sorry Lars, I was reading mails from top-to bottom, so I see this mail after I have already answered to Stefan K. (and you indirectly) and Eli. Is it ok if you take a peek in those two mails, since I have elaborated quite in those two? It feels a bit phony now to repeat both of those answers again :). ^ permalink raw reply [flat|nested] 58+ messages in thread
* Re: Patch proposal: display symbol source code in help buffers 2021-09-19 19:50 Patch proposal: display symbol source code in help buffers Arthur Miller 2021-09-20 5:46 ` Lars Ingebrigtsen @ 2021-09-20 5:59 ` Eli Zaretskii 2021-09-20 6:37 ` Gregor Zattler 2021-09-20 15:11 ` Arthur Miller 1 sibling, 2 replies; 58+ messages in thread From: Eli Zaretskii @ 2021-09-20 5:59 UTC (permalink / raw) To: Arthur Miller; +Cc: emacs-devel > From: Arthur Miller <arthur.miller@live.com> > Date: Sun, 19 Sep 2021 21:50:35 +0200 > > Here is my second proposal to bring built-in help on par with external > offerings. Thanks. Like Lars, I wonder why this is needed, given that we already have a way to show the sources by a command invoked from the *Help* buffer. Can you tell how this feature makes a difference wrt what we have already? And a minor nit: > * lisp/help-mode.el ('help-mode-inline-source'): New option. > ('help--fetch-c-src'): New function. > ('help--fetch-lisp-src'): New function. > ('help--symbol-source'): New function. > ('help-make-xrefs): Check for 'help-mode-inline-source' and > call 'help--symbol-source' to perform insertion when possible. We don't quote symbols inside the parentheses, only in the descriptions that follow the colon, as you did in the last entry. Thanks. ^ permalink raw reply [flat|nested] 58+ messages in thread
* Re: Patch proposal: display symbol source code in help buffers 2021-09-20 5:59 ` Eli Zaretskii @ 2021-09-20 6:37 ` Gregor Zattler 2021-09-20 7:01 ` Eli Zaretskii ` (2 more replies) 2021-09-20 15:11 ` Arthur Miller 1 sibling, 3 replies; 58+ messages in thread From: Gregor Zattler @ 2021-09-20 6:37 UTC (permalink / raw) To: emacs-devel Hi Eli, * Eli Zaretskii <eliz@gnu.org> [2021-09-20; 08:59]: >> Here is my second proposal to bring built-in help on par with external >> offerings. > > Thanks. Like Lars, I wonder why this is needed, given that we already > have a way to show the sources by a command invoked from the *Help* > buffer. I for instance did not know that hitting the `s' key would show me the source. > Can you tell how this feature makes a difference wrt what > we have already? First one does not have to know about the `s' keys function in this case, then one does not have to hit the `s' key, its simply there and easily ignored if not necessary. Lastly hitting the `s' key opens another buffer in another window (at least for me) and (also at least for me), at surprising locations in my frame. I have a UHD monitor and, at least the way I configured it, emacs opens up to 4 windows, the help buffer and the source buffer not necessarily adjunct. All 4 windows can carry 92 lines, so there is plenty of room below the text in the help buffer to show more info. helpful, the package, made life insofar easier for me. Ciao; Gregor ^ permalink raw reply [flat|nested] 58+ messages in thread
* Re: Patch proposal: display symbol source code in help buffers 2021-09-20 6:37 ` Gregor Zattler @ 2021-09-20 7:01 ` Eli Zaretskii 2021-09-20 15:21 ` Arthur Miller 2021-09-20 8:21 ` martin rudalics 2021-09-20 12:19 ` Dmitry Gutov 2 siblings, 1 reply; 58+ messages in thread From: Eli Zaretskii @ 2021-09-20 7:01 UTC (permalink / raw) To: Gregor Zattler; +Cc: emacs-devel > From: Gregor Zattler <telegraph@gmx.net> > Date: Mon, 20 Sep 2021 08:37:56 +0200 > > Lastly hitting the `s' key opens another buffer in another > window (at least for me) and (also at least for me), at > surprising locations in my frame. I have a UHD monitor and, > at least the way I configured it, emacs opens up to 4 > windows, the help buffer and the source buffer not > necessarily adjunct. All 4 windows can carry 92 lines, so > there is plenty of room below the text in the help buffer to > show more info. But that window has the wrong mode for reading the source. So it might be a good "selling point", but once you are past "the drums", using the display for seriously studying the source code is way less convenient and efficient than having the source pop in its own window. Right? ^ permalink raw reply [flat|nested] 58+ messages in thread
* Re: Patch proposal: display symbol source code in help buffers 2021-09-20 7:01 ` Eli Zaretskii @ 2021-09-20 15:21 ` Arthur Miller 0 siblings, 0 replies; 58+ messages in thread From: Arthur Miller @ 2021-09-20 15:21 UTC (permalink / raw) To: Eli Zaretskii; +Cc: Gregor Zattler, emacs-devel Eli Zaretskii <eliz@gnu.org> writes: >> From: Gregor Zattler <telegraph@gmx.net> >> Date: Mon, 20 Sep 2021 08:37:56 +0200 >> >> Lastly hitting the `s' key opens another buffer in another >> window (at least for me) and (also at least for me), at >> surprising locations in my frame. I have a UHD monitor and, >> at least the way I configured it, emacs opens up to 4 >> windows, the help buffer and the source buffer not >> necessarily adjunct. All 4 windows can carry 92 lines, so >> there is plenty of room below the text in the help buffer to >> show more info. > > But that window has the wrong mode for reading the source. So it > might be a good "selling point", but once you are past "the drums", > using the display for seriously studying the source code is way less > convenient and efficient than having the source pop in its own window. > Right? Yes and no. If you really wish to study the implementation, than you will open the source file of course, maybe do some changes, eval your chanes and see the effect, run some in debugger, and use more advanced tools. But there we speak about serious study of a feture. Sometimes it is enough to just take a peek at something. Even while working in some source file, I might prefer to show help for a function from some other file and not to jump to that other file. It is like a little source code browser, where one can browse between code for symbols. Also, not everybody knows how built-in buffer works, as Gregor mentioned, and if one just wishes to take a quick look on the source, not switching the buffer from working buffer is a nice feature. I think I wrote that one as a point in the other answer to you. ^ permalink raw reply [flat|nested] 58+ messages in thread
* Re: Patch proposal: display symbol source code in help buffers 2021-09-20 6:37 ` Gregor Zattler 2021-09-20 7:01 ` Eli Zaretskii @ 2021-09-20 8:21 ` martin rudalics 2021-09-20 18:13 ` Arthur Miller 2021-09-20 12:19 ` Dmitry Gutov 2 siblings, 1 reply; 58+ messages in thread From: martin rudalics @ 2021-09-20 8:21 UTC (permalink / raw) To: emacs-devel > Lastly hitting the `s' key opens another buffer in another > window (at least for me) and (also at least for me), at > surprising locations in my frame. I have a UHD monitor and, > at least the way I configured it, emacs opens up to 4 > windows, the help buffer and the source buffer not > necessarily adjunct. All 4 windows can carry 92 lines, so > there is plenty of room below the text in the help buffer to > show more info. If you fit the window showing *Help* to its buffer, there is no room left. Where to pop up the location of the source and how to get rid of it is a question we currently discuss in Bug#9054 and Bug#36767. If and when we reach a consensus there, we can add an option to immediately display the source in the *Help* buffer or a window right below it (IIRC a C source wouldn't be always available though). martin ^ permalink raw reply [flat|nested] 58+ messages in thread
* Re: Patch proposal: display symbol source code in help buffers 2021-09-20 8:21 ` martin rudalics @ 2021-09-20 18:13 ` Arthur Miller 2021-09-21 8:34 ` martin rudalics 0 siblings, 1 reply; 58+ messages in thread From: Arthur Miller @ 2021-09-20 18:13 UTC (permalink / raw) To: martin rudalics; +Cc: emacs-devel martin rudalics <rudalics@gmx.at> writes: >> Lastly hitting the `s' key opens another buffer in another >> window (at least for me) and (also at least for me), at >> surprising locations in my frame. I have a UHD monitor and, >> at least the way I configured it, emacs opens up to 4 >> windows, the help buffer and the source buffer not >> necessarily adjunct. All 4 windows can carry 92 lines, so >> there is plenty of room below the text in the help buffer to >> show more info. > > If you fit the window showing *Help* to its buffer, there is no room > left. It would be nice to make it fit to N lines in height, and C columns in width, i.e. to make it fit to certain size. > . Where to pop up the location of the source and how to get rid of > it is a question we currently discuss in Bug#9054 and Bug#36767. There are so many discussions here so I wasn't following those. I really don't know what you have discussed there. I come to this from my own needs. > If and > when we reach a consensus there, we can add an option to immediately > display the source in the *Help* buffer or a window right below it (IIRC > a C source wouldn't be always available though). This shouldn't be by any mean in collision what you are saying here. What you describe, as I understand it, is to display source on-demand, in help buffer, which would be very nice too. What I have done is to display by global switch. It would be still useful to have on-demand display when global switch is off, and it would be trivial to re-build the patch to include that. I can rebuild and send new one. I have found a bug and I need to rebuild-it anyway. I can also refactor it and add an interactive function that can be boudn to a key to display only sources in help buffer. And if global switch is on, and sources are requested, it can function as a "narrow" button, i.e. fit only symbol source to the help buffer. Would that be interesting? Honestly, I dislike to display both help and entire source, because there is a duplication of the doc string. I was always disturbed by this duplication in helpful too. So I have experimented to display only the body of the function, but I don't think that looked very nice either. There is a bug repport I did about 'narrow-to-defun', and the help-mode.el I posted there, shows C sources narrowed only to it's function body. ^ permalink raw reply [flat|nested] 58+ messages in thread
* Re: Patch proposal: display symbol source code in help buffers 2021-09-20 18:13 ` Arthur Miller @ 2021-09-21 8:34 ` martin rudalics 2021-09-21 10:24 ` Arthur Miller 2021-09-21 17:30 ` Juri Linkov 0 siblings, 2 replies; 58+ messages in thread From: martin rudalics @ 2021-09-21 8:34 UTC (permalink / raw) To: Arthur Miller; +Cc: emacs-devel >> If you fit the window showing *Help* to its buffer, there is no room >> left. > > It would be nice to make it fit to N lines in height, and C columns in width, > i.e. to make it fit to certain size. Who would specify that "certain size"? >> . Where to pop up the location of the source and how to get rid of >> it is a question we currently discuss in Bug#9054 and Bug#36767. > > There are so many discussions here so I wasn't following those. I really don't > know what you have discussed there. I come to this from my own needs. Similar issues like how to navigate to the source of a function or variable from the current point of the user's interest. > This shouldn't be by any mean in collision what you are saying here. What you > describe, as I understand it, is to display source on-demand, in help buffer, > which would be very nice too. What I have done is to display by global > switch. It would be still useful to have on-demand display when global switch is > off, and it would be trivial to re-build the patch to include that. I can > rebuild and send new one. I have found a bug and I need to rebuild-it anyway. I > can also refactor it and add an interactive function that can be boudn to a key > to display only sources in help buffer. And if global switch is on, and sources > are requested, it can function as a "narrow" button, i.e. fit only symbol source > to the help buffer. Would that be interesting? What we should establish first is what users want. Eli and Lars have explained their workflow in the threads I cited including how and why they want to go to the source in the first place, where to go from there and how to return to the initial state. Few others have so far. martin ^ permalink raw reply [flat|nested] 58+ messages in thread
* Re: Patch proposal: display symbol source code in help buffers 2021-09-21 8:34 ` martin rudalics @ 2021-09-21 10:24 ` Arthur Miller 2021-09-21 16:52 ` martin rudalics 2021-09-21 17:30 ` Juri Linkov 1 sibling, 1 reply; 58+ messages in thread From: Arthur Miller @ 2021-09-21 10:24 UTC (permalink / raw) To: martin rudalics; +Cc: emacs-devel martin rudalics <rudalics@gmx.at> writes: >>> If you fit the window showing *Help* to its buffer, there is no room >>> left. >> >> It would be nice to make it fit to N lines in height, and C columns in width, >> i.e. to make it fit to certain size. > > Who would specify that "certain size"? User, of course, who else? We put some default size and a defcuctom for user to change, as always? >>> . Where to pop up the location of the source and how to get rid of >>> it is a question we currently discuss in Bug#9054 and Bug#36767. >> >> There are so many discussions here so I wasn't following those. I really don't >> know what you have discussed there. I come to this from my own needs. > > Similar issues like how to navigate to the source of a function or > variable from the current point of the user's interest. I have tested yesterday, and it works well as it is in help buffer. It is like a mini browser. I am sure there are possibly 1001 different ways to do things; but somewhere we have to make a choice and do something. If the people wish something different from how it works, we can always build on it later. As I understand a lot of people use Helpful, and the buil-in help works even better considering cross linking. I can click in built-in help and get new functions and vars opened in the help buffer already; I can't do that in Helpful. Let's have a face lift for built in help for 28. I am sure we could debate for years and always someone will like it differently. Let's have something that works. >> This shouldn't be by any mean in collision what you are saying here. What you >> describe, as I understand it, is to display source on-demand, in help buffer, >> which would be very nice too. What I have done is to display by global >> switch. It would be still useful to have on-demand display when global switch is >> off, and it would be trivial to re-build the patch to include that. I can >> rebuild and send new one. I have found a bug and I need to rebuild-it anyway. I >> can also refactor it and add an interactive function that can be boudn to a key >> to display only sources in help buffer. And if global switch is on, and sources >> are requested, it can function as a "narrow" button, i.e. fit only symbol source >> to the help buffer. Would that be interesting? > > What we should establish first is what users want. Eli and Lars have > explained their workflow in the threads I cited including how and why > they want to go to the source in the first place, where to go from there > and how to return to the initial state. Few others have so far. I haven't read the other thread, but I have used help and why I think it is good, and some other have as well. Can you try what I send in yesterday, with soucre view toggle? I think it works quite nice (I did a misstake and went 1 row too far when deleting, but that's a trivial to fix). ^ permalink raw reply [flat|nested] 58+ messages in thread
* Re: Patch proposal: display symbol source code in help buffers 2021-09-21 10:24 ` Arthur Miller @ 2021-09-21 16:52 ` martin rudalics 2021-09-21 18:56 ` Arthur Miller 0 siblings, 1 reply; 58+ messages in thread From: martin rudalics @ 2021-09-21 16:52 UTC (permalink / raw) To: Arthur Miller; +Cc: emacs-devel >>> It would be nice to make it fit to N lines in height, and C columns in width, >>> i.e. to make it fit to certain size. >> >> Who would specify that "certain size"? > User, of course, who else? We put some default size and a defcuctom for user to > change, as always? Do you mean "one size fits all"? I'm afraid I don't understand what you intend here. > Let's > have a face lift for built in help for 28. I am sure we could debate for years > and always someone will like it differently. Let's have something that works. That something will take its time to be written. Certainly not before Emacs 28 comes out. > I haven't read the other thread, but I have used help and why I think it is > good, and some other have as well. There are two threads and I think you should read them if you plan to change anything in this area. > Can you try what I send in yesterday, with soucre view toggle? I think it works > quite nice (I did a misstake and went 1 row too far when deleting, but that's a > trivial to fix). Compiling it tells me ../../lisp/help-mode.el:530:22: Warning: the function ‘find-function-advised-original’ is not known to be defined. so it should require 'find-func'. A few remarks: +(defcustom help-mode-inline-source nil + "Display inlined source code for SYMBOL in `help-mode' buffer. What is SYMBOL here? + "Find C source code for a Lisp symbol in a `file'. + +sym is the symbol to find. +type is the type as obtained by 'describe-*' functions. +file is the source file to search in." Arguments should be uppercase and not hyphenated. + (with-no-warnings (font-lock-fontify-buffer))) Do you know how long it takes to fontify xdisp.c? With a non-optimized build, C-h v for 'scroll-minibuffer-conservatively' takes more than 10 seconds here. Other than that I can only say that this is _one_ possible option for showing the source of the code. BTW, we should decide on a suitable interface for 'help-toggle-source-view' probably using the button for showing the code. martin ^ permalink raw reply [flat|nested] 58+ messages in thread
* Re: Patch proposal: display symbol source code in help buffers 2021-09-21 16:52 ` martin rudalics @ 2021-09-21 18:56 ` Arthur Miller 0 siblings, 0 replies; 58+ messages in thread From: Arthur Miller @ 2021-09-21 18:56 UTC (permalink / raw) To: martin rudalics; +Cc: emacs-devel martin rudalics <rudalics@gmx.at> writes: >>>> It would be nice to make it fit to N lines in height, and C columns in width, >>>> i.e. to make it fit to certain size. >>> >>> Who would specify that "certain size"? >> User, of course, who else? We put some default size and a defcuctom for user to >> change, as always? > > Do you mean "one size fits all"? Of course not :). I said "user", because I meant an user should have the final word. I just said in short words that there should be a defcustom variable for users to customize the default value. But also every value that is in use, has to have some default value to start with, no? I didn't proposed a hadcoded literal, I proposed a defcustom variable, so users can set this their liking. >> Let's >> have a face lift for built in help for 28. I am sure we could debate for years >> and always someone will like it differently. Let's have something that works. > > That something will take its time to be written. Certainly not before > Emacs 28 comes out. > >> I haven't read the other thread, but I have used help and why I think it is >> good, and some other have as well. > > There are two threads and I think you should read them if you plan to > change anything in this area. > >> Can you try what I send in yesterday, with soucre view toggle? I think it works >> quite nice (I did a misstake and went 1 row too far when deleting, but that's a >> trivial to fix). > > Compiling it tells me > > ../../lisp/help-mode.el:530:22: Warning: the function > ‘find-function-advised-original’ is not known to be defined. > > so it should require 'find-func'. A few remarks: Thank you for spotting that one! I used to have it in fetch-c-src, but than I removed it, and than refactored that code from 'find-function-C-source' but forgott that it might require find-func. > +(defcustom help-mode-inline-source nil > + "Display inlined source code for SYMBOL in `help-mode' buffer. > > What is SYMBOL here? Current symbol in the help buffer. There is always a 'current symbol' in the help buffer, as I understand the implementation, the one that help was asked about. I can reword the docs. I have tried to be short as possible so it fits in one line. I see also now that it shoudl at least be 'the SYMBOL', but I can probably just skip "for SYMBOL" completely. > + "Find C source code for a Lisp symbol in a `file'. > + > +sym is the symbol to find. > +type is the type as obtained by 'describe-*' functions. > +file is the source file to search in." > > Arguments should be uppercase and not hyphenated. Ok, thank you, I wasn't thinking about that one. I'll fix that of course. > + (with-no-warnings (font-lock-fontify-buffer))) > > Do you know how long it takes to fontify xdisp.c? With a non-optimized > build, C-h v for 'scroll-minibuffer-conservatively' takes more than 10 > seconds here. I would't be surprised. I try to do as little work as possible: only function oor defvar in question is fontified, so xdisp.c will never get fontified all at once in this context. If that would still be problematic for low-level CPUs I can of course do this optionally as well, with another defcustom. I am really concerned with efficiency; I always am. I really like Helpful, and I am not the only one, it is a popular library. What is problem is that it does not use any built-in functionality but provides everything from scratch. It has complete implementation of a help buffer on its own. So it is a dubble functionality when I import it. I like it's implementation too, it is simpler than built-in help infrastructure. So I hoped to get it into Emacs, and let old help die out :). It won't happen so the next best thing is to re-implement Helpful in terms of Emacs built-in features, i.e. bring Helpful features (not the source code) to built-in *Help* buffers. At least some of them. > Other than that I can only say that this is _one_ possible option for > showing the source of the code. BTW, we should decide on a suitable > interface for 'help-toggle-source-view' probably using the button for > showing the code. Yes, I had my thoughts to propertize the "Source Code:" string in help buffer to act similar as other link (or buttons as they are called in Emacs), but I just haven't got to that yet. Also until there is any decision to use 'help-toggle-source-view' as an API, it can wait for a bit; but generally yes, it should be another help-xref button. I have also explicitly coded it so it can be used from any buffer, so user does not need to switch to a help buffer to toggle the source view on/off. I see it as a feature that help does not switch my cursor to help buffer by default :). Thank you for your input Martin, that was really helpful. Some pun unavaoided here :). ^ permalink raw reply [flat|nested] 58+ messages in thread
* Re: Patch proposal: display symbol source code in help buffers 2021-09-21 8:34 ` martin rudalics 2021-09-21 10:24 ` Arthur Miller @ 2021-09-21 17:30 ` Juri Linkov 2021-09-21 19:13 ` Arthur Miller 1 sibling, 1 reply; 58+ messages in thread From: Juri Linkov @ 2021-09-21 17:30 UTC (permalink / raw) To: martin rudalics; +Cc: Arthur Miller, emacs-devel >>> If you fit the window showing *Help* to its buffer, there is no room >>> left. >> >> It would be nice to make it fit to N lines in height, and C columns in width, >> i.e. to make it fit to certain size. > > Who would specify that "certain size"? In bug#45688 I proposed on displaying the Help buffer to call a hook like temp-buffer-window-setup-hook or temp-buffer-window-show-hook with the default value shrink-window-if-larger-than-buffer or fit-window-to-buffer. Then users can customize it and remove resizing that will make it more useful for anyone who needs to reuse the Help window to visit source code. ^ permalink raw reply [flat|nested] 58+ messages in thread
* Re: Patch proposal: display symbol source code in help buffers 2021-09-21 17:30 ` Juri Linkov @ 2021-09-21 19:13 ` Arthur Miller 2021-09-22 7:49 ` martin rudalics 0 siblings, 1 reply; 58+ messages in thread From: Arthur Miller @ 2021-09-21 19:13 UTC (permalink / raw) To: Juri Linkov; +Cc: martin rudalics, emacs-devel Juri Linkov <juri@linkov.net> writes: >>>> If you fit the window showing *Help* to its buffer, there is no room >>>> left. >>> >>> It would be nice to make it fit to N lines in height, and C columns in width, >>> i.e. to make it fit to certain size. >> >> Who would specify that "certain size"? > > In bug#45688 I proposed on displaying the Help buffer to call a hook > like temp-buffer-window-setup-hook or temp-buffer-window-show-hook > with the default value shrink-window-if-larger-than-buffer or > fit-window-to-buffer. Then users can customize it and remove > resizing that will make it more useful for anyone who needs > to reuse the Help window to visit source code. That sounds like useful approach. Something like: (defcustom help-buffer-default-height 25 "The default height of a help-buffer window." :type 'fixnum :group 'help :version "28.1") <-- :-) ^ permalink raw reply [flat|nested] 58+ messages in thread
* Re: Patch proposal: display symbol source code in help buffers 2021-09-21 19:13 ` Arthur Miller @ 2021-09-22 7:49 ` martin rudalics 2021-09-22 16:04 ` Juri Linkov 2021-09-22 22:38 ` Arthur Miller 0 siblings, 2 replies; 58+ messages in thread From: martin rudalics @ 2021-09-22 7:49 UTC (permalink / raw) To: Arthur Miller, Juri Linkov; +Cc: emacs-devel > That sounds like useful approach. Something like: > > (defcustom help-buffer-default-height 25 > "The default height of a help-buffer window." > :type 'fixnum > :group 'help > :version "28.1") <-- :-) Help-buffer windows are as a rule displayed via 'display-buffer' and are easily recognizable because their buffer is always called *Help*. So you can simply add a 'window-height' action alist entry for them which is considerably more versatile than what you propose above. martin ^ permalink raw reply [flat|nested] 58+ messages in thread
* Re: Patch proposal: display symbol source code in help buffers 2021-09-22 7:49 ` martin rudalics @ 2021-09-22 16:04 ` Juri Linkov 2021-09-22 17:52 ` martin rudalics 2021-09-22 22:38 ` Arthur Miller 1 sibling, 1 reply; 58+ messages in thread From: Juri Linkov @ 2021-09-22 16:04 UTC (permalink / raw) To: martin rudalics; +Cc: Arthur Miller, emacs-devel >> That sounds like useful approach. Something like: >> >> (defcustom help-buffer-default-height 25 >> "The default height of a help-buffer window." >> :type 'fixnum >> :group 'help >> :version "28.1") <-- :-) > > Help-buffer windows are as a rule displayed via 'display-buffer' and are > easily recognizable because their buffer is always called *Help*. So > you can simply add a 'window-height' action alist entry for them which > is considerably more versatile than what you propose above. Actually, I meant that when temp-buffer-resize-mode is enabled, how would it be possible to resize everything except the Help buffer? ^ permalink raw reply [flat|nested] 58+ messages in thread
* Re: Patch proposal: display symbol source code in help buffers 2021-09-22 16:04 ` Juri Linkov @ 2021-09-22 17:52 ` martin rudalics 2021-09-23 8:15 ` martin rudalics 0 siblings, 1 reply; 58+ messages in thread From: martin rudalics @ 2021-09-22 17:52 UTC (permalink / raw) To: Juri Linkov; +Cc: Arthur Miller, emacs-devel > Actually, I meant that when temp-buffer-resize-mode is enabled, > how would it be possible to resize everything except the Help buffer? We can't. We'd have to provide a white- or blacklist for that purpose. martin ^ permalink raw reply [flat|nested] 58+ messages in thread
* Re: Patch proposal: display symbol source code in help buffers 2021-09-22 17:52 ` martin rudalics @ 2021-09-23 8:15 ` martin rudalics 2021-09-23 15:52 ` Juri Linkov 0 siblings, 1 reply; 58+ messages in thread From: martin rudalics @ 2021-09-23 8:15 UTC (permalink / raw) To: Juri Linkov; +Cc: Arthur Miller, emacs-devel [-- Attachment #1: Type: text/plain, Size: 199 bytes --] > We can't. We'd have to provide a white- or blacklist for that purpose. Actually we have such a blacklist already - it's 'display-buffer-alist'. Please have a look at the attached diffs. martin [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #2: resize-temp-buffer-window.diff --] [-- Type: text/x-patch; name="resize-temp-buffer-window.diff", Size: 3113 bytes --] diff --git a/lisp/help.el b/lisp/help.el index 29ae340481..b67b5a4237 100644 --- a/lisp/help.el +++ b/lisp/help.el @@ -1589,6 +1589,16 @@ temp-buffer-resize-mode (add-hook 'temp-buffer-show-hook 'resize-temp-buffer-window 'append) (remove-hook 'temp-buffer-show-hook 'resize-temp-buffer-window))) +(defun resize-temp-buffer-window-inhibit (buffer &optional horizontal) + "Return non-nil if windows on BUFFER should not be resized automatically. +`resize-temp-buffer-window' calls this function to check whether +`display-buffer-alist' contains a setting that inhibits +auto-resizing of any window showing BUFFER." + (assq + (if horizontal 'window-width 'window-height) + (display-buffer-assq-regexp + (buffer-name buffer) display-buffer-alist nil))) + (defun resize-temp-buffer-window (&optional window) "Resize WINDOW to fit its contents. WINDOW must be a live window and defaults to the selected one. @@ -1607,26 +1617,33 @@ resize-temp-buffer-window This function may call `preserve-window-size' to preserve the size of WINDOW." (setq window (window-normalize-window window t)) - (let ((height (if (functionp temp-buffer-max-height) + (let* ((buffer (window-buffer window)) + (height (if (functionp temp-buffer-max-height) + (with-selected-window window + (funcall temp-buffer-max-height buffer)) + temp-buffer-max-height)) + (width (if (functionp temp-buffer-max-width) (with-selected-window window - (funcall temp-buffer-max-height (window-buffer))) - temp-buffer-max-height)) - (width (if (functionp temp-buffer-max-width) - (with-selected-window window - (funcall temp-buffer-max-width (window-buffer))) - temp-buffer-max-width)) - (quit-cadr (cadr (window-parameter window 'quit-restore)))) + (funcall temp-buffer-max-width buffer)) + temp-buffer-max-width)) + (quit-cadr (cadr (window-parameter window 'quit-restore)))) ;; Resize WINDOW iff it was made by `display-buffer'. (when (or (and (eq quit-cadr 'window) (or (and (window-combined-p window) (not (eq fit-window-to-buffer-horizontally 'only)) - (pos-visible-in-window-p (point-min) window)) + (pos-visible-in-window-p + (with-current-buffer buffer (point-min)) + window) + (not (resize-temp-buffer-window-inhibit buffer))) (and (window-combined-p window t) - fit-window-to-buffer-horizontally))) + fit-window-to-buffer-horizontally + (not (resize-temp-buffer-window-inhibit buffer t))))) (and (eq quit-cadr 'frame) fit-frame-to-buffer - (eq window (frame-root-window window)))) + (eq window (frame-root-window window)) + (not (resize-temp-buffer-window-inhibit buffer)) + (not (resize-temp-buffer-window-inhibit buffer t)))) (fit-window-to-buffer window height nil width nil t)))) ;;; Help windows. ^ permalink raw reply related [flat|nested] 58+ messages in thread
* Re: Patch proposal: display symbol source code in help buffers 2021-09-23 8:15 ` martin rudalics @ 2021-09-23 15:52 ` Juri Linkov 2021-09-26 9:10 ` martin rudalics 0 siblings, 1 reply; 58+ messages in thread From: Juri Linkov @ 2021-09-23 15:52 UTC (permalink / raw) To: martin rudalics; +Cc: Arthur Miller, emacs-devel >> We can't. We'd have to provide a white- or blacklist for that purpose. > > Actually we have such a blacklist already - it's 'display-buffer-alist'. > Please have a look at the attached diffs. I guess this feature has effect when display-buffer-alist is customized to contain (window-height . nil)? Then I confirm it works, thanks! Now finally it's possible to disable resizing for a limited set of buffers. ^ permalink raw reply [flat|nested] 58+ messages in thread
* Re: Patch proposal: display symbol source code in help buffers 2021-09-23 15:52 ` Juri Linkov @ 2021-09-26 9:10 ` martin rudalics 0 siblings, 0 replies; 58+ messages in thread From: martin rudalics @ 2021-09-26 9:10 UTC (permalink / raw) To: Juri Linkov; +Cc: Arthur Miller, emacs-devel [-- Attachment #1: Type: text/plain, Size: 353 bytes --] > I guess this feature has effect when display-buffer-alist is customized > to contain (window-height . nil)? Then I confirm it works, thanks! It's inherently flawed because it works only for 'display-buffer-alist' - I couldn't justify that when documenting it. I attached a patch that addresses that (and fixes some other unrelated bugs). martin [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #2: resize-temp-buffer-window.diff --] [-- Type: text/x-patch; name="resize-temp-buffer-window.diff", Size: 14181 bytes --] diff --git a/doc/lispref/display.texi b/doc/lispref/display.texi index 510efaf271..a5abfdb4c0 100644 --- a/doc/lispref/display.texi +++ b/doc/lispref/display.texi @@ -1334,6 +1334,11 @@ Temporary Displays (@pxref{Resizing Windows}) for resizing. You can specify a different function by customizing the options @code{temp-buffer-max-height} and @code{temp-buffer-max-width} below. + +The effect of this option can be overridden by providing a suitable +@code{window-height}, @code{window-width} or @code{window-size} action +alist entry for @code{display-buffer} (@pxref{Buffer Display Action +Alists}). @end defopt @defopt temp-buffer-max-height diff --git a/doc/lispref/windows.texi b/doc/lispref/windows.texi index 679744884a..63af4c5fd9 100644 --- a/doc/lispref/windows.texi +++ b/doc/lispref/windows.texi @@ -2924,9 +2924,9 @@ Buffer Display Action Alists selected, if the window chosen by @code{display-buffer} is displayed there. Primarily affected by this are @code{display-buffer-use-some-frame} and -@code{display-buffer-reuse-window}. -@code{display-buffer-pop-up-frame} should be affected as well, but -there is no guarantee that the window manager will comply. +@code{display-buffer-reuse-window}. Ideally, +@code{display-buffer-pop-up-frame} should be affected as well, but there +is no guarantee that the window manager will comply. @vindex window-parameters@r{, a buffer display action alist entry} @item window-parameters @@ -2972,8 +2972,8 @@ Buffer Display Action Alists If the value specifies a function, that function is called with one argument---the chosen window. The function is supposed to adjust the height of the window; its return value is ignored. Suitable functions -are @code{shrink-window-if-larger-than-buffer} and -@code{fit-window-to-buffer}, see @ref{Resizing Windows}. +are @code{fit-window-to-buffer} and +@code{shrink-window-if-larger-than-buffer}, see @ref{Resizing Windows}. @end itemize By convention, the height of the chosen window is adjusted only if the @@ -3007,11 +3007,31 @@ Buffer Display Action Alists width of the window; its return value is ignored. @end itemize -By convention, the width of the chosen window is adjusted only if the -window is part of a horizontal combination (@pxref{Windows and -Frames}) to avoid changing the width of other, unrelated windows. -Also, this entry should be processed under only certain conditions -which are specified right below this list. +@vindex window-size@r{, a buffer display action alist entry} +@item window-size +This entry is a combination of the two preceding ones and can be used to +adjust the chosen window's height and width. Since windows can be +resized in one direction only without affecting other windows, +@code{window-size} is effective only to set up the size of a window +appearing alone on a frame. The value can be one of the following: + +@itemize @bullet +@item +@code{nil} means to leave the size of the chosen window alone. + +@item +A cons cell of two integers specifies the desired total width and height +of the chosen window in lines and columns. It's effect is to adjust the +size of the frame accordingly. + +@item +If the value specifies a function, that function is called with one +argument---the chosen window. The function is supposed to adjust the +size of the window's frame; its return value is ignored. +@end itemize + +This entry should be processed under only certain conditions which are +specified right below this list. @vindex dedicated@r{, a buffer display action alist entry} @item dedicated @@ -3112,6 +3132,14 @@ Buffer Display Action Alists buffer and never was used to show another buffer until it was reused by the current invocation of @code{display-buffer}. +If no @code{window-height}, @code{window-width} or @code{window-size} +entry was specified, the window may still be resized automatically when +the buffer is temporary and @code{temp-buffer-resize-mode} has been +enabled, @ref{Temporary Displays}. In that case, the @sc{cdr} of a +@code{window-height}, @code{window-height} or @code{window-size} entry +can be used to inhibit or override the default behavior of +@code{temp-buffer-resize-mode} for specific buffers or invocations of +@code{display-buffer}. @node Choosing Window Options @subsection Additional Options for Displaying Buffers diff --git a/lisp/help.el b/lisp/help.el index 8f77167040..a5cdc9b786 100644 --- a/lisp/help.el +++ b/lisp/help.el @@ -1589,10 +1589,16 @@ temp-buffer-resize-mode (add-hook 'temp-buffer-show-hook 'resize-temp-buffer-window 'append) (remove-hook 'temp-buffer-show-hook 'resize-temp-buffer-window))) +(defvar resize-temp-buffer-window-inhibit nil + "Non-nil means `resize-temp-buffer-window' should not resize.") + (defun resize-temp-buffer-window (&optional window) "Resize WINDOW to fit its contents. WINDOW must be a live window and defaults to the selected one. -Do not resize if WINDOW was not created by `display-buffer'. +Do not resize if WINDOW was not created by `display-buffer'. Do +not resize either if a `window-height', `window-width' or +`window-size' entry in `display-buffer-alist' prescribes some +alternative resizing for WINDOW's buffer. If WINDOW is part of a vertical combination, restrain its new size by `temp-buffer-max-height' and do not resize if its minimum @@ -1607,27 +1613,33 @@ resize-temp-buffer-window This function may call `preserve-window-size' to preserve the size of WINDOW." (setq window (window-normalize-window window t)) - (let ((height (if (functionp temp-buffer-max-height) + (let* ((buffer (window-buffer window)) + (height (if (functionp temp-buffer-max-height) + (with-selected-window window + (funcall temp-buffer-max-height buffer)) + temp-buffer-max-height)) + (width (if (functionp temp-buffer-max-width) (with-selected-window window - (funcall temp-buffer-max-height (window-buffer))) - temp-buffer-max-height)) - (width (if (functionp temp-buffer-max-width) - (with-selected-window window - (funcall temp-buffer-max-width (window-buffer))) - temp-buffer-max-width)) - (quit-cadr (cadr (window-parameter window 'quit-restore)))) - ;; Resize WINDOW iff it was made by `display-buffer'. + (funcall temp-buffer-max-width buffer)) + temp-buffer-max-width)) + (quit-cadr (cadr (window-parameter window 'quit-restore)))) + ;; Resize WINDOW only if it was made by `display-buffer'. (when (or (and (eq quit-cadr 'window) (or (and (window-combined-p window) (not (eq fit-window-to-buffer-horizontally 'only)) - (pos-visible-in-window-p (point-min) window)) + (pos-visible-in-window-p + (with-current-buffer buffer (point-min)) + window) + (not resize-temp-buffer-window-inhibit)) (and (window-combined-p window t) - fit-window-to-buffer-horizontally))) + fit-window-to-buffer-horizontally + (not resize-temp-buffer-window-inhibit)))) (and (eq quit-cadr 'frame) fit-frame-to-buffer - (eq window (frame-root-window window)))) - (fit-window-to-buffer window height nil width nil t)))) + (eq window (frame-root-window window)) + (not resize-temp-buffer-window-inhibit))) + (fit-window-to-buffer window height nil width nil t)))) ;;; Help windows. (defcustom help-window-select nil diff --git a/lisp/window.el b/lisp/window.el index b240b16f24..0eb26b0644 100644 --- a/lisp/window.el +++ b/lisp/window.el @@ -108,11 +108,15 @@ temp-buffer-window-setup ;; Return the buffer. buffer))) +;; Defined in help.el. +(defvar resize-temp-buffer-window-inhibit) + (defun temp-buffer-window-show (buffer &optional action) "Show temporary buffer BUFFER in a window. Return the window showing BUFFER. Pass ACTION as action argument to `display-buffer'." - (let (window frame) + (let ((resize-temp-buffer-window-inhibit nil) + window) (with-current-buffer buffer (set-buffer-modified-p nil) (setq buffer-read-only t) @@ -130,9 +134,9 @@ temp-buffer-window-show t window-combination-limit))) (setq window (display-buffer buffer action))) - (setq frame (window-frame window)) - (unless (eq frame (selected-frame)) - (raise-frame frame)) + ;; We used to raise the window's frame here. Do not do that + ;; since it would override an `inhibit-switch-frame' entry + ;; specified for the action alist used by `display-buffer'. (setq minibuffer-scroll-window window) (set-window-hscroll window 0) (with-selected-window window @@ -7245,11 +7249,14 @@ window--display-buffer (inhibit-modification-hooks t)) (funcall (cdr (assq 'body-function alist)) window))) - (let ((quit-restore (window-parameter window 'quit-restore)) - (height (cdr (assq 'window-height alist))) - (width (cdr (assq 'window-width alist))) - (size (cdr (assq 'window-size alist))) - (preserve-size (cdr (assq 'preserve-size alist)))) + (let* ((quit-restore (window-parameter window 'quit-restore)) + (window-height (assq 'window-height alist)) + (height (cdr window-height)) + (window-width (assq 'window-width alist)) + (width (cdr window-width)) + (window-size (assq 'window-size alist)) + (size (cdr window-size)) + (preserve-size (cdr (assq 'preserve-size alist)))) (cond ((or (eq type 'frame) (and (eq (car quit-restore) 'same) @@ -7266,14 +7273,18 @@ window--display-buffer (height (cdr size)) (frame (window-frame window))) (when (and (numberp width) (numberp height)) - (set-frame-height - frame (+ (frame-height frame) - (- height (window-total-height window)))) - (set-frame-width - frame (+ (frame-width frame) - (- width (window-total-width window))))))) + ;; Modifying the parameters of a newly created frame might + ;; not work everywhere, but then `temp-buffer-resize-mode' + ;; will certainly fail in a similar fashion. + (modify-frame-parameters + frame `((height . ,(+ (frame-height frame) + (- height (window-total-height window)))) + (width . ,(+ (frame-width frame) + (- width (window-total-width window)))))))) + (setq resize-temp-buffer-window-inhibit t)) ((functionp size) - (ignore-errors (funcall size window))))) + (ignore-errors (funcall size window)) + (setq resize-temp-buffer-window-inhibit t)))) ((or (eq type 'window) (and (eq (car quit-restore) 'same) (eq (nth 1 quit-restore) 'window))) @@ -7293,9 +7304,11 @@ window--display-buffer (delta (- new-height (window-total-height window)))) (when (and (window--resizable-p window delta nil 'safe) (window-combined-p window)) - (window-resize window delta nil 'safe)))) + (window-resize window delta nil 'safe))) + (setq resize-temp-buffer-window-inhibit 'vertical)) ((functionp height) - (ignore-errors (funcall height window)))) + (ignore-errors (funcall height window)) + (setq resize-temp-buffer-window-inhibit 'vertical))) ;; Adjust width of window if asked for. (cond ((not width)) @@ -7309,9 +7322,11 @@ window--display-buffer (delta (- new-width (window-total-width window)))) (when (and (window--resizable-p window delta t 'safe) (window-combined-p window t)) - (window-resize window delta t 'safe)))) + (window-resize window delta t 'safe))) + (setq resize-temp-buffer-window-inhibit 'horizontal)) ((functionp width) - (ignore-errors (funcall width window)))) + (ignore-errors (funcall width window)) + (setq resize-temp-buffer-window-inhibit 'horizontal))) ;; Preserve window size if asked for. (when (consp preserve-size) (window-preserve-size window t (car preserve-size)) @@ -7556,9 +7571,11 @@ display-buffer Action alist entries are: `inhibit-same-window' -- A non-nil value prevents the same window from being used for display. - `inhibit-switch-frame' -- A non-nil value prevents any frame - used for showing the buffer from being raised or selected. - `reusable-frames' -- The value specifies the set of frames to +`inhibit-switch-frame' -- A non-nil value prevents any frame used + for showing the buffer from being raised or selected. Note + that a window manager may still raise a new frame and give it + focus, effectively overriding the value specified here. +`reusable-frames' -- The value specifies the set of frames to search for a window that already displays the buffer. Possible values are nil (the selected frame), t (any live frame), visible (any visible frame), 0 (any visible or @@ -7581,7 +7598,16 @@ display-buffer window) or a function to be called with one argument - the chosen window. The function is supposed to adjust the width of the window; its return value is ignored. - `preserve-size' -- The value should be either (t . nil) to + + `window-size' -- This entry is only useful for windows appearing + alone on their frame and specifies the desired size of that + window either as a cons of integers (the total width and + height of the window on that frame), or a function to be + called with one argument - the chosen window. The function + is supposed to adjust the size of the frame; its return value + is ignored. + +`preserve-size' -- The value should be either (t . nil) to preserve the width of the chosen window, (nil . t) to preserve its height or (t . t) to preserve its height and width in future changes of the window configuration. ^ permalink raw reply related [flat|nested] 58+ messages in thread
* Re: Patch proposal: display symbol source code in help buffers 2021-09-22 7:49 ` martin rudalics 2021-09-22 16:04 ` Juri Linkov @ 2021-09-22 22:38 ` Arthur Miller 2021-09-23 8:22 ` martin rudalics 1 sibling, 1 reply; 58+ messages in thread From: Arthur Miller @ 2021-09-22 22:38 UTC (permalink / raw) To: martin rudalics; +Cc: emacs-devel, Juri Linkov martin rudalics <rudalics@gmx.at> writes: >> That sounds like useful approach. Something like: >> >> (defcustom help-buffer-default-height 25 >> "The default height of a help-buffer window." >> :type 'fixnum >> :group 'help >> :version "28.1") <-- :-) > > Help-buffer windows are as a rule displayed via 'display-buffer' and are > easily recognizable because their buffer is always called *Help*. So > you can simply add a 'window-height' action alist entry for them which > is considerably more versatile than what you propose above. Yes, I know; but think of new users comming from other editors and applications, having no experience with Lisp and never heard of conses and alists. I use display-buffer-alist to achieve something with *Help* buffer (and some others) myself. I posted that snippet in the other thread I don't know if all that stuff existed back in time when original poster posted his bug repport (2011), but at least nowadays, the bug should be marked as resolved, since it is possible to tell Emacs to reuse Help buffer and window, instead of opening new ones. However, I don't think my solution to that problem, same as you suggest here, is very convenient to new users. People are used to see some option they can toggle on/off, some slider they can pull left right, some value they can pull from a list or enter into some box. I think it is more helpful to see some variable with clear and descriptive name, I think new users would appreciate that. But that is just my opinion. Anyway, I have read both threads you have refered too. One of them, the Florians, (Bug#9054), is completely unrelated to what this patch does. Well it is about help buffer, but there you are concerned with wath happens *before* user enters the help buffer and in which way user will come to that buffer. > Where to pop up the location of the source and how to get rid of > it is a question we currently discuss in Bug#9054 And that is exactly what I say above; this patch is completely not concerned with where and how you will pop that window and source code file. I am concerned with what happens in a help buffer, after user requested help, *not* how user come to that point. I don't even pop a source file; just code for a function or var. I wish to make help buffer more usable, because I wisth to go away from Helpful and I see no reason why we should wait for something unrelated you guys had 10 years to get consensus on but didn't :). Sorry, that one was hard not to pick on :). I know I sound biased, but the suggested patch works above my personal expectations. Suddenly the help buffer acts like a code browser. I really suggest you to try and click a bit around. It wasn't my intention, since I never do that in Helpful. I even don't know if it is possible there, but due to back/forward functionality in built-in help buffer, it works really nice. There is one bug I know off: it can't display code for *some* aliases, for example 'find' which is alias for cl-find. Some other aliases works fine. Besides that, I am very happy with it. > If and > when we reach a consensus there, we can add an option to immediately > display the source in the *Help* buffer or a window right below it I would like to cite Eli here from the other thread, and say "life is too short." :) I am sure you guys will come up with something wonderful and amazing, but untill you reach concensus, I'll go and work on some other options, because the proposed patch is my proposal. It came up completely unrelated and independent of that discussion, but it is touching the things you are discussing there. If the code is bad you can improve on it and rework it, but as I understand my proposal seems not be accepted, since I see you guys discuss options in the other thread (Bug#36767), which I have already implemented and demoed. Nobody but Tassilo has commented on, so I guess nobody has neither cared to try it nor see the demo. Anyway, thanks for your input in the other comment, it was helpful. ^ permalink raw reply [flat|nested] 58+ messages in thread
* Re: Patch proposal: display symbol source code in help buffers 2021-09-22 22:38 ` Arthur Miller @ 2021-09-23 8:22 ` martin rudalics 0 siblings, 0 replies; 58+ messages in thread From: martin rudalics @ 2021-09-23 8:22 UTC (permalink / raw) To: Arthur Miller; +Cc: Juri Linkov, emacs-devel >> Help-buffer windows are as a rule displayed via 'display-buffer' and are >> easily recognizable because their buffer is always called *Help*. So >> you can simply add a 'window-height' action alist entry for them which >> is considerably more versatile than what you propose above. > > Yes, I know; but think of new users comming from other editors and applications, > having no experience with Lisp and never heard of conses and alists. Such users likely do not run 'temp-buffer-resize-mode' either. > I use display-buffer-alist to achieve something with *Help* buffer (and some > others) myself. I posted that snippet in the other thread I don't know if all > that stuff existed back in time when original poster posted his bug repport > (2011), but at least nowadays, the bug should be marked as resolved, since it is > possible to tell Emacs to reuse Help buffer and window, instead of opening new > ones. I got lost. Which bug report is that? > However, I don't think my solution to that problem, same as you suggest here, > is very convenient to new users. People are used to see some option they can > toggle on/off, some slider they can pull left right, some value they can pull > from a list or enter into some box. I think it is more helpful to see some > variable with clear and descriptive name, I think new users would appreciate > that. But that is just my opinion. The solution I suggested is for users who know well what they want. New users should be content with the default and, after experimenting with it for some time, 'temp-buffer-resize-mode'. BTW, most Emacs developers use the default, I presume. > Anyway, I have read both threads you have refered too. One of them, the > Florians, (Bug#9054), is completely unrelated to what this patch does. Well it > is about help buffer, but there you are concerned with wath happens *before* user > enters the help buffer and in which way user will come to that buffer. > >> Where to pop up the location of the source and how to get rid of >> it is a question we currently discuss in Bug#9054 > > And that is exactly what I say above; this patch is completely not concerned > with where and how you will pop that window and source code file. I am concerned > with what happens in a help buffer, after user requested help, *not* how user come > to that point. I don't even pop a source file; just code for a function or var. Sorry but did you really read bug report 9054? That report says Two windows. Run `describe-function' on a function: The help buffer pops up in the other window. `other-window' and click the link to display the source file: my original buffer is gone. Very annoying. What I would like: Either a function that displays the source for the function at point in the other window or for the *Help* buffer to open the source file in the same window (i.e. the window which displays the *Help* buffer). so it clearly talks about what happens *after* the user entered the help buffer and not as you claim above "there you are concerned with wath happens *before* user enters the help buffer and in which way user will come to that buffer". > I wish to make help buffer more usable, because I wisth to go away from Helpful > and I see no reason why we should wait for something unrelated you guys had 10 > years to get consensus on but didn't :). Sorry, that one was hard not to pick on > :). > > I know I sound biased, but the suggested patch works above my personal > expectations. Suddenly the help buffer acts like a code browser. I can't speak for others but IMHO a code browser should operate only on the code itself and not on a copy of it. I wouldn't even want to clone a buffer or use an indirect buffer for that purpose. For me it's an essential aspect of free software that browsing and hacking code go hand in hand. > I really > suggest you to try and click a bit around. It wasn't my intention, since I never > do that in Helpful. I even don't know if it is possible there, but due to > back/forward functionality in built-in help buffer, it works really nice. Sorry but I won't be of much help in this regard. martin ^ permalink raw reply [flat|nested] 58+ messages in thread
* Re: Patch proposal: display symbol source code in help buffers 2021-09-20 6:37 ` Gregor Zattler 2021-09-20 7:01 ` Eli Zaretskii 2021-09-20 8:21 ` martin rudalics @ 2021-09-20 12:19 ` Dmitry Gutov 2021-09-20 15:13 ` Arthur Miller 2 siblings, 1 reply; 58+ messages in thread From: Dmitry Gutov @ 2021-09-20 12:19 UTC (permalink / raw) To: emacs-devel On 20.09.2021 09:37, Gregor Zattler wrote: >>> Here is my second proposal to bring built-in help on par with external >>> offerings. >> Thanks. Like Lars, I wonder why this is needed, given that we already >> have a way to show the sources by a command invoked from the*Help* >> buffer. > I for instance did not know that hitting the `s' key would > show me the source. > Help buffers also have a visible button (at the end of the first line) which takes you to the source. ^ permalink raw reply [flat|nested] 58+ messages in thread
* Re: Patch proposal: display symbol source code in help buffers 2021-09-20 12:19 ` Dmitry Gutov @ 2021-09-20 15:13 ` Arthur Miller 0 siblings, 0 replies; 58+ messages in thread From: Arthur Miller @ 2021-09-20 15:13 UTC (permalink / raw) To: Dmitry Gutov; +Cc: emacs-devel Dmitry Gutov <dgutov@yandex.ru> writes: > On 20.09.2021 09:37, Gregor Zattler wrote: >>>> Here is my second proposal to bring built-in help on par with external >>>> offerings. >>> Thanks. Like Lars, I wonder why this is needed, given that we already >>> have a way to show the sources by a command invoked from the*Help* >>> buffer. >> I for instance did not know that hitting the `s' key would >> show me the source. >> > > Help buffers also have a visible button (at the end of the first line) which > takes you to the source. Yes, but with all the consekvence as Gregor wrote (new buffer in new location, unless buffer is already open). ^ permalink raw reply [flat|nested] 58+ messages in thread
* Re: Patch proposal: display symbol source code in help buffers 2021-09-20 5:59 ` Eli Zaretskii 2021-09-20 6:37 ` Gregor Zattler @ 2021-09-20 15:11 ` Arthur Miller 1 sibling, 0 replies; 58+ messages in thread From: Arthur Miller @ 2021-09-20 15:11 UTC (permalink / raw) To: Eli Zaretskii; +Cc: emacs-devel Eli Zaretskii <eliz@gnu.org> writes: >> From: Arthur Miller <arthur.miller@live.com> >> Date: Sun, 19 Sep 2021 21:50:35 +0200 >> >> Here is my second proposal to bring built-in help on par with external >> offerings. > > Thanks. Like Lars, I wonder why this is needed, given that we already > have a way to show the sources by a command invoked from the *Help* > buffer. Can you tell how this feature makes a difference wrt what we > have already? I just answered to I think Lars or Stefan's answer to Lars, where I elaborate a bit more why is it useful, if you can peek there, it would be nice so I dont' need to re-write everything. Short summary: - people new to Emacs are maybe not so inclined to look at the code, having code auto displayed makes at least me more inclined to actually look at the sources so, I think it has some educational purpose - I don't always want to deep dive into the source, sometimes I just glimpse over to confirm my (mis)understanding :). - no extra action needed to take to see the source (switch to buffer, hit 's) - sometimes the source is just a wrapper, so I will need to perform a search in the source file, here I can actually hit C-h f on the symbol in help buffer and opened that function directly - people are used to Helpful - it is on a defcustom, nil by default, so having it as an opt-in does not cost much > And a minor nit: > >> * lisp/help-mode.el ('help-mode-inline-source'): New option. >> ('help--fetch-c-src'): New function. >> ('help--fetch-lisp-src'): New function. >> ('help--symbol-source'): New function. >> ('help-make-xrefs): Check for 'help-mode-inline-source' and >> call 'help--symbol-source' to perform insertion when possible. > > We don't quote symbols inside the parentheses, only in the > descriptions that follow the colon, as you did in the last entry. Aha, yes yes, thanks, I'll remember that for the next time. ^ permalink raw reply [flat|nested] 58+ messages in thread
end of thread, other threads:[~2021-10-01 14:14 UTC | newest] Thread overview: 58+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2021-09-19 19:50 Patch proposal: display symbol source code in help buffers Arthur Miller 2021-09-20 5:46 ` Lars Ingebrigtsen 2021-09-20 6:09 ` Stefan Kangas 2021-09-20 6:14 ` Lars Ingebrigtsen 2021-09-20 7:17 ` Ihor Radchenko 2021-09-20 7:43 ` Stefan Kangas 2021-09-20 8:29 ` martin rudalics 2021-09-20 9:04 ` Ihor Radchenko 2021-09-20 23:45 ` Arthur Miller 2021-09-21 4:16 ` Lars Ingebrigtsen 2021-09-21 6:59 ` Ihor Radchenko 2021-09-21 7:41 ` Stefan Kangas 2021-09-21 8:38 ` Eli Zaretskii 2021-09-21 9:17 ` Ihor Radchenko 2021-09-21 16:49 ` Lars Ingebrigtsen 2021-10-01 7:05 ` Ihor Radchenko 2021-10-01 7:09 ` Lars Ingebrigtsen 2021-10-01 7:21 ` Ihor Radchenko 2021-10-01 7:21 ` Lars Ingebrigtsen 2021-10-01 9:04 ` Ihor Radchenko 2021-10-01 12:20 ` Lars Ingebrigtsen 2021-10-01 7:24 ` Eli Zaretskii 2021-10-01 9:08 ` Ihor Radchenko 2021-10-01 10:24 ` Eli Zaretskii 2021-10-01 14:14 ` Ihor Radchenko 2021-09-21 8:34 ` martin rudalics 2021-09-20 15:01 ` Arthur Miller 2021-09-21 7:41 ` Stefan Kangas 2021-09-20 15:27 ` Arthur Miller 2021-09-20 6:47 ` Eli Zaretskii 2021-09-20 15:27 ` Arthur Miller 2021-09-20 14:55 ` Arthur Miller 2021-09-21 4:18 ` Lars Ingebrigtsen 2021-09-21 10:26 ` Arthur Miller 2021-09-20 15:23 ` Arthur Miller 2021-09-20 5:59 ` Eli Zaretskii 2021-09-20 6:37 ` Gregor Zattler 2021-09-20 7:01 ` Eli Zaretskii 2021-09-20 15:21 ` Arthur Miller 2021-09-20 8:21 ` martin rudalics 2021-09-20 18:13 ` Arthur Miller 2021-09-21 8:34 ` martin rudalics 2021-09-21 10:24 ` Arthur Miller 2021-09-21 16:52 ` martin rudalics 2021-09-21 18:56 ` Arthur Miller 2021-09-21 17:30 ` Juri Linkov 2021-09-21 19:13 ` Arthur Miller 2021-09-22 7:49 ` martin rudalics 2021-09-22 16:04 ` Juri Linkov 2021-09-22 17:52 ` martin rudalics 2021-09-23 8:15 ` martin rudalics 2021-09-23 15:52 ` Juri Linkov 2021-09-26 9:10 ` martin rudalics 2021-09-22 22:38 ` Arthur Miller 2021-09-23 8:22 ` martin rudalics 2021-09-20 12:19 ` Dmitry Gutov 2021-09-20 15:13 ` Arthur Miller 2021-09-20 15:11 ` Arthur Miller
Code repositories for project(s) associated with this external index https://git.savannah.gnu.org/cgit/emacs.git https://git.savannah.gnu.org/cgit/emacs/org-mode.git This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.