Merge branch 'new-feature'

This commit is contained in:
Yuan Fu 2019-10-08 10:25:09 -04:00
commit 138386aa32
No known key found for this signature in database
GPG Key ID: 56E19BC57664A442

View File

@ -80,7 +80,8 @@ in that mode the childframe is cleared as soon as point moves.")
(internal-border-width . 1) (internal-border-width . 1)
(vertical-scroll-bars . nil) (vertical-scroll-bars . nil)
(horizontal-scroll-bars . nil) (horizontal-scroll-bars . nil)
(right-fringe . 0) (right-fringe . 3)
(left-fringe . 3)
(menu-bar-lines . 0) (menu-bar-lines . 0)
(tool-bar-lines . 0) (tool-bar-lines . 0)
(line-spacing . 0) (line-spacing . 0)
@ -124,6 +125,10 @@ 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 (defvar eldoc-box--inhibit-childframe nil
"If non-nil, inhibit display of childframe.") "If non-nil, inhibit display of childframe.")
@ -162,7 +167,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
@ -246,8 +252,9 @@ WINDOW nil means use selected window."
(when pos-in-window (when pos-in-window
;; change absolute to relative to native frame ;; change absolute to relative to native frame
(let ((edges (window-edges window t nil t))) (let ((edges (window-edges window t nil t)))
(cons (+ (nth 0 edges) (nth 0 pos-in-window)) (cons (+ (nth 0 edges) (nth 0 pos-in-window)) ; x
(+ (nth 1 edges) (nth 1 pos-in-window))))))) (+ (nth 1 edges) (nth 1 pos-in-window)
(- (window-header-line-height window)))))))) ; y
(defun eldoc-box--default-at-point-position-function-1 (width height) (defun eldoc-box--default-at-point-position-function-1 (width height)
"See `eldoc-box--default-at-point-position-function'." "See `eldoc-box--default-at-point-position-function'."
@ -313,11 +320,12 @@ Intended for follow-cursor to disable display when moving cursor.")
(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."
(if (not (equal this-command #'self-insert-command)) (if (member this-command eldoc-box-self-insert-command-list)
(eldoc-box--inhibit-childframe-for 0.2) (progn (when (frame-live-p eldoc-box--frame)
(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.
@ -342,8 +350,11 @@ Checkout `lsp-ui-doc--make-frame', `lsp-ui-doc--move-frame'."
buffer buffer
`((child-frame-parameters . ,parameter)))) `((child-frame-parameters . ,parameter))))
(setq frame (window-frame window))) (setq frame (window-frame window)))
;; workaround
;; (set-frame-parameter frame 'left-fringe (alist-get 'left-fringe eldoc-box-frame-parameters))
;; (set-frame-parameter frame 'right-fringe (alist-get 'right-fringe eldoc-box-frame-parameters))
(set-face-attribute 'fringe frame :background nil :inherit 'eldoc-box-body) (set-face-attribute 'fringe frame :background nil :inherit 'eldoc-box-body)
(fringe-mode 3)
(set-window-dedicated-p window t) (set-window-dedicated-p window t)
(redirect-frame-focus frame (frame-parent frame)) (redirect-frame-focus frame (frame-parent frame))
(set-face-attribute 'internal-border frame :inherit 'eldoc-box-border) (set-face-attribute 'internal-border frame :inherit 'eldoc-box-border)