[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/posframe 04b91d5 2/2: Merge pull request #70 from tumas
From: |
Feng Shu |
Subject: |
[elpa] externals/posframe 04b91d5 2/2: Merge pull request #70 from tumashu/hide |
Date: |
Thu, 13 Aug 2020 00:47:01 -0400 (EDT) |
branch: externals/posframe
commit 04b91d507ba8509a43aa268cc8cdd3a190e05849
Merge: 6d604a7 9a6e21b
Author: tumashu <tumashu@163.com>
Commit: GitHub <noreply@github.com>
Merge pull request #70 from tumashu/hide
Provide argument which will cause posframe to hide when user switches the
buffer #69
---
posframe.el | 47 +++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 47 insertions(+)
diff --git a/posframe.el b/posframe.el
index 60f7aed..c3068ac 100644
--- a/posframe.el
+++ b/posframe.el
@@ -398,6 +398,7 @@ This posframe's buffer is BUFFER-OR-NAME."
timeout
refresh
accept-focus
+ hidehandler
&allow-other-keys)
"Pop up a posframe and show STRING at POSITION.
@@ -508,6 +509,18 @@ every REFRESH seconds.
When ACCEPT-FOCUS is non-nil, posframe will accept focus.
be careful, you may face some bugs when set it to non-nil.
+HIDEHANDLER is a function, when it return t, posframe will be
+hide when `post-command-hook' is executed, this function has a
+plist argument:
+
+ (:posframe-buffer xxx
+ :posframe-parent-buffer xxx)
+
+The builtin hidehandler functions are listed below:
+
+1. `posframe-hidehandler-when-buffer-switch'
+
+
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))
@@ -535,6 +548,7 @@ You can use `posframe-delete-all' to delete all posframes."
(timeout (funcall posframe-arghandler buffer-or-name :timeout
timeout))
(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))
;;-----------------------------------------------------
(buffer (get-buffer-create buffer-or-name))
(parent-window (selected-window))
@@ -643,6 +657,13 @@ You can use `posframe-delete-all' to delete all posframes."
;; Force raise the current posframe.
(raise-frame posframe--frame)
+ ;; Hide posframe when switch buffer
+ (let* ((parent-buffer (window-buffer parent-window))
+ (parent-buffer-name (buffer-name parent-buffer)))
+ (set-frame-parameter posframe--frame 'posframe-hidehandler hidehandler)
+ (set-frame-parameter posframe--frame 'posframe-parent-buffer
+ (cons parent-buffer-name parent-buffer)))
+
;; Return posframe
posframe)))
@@ -813,6 +834,32 @@ BUFFER-OR-NAME can be a buffer or a buffer name."
(equal buffer-or-name (cdr buffer-info)))
(posframe--make-frame-invisible frame))))))
+(defun posframe-run-hidehandler ()
+ "Run posframe hidehandler. this function is used in `post-command-hook'."
+ (while-no-input
+ (redisplay)
+ (dolist (frame (frame-list))
+ (let ((hidehandler (frame-parameter frame 'posframe-hidehandler))
+ (buffer (frame-parameter frame 'posframe-buffer))
+ (parent-buffer (frame-parameter frame 'posframe-parent-buffer)))
+ (when (and hidehandler
+ (funcall hidehandler
+ (list
+ :posframe-buffer buffer
+ :posframe-parent-buffer parent-buffer)))
+ (posframe--make-frame-invisible frame))))))
+
+(add-hook 'post-command-hook #'posframe-run-hidehandler)
+
+(defun posframe-hidehandler-when-buffer-switch (info)
+ "Posframe hidehandler function.
+
+This function let posframe hide when user switch buffer.
+Note: This function is called in `post-command-hook'."
+ (let ((parent-buffer (cdr (plist-get info :posframe-parent-buffer))))
+ (and (buffer-live-p parent-buffer)
+ (not (equal parent-buffer (current-buffer))))))
+
(defun posframe-delete (buffer-or-name)
"Delete posframe pertaining to BUFFER-OR-NAME and kill the buffer.
BUFFER-OR-NAME can be a buffer or a buffer name."
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [elpa] externals/posframe 04b91d5 2/2: Merge pull request #70 from tumashu/hide,
Feng Shu <=