eldoc-frame/README.org
2019-01-04 18:55:48 -05:00

3.3 KiB
Raw Blame History

ElDoc box

This package displays ElDoc documentations in a childframe.

/jessieh/eldoc-frame/media/commit/7bd69875e0c36992829819230de943f5a4a5af9e/screenshot.png
Using with eglot in python-mode

Install

Get the file, add to load path, and

(require 'eldoc-box)

Usage

Function

Enable either mode will make eldoc display documentation on a popup childframe. The difference is the position of the childframe — the first minor mode displays the childframe on the (left or right) upper corner, while the second displays the childframe right below point.

Note that eldoc-box-hover-at-point-mode enables eldoc-box-hover-mode — it just adds some more configuration on top of the latter, so you want to disable “at-point” mode before switching to eldoc-box-hover-mode.

eldoc-box-hover-mode
Display documentation of the symbol at point in a childframe on upper corner.
eldoc-box-hover-at-point-mode
Display documentation of the symbol at point in a childframe below point. (That's what the at-point part mean)

Face

eldoc-box-border
Adjust :background of this face for border color.
eldoc-box-body
Adjust :background and :font of this face for background color and font of the childframe.

Variable

eldoc-box-max-pixel-width & eldoc-box-max-pixel-height
Set them according to the screen resolution of your machine.
eldoc-box-only-multi-line
Set this to non-nil and eldoc-box only display multi-line message in childframe. One line messages are left in minibuffer.
eldoc-box-cleanup-interval
After this amount of seconds will eldoc-box attempt to cleanup the childframe. E.g. if it is set to 1, the childframe is cleared 1 second after you moved the point to somewhere else (that doesn't have a doc to show). This doesn't apply to eldoc-box-hover-at-point-mode, in that mode the childframe is cleared as soon as point moves.

Use with eglot

As of writing this README, eglot doesn't have a public mode hook, use this hook:

(add-hook 'eglot--managed-mode-hook #'eldoc-box-hover-mode t)

Help at point hack

If all you need is a "help at point" popup to be used with eglot, here is my hack. You don't need to enable any minor mode, just call this command on the symbol. (In fact, I dont even use eldoc-box-hover-mode anymore. I bind this hack to C-h C-h and lived happily ever after.)

(defun eldoc-box-hack-cleanup ()
  "Try to clean up the childframe made by eldoc-box hack."
  (if (eq (point) eldoc-box-hack-last-point)
      (run-with-timer 0.1 nil #'eldoc-box-hack-cleanup)
    (eldoc-box-quit-frame)))

(defun moon-help-at-point ()
  (interactive)
  (when eglot--managed-mode
    (require 'eldoc-box)
    (let ((eldoc-box-position-function #'eldoc-box--default-at-point-position-function))
      (eldoc-box--display
       (eglot--dbind ((Hover) contents range)
           (jsonrpc-request (eglot--current-server-or-lose) :textDocument/hover
                            (eglot--TextDocumentPositionParams))
         (when (seq-empty-p contents) (eglot--error "No hover info here"))
         (eglot--hover-info contents range))))
    (setq eldoc-box-hack-last-point (point))
    (run-with-timer 0.1 nil #'eldoc-box-hack-cleanup)))

Contributors