Follow cursor when in at-point mode
Instead of disappear.
This commit is contained in:
		
							parent
							
								
									f292d28712
								
							
						
					
					
						commit
						2a198c4d3e
					
				
							
								
								
									
										53
									
								
								eldoc-box.el
									
									
									
									
									
								
							
							
						
						
									
										53
									
								
								eldoc-box.el
									
									
									
									
									
								
							| @ -154,10 +154,13 @@ You can use C-g to hide the doc." | ||||
|                   eldoc-box-position-function | ||||
|                   #'eldoc-box--default-at-point-position-function) | ||||
|                  (setq-local eldoc-box-clear-with-C-g t) | ||||
|                  ;; always kill frame instead of using maybe-cleanup | ||||
|                  (remove-hook 'pre-command-hook #'eldoc-pre-command-refresh-echo-area t) | ||||
|                  (add-hook 'pre-command-hook #'eldoc-box-quit-frame t t)) | ||||
|                  ;; (add-hook 'pre-command-hook #'eldoc-box-quit-frame t t) | ||||
|                  (add-hook 'post-command-hook #'eldoc-box--follow-cursor t t)) | ||||
|         (add-hook 'pre-command-hook #'eldoc-pre-command-refresh-echo-area t) | ||||
|         (remove-hook 'pre-command-hook #'eldoc-box-quit-frame t) | ||||
|         ;; (remove-hook 'pre-command-hook #'eldoc-box-quit-frame t) | ||||
|         (remove-hook 'post-command-hook #'eldoc-box--follow-cursor t) | ||||
|         (kill-local-variable 'eldoc-box-position-function) | ||||
|         (kill-local-variable 'eldoc-box-clear-with-C-g)) | ||||
|     (message "Enable eldoc-box-hover-mode first"))) | ||||
| @ -242,14 +245,29 @@ WINDOW nil means use selected window." | ||||
|             ;; normal, just return y + em | ||||
|             (+ y em))))) | ||||
| 
 | ||||
| (defun eldoc-box--default-at-point-position-function (width height) | ||||
|   "Set `eldoc-box-position-function' to this function to have childframe appear under point. | ||||
| Position is calculated base on WIDTH and HEIGHT of childframe text window." | ||||
|   (let* ((pos (eldoc-box--default-at-point-position-function-1 width height)) | ||||
|          (x (car pos)) | ||||
|          (y (cdr pos))) | ||||
|     (cons (or (eldoc-box--at-point-x-by-company) x) | ||||
|           y))) | ||||
| (defun eldoc-box--update-childframe-geometry (frame window) | ||||
|   "Update the size and the position of childframe. | ||||
| FRAME is the childframe, WINDOW is the primary window." | ||||
|   (let* ((size | ||||
|           (window-text-pixel-size | ||||
|            window nil nil | ||||
|            (if (functionp eldoc-box-max-pixel-width) (funcall eldoc-box-max-pixel-width) eldoc-box-max-pixel-width) | ||||
|            (if (functionp eldoc-box-max-pixel-height) (funcall eldoc-box-max-pixel-height) eldoc-box-max-pixel-height) | ||||
|            t)) | ||||
|          (width (car size)) | ||||
|          (height (cdr size)) | ||||
|          (width (+ width (frame-char-width frame))) ; add margin | ||||
|          (frame-resize-pixelwise t) | ||||
|          (pos (funcall eldoc-box-position-function width height))) | ||||
|     (set-frame-size frame width height t) | ||||
|     ;; move position | ||||
|     (set-frame-position frame (car pos) (cdr pos)))) | ||||
| 
 | ||||
| (defun eldoc-box--follow-cursor () | ||||
|   "Make childframe follow cursor in at-point mode." | ||||
|   (when (frame-live-p eldoc-box--frame) | ||||
|     (eldoc-box--update-childframe-geometry | ||||
|      eldoc-box--frame (frame-selected-window eldoc-box--frame)))) | ||||
| 
 | ||||
| (defun eldoc-box--get-frame (buffer) | ||||
|   "Return a childframe displaying BUFFER. | ||||
| @ -280,20 +298,7 @@ Checkout `lsp-ui-doc--make-frame', `lsp-ui-doc--move-frame'." | ||||
|                         :font (face-attribute 'eldoc-box-body :font main-frame)) | ||||
| 
 | ||||
|     ;; set size | ||||
|     (let* ((size | ||||
|             (window-text-pixel-size | ||||
|              window nil nil | ||||
|              (if (functionp eldoc-box-max-pixel-width) (funcall eldoc-box-max-pixel-width) eldoc-box-max-pixel-width) | ||||
|              (if (functionp eldoc-box-max-pixel-height) (funcall eldoc-box-max-pixel-height) eldoc-box-max-pixel-height) | ||||
|              t)) | ||||
|            (width (car size)) | ||||
|            (height (cdr size)) | ||||
|            (width (+ width (frame-char-width frame))) ; add margin | ||||
|            (frame-resize-pixelwise t) | ||||
|            (pos (funcall eldoc-box-position-function width height))) | ||||
|       (set-frame-size frame width height t) | ||||
|       ;; move position | ||||
|       (set-frame-position frame (car pos) (cdr pos))) | ||||
|     (eldoc-box--update-childframe-geometry frame window) | ||||
|     (setq eldoc-box--frame frame) | ||||
|     (make-frame-visible frame))) | ||||
| 
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Yuan Fu
						Yuan Fu