[elpa] externals/posframe updated (320c035 -> 59cffde)

2021-04-07 Thread ELPA Syncer
elpasync pushed a change to branch externals/posframe.

  from  320c035   v0.9.0
   new  9354830   * posframe.el (posframe--create-posframe): skip-taskbar 
and and title.
   new  59cffde   * posframe.el (posframe--create-posframe): make sure 
parent-frame alway set.


Summary of changes:
 posframe.el | 6 ++
 1 file changed, 6 insertions(+)



[elpa] externals/posframe 59cffde 2/2: * posframe.el (posframe--create-posframe): make sure parent-frame alway set.

2021-04-07 Thread ELPA Syncer
branch: externals/posframe
commit 59cffdefa216fad037cc6de6b16a0df6deeb5fd4
Author: Feng Shu 
Commit: Feng Shu 

* posframe.el (posframe--create-posframe): make sure parent-frame alway set.
---
 posframe.el | 4 
 1 file changed, 4 insertions(+)

diff --git a/posframe.el b/posframe.el
index d6f2416..48a2185 100644
--- a/posframe.el
+++ b/posframe.el
@@ -368,6 +368,10 @@ This posframe's buffer is BUFFER-OR-NAME."
 (set-window-parameter posframe-window 'header-line-format 'none))
   (set-window-buffer posframe-window buffer)
   (set-window-dedicated-p posframe-window t)))
+  ;; If user set 'parent-frame to nil after run posframe-show.
+  ;; for cache reason, next call to posframe-show will be affected.
+  ;; so we should force set parent-frame again in this place.
+  (set-frame-parameter posframe--frame 'parent-frame parent-frame)
   posframe--frame)))
 
 (defun posframe-arghandler-default (_buffer-or-name _arg-name value)



[elpa] externals/posframe 9354830 1/2: * posframe.el (posframe--create-posframe): skip-taskbar and and title.

2021-04-07 Thread ELPA Syncer
branch: externals/posframe
commit 9354830a4f26da434c915cf2f3025c29d5ea7957
Author: Feng Shu 
Commit: Feng Shu 

* posframe.el (posframe--create-posframe): skip-taskbar and and title.
---
 posframe.el | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/posframe.el b/posframe.el
index 4901f71..d6f2416 100644
--- a/posframe.el
+++ b/posframe.el
@@ -323,6 +323,7 @@ This posframe's buffer is BUFFER-OR-NAME."
   (cons 'background-color background-color))
,(when font
   (cons 'font font))
+   (title . "posframe")
(parent-frame . ,(or parent-frame (window-frame)))
(keep-ratio ,keep-ratio)
(posframe-buffer . ,(cons (buffer-name buffer)
@@ -351,6 +352,7 @@ This posframe's buffer is BUFFER-OR-NAME."
(width . 1)
(height . 1)
(no-special-glyphs . t)
+   (skip-taskbar . t)
(inhibit-double-buffering . 
,posframe-inhibit-double-buffering)
;; Do not save child-frame when use desktop.el
(desktop-dont-save . t



[elpa] externals/osc 6b6dbb4: Release 0.4

2021-04-07 Thread Mario Lang
branch: externals/osc
commit 6b6dbb4176f45f9ff3a783c816c4556ca2931a22
Author: Mario Lang 
Commit: Mario Lang 

Release 0.4
---
 osc.el | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/osc.el b/osc.el
index 3c4ef6e..102afae 100644
--- a/osc.el
+++ b/osc.el
@@ -3,7 +3,7 @@
 ;; Copyright (C) 2014-2021  Free Software Foundation, Inc.
 
 ;; Author: Mario Lang 
-;; Version: 0.3
+;; Version: 0.4
 ;; Keywords: comm, processes, multimedia
 
 ;; This program is free software; you can redistribute it and/or modify



[elpa] externals/posframe 16d085e: * posframe.el (posframe-show, posframe--create-posframe): move tab-bar code frome posframe-show to posframe--create-posframe

2021-04-07 Thread ELPA Syncer
branch: externals/posframe
commit 16d085eaa43afc50eb6c306b7da2d7465807f841
Author: Feng Shu 
Commit: Feng Shu 

* posframe.el (posframe-show, posframe--create-posframe): move tab-bar code 
frome posframe-show to posframe--create-posframe
---
 posframe.el | 12 +++-
 1 file changed, 7 insertions(+), 5 deletions(-)

diff --git a/posframe.el b/posframe.el
index 48a2185..3148389 100644
--- a/posframe.el
+++ b/posframe.el
@@ -368,10 +368,17 @@ This posframe's buffer is BUFFER-OR-NAME."
 (set-window-parameter posframe-window 'header-line-format 'none))
   (set-window-buffer posframe-window buffer)
   (set-window-dedicated-p posframe-window t)))
+
+  ;; Remove tab-bar always.
+  (set-frame-parameter posframe--frame 'tab-bar-lines 0)
+  (when (version< "27.0" emacs-version)
+(setq-local tab-line-format nil))
+
   ;; If user set 'parent-frame to nil after run posframe-show.
   ;; for cache reason, next call to posframe-show will be affected.
   ;; so we should force set parent-frame again in this place.
   (set-frame-parameter posframe--frame 'parent-frame parent-frame)
+
   posframe--frame)))
 
 (defun posframe-arghandler-default (_buffer-or-name _arg-name value)
@@ -636,11 +643,6 @@ You can use `posframe-delete-all' to delete all posframes."
  :override-parameters override-parameters
  :accept-focus accept-focus))
 
-  ;; Remove tab-bar always.
-  (set-frame-parameter posframe 'tab-bar-lines 0)
-  (when (version< "27.0" emacs-version)
-(setq-local tab-line-format nil))
-
   ;; Move mouse to (0 . 0)
   (posframe--mouse-banish parent-frame posframe)
 



[elpa] externals/org 2d78ea5: Merge branch 'maint'

2021-04-07 Thread ELPA Syncer
branch: externals/org
commit 2d78ea57cfad1ddc3e993c949daf117b76315170
Merge: 196aae4 e1b8d1d
Author: Nicolas Goaziou 
Commit: Nicolas Goaziou 

Merge branch 'maint'
---
 lisp/org-colview.el | 7 ++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/lisp/org-colview.el b/lisp/org-colview.el
index 75056d4..d80fa8e 100644
--- a/lisp/org-colview.el
+++ b/lisp/org-colview.el
@@ -1167,7 +1167,12 @@ properties drawers."
 (printf (nth 4 spec))
 (operator (nth 3 spec))
 (collect (and operator (org-columns--collect operator)))
-(summarize (and operator (org-columns--summarize operator
+(summarize (and operator (org-columns--summarize operator)))
+ ;; Special properties are not set in a property drawer, and
+ ;; therefore should not be updated.
+ (update
+  (and update
+   (not (member property org-special-properties)
 (org-with-wide-buffer
  ;; Find the region to compute.
  (goto-char org-columns-top-level-marker)



[elpa] externals-release/org e1b8d1d: org-colview: Do not choke when updating a special property

2021-04-07 Thread ELPA Syncer
branch: externals-release/org
commit e1b8d1d2b4ef46e0c4ef591536a77d45d998
Author: Nicolas Goaziou 
Commit: Nicolas Goaziou 

org-colview: Do not choke when updating a special property

* lisp/org-colview.el (org-columns--compute-spec): Do not update
special properties, which are not set through property drawers.

Reported-by: Nick Dokos 

---
 lisp/org-colview.el | 7 ++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/lisp/org-colview.el b/lisp/org-colview.el
index 75056d4..d80fa8e 100644
--- a/lisp/org-colview.el
+++ b/lisp/org-colview.el
@@ -1167,7 +1167,12 @@ properties drawers."
 (printf (nth 4 spec))
 (operator (nth 3 spec))
 (collect (and operator (org-columns--collect operator)))
-(summarize (and operator (org-columns--summarize operator
+(summarize (and operator (org-columns--summarize operator)))
+ ;; Special properties are not set in a property drawer, and
+ ;; therefore should not be updated.
+ (update
+  (and update
+   (not (member property org-special-properties)
 (org-with-wide-buffer
  ;; Find the region to compute.
  (goto-char org-columns-top-level-marker)



[elpa] externals/org updated (196aae4 -> 2d78ea5)

2021-04-07 Thread ELPA Syncer
elpasync pushed a change to branch externals/org.

  from  196aae4   Merge branch 'maint'
   new  e1b8d1d   org-colview: Do not choke when updating a special property
   new  2d78ea5   Merge branch 'maint'


Summary of changes:
 lisp/org-colview.el | 7 ++-
 1 file changed, 6 insertions(+), 1 deletion(-)



[elpa] externals/excorporate updated (e9047fd -> cad5c46)

2021-04-07 Thread Thomas Fitzsimmons
fitzsim pushed a change to branch externals/excorporate.

  from  e9047fd   Move excorporate-customize-time-zone
   new  644d66c   Relocate time zone defcustom and defun
   new  be1390c   Fix a byte compiler warning
   new  f7314ce   Silence some byte compiler warnings
   new  2916112   Add exco-select-connection-identifier function
   new  cad5c46   Bump version to 0.9.5


Summary of changes:
 NEWS  | 12 
 README| 10 +--
 excorporate-time-zones.el | 25 
 excorporate.el| 76 +++
 excorporate.info  | 26 
 excorporate.texi  | 25 +---
 6 files changed, 102 insertions(+), 72 deletions(-)



[elpa] externals/excorporate 2916112 4/5: Add exco-select-connection-identifier function

2021-04-07 Thread Thomas Fitzsimmons
branch: externals/excorporate
commit 2916112e094e866949d909006c7df9e0b6b38e68
Author: Thomas Fitzsimmons 
Commit: Thomas Fitzsimmons 

Add exco-select-connection-identifier function

* excorporate.el (exco-select-connection-identifier): New
function.
(excorporate-disconnect): Rewrite to call
exco-select-connection-identifier.
* excorporate.texi (API Usage): Replace direct references to
exco--connection-identifiers with calls to
exco-select-connection-identifier.
* excorporate.info: Regenerate.
---
 excorporate.el   | 46 +-
 excorporate.info | 26 ++
 excorporate.texi | 25 ++---
 3 files changed, 53 insertions(+), 44 deletions(-)

diff --git a/excorporate.el b/excorporate.el
index f651a2b..b5459f8 100644
--- a/excorporate.el
+++ b/excorporate.el
@@ -661,6 +661,28 @@ use the `cdr' of the pair as the service URL."
(fsm-send fsm :retrieve-xml))
   nil)))
 
+(defun exco-select-connection-identifier ()
+  "Return a connection identifier.
+Return the sole connection if only one exists, or prompt the user
+if more than one connection exists.  Return nil if the user
+provides a null response"
+  (exco--ensure-connection)
+  (if (= (length exco--connection-identifiers) 1)
+  (car exco--connection-identifiers)
+(let* ((strings (mapcar (lambda (object)
+ (format "%s" object))
+   exco--connection-identifiers))
+  (value (completing-read "Excorporate connection: "
+  strings nil t)))
+  (unless (equal value "")
+   (let ((position (catch 'index
+ (let ((index 0))
+   (dolist (string strings)
+ (when (equal value string)
+   (throw 'index index))
+ (setq index (1+ index)))
+ (nth position exco--connection-identifiers))
+
 (defun exco-operate (identifier name arguments callback)
   "Execute a service operation asynchronously.
 IDENTIFIER is the connection identifier.  Execute operation NAME
@@ -1249,27 +1271,9 @@ ARGUMENT is the prefix argument."
 (defun excorporate-disconnect ()
   "Disconnect a server connection."
   (interactive)
-  (catch 'cancel
-(let ((identifier
-  (cond
-   ((= (length exco--connection-identifiers) 0)
-(exco--ensure-connection))
-   ((= (length exco--connection-identifiers) 1)
-(car exco--connection-identifiers))
-   (t
-(let* ((strings (mapcar (lambda (object)
-  (format "%s" object))
-exco--connection-identifiers))
-   (value (completing-read "Excorporate: Disconnect: "
-   strings nil t))
-   (_return (when (equal value "") (throw 'cancel nil)))
-   (position (catch 'index
-   (let ((index 0))
- (dolist (string strings)
-   (when (equal value string)
- (throw 'index index))
-   (setq index (1+ index) ))
-  (nth position exco--connection-identifiers))
+  (exco--ensure-connection)
+  (let ((identifier (exco-select-connection-identifier)))
+(when identifier
   (exco-disconnect identifier)
   (message "Excorporate: Disconnected %s" identifier
 
diff --git a/excorporate.info b/excorporate.info
index d38b805..fb14e79 100644
--- a/excorporate.info
+++ b/excorporate.info
@@ -286,7 +286,7 @@ hack...@gnu.org is invited, using a non-interactive 
function provided by
 Excorporate:
 
  (exco-calendar-item-meeting-create
-  (car exco--connection-identifiers)
+  (exco-select-connection-identifier)
   "Test meeting 1"
   "Hi,\n\nThis is a test meeting 1.\n\nRegards.\n"
   (encode-time 0 15 14 23 09 2020)
@@ -312,11 +312,13 @@ Excorporate:
 The callback is run asychronously after the server responds, so as not
 to block Emacs, and the result is what is printed in the '*Messages*'
 buffer.  This example assumes the user has already run 'M-x excorporate'
-to create a connection.  '(car exco--connection-identifiers)' is a hack
-that uses the first-established connection.  Excorporate fully supports
-connecting to multiple different servers though (see
-'exco-connection-iterate') so published code that uses the Excorporate
-API should not assume just one connection.
+to create a connection.  'exco-select-connection-identifier' will
+automatically use the sole connection if only one exists.  Excorporate
+fully supports connecting to multiple different servers though (see
+'exco-connection-iterate') so reusable code that calls Excorporate APIs
+should not assume just one connection.  Y

[elpa] externals/excorporate be1390c 2/5: Fix a byte compiler warning

2021-04-07 Thread Thomas Fitzsimmons
branch: externals/excorporate
commit be1390c92fc07628124984b62fb2aaf8c1247607
Author: Thomas Fitzsimmons 
Commit: Thomas Fitzsimmons 

Fix a byte compiler warning

* excorporate.el (excorporate-disconnect): Fix a byte compiler
warning.
---
 excorporate.el | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/excorporate.el b/excorporate.el
index d40cc17..1471785 100644
--- a/excorporate.el
+++ b/excorporate.el
@@ -1258,7 +1258,7 @@ ARGUMENT is the prefix argument."
 exco--connection-identifiers))
(value (completing-read "Excorporate: Disconnect: "
strings nil t))
-   (return (when (equal value "") (throw 'cancel nil)))
+   (_return (when (equal value "") (throw 'cancel nil)))
(position (catch 'index
(let ((index 0))
  (dolist (string strings)



[elpa] externals/excorporate 644d66c 1/5: Relocate time zone defcustom and defun

2021-04-07 Thread Thomas Fitzsimmons
branch: externals/excorporate
commit 644d66cbff088b82f282bbc0b99d84c0bff09576
Author: Thomas Fitzsimmons 
Commit: Thomas Fitzsimmons 

Relocate time zone defcustom and defun

* excorporate.el (excorporate-time-zone)
(excorporate-customize-time-zone): Move to
excorporate-time-zones.el.
---
 excorporate-time-zones.el | 25 +
 excorporate.el| 24 
 2 files changed, 25 insertions(+), 24 deletions(-)

diff --git a/excorporate-time-zones.el b/excorporate-time-zones.el
index 0a17be9..6c78081 100644
--- a/excorporate-time-zones.el
+++ b/excorporate-time-zones.el
@@ -833,6 +833,31 @@
   (concat "A hash table mapping `current-time-zone' values to"
  " IANA/Olson time zone names."))
 
+(defcustom excorporate-time-zone nil
+  "The server-style time zone.
+If this variable is nil, Excorporate will compute a time zone
+automatically based on `current-time-zone'.  If that doesn't
+work, or you want to specify the time zone directly, run
+`excorporate-customize-time-zone' to customize this variable from
+a list of valid values."
+  :type '(choice :menu-tag "Server-style time zone"
+:tag "Server-style time zone"
+(const :tag "Compute from Emacs time zone" nil)
+string)
+  :group 'excorporate)
+
+(defun excorporate-customize-time-zone ()
+  "Prompt for a server-style time zone from a list of valid values."
+  (interactive)
+  (let ((zone (completing-read
+  "Excorporate time zone: "
+  (cons "Emacs Built-in"
+(hash-table-values exco--time-zone-olson-to-server))
+  nil t)))
+(unless (equal zone "")
+  (customize-save-variable 'excorporate-time-zone
+  (if (equal zone "Emacs Built-in") nil zone)
+
 (defun exco-time-zone (&optional emacs-time-zone)
   "Return server style time zone string.
 Return `excorporate-time-zone' if it is non-nil, or look up the
diff --git a/excorporate.el b/excorporate.el
index 88a5658..d40cc17 100644
--- a/excorporate.el
+++ b/excorporate.el
@@ -140,18 +140,6 @@ interactive functions, `excorporate-diary-disable' and
 `excorporate-diary-enable'."
   :type 'boolean)
 
-(defcustom excorporate-time-zone nil
-  "The server-style time zone.
-If this variable is nil, Excorporate will compute a time zone
-automatically based on `current-time-zone'.  If that doesn't
-work, or you want to specify the time zone directly, run
-`excorporate-customize-time-zone' to customize this variable from
-a list of valid values."
-  :type '(choice :menu-tag "Server-style time zone"
-:tag "Server-style time zone"
-(const :tag "Compute from Emacs time zone" nil)
-string))
-
 ;; For Office 365, URLs containing autodiscover-s.outlook.com do not
 ;; seem to work properly (the returned XML gives ErrorCode 600).
 (defconst exco--autodiscovery-templates
@@ -1254,18 +1242,6 @@ ARGUMENT is the prefix argument."
(t
 (error "Excorporate: Invalid configuration"
 
-(defun excorporate-customize-time-zone ()
-  "Prompt for a server-style time zone from a list of valid values."
-  (interactive)
-  (let ((zone (completing-read
-  "Excorporate time zone: "
-  (cons "Emacs Built-in"
-(hash-table-values exco--time-zone-olson-to-server))
-  nil t)))
-(unless (equal zone "")
-  (customize-save-variable 'excorporate-time-zone
-  (if (equal zone "Emacs Built-in") nil zone)
-
 (defun excorporate-disconnect ()
   "Disconnect a server connection."
   (interactive)



[elpa] externals/excorporate cad5c46 5/5: Bump version to 0.9.5

2021-04-07 Thread Thomas Fitzsimmons
branch: externals/excorporate
commit cad5c46a97406b22359a8d97daba53b131c68b76
Author: Thomas Fitzsimmons 
Commit: Thomas Fitzsimmons 

Bump version to 0.9.5

* excorporate.el: Bump version to 0.9.5.
* NEWS, README: Document 0.9.5 changes.
---
 NEWS   | 12 
 README | 10 +++---
 excorporate.el |  2 +-
 3 files changed, 20 insertions(+), 4 deletions(-)

diff --git a/NEWS b/NEWS
index 17fe47e..52e4e72 100644
--- a/NEWS
+++ b/NEWS
@@ -1,5 +1,17 @@
 GNU Emacs Excorporate NEWS -- history of user-visible changes.
 
+* New in Excorporate 0.9.5
+
+Released 2021-04-07
+
+** Set time zone when creating calendar items
+
+** Add excorporate-disconnect function
+
+** Document how to disconnect and how to handle a stuck connection
+
+** Use new exco-select-connection-identifier function in API Usage examples
+
 * New in Excorporate 0.9.3
 
 Released 2021-01-28
diff --git a/README b/README
index ca9d345..81b2d15 100644
--- a/README
+++ b/README
@@ -3,11 +3,15 @@ Excorporate provides Exchange integration for Emacs.
 Most Recent Improvements
 
 
-New in Excorporate 0.9.3, released 2021-01-28:
+New in Excorporate 0.9.5, released 2021-04-07:
 
-** Enable diary integration by default
+** Set time zone when creating calendar items
 
-** Introduce defcustom, excorporate-update-diary, to control this behaviour
+** Add excorporate-disconnect function
+
+** Document how to disconnect and how to handle a stuck connection
+
+** Use new exco-select-connection-identifier function in API Usage examples
 
 Quick Start
 ---
diff --git a/excorporate.el b/excorporate.el
index b5459f8..1b9651c 100644
--- a/excorporate.el
+++ b/excorporate.el
@@ -5,7 +5,7 @@
 ;; Author: Thomas Fitzsimmons 
 ;; Maintainer: Thomas Fitzsimmons 
 ;; Created: 2014-09-19
-;; Version: 0.9.3
+;; Version: 0.9.5
 ;; Keywords: calendar
 ;; Homepage: https://www.fitzsim.org/blog/
 ;; Package-Requires: ((emacs "24.1") (fsm "0.2.1") (soap-client "3.2.0") 
(url-http-ntlm "2.0.4") (nadvice "0.3"))



[elpa] externals/excorporate f7314ce 3/5: Silence some byte compiler warnings

2021-04-07 Thread Thomas Fitzsimmons
branch: externals/excorporate
commit f7314ceb5418ad413edb662581cb85af54bae067
Author: Thomas Fitzsimmons 
Commit: Thomas Fitzsimmons 

Silence some byte compiler warnings

* excorporate.el (exco--calendar-item-dolist): Silence byte
compiler warnings about unused item fields.
---
 excorporate.el | 4 
 1 file changed, 4 insertions(+)

diff --git a/excorporate.el b/excorporate.el
index 1471785..f651a2b 100644
--- a/excorporate.el
+++ b/excorporate.el
@@ -963,6 +963,10 @@ On each iteration, ITEM is set, and FORMS are run."
 (split-string cc-invitees ";"
(item-identifier (assoc 'ItemId ,item))
(organizer-structure (assoc 'Organizer ,item)))
+   ;; Silence byte compiler if any of these are unused.
+   (ignore subject start start-internal end end-internal location
+  to-invitees main-invitees cc-invitees optional-invitees
+  item-identifier organizer-structure)
,@forms)))
 
 (defun exco-calendar-item-with-details-iterate (identifier



[elpa] externals/ivy-posframe ada1dba: Try to handle EXWM environment.

2021-04-07 Thread ELPA Syncer
branch: externals/ivy-posframe
commit ada1dbab9bb203207586e2f6d359b4949602e50f
Author: Feng Shu 
Commit: Feng Shu 

Try to handle EXWM environment.

* ivy-posframe.el (ivy-posframe-parent-frame-poshandler): New variable.
(ivy-posframe--display): use parent-frame-poshandler.
---
 ivy-posframe.el | 11 +++
 1 file changed, 11 insertions(+)

diff --git a/ivy-posframe.el b/ivy-posframe.el
index 9e8acc5..1dfebaf 100644
--- a/ivy-posframe.el
+++ b/ivy-posframe.el
@@ -177,6 +177,16 @@ When nil, Using current frame's font as fallback."
   "The height of ivy-min-posframe."
   :type 'number)
 
+(defcustom ivy-posframe-parent-frame-poshandler nil
+  "The parent frame poshandler use by ivy-posframe.
+
+User can set it to a function like:
+
+   (lambda () (cons 0 0))
+
+in EXWM environment."
+  :type 'function)
+
 (defcustom ivy-posframe-size-function #'ivy-posframe-get-size
   "The function which is used to deal with posframe's size."
   :type 'function)
@@ -255,6 +265,7 @@ This variable is useful for `ivy-posframe-read-action' .")
  :internal-border-width ivy-posframe-border-width
  :internal-border-color (face-attribute 'ivy-posframe-border 
:background nil t)
  :override-parameters ivy-posframe-parameters
+ :parent-frame-poshandler ivy-posframe-parent-frame-poshandler
  (funcall ivy-posframe-size-function))
   (ivy-posframe--add-prompt 'ignore)))
   (with-current-buffer ivy-posframe-buffer



[elpa] externals/posframe 9a6bb60: Add parent-frame-poshandler argument to posframe-show.

2021-04-07 Thread ELPA Syncer
branch: externals/posframe
commit 9a6bb60c55cea7627764f42fe3c296dea6abec8c
Author: Feng Shu 
Commit: Feng Shu 

Add parent-frame-poshandler argument to posframe-show.

* posframe.el (posframe--create-posframe, posframe-show)
(posframe-run-poshandler): Handle parent-frame-poshandler argument.
(posframe-parent-frame-poshandler-xwininfo): New function.
---
 posframe.el | 81 +++--
 1 file changed, 68 insertions(+), 13 deletions(-)

diff --git a/posframe.el b/posframe.el
index 3148389..58292e6 100644
--- a/posframe.el
+++ b/posframe.el
@@ -324,7 +324,7 @@ This posframe's buffer is BUFFER-OR-NAME."
,(when font
   (cons 'font font))
(title . "posframe")
-   (parent-frame . ,(or parent-frame (window-frame)))
+   (parent-frame . ,parent-frame)
(keep-ratio ,keep-ratio)
(posframe-buffer . ,(cons (buffer-name buffer)
  buffer))
@@ -418,6 +418,7 @@ This posframe's buffer is BUFFER-OR-NAME."
  refresh
  accept-focus
  hidehandler
+ parent-frame-poshandler
  &allow-other-keys)
   "Pop up a posframe and show STRING at POSITION.
 
@@ -557,6 +558,18 @@ The builtin hidehandler functions are listed below:
 1. `posframe-hidehandler-when-buffer-switch'
 
 
+PARENT-FRAME-POSHANDLER is a function, posframe can get current
+frame's position in screen by call this function, PLEASE NOTE:
+this argument will disable child-frame feature, the user case at
+the moment I know is let ivy-posframe run properly in EXWM
+environment (let posframe show on the other appliction window).
+DO NOT USE UNLESS NECESSARY. an example parent frame poshandler
+function is:
+
+1. `posframe-parent-frame-poshandler-xwininfo'
+
+
+
 You can use `posframe-delete-all' to delete all posframes."
   (let* ((position (or (funcall posframe-arghandler buffer-or-name :position 
position) (point)))
  (poshandler (funcall posframe-arghandler buffer-or-name :poshandler 
poshandler))
@@ -587,6 +600,7 @@ You can use `posframe-delete-all' to delete all posframes."
  (refresh (funcall posframe-arghandler buffer-or-name :refresh 
refresh))
  (accept-focus (funcall posframe-arghandler buffer-or-name 
:accept-focus accept-focus))
  (hidehandler (funcall posframe-arghandler buffer-or-name :hidehandler 
hidehandler))
+ (parent-frame-poshandler (funcall posframe-arghandler buffer-or-name 
:parent-frame-poshandler parent-frame-poshandler))
  ;;-
  (buffer (get-buffer-create buffer-or-name))
  (parent-window (selected-window))
@@ -601,6 +615,9 @@ You can use `posframe-delete-all' to delete all posframes."
  (parent-frame (window-frame parent-window))
  (parent-frame-width (frame-pixel-width parent-frame))
  (parent-frame-height (frame-pixel-height parent-frame))
+ (parent-frame-position
+  (when (functionp parent-frame-poshandler)
+(funcall parent-frame-poshandler)))
  (font-width (default-font-width))
  (font-height (with-current-buffer (window-buffer parent-window)
 (posframe--get-font-height position)))
@@ -627,7 +644,9 @@ You can use `posframe-delete-all' to delete all posframes."
 (posframe--create-posframe
  buffer
  :font font
- :parent-frame parent-frame
+ :parent-frame
+ (unless parent-frame-position
+   parent-frame)
  :left-fringe left-fringe
  :right-fringe right-fringe
  :border-width border-width
@@ -671,6 +690,7 @@ You can use `posframe-delete-all' to delete all posframes."
   :parent-frame parent-frame
   :parent-frame-width parent-frame-width
   :parent-frame-height parent-frame-height
+  :parent-frame-position parent-frame-position
   :parent-window parent-window
   :parent-window-top parent-window-top
   :parent-window-left parent-window-left
@@ -988,17 +1008,32 @@ of `posframe-show'."
   (if (equal info posframe--last-poshandler-info)
   posframe--last-posframe-pixel-position
 (setq posframe--last-poshandler-info info)
-(funcall
- (or (plist-get info :poshandler)
- (let ((position (plist-get info :position)))
-   (cond ((integerp position)
-  #'posframe-poshandler-point-bottom-left-corner)
- ((and (consp position)
-   (integerp (car position))
-   (integerp (cdr position)))
-  #'posframe-poshandler-absolute-x-y)
-