summaryrefslogblamecommitdiffstats
path: root/2023/talks/overlay.md
blob: 440949841f952bd90ef704b62c47203027836b44 (plain) (tree)






























                                                                                                     









































































                                                                                                                                                                                                                                 





                                                               
[[!meta title="Improving compiler diagnostics with Overlays"]]
[[!meta copyright="Copyright © 2023 Jeff Trull"]]
[[!inline pages="internal(2023/info/overlay-nav)" raw="yes"]]

<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing -->
<!-- You can manually edit this file to update the abstract, add links, etc. --->


# Improving compiler diagnostics with Overlays
Jeff Trull (he/him) - Pronunciation: rhymes with "hull" and "dull", IRC: jaafar, @jaafar@hachyderm.io

[[!inline pages="internal(2023/info/overlay-before)" raw="yes"]]

Overlays are a feature of Emacs that allow changing the
appearance of text while preserving its contents. They play a prominent
role in packages like org-mode, which uses them to hide or reveal custom
properties and display inline images, and magit, which uses them to
highlight diffs.

The presenter will give a introduction to the features of overlays,
demonstrating how to:

-   Create and use overlays in Emacs Lisp code
-   Query locations in an existing buffer to find out what overlays are
present.

He will then demonstrate a new compilation minor mode for improving the
readability of error messages, using overlays to flexibly reformat portions
of the compiler output under user control.


# Discussion

## Questions and answers

-   Q: How did you draw the underbraces and overbraces?
    -   A: TikZ, the greatest drawing tool ever :) See
        <https://tex.stackexchange.com/a/128096/105203>. I went to some
        effort to match up the colors, font, and background to Emacs. I
        got quite close, I think.
-   Q: You\'ve got a nice sounding keyboard. What kind is it?
    -   A: Sorry about that. It\'s an ErgoDox EZ
-   Q: Do you find that the \"invasive\" reformatting interferes with
    navigation?
    -   A: A bit. You can\'t move your cursor into the not-real buffer
        text (indentation). But the original text is still visible, so
        that works fine.
-   Q: Can you show us the keybindings of your minor map for editing
    overlays?
    -   A: It\'s C-c - and C-c + but you can change it.
-   Q:Your examples were with c++, have you experimented with any other
    languages? Oh, thanks for the interesting talk by the way!
    -   A: Other languages don\'t have the same unpleasant behavior :) I
        say this as a long time fan of C++. But it should be possible!
-   Q: Would it be possible to include overlays in the source file
    itself. There are some language modes (Rust, for instance) that do
    this.
    -   A: \[someone else\] Sounds like enriched-mode. \[Jeff\] I\'m not
        sure what this question means; it\'s the error messages that are
        the big issue
-   Q: What are your plans for tspew in the future?
    -   A: Better future-proofing and more options for formatting
- Q: What is your repository link <https://github.com/jefftrull> ?
  - A: <https://github.com/jefftrull/tspew>
- Q: What IDEs do C++ programmers use?  If not emacs?  How do they deal
with these error messages?
  - A: VSCode is quite popular, as well as CLion and also XCode. I think they simply display the error messages as is.
- Q: Have you tried to use treesitter to parse the output?
  - A: I think it wants to parse an entire buffer. If I could write a
    grammar for a portion of the text and point it at that, that would be
    great. I could have maybe made a tsit grammar if I could have applied it to a small bit of the output
	  - (not the speaker): ISTM that since you set up the syntax tables to recognize <> as parens/whatever that Emacs should be able to parse the effective lists as sexps, but I'm not an expert on that
  - (not the speaker) ye it's true, often you want to select what the root source node type would be an AFAIK you cannot change it

- Q: "org-mode, which uses them to hide or reveal custom properties" I thought they used buffer-invisibility-spec or something like that
  - A: yes that's part of it
    - do you know of they also use text properties.  org code is usually pretty messy, so I don't know much about it
	- A: org has been moving toward text properties but I think there is a flag that will use overlays instead (!).  There's some controversy about performance that I will touch on in a bit
      - Interesting, does that initiative predate the recent performance improvements by Stefan Monnier?
  	    - A: I think so. They were known to be a problem for some time, but then that happened?
- Q: Did you use, e.g. syntax-ppss to parse the depth using the syntax table?
  - A: No I tried to though... maybe there's a better way

## Notes and discussion

-   The org file containing the presentation is here:
    <https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull.org>
-   Tony Aldon's Reddit post on visibility
    <https://www.reddit.com/r/emacs/comments/t1r2wq/have_you_ever_wondered_how_orgmode_toggles_the/>
-   Overlay performance (maybe) fixed
    <https://www.reddit.com/r/emacs/comments/yg4mvt/the_noverlay_branch_was_merged_to_master_this/>
- I think I might need to change subed-waveform to use text properties instead of overlays or fix something else that I'm doing incorrectly, since the overlays get left behind when I kill text
  - A: yeah you have to track them yourself
- Can you put the overlay object in a text property to track it?
  - A: I don't think you would mix properties and overlays in that manner. There are overlay search functions; people typically add a property that identifies them as theirs. or you can store references in a list or something
- A: One of my reasons for doing this was frustration and people talking about how great VSCode was and I *knew* that Emacs was a good match for certain kinds of problems people don't even try to solve in IDEs
- A: I actually edited this down I know it's still a lot of detail :)
- This is really good!
- Very impressive! And well explained. Thank you.
- yeah try doing that in VSCode! yeah.
- this is slick!
- i'm not a fan of ligatures, but imho :: just begs for it
  - Same, I want to see the actual thing that'll be given to the compiler/interpreter/whatever.
- That was great, showing how relatively easy it is to extend Emacs with features like that.
- From the speaker: yantar92: your help was much appreciated in the weeks I spent putting this together :)

[[!inline pages="internal(2023/info/overlay-after)" raw="yes"]]

[[!inline pages="internal(2023/info/overlay-nav)" raw="yes"]]