[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)