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

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

[elpa] externals/pyim 6c2dca976b 2/2: 在 minibuffer 中使用 pyim 时,可以异步获取词条。


From: ELPA Syncer
Subject: [elpa] externals/pyim 6c2dca976b 2/2: 在 minibuffer 中使用 pyim 时,可以异步获取词条。
Date: Wed, 29 Dec 2021 04:01:57 -0500 (EST)

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

    在 minibuffer 中使用 pyim 时,可以异步获取词条。
    
            * pyim-process.el (pyim-process-run-1): Improve comment.
            (pyim-process-run-async): Now can run in minibuffer.
    
            * pyim-page.el (pyim-page-minibuffer-last-message): New variable.
            (pyim-page-minibuffer-message): 让其支持异步获取词条时的 page 显示。
            (pyim-page-hide): clean pyim-page-minibuffer-last-message.
            (pyim-page-refresh): Simplify.
---
 pyim-page.el    | 30 ++++++++++++++++++++----------
 pyim-process.el | 16 ++++++----------
 2 files changed, 26 insertions(+), 20 deletions(-)

diff --git a/pyim-page.el b/pyim-page.el
index c5dd13d81b..58f1e52e06 100644
--- a/pyim-page.el
+++ b/pyim-page.el
@@ -103,6 +103,9 @@ Only useful when use posframe.")
 (defvar pyim-page-tooltip-popup nil
   "这个变量用来保存做为 page tooltip 的 popup.")
 
+(defvar pyim-page-minibuffer-last-message nil
+  "函数 `pyim-page-minibuffer-message' 上一次处理的消息字符串。")
+
 (defun pyim-page-current-page ()
   "计算当前选择的词条在第几页面.
 
@@ -213,11 +216,7 @@ page 的概念,比如,上面的 “nihao” 的 *待选词列表* 就可以
        ;; windows 环境下,似乎有很严重的性能问题,原因未知。
        ((eq (selected-window) (minibuffer-window))
         (pyim-page-minibuffer-message
-         (concat (or pyim-page-minibuffer-separator
-                     (let* ((width (string-width (buffer-string)))
-                            (n (- (* 20 (+ 1 (/ width 20))) width)))
-                       (make-string n ?\ )))
-                 (pyim-page-style:minibuffer page-info))))
+         (pyim-page-style:minibuffer page-info)))
        ;; 在 exwm 环境下使用 exwm-xim 输入中文时,使用 minibuffer 来显示 page。
        ((pyim-probe-exwm-environment)
         (message (pyim-page-style:exwm page-info)))
@@ -497,13 +496,23 @@ page 的概念,比如,上面的 “nihao” 的 *待选词列表* 就可以
 minibuffer 原来显示的信息和 pyim 选词框整合在一起显示
 这个函数就是作这个工作。"
   (message nil)
-  (let ((inhibit-quit t)
-        point-1)
+  (let* ((inhibit-quit t)
+         (begin (point))
+         (length (length pyim-page-minibuffer-last-message))
+         (end (min (+ begin length) (point-max))))
+    (delete-region begin end)
     (save-excursion
-      (insert string)
-      (setq point-1 (point)))
+      (insert
+       (setq pyim-page-minibuffer-last-message
+             (concat
+              (or pyim-page-minibuffer-separator
+                  (let* ((width (string-width (buffer-string)))
+                         (n (- (* 20 (+ 1 (/ width 20))) width)))
+                    (make-string n ?\ )))
+              string)))
+      (setq end (point)))
     (sit-for 1000000)
-    (delete-region (point) point-1)
+    (delete-region (point) (min end (point-max)))
     (when quit-flag
       (setq quit-flag nil)
       (pyim-add-unread-command-events 7 t))))
@@ -534,6 +543,7 @@ minibuffer 原来显示的信息和 pyim 选词框整合在一起显示
 
 (defun pyim-page-hide ()
   "Hide pyim page."
+  (setq pyim-page-minibuffer-last-message nil)
   (cond
    ((and (eq pyim-page-tooltip 'popup)
          (functionp 'popup-delete))
diff --git a/pyim-process.el b/pyim-process.el
index cdcc7f620c..637513a42f 100644
--- a/pyim-process.el
+++ b/pyim-process.el
@@ -251,9 +251,6 @@
     ;; 当用户选择词条时,如果停顿超过1秒,就激活异步流程,不同的输入法异步流程定
     ;; 义也可能不同,比如:全拼输入法目前的异步流程是搜索当前 buffer 获取词条。
     ;; 而 rime 的异步流程是获取所有的词条。
-    ;;
-    ;; 注意事项:异步流程对 page tooltip 有要求, 有些 page tooltip 是无法支持异
-    ;; 步流程的。
     (setq pyim-process-run-async-timer
           (run-with-timer
            pyim-process-async-delay
@@ -320,13 +317,12 @@
 
 (defun pyim-process-run-async ()
   "Function used by `pyim-process-run-async-timer'"
-  (unless (equal (selected-window) (minibuffer-window))
-    (let* ((scheme-name (pyim-scheme-name))
-           (words (delete-dups (pyim-candidates-create pyim-imobjs scheme-name 
t))))
-      (when words
-        (setq pyim-candidates words)
-        (pyim-preview-refresh)
-        (pyim-page-refresh)))))
+  (let* ((scheme-name (pyim-scheme-name))
+         (words (delete-dups (pyim-candidates-create pyim-imobjs scheme-name 
t))))
+    (when words
+      (setq pyim-candidates words)
+      (pyim-preview-refresh)
+      (pyim-page-refresh))))
 
 (defun pyim-process-run-async-timer-reset ()
   "Reset `pyim-process-run-async-timer'."



reply via email to

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