Inhibit childframe display when moving point (#21)
(only in at-point mode)
This commit is contained in:
parent
1cb8f409e0
commit
6c5c9d57d8
40
eldoc-box.el
40
eldoc-box.el
@ -124,7 +124,14 @@ Run inside the new buffer.")
|
|||||||
"Hook run after doc frame is setup but just before it is made visible.
|
"Hook run after doc frame is setup but just before it is made visible.
|
||||||
Each function runs inside the new frame and receives the main frame as argument.")
|
Each function runs inside the new frame and receives the main frame as argument.")
|
||||||
|
|
||||||
|
(defvar eldoc-box-self-insert-command-list '(self-insert-command outshine-self-insert-command)
|
||||||
|
"Commands in this list are considered self-insert-command by eldoc-box.
|
||||||
|
See `eldoc-box-inhibit-display-when-moving'.")
|
||||||
|
|
||||||
;;;;; Function
|
;;;;; Function
|
||||||
|
(defvar eldoc-box--inhibit-childframe nil
|
||||||
|
"If non-nil, inhibit display of childframe.")
|
||||||
|
|
||||||
(defvar eldoc-box--frame nil ;; A backstage variable
|
(defvar eldoc-box--frame nil ;; A backstage variable
|
||||||
"The frame to display doc.")
|
"The frame to display doc.")
|
||||||
|
|
||||||
@ -159,7 +166,8 @@ Intended for internal use."
|
|||||||
|
|
||||||
;;;###autoload
|
;;;###autoload
|
||||||
(define-minor-mode eldoc-box-hover-mode
|
(define-minor-mode eldoc-box-hover-mode
|
||||||
"Displays hover documentations in a childframe. This mode is buffer local."
|
"Displays hover documentations in a childframe.
|
||||||
|
The default position of childframe is upper corner."
|
||||||
:lighter " ELDOC-BOX"
|
:lighter " ELDOC-BOX"
|
||||||
(if eldoc-box-hover-mode
|
(if eldoc-box-hover-mode
|
||||||
(progn (when eldoc-box-hover-at-point-mode
|
(progn (when eldoc-box-hover-at-point-mode
|
||||||
@ -169,8 +177,9 @@ Intended for internal use."
|
|||||||
|
|
||||||
;;;###autoload
|
;;;###autoload
|
||||||
(define-minor-mode eldoc-box-hover-at-point-mode
|
(define-minor-mode eldoc-box-hover-at-point-mode
|
||||||
"A convenient minor mode to display doc at point.
|
"A convenient minor mode to display doc at point
|
||||||
You can use C-g to hide the doc."
|
instead of at upper corner. You can use C-g to hide the doc.
|
||||||
|
The childframe will follow you when you type."
|
||||||
:lighter " ELDOC-BOX"
|
:lighter " ELDOC-BOX"
|
||||||
(if eldoc-box-hover-at-point-mode
|
(if eldoc-box-hover-at-point-mode
|
||||||
(progn (when eldoc-box-hover-mode
|
(progn (when eldoc-box-hover-mode
|
||||||
@ -293,15 +302,36 @@ FRAME is the childframe, WINDOW is the primary window."
|
|||||||
;; move position
|
;; move position
|
||||||
(set-frame-position frame (car pos) (cdr pos))))
|
(set-frame-position frame (car pos) (cdr pos))))
|
||||||
|
|
||||||
|
(defvar eldoc-box--inhibit-childframe-timer nil
|
||||||
|
"When this timer is on, inhibit childframe display.
|
||||||
|
Intended for follow-cursor to disable display when moving cursor.")
|
||||||
|
|
||||||
|
(defun eldoc-box--inhibit-childframe-for (sec)
|
||||||
|
"Inhibit display of childframe for SEC seconds."
|
||||||
|
(when eldoc-box--inhibit-childframe-timer
|
||||||
|
(cancel-timer eldoc-box--inhibit-childframe-timer))
|
||||||
|
(eldoc-box-quit-frame)
|
||||||
|
(setq eldoc-box--inhibit-childframe t
|
||||||
|
eldoc-box--inhibit-childframe-timer
|
||||||
|
(run-with-timer sec nil
|
||||||
|
(lambda ()
|
||||||
|
(setq eldoc-box--inhibit-childframe nil)))))
|
||||||
|
|
||||||
(defun eldoc-box--follow-cursor ()
|
(defun eldoc-box--follow-cursor ()
|
||||||
"Make childframe follow cursor in at-point mode."
|
"Make childframe follow cursor in at-point mode."
|
||||||
(when (frame-live-p eldoc-box--frame)
|
(if (member this-command eldoc-box-self-insert-command-list)
|
||||||
|
(progn (when (frame-live-p eldoc-box--frame)
|
||||||
(eldoc-box--update-childframe-geometry
|
(eldoc-box--update-childframe-geometry
|
||||||
eldoc-box--frame (frame-selected-window eldoc-box--frame))))
|
eldoc-box--frame (frame-selected-window eldoc-box--frame))))
|
||||||
|
;; if not typing, inhibit display
|
||||||
|
(eldoc-box--inhibit-childframe-for 0.2)))
|
||||||
|
|
||||||
(defun eldoc-box--get-frame (buffer)
|
(defun eldoc-box--get-frame (buffer)
|
||||||
"Return a childframe displaying BUFFER.
|
"Return a childframe displaying BUFFER.
|
||||||
Checkout `lsp-ui-doc--make-frame', `lsp-ui-doc--move-frame'."
|
Checkout `lsp-ui-doc--make-frame', `lsp-ui-doc--move-frame'."
|
||||||
|
(if eldoc-box--inhibit-childframe
|
||||||
|
;; if inhibit display, do nothing
|
||||||
|
eldoc-box--frame
|
||||||
(let* ((after-make-frame-functions nil)
|
(let* ((after-make-frame-functions nil)
|
||||||
(before-make-frame-hook nil)
|
(before-make-frame-hook nil)
|
||||||
(parameter (append eldoc-box-frame-parameters
|
(parameter (append eldoc-box-frame-parameters
|
||||||
@ -328,7 +358,7 @@ Checkout `lsp-ui-doc--make-frame', `lsp-ui-doc--move-frame'."
|
|||||||
(eldoc-box--update-childframe-geometry frame window)
|
(eldoc-box--update-childframe-geometry frame window)
|
||||||
(setq eldoc-box--frame frame)
|
(setq eldoc-box--frame frame)
|
||||||
(run-hook-with-args 'eldoc-box-frame-hook main-frame)
|
(run-hook-with-args 'eldoc-box-frame-hook main-frame)
|
||||||
(make-frame-visible frame)))
|
(make-frame-visible frame))))
|
||||||
|
|
||||||
|
|
||||||
;;;;; ElDoc
|
;;;;; ElDoc
|
||||||
|
Loading…
Reference in New Issue
Block a user