Ingo Lohmar writes: > I stumbled upon weird behavior when using `org-toggle-link-display', and > I finally checked what that is about. > > Observation: > - use `org-toggle-link-display' in org buffer A, and (coming > from the defaults) links are now shown in full (not just the > description), but only in buffer A > - switch to org buffer B, still only showing the description part, and > again use `o-t-l-d' --- nothing changes > - the state for new org buffers is as before, onle link descriptions are > shown. > > This behavior is very confusing, IMO. The reason is simple. The > display hiding comes from changing the `buffer-invisibility-spec', which > is automatically buffer-local. But the state of the org toggle is kept > in `org-link-descriptive', which is global!
Thanks for the clear problem description and analysis. I agree that this is a bug and don't suspect that anyone is relying on org-toggle-link-display to toggling the global value. Gustavo reported the same issue at <https://orgmode.org/list/87lfeqzm3a....@gmail.com>, but unfortunately it didn't get any attention back then. > I suggest a simple fix that I just tested: make `org-link-descriptive' > automatically buffer-local, by adding ":local t" to the defcustom. Hmm, I think a problem with `:local t' (or, equivalently, make-variable-buffer-local for backward compatibility reasons) is that then you'd interfere with user customization that directly sets this after ol.el is loaded. You could also still get into a mismatched state like you described above if you load an Org buffer, set the value through the customization interface, and then call org-toggle-link-display in that buffer. Instead I've updated the body of `org-mode' to make org-link-descriptive buffer-local (702e782cb).