emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] externals/posframe ff3670b 1/4: * posframe.el (posframe-poshandle


From: Feng Shu
Subject: [elpa] externals/posframe ff3670b 1/4: * posframe.el (posframe-poshandler-argbuilder): New function.
Date: Sun, 7 Feb 2021 21:30:39 -0500 (EST)

branch: externals/posframe
commit ff3670baa30ef078da4628d822a6ac22d7ec88e5
Author: Feng Shu <tumashu@163.com>
Commit: Feng Shu <tumashu@163.com>

    * posframe.el (posframe-poshandler-argbuilder): New function.
---
 posframe.el | 69 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 69 insertions(+)

diff --git a/posframe.el b/posframe.el
index b8284a0..54d8a60 100644
--- a/posframe.el
+++ b/posframe.el
@@ -973,6 +973,75 @@ of `posframe-show'."
                  (t (error "Posframe: have no valid poshandler")))))
      info)))
 
+(cl-defun posframe-poshandler-argbuilder (&optional
+                                          child-frame
+                                          &key
+                                          position
+                                          poshandler
+                                          x-pixel-offset
+                                          y-pixel-offset)
+  "Return a info list of CHILD-FRAME, which can be used as poshandler's info 
argument.
+
+if CHILD-FRAME is nil, parent frame will use selected frame.  The
+documents of POSITION, POSHANDLER, X-PIXEL-OFFSET and
+Y-PIXEL-OFFSET can be found in dostring of `posframe-show'.
+
+NOTE: this function is not used by posframe itself, it just let
+poshandler easily used for other purposes."
+  (let* ((position (or position (point)))
+         (frame-width (or (and child-frame (frame-pixel-width child-frame)) 0))
+         (frame-height (or (and child-frame (frame-pixel-height child-frame)) 
0))
+         (frame-buffer (and child-frame (window-buffer (frame-root-window 
child-frame))))
+         (parent-frame (if child-frame
+                           (frame-parent child-frame)
+                         (selected-frame)))
+         (parent-frame-width (frame-pixel-width parent-frame))
+         (parent-frame-height (frame-pixel-height parent-frame))
+         (parent-window
+          (if child-frame
+              (frame-root-window parent-frame)
+            (selected-window)))
+         (parent-window-top (window-pixel-top parent-window))
+         (parent-window-left (window-pixel-left parent-window))
+         (parent-window-width (window-pixel-width parent-window))
+         (parent-window-height (window-pixel-height parent-window))
+         (position-info
+          (if (integerp position)
+              (posn-at-point position parent-window)
+            position))
+         (font-width (default-font-width))
+         (font-height (with-current-buffer (window-buffer parent-window)
+                        (posframe--get-font-height position)))
+         (mode-line-height (window-mode-line-height parent-window))
+         (minibuffer-height (window-pixel-height (minibuffer-window)))
+         (header-line-height (window-header-line-height parent-window))
+         (tab-line-height (if (functionp 'window-tab-line-height)
+                              (window-tab-line-height parent-window)
+                            0)))
+    (list :position position
+          :position-info position-info
+          :poshandler poshandler
+          :font-height font-height
+          :font-width font-width
+          :posframe child-frame
+          :posframe-width frame-width
+          :posframe-height frame-height
+          :posframe-buffer frame-buffer
+          :parent-frame parent-frame
+          :parent-frame-width parent-frame-width
+          :parent-frame-height parent-frame-height
+          :parent-window parent-window
+          :parent-window-top parent-window-top
+          :parent-window-left parent-window-left
+          :parent-window-width parent-window-width
+          :parent-window-height parent-window-height
+          :mode-line-height mode-line-height
+          :minibuffer-height minibuffer-height
+          :header-line-height header-line-height
+          :tab-line-height tab-line-height
+          :x-pixel-offset (or x-pixel-offset 0)
+          :y-pixel-offset (or y-pixel-offset 0))))
+
 (defun posframe-poshandler-absolute-x-y (info)
   "Posframe's position hanlder.
 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]