However, I've run into an issue whereby
help-xref-interned doesn't play nice with
popwin. When I try to create a temp buffer for
help-xref-interned, there is a brief flash as
popwin brings the window up, then quickly dismisses it.
Therefore, it seems necessary to disable
popwin temporarily, then restore it to its original state. I'm wondering what the idiomatic way to do this is. What I have is below:
(defun *-describe-symbol-popup () "Display full documentation of symbol in a pop-up window." (interactive) (let ((doc (*-symbol-full-doc (symbol-at-point))) (x-gtk-use-system-tooltips nil)) (if (string-empty-p doc) (message "Unknown symbol, or no documentation available.") (pos-tip-show doc 'tooltip nil nil -1)))) (defmacro *-symbol-full-doc (symbol) "Return a string of the full documentation of SYMBOL, as given by `help-xref-interned'. If `popwin-mode' is active, disable it temporarily. The value of `popwin-mode' is thus always nil, even when the mode is active.'" (let* ((sym (make-symbol " sym ")) (form `(let ((,sym ,symbol)) (with-temp-buffer (let ((help-xref-following t)) (help-mode) (help-xref-interned ,sym) (buffer-string)))))) (if (fboundp #'popwin-mode) `(let ((old-popwin popwin-mode)) (popwin-mode -1) (unwind-protect ,form (popwin-mode (or old-popwin -1)))) ,form)))
Can I make this more idiomatic/less verbose?