58 lines
3.2 KiB
Org Mode
58 lines
3.2 KiB
Org Mode
#+TITLE: ElDoc box
|
||
This package displays ElDoc documentations in a childframe.
|
||
|
||
#+CAPTION: Using with eglot in python-mode
|
||
[[./screenshot.png]]
|
||
|
||
* Install
|
||
Get the file, add to load path, and
|
||
#+BEGIN_SRC emacs-lisp
|
||
(require 'eldoc-box)
|
||
#+END_SRC
|
||
* 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= of this face for background color of 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:
|
||
#+BEGIN_SRC emacs-lisp
|
||
(add-hook 'eglot--managed-mode-hook #'eldoc-box-hover-mode t)
|
||
#+END_SRC
|
||
** 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 don’t even use =eldoc-box-hover-mode= anymore. I bind this hack to =C-h C-h= and lived happily ever after.)
|
||
#+BEGIN_SRC emacs-lisp
|
||
(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)))
|
||
#+END_SRC
|
||
|
||
* Contributors
|
||
- [[https://github.com/joaotavora][João Távora]]
|