I found coloured headings disturbing so I (setq org-level-color-stars-only t). But now the headings are too similar to regular text, and their face is default so they can't be formatted by changing a face.

Question: how can I display all headings in uppercase without actually upcasing them?

It would be nice to have a function for toggling uppercase(dly displayed) headings.

@jagrg Examples are: org-columns which is not playing nicely with your approach and org-clock-display which seems to work fine with your approach. Maybe the small hickup with org-columns is acceptable. Go and post your answer. You also need to provide some means for editing the headings. Maybe, entering them (with mouse or keyboard) opens them. The overlays need to be updated if one leaves an edited heading. There are also problems with automagically updated items in the heading like todo-states.
– TobiasJun 26 at 12:17

Jagrg's solution works. To remove the overlays you can give them a property (overlay-put overlay 'name "org-heading-upcased") and remove them afterwards all at once with (remove-overlays nil nil 'name "org-heading-upcased"). Imo it's probably better to just temporarily use another font for the headings (to see what this would do call it with M-x set-face-font and the select org-level-1 and the new font. Too bad it doesn't seem possible to use all caps or small caps variants. You could use a font that is small caps only though.
– HubisanJun 26 at 13:39

1 Answer
1

Here's my attempt with help from @Tobias and @Hubisan. You can toggle the overlay using the toggle-headline-overlay command. You can also edit the headline as usual. BTW this is a proof of concept. Expect some hiccups.