Compare commits
3 Commits
fb8e012d60
...
7b0477697b
Author | SHA1 | Date | |
---|---|---|---|
7b0477697b | |||
0f2ba661f8 | |||
8075b5662e |
@ -7,6 +7,9 @@ Forked from the excellent [eldoc-box](https://github.com/casouri/eldoc-box/) pac
|
||||
<!-- [![MELPA](https://melpa.org/packages/mood-line-badge.svg)](https://melpa.org/#/eldoc-frame) -->
|
||||
<!-- [![MELPA Stable](https://stable.melpa.org/packages/mood-line-badge.svg)](https://stable.melpa.org/#/eldoc-frame) -->
|
||||
|
||||
**NOTE**: This package is not yet considered to be in a "released" state. Breaking changes may occur without warning,
|
||||
and it is not currently available on MELPA.
|
||||
|
||||
## Preview
|
||||
|
||||
![Preview Image](.repo-assets/preview.webp "Preview Image")
|
||||
|
@ -331,28 +331,27 @@ All functions are run with the eldoc child frame selected."
|
||||
;; Frame geometry
|
||||
;; ---------------------------------- ;;
|
||||
|
||||
(defun eldoc-frame--selected-window-side ()
|
||||
"Return which side of the frame the selected window is on.
|
||||
Return ‘left’ if the selected window is on the left, or ‘right’ if the selected
|
||||
window is on the right. Return ‘left’ if there is only one window in the frame."
|
||||
(let* ((window-left (nth 0 (window-absolute-pixel-edges)))
|
||||
(window-right (nth 2 (window-absolute-pixel-edges)))
|
||||
(frame-left (nth 0 (frame-edges)))
|
||||
(frame-right (nth 2 (frame-edges)))
|
||||
(distance-left (- window-left frame-left))
|
||||
(distance-right (- frame-right window-right)))
|
||||
(if (<= distance-left distance-right) 'left 'right)))
|
||||
|
||||
(defun eldoc-frame--calc-frame-x-position (frame)
|
||||
"Calculate the appropriate X position (offset) for FRAME."
|
||||
(pcase-let ((`(,offset-l ,offset-r) eldoc-frame-offset))
|
||||
(pcase (eldoc-frame--selected-window-side)
|
||||
;; Selected window is on the left, so child frame should be on the right:
|
||||
('left (- (frame-pixel-width (selected-frame))
|
||||
"Calculate the appropriate X position (offset) for FRAME.
|
||||
If the selected window is on the right side of the selected frame and is too
|
||||
small to overlay FRAME over, or if `point' is too close to the right edge of the
|
||||
selected frame, return an X coordinate that will place FRAME on the left side of
|
||||
the selected frame. Otherwise, return an X coordinate that will place FRAME on
|
||||
the right side of the selected frame."
|
||||
(let ((offset-l (nth 0 eldoc-frame-offset))
|
||||
(offset-r (nth 2 eldoc-frame-offset))
|
||||
(window-left (nth 0 (window-absolute-pixel-edges)))
|
||||
(min-containing-width (* (eval eldoc-frame-max-pixel-width) 2))
|
||||
(cursor-x-position (or (car (window-absolute-pixel-position)) 0)))
|
||||
(if (or (and (< (window-pixel-width) min-containing-width)
|
||||
(> window-left (* (frame-pixel-width) .40)))
|
||||
(> cursor-x-position (* (frame-pixel-width) .70)))
|
||||
;; FRAME should be displayed on the left:
|
||||
offset-l
|
||||
;; FRAME should be displayed on the right:
|
||||
(- (frame-pixel-width (selected-frame))
|
||||
(frame-pixel-width frame)
|
||||
offset-r))
|
||||
;; Selected window is on the right, so child frame should be on the left:
|
||||
('right offset-l))))
|
||||
offset-r))))
|
||||
|
||||
(defun eldoc-frame--update-frame-geometry (frame)
|
||||
"Update size and position of FRAME."
|
||||
@ -534,7 +533,7 @@ reused. Otherwise, a new frame is created by `eldoc-frame--create-child-frame'."
|
||||
(when (timerp eldoc-frame--idle-timer)
|
||||
(setq eldoc-frame--idle-timer (cancel-timer eldoc-frame--idle-timer)))
|
||||
;; Remove window state change hooks
|
||||
(remove-hook 'window-size-change-functions #'eldoc-frame--maybe-resize-frame)
|
||||
(remove-hook 'window-state-change-hook #'eldoc-frame--maybe-resize-frame)
|
||||
(remove-hook 'window-state-change-hook #'eldoc-frame--maybe-hide-frame)
|
||||
;; Restore the original buffer-local value of `eldoc-display-functions'
|
||||
(setq-local eldoc-display-functions
|
||||
|
Loading…
Reference in New Issue
Block a user