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

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

[elpa] externals/pyim 2330f3fd4e 1/2: 简化 page popup 功能。


From: ELPA Syncer
Subject: [elpa] externals/pyim 2330f3fd4e 1/2: 简化 page popup 功能。
Date: Tue, 28 Dec 2021 02:57:47 -0500 (EST)

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

    简化 page popup 功能。
    
            * pyim-process.el (pyim-process-run-async): Remove 
pyim-page-refresh-run-async-p.
    
            * pyim-page.el (pyim-page-refresh-run-async-p): removed.
            (pyim-page-tooltip-popup): New variable.
            (pyim-page-tooltip-show): use pyim-page-tooltip-popup-show.
            (pyim-popup-show-last-info): removed.
            (pyim-page-tooltip-popup-show): New function.
            (pyim-popup-show): removed.
            (pyim-page-hide): deal with pyim-page-tooltip-popup.
---
 pyim-page.el    | 76 +++++++++++++++++++++++----------------------------------
 pyim-process.el |  3 +--
 2 files changed, 31 insertions(+), 48 deletions(-)

diff --git a/pyim-page.el b/pyim-page.el
index 747c2c1398..31e9327e3d 100644
--- a/pyim-page.el
+++ b/pyim-page.el
@@ -100,8 +100,8 @@ Only useful when use posframe.")
 (defvar pyim-page-tooltip-posframe-buffer " 
*pyim-page-tooltip-posframe-buffer*"
   "这个变量用来保存做为 page tooltip 的 posframe 的 buffer.")
 
-(defvar pyim-page-refresh-run-async-p nil
-  "在异步获取词条的时候,PYIM 会将这个变量设置为 t.")
+(defvar pyim-page-tooltip-popup nil
+  "这个变量用来保存做为 page tooltip 的 popup.")
 
 (defun pyim-page-current-page ()
   "计算当前选择的词条在第几页面.
@@ -486,9 +486,9 @@ page 的概念,比如,上面的 “nihao” 的 *待选词列表* 就可以
                           :foreground-color (face-attribute 'pyim-page 
:foreground)
                           :border-width pyim-page-posframe-border-width
                           :border-color (face-attribute 'pyim-page-border 
:background)))
-          ((and (eq tooltip 'popup)
-                (functionp 'popup-tip))
-           (pyim-popup-show :string string :position position))
+          ((and (eq tooltip 'popup) (featurep 'popup))
+           (pyim-page-tooltip-popup-show :string string
+                                         :position position))
           (t (let ((max-mini-window-height (+ pyim-page-length 2)))
                (message string))))))
 
@@ -513,52 +513,36 @@ minibuffer 原来显示的信息和 pyim 选词框整合在一起显示
 (declare-function 'popup-fill-string "popup")
 (declare-function 'popup-set-list "popup")
 (declare-function 'popup-delete "popup")
-(declare-function 'popup-live-p "popup")
+(declare-function 'popup-replace-displayable "popup")
 
-(defvar pyim-popup-show-last-info nil
-  "保存上一次运行 `pyim-popup-show' 时的一些信息.")
-
-(cl-defun pyim-popup-show (&key string position)
+(cl-defun pyim-page-tooltip-popup-show (&key string position)
   "Show STRING at POSITION with the help of popup-el."
-  ;; 如果上次的 page 还在显示,string 和 position 没有变化时,就不做任何事,这样
-  ;; 可以减少闪烁。
-  (unless (and (popup-live-p (plist-get pyim-popup-show-last-info :popup))
-               (equal (plist-get pyim-popup-show-last-info :string) string)
-               (equal (plist-get pyim-popup-show-last-info :position) 
position))
-    (let* ((width-and-lines (popup-fill-string string))
-           (width (car width-and-lines))
-           (lines (cdr width-and-lines))
-           (last-popup (plist-get pyim-popup-show-last-info :popup))
-           popup)
-      ;; FIXME: 不知道什么原因,异步获取词条并刷新 page 时,popup 会生成两个
-      ;; page, 所以这里先删除上次创建的,这样处理会带来闪烁问题,不过通过缓存等
-      ;; 一些手段,可以降低闪烁频率。
-      (when (and pyim-page-refresh-run-async-p
-                 (popup-live-p last-popup))
-        (popup-delete last-popup))
-      (setq popup (popup-create position width 15
-                                :around t
-                                :margin-left 1
-                                :margin-right 1
-                                :face 'pyim-page))
-      (setq pyim-popup-show-last-info
-            (list :popup popup
-                  :string string
-                  :position position))
-      (unwind-protect
-          (when (> (popup-width popup) 0)
-            (popup-set-list popup lines)
-            (popup-draw popup)
-            (clear-this-command-keys)
-            (push (read-event nil) unread-command-events)
-            t)
-        (popup-delete popup)))))
+  (let* ((string (popup-replace-displayable string))
+         (width-and-lines (popup-fill-string string))
+         (width (car width-and-lines))
+         (lines (cdr width-and-lines)))
+    (when pyim-page-tooltip-popup
+      (popup-delete pyim-page-tooltip-popup))
+    (setq pyim-page-tooltip-popup
+          (popup-create position width 15
+                        :around t
+                        :margin-left 1
+                        :margin-right 1
+                        :face 'pyim-page))
+    (when (> (popup-width pyim-page-tooltip-popup) 0)
+      (popup-set-list pyim-page-tooltip-popup lines)
+      (popup-draw pyim-page-tooltip-popup))))
 
 (defun pyim-page-hide ()
   "Hide pyim page."
-  (when (and (eq pyim-page-tooltip 'posframe)
-             (functionp 'posframe-hide))
-    (posframe-hide pyim-page-tooltip-posframe-buffer)))
+  (cond
+   ((and (eq pyim-page-tooltip 'popup)
+         (functionp 'popup-delete))
+    (popup-delete pyim-page-tooltip-popup))
+   ((and (eq pyim-page-tooltip 'posframe)
+         (functionp 'posframe-hide))
+    (posframe-hide pyim-page-tooltip-posframe-buffer))
+   (t nil)))
 
 ;; * Footer
 (provide 'pyim-page)
diff --git a/pyim-process.el b/pyim-process.el
index b2916a434f..c7ed8a3bb5 100644
--- a/pyim-process.el
+++ b/pyim-process.el
@@ -322,8 +322,7 @@
   "Function used by `pyim-process-run-async-timer'"
   ;; NEED HELP: 目前只有 posframe 和 minibufer 两种 page 可以用于异步处理。
   (unless (equal (selected-window) (minibuffer-window))
-    (let* ((pyim-page-refresh-run-async-p t)
-           (scheme-name (pyim-scheme-name))
+    (let* ((scheme-name (pyim-scheme-name))
            (words (delete-dups (pyim-candidates-create pyim-imobjs scheme-name 
t))))
       (when words
         (setq pyim-candidates words)



reply via email to

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