Re: Footnote tooltips (an attempt)
John Kitchin writes: > that is a nice solution. I probably should have read the docstring on > org-footnote-get-definition a little more closely, it has the > definition you need in it! Well, it's a minor detail. The really brilliant thing here is your idea of passing the function as a help-echo value, instead of a text string. It works like a charm! :-). (I didn't know that the help-echo property could accept a function as a value, and reading the documentation I realize that this has a lot of potential...). Best regards, And thanks again, Juan Manuel
Re: Footnote tooltips (an attempt)
that is a nice solution. I probably should have read the docstring on org-footnote-get-definition a little more closely, it has the definition you need in it! John --- John Kitchin (he/his) Professor Doherty Hall A207F Department of Chemical Engineering Carnegie Mellon University Pittsburgh, PA 15213 412-268-7803 http://kitchingroup.cheme.cmu.edu https://pointbreezepubs.gumroad.com/ pycse bookstore On Wed, Feb 23, 2022 at 9:04 PM Juan Manuel Macías wrote: > Hi John, > > John Kitchin writes: > > > I think this might be a simpler approach. what you want (I think) is > > to leverage font-lock on tooltips to set a help-echo function instead > > of a string. You can override org-activate-footnote-links with an > > advice (which makes it easy to undo of you need). The tooltip function > > then looks up the tooltip when you ask for it. The 3 pieces are below. > > the first function looks up and returns a tooltip. the second is a > > lightly modified version of org-activate-footnote-links which just > > replaces the footnote reference string with the first function. the > > last piece is the override advice. you could use a minor mode to > > toggle the advice on and off. > > Thank you very much for your comment and code, which has helped me to > clarify my ideas. Your approach is in a certain way similar to the last > version of my attempt, which I attached in the previous message: through > a first function I get the definition of each note, which is returned as > a text string. And I also override via `advice-add' > 'org-activate-footnonte-links' with a new function, which is also > slightly modified, including a variable that gets the tooltip from the > first function. The problem is that with my approach the tooltip does > not appear on the fly, but when the next note is added. I think what my > first function (the one that gets the footnote definition) was missing > was the three arguments of your first function: `_win _obj position' and > the (goto-char position), and pass it as a symbol (not as a variable) to > the second function that overrides org-activate-footnote-links, as you > do in your code. Modifying my function from your code, it would look > something like this: > > (defun my-org-fn-get-def (_win _obj position) > (save-excursion > (goto-char position) > (let* ((el (org-element-context)) >(label (org-element-property :label el)) >(def (nth 3 (org-footnote-get-definition label > (when def (concat "Footnonte: " def) > > And it seems that now the tooltips appear instantly, and are updated in > real time. > > Best regards, > > Juan Manuel >
Re: Footnote tooltips (an attempt)
Hi John, John Kitchin writes: > I think this might be a simpler approach. what you want (I think) is > to leverage font-lock on tooltips to set a help-echo function instead > of a string. You can override org-activate-footnote-links with an > advice (which makes it easy to undo of you need). The tooltip function > then looks up the tooltip when you ask for it. The 3 pieces are below. > the first function looks up and returns a tooltip. the second is a > lightly modified version of org-activate-footnote-links which just > replaces the footnote reference string with the first function. the > last piece is the override advice. you could use a minor mode to > toggle the advice on and off. Thank you very much for your comment and code, which has helped me to clarify my ideas. Your approach is in a certain way similar to the last version of my attempt, which I attached in the previous message: through a first function I get the definition of each note, which is returned as a text string. And I also override via `advice-add' 'org-activate-footnonte-links' with a new function, which is also slightly modified, including a variable that gets the tooltip from the first function. The problem is that with my approach the tooltip does not appear on the fly, but when the next note is added. I think what my first function (the one that gets the footnote definition) was missing was the three arguments of your first function: `_win _obj position' and the (goto-char position), and pass it as a symbol (not as a variable) to the second function that overrides org-activate-footnote-links, as you do in your code. Modifying my function from your code, it would look something like this: (defun my-org-fn-get-def (_win _obj position) (save-excursion (goto-char position) (let* ((el (org-element-context)) (label (org-element-property :label el)) (def (nth 3 (org-footnote-get-definition label (when def (concat "Footnonte: " def) And it seems that now the tooltips appear instantly, and are updated in real time. Best regards, Juan Manuel
Re: Footnote tooltips (an attempt)
I think this might be a simpler approach. what you want (I think) is to leverage font-lock on tooltips to set a help-echo function instead of a string. You can override org-activate-footnote-links with an advice (which makes it easy to undo of you need). The tooltip function then looks up the tooltip when you ask for it. The 3 pieces are below. the first function looks up and returns a tooltip. the second is a lightly modified version of org-activate-footnote-links which just replaces the footnote reference string with the first function. the last piece is the override advice. you could use a minor mode to toggle the advice on and off. #+BEGIN_SRC emacs-lisp (defun footnote-reference-tooltip (_win _obj position) "Get footnote contents" (save-excursion (goto-char position) (let* ((fnf (org-element-context)) (label (org-element-property :label fnf)) (p (nth 1 (org-footnote-get-definition label (when p (goto-char p))) (let ((fnd (org-element-context))) (string-trim (buffer-substring (org-element-property :contents-begin fnd) (org-element-property :contents-end fnd)) (defun footnote-tooltip (limit) "Add text properties for footnotes." (let ((fn (org-footnote-next-reference-or-definition limit))) (when fn (let* ((beg (nth 1 fn)) (end (nth 2 fn)) (label (car fn)) (referencep (/= (line-beginning-position) beg))) (when (and referencep (nth 3 fn)) (save-excursion (goto-char beg) (search-forward (or label "fn:")) (org-remove-flyspell-overlays-in beg (match-end 0 (add-text-properties beg end (list 'mouse-face 'highlight 'keymap org-mouse-map 'help-echo (if referencep #'footnote-reference-tooltip "Footnote definition") 'font-lock-fontified t 'font-lock-multiline t 'face 'org-footnote)) (advice-add 'org-activate-footnote-links :override 'footnote-tooltip) #+END_SRC John --- John Kitchin (he/his) Professor Doherty Hall A207F Department of Chemical Engineering Carnegie Mellon University Pittsburgh, PA 15213 412-268-7803 http://kitchingroup.cheme.cmu.edu https://pointbreezepubs.gumroad.com/ pycse bookstore On Wed, Feb 23, 2022 at 2:52 PM Juan Manuel Macías wrote: > Hi Samuel, > > Samuel Wales writes: > > > what a great idea. i am interested in your comments. emacs has lots > > of tooltip-related features. eldoc, help-at-pt, mouse-avoidance, etc. > > you don't want tooltips when your mouse happens to end up over. or > > for your mouse to go haywire just because you ended up over. i ran > > into a lot of confusion with various mechanisms. > > > > [e.g. i like having tooltips in echo area, and don't like eldoc for > > function sigs, and do want cursor/mouse consistency.] > > > > i found that some tooltip features actually break others. just > > wondering if you noticed this and what you think of it. > > I don't have much experience with Emacs tooltips and I haven't studied > them much, because I hardly use the mouse in Emacs :-) But I noticed > that you can also display the content of a tooltip in the echo area, > with `' (`display-local-help'), or even set to non-nil > `help-at-pt-display-when-idle' and evaluate `help-at-pt-set-timer', so > that a tootltip is displayed at point; and in this scenario, they can be > useful to me to quickly have some type of information. > > You can also set this variable to force tooltips always in the echo > area: > > (setq tooltip-use-echo-area t) > > Anyway, I haven't given up on the idea of footnote tooltips yet. Here's > a new version of the code I attached in my first post in this thread, > and I think it's simpler now and works better, though I don't know if it > might have any side effects... Footnote tooltips are activated with the > minor mode `my-org-fn-tooltip-mode'. > > A new demo video: > > https://cloud.disroot.org/s/sBGJjCzbYgYbn5k > > Best regards, > > Juan Manuel > >
Re: Footnote tooltips (an attempt)
Hi Samuel, Samuel Wales writes: > what a great idea. i am interested in your comments. emacs has lots > of tooltip-related features. eldoc, help-at-pt, mouse-avoidance, etc. > you don't want tooltips when your mouse happens to end up over. or > for your mouse to go haywire just because you ended up over. i ran > into a lot of confusion with various mechanisms. > > [e.g. i like having tooltips in echo area, and don't like eldoc for > function sigs, and do want cursor/mouse consistency.] > > i found that some tooltip features actually break others. just > wondering if you noticed this and what you think of it. I don't have much experience with Emacs tooltips and I haven't studied them much, because I hardly use the mouse in Emacs :-) But I noticed that you can also display the content of a tooltip in the echo area, with `' (`display-local-help'), or even set to non-nil `help-at-pt-display-when-idle' and evaluate `help-at-pt-set-timer', so that a tootltip is displayed at point; and in this scenario, they can be useful to me to quickly have some type of information. You can also set this variable to force tooltips always in the echo area: (setq tooltip-use-echo-area t) Anyway, I haven't given up on the idea of footnote tooltips yet. Here's a new version of the code I attached in my first post in this thread, and I think it's simpler now and works better, though I don't know if it might have any side effects... Footnote tooltips are activated with the minor mode `my-org-fn-tooltip-mode'. A new demo video: https://cloud.disroot.org/s/sBGJjCzbYgYbn5k Best regards, Juan Manuel fn-tooltips.org Description: Lotus Organizer
Re: Footnote tooltips (an attempt)
Ypo writes: > I love it! > I am going to read your code, Juan Manuel, I won't understand anything > but that function is very interesting for me, since it could be used > too with internal links, I suppose. Org links already have tooltips out of the box. You can also display the tooltip in the echo area by pressing (`display-local-help'). If you want to try the code from my first post, please replace the `my-org-fn-make-tooltips' function with this new version, which is much simpler and doesn't have time-consuming issues to create or update tooltips. (However, I find the function I put in my second post more useful (for my use case: I don't use the mouse very much). #+begin_src emacs-lisp (defun my-org-fn-make-tooltips () (interactive) (org-element-map (org-element-parse-buffer) 'footnote-reference (lambda (ref) (let* ((label (org-element-property :label ref)) (label-from (org-element-property :begin ref)) (label-to (org-element-property :end ref)) (def (org-with-wide-buffer (org-footnote-goto-definition label) (let* ((e (org-element-context)) (from (org-element-property :contents-begin e)) (to (org-element-property :contents-end e))) (buffer-substring-no-properties from to (tooltip def)) (add-text-properties label-from label-to `(help-echo ,tooltip nil nil)) #+end_src Best regards, Juan Manuel
Footnote tooltips (an attempt)
I love it! I am going to read your code, Juan Manuel, I won't understand anything but that function is very interesting for me, since it could be used too with internal links, I suppose. Thanks
Re: Footnote tooltips (an attempt)
I answer myself to comment a couple more things on this question of footnotes and tooltips. I think my approach is quite poor, and also when it comes to files with many notes, it takes a long time to create or update the list of tooltips. So I think I'll give up on' footnote tooltips. If what it is about is being able to see the content of a footnote quickly, I have written this other simpler function, which displays the content of a footnote at point, in the echo area. Since `' (`display-local-help') is not very useful in a footnote reference, I recycle the shortcut for my function, if the context is a footnote reference. I share it here, in case it is useful to someone. ┌ │ (defun my-org-footnote-show-content () │ "Displays the content of a footnote at point, in the echo area" │ (interactive) │ (if (not (equal (org-element-type (org-element-context)) 'footnote-reference)) │ (error "Not on a footnote reference!") │ (let* ((elt (org-element-context)) │ (label (org-element-property :label elt)) │ (def (org-with-wide-buffer │(org-footnote-goto-definition label) │(let* ((e (org-element-context)) │ (from (org-element-property :contents-begin e)) │ (to (org-element-property :contents-end e))) │ (buffer-substring-no-properties from to) │ (message def │ │ (defun mi-display-local-help () │ (interactive) │ (if (and (derived-mode-p 'org-mode) │ (equal (org-element-type (org-element-context)) 'footnote-reference)) │ (my-org-footnote-show-content) │ (call-interactively 'display-local-help))) │ │ (global-set-key (kbd "C-h .") 'mi-display-local-help) └ Best regards, Juan Manuel Juan Manuel Macías writes: Hi all, > > I think sometimes it would be nice to have tooltips in the footnote > references, so I can see the contents of each footnote definition, > especially when I'm in a narrowed subtree; so I've tried to write some > code. I have achieved a "semi-automatic" solution. It doesn't work bad > at all, but I'm not entirely convinced either. With a minor mode the > `org-activate-footnote-links' function is overridden, and tooltips content > for all footnotes in the document are added or updated after a couple of > actions when you finish writing or editing a footnote: > `org-edit-src-exit' and `org-mark-ring-goto'. And that's where the > automatic part ends. Beyond that, tooltips must be updated/added by > calling the `my-org-fn-make-tooltips' function. > > Here is a short video demo: https://cloud.disroot.org/s/a4gejYc6PSwNWHY > > I attach the code of my poor man's footnote tooltips. Of course, any > comment and/or feedback is appreciated. > > Best regards, > > Juan Manuel > >
Footnote tooltips (an attempt)
Hi all, I think sometimes it would be nice to have tooltips in the footnote references, so I can see the contents of each footnote definition, especially when I'm in a narrowed subtree; so I've tried to write some code. I have achieved a "semi-automatic" solution. It doesn't work bad at all, but I'm not entirely convinced either. With a minor mode the `org-activate-footnote-links' function is overridden, and tooltips content for all footnotes in the document are added or updated after a couple of actions when you finish writing or editing a footnote: `org-edit-src-exit' and `org-mark-ring-goto'. And that's where the automatic part ends. Beyond that, tooltips must be updated/added by calling the `my-org-fn-make-tooltips' function. Here is a short video demo: https://cloud.disroot.org/s/a4gejYc6PSwNWHY I attach the code of my poor man's footnote tooltips. Of course, any comment and/or feedback is appreciated. Best regards, Juan Manuel fn-tooltips.org Description: Lotus Organizer