[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'."