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

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

[elpa] externals/pyim 9957630710: Add pyim-page-tooltip-valid-p.


From: ELPA Syncer
Subject: [elpa] externals/pyim 9957630710: Add pyim-page-tooltip-valid-p.
Date: Mon, 13 Jun 2022 20:59:59 -0400 (EDT)

branch: externals/pyim
commit 995763071072294f20928125c0e2f97897f6fd10
Author: Feng Shu <tumashu@163.com>
Commit: Feng Shu <tumashu@163.com>

    Add pyim-page-tooltip-valid-p.
---
 pyim-page.el        | 34 ++++++++++++++++++++++++++--------
 tests/pyim-tests.el |  9 +++++++++
 2 files changed, 35 insertions(+), 8 deletions(-)

diff --git a/pyim-page.el b/pyim-page.el
index a4bcbee445..7b79d812fd 100644
--- a/pyim-page.el
+++ b/pyim-page.el
@@ -126,6 +126,18 @@ Only useful when use posframe.")
 (defvar pyim-page-last-minibuffer-string nil
   "函数 `pyim-page-show-with-minibuffer' 上一次处理的消息字符串。")
 
+(defvar pyim-page-tooltip-infos
+  '((posframe
+     :package posframe
+     :test posframe-workable-p)
+    (popup
+     :package popup)
+    (minibuffer
+     :package minibuffer))
+  "pyim-page tooltip 相关信息。
+
+用于函数 `pyim-page-tooltip-valid-p'.")
+
 (defun pyim-page-refresh (&optional hightlight-current)
   "刷新 page 页面的函数.
 
@@ -232,7 +244,7 @@ page 的概念,比如,上面的 “nihao” 的 *待选词列表* 就可以
      (1- (pyim-page-start))))
 
 (defun pyim-page-get-valid-tooltip ()
-  "获取一个可用的 tooltip."
+  "根据当前环境,获取一个可用的 tooltip."
   (cond
    ;; NOTE: 以前在 minibuffer 中试用过 posframe, linux 环境下运行效果还不错,但
    ;; 在 windows 环境下,似乎有很严重的性能问题,原因未知。
@@ -240,18 +252,24 @@ page 的概念,比如,上面的 “nihao” 的 *待选词列表* 就可以
    ;; 在 exwm-xim 环境下输入中文时,只能使用 minibuffer, 因为应用窗口遮挡的缘故,
    ;; 其它方式不可用。
    ((pyim-exwm-xim-environment-p) 'minibuffer)
-   (t (or (cl-find-if (lambda (tp)
-                        (or (and (eq tp 'posframe)
-                                 (functionp 'posframe-workable-p)
-                                 (posframe-workable-p))
-                            (and (eq tp 'popup)
-                                 (featurep 'popup))
-                            (eq tp 'minibuffer)))
+   (t (or (cl-find-if #'pyim-page-tooltip-valid-p
                       (if (listp pyim-page-tooltip)
                           pyim-page-tooltip
                         (list pyim-page-tooltip)))
           'minibuffer))))
 
+(defun pyim-page-tooltip-valid-p (tooltip)
+  "测试 TOOLTIP 当前是否可用。"
+  (let* ((info (alist-get tooltip pyim-page-tooltip-infos))
+         (package (plist-get info :package))
+         (test-func (plist-get info :test)))
+    (cond
+     ((not (featurep package)) nil)
+     ((not (functionp test-func)) t)
+     ((and (functionp test-func)
+           (funcall test-func)) t)
+     (t nil))))
+
 (defun pyim-page-get-page-style (tooltip)
   "依照 TOOLTIP 和 `pyim-page-style', 得到一个 page style."
   (or (cdr (assoc tooltip pyim-page-tooltip-style-alist))
diff --git a/tests/pyim-tests.el b/tests/pyim-tests.el
index 485eb77bf5..e046548e84 100644
--- a/tests/pyim-tests.el
+++ b/tests/pyim-tests.el
@@ -1580,6 +1580,15 @@ Transfer-Encoding: chunked
   )
 
 ;; ** pyim-probe 相关单元测试
+(ert-deftest pyim-tests-pyim-page-tooltip-valid-p ()
+  (let ((pyim-page-tooltip-infos
+         `((posframe1 :package posframe1)
+           (posframe2 :package posframe :test (lambda () t))
+           (posframe3 :package posframe :test (lambda () nil)))))
+    (should-not (pyim-page-tooltip-valid-p 'posframe1))
+    (should (pyim-page-tooltip-valid-p 'posframe2))
+    (should-not (pyim-page-tooltip-valid-p 'posframe3))))
+
 (ert-deftest pyim-tests-pyim-page-get-page-style ()
   (let ((pyim-page-tooltip-style-alist
          '((minibuffer . minibuffer)))



reply via email to

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