branch: externals/pyim commit 77d690bcfbdf4a439c2e0f6b2ba8477530d44582 Author: Feng Shu <tuma...@163.com> Commit: Feng Shu <tuma...@163.com>
使用 hook 而不是 advice 来处理 page 和 preview 相关功能。 * pyim.el (pyim-input-method): Use pyim-process-ui-init-hook. * pyim-process.el (pyim-process-ui-init-hook) (pyim-process-ui-refresh-hook, pyim-process-ui-hide-hook) (pyim-process-ui-position-function): New variables. (pyim-process-init-ui, pyim-process-ui-position) (pyim-process-preview-refresh, pyim-process-page-refresh) (pyim-process-preview-hide, pyim-process-page-hide): Removed. (pyim-process-terminate, pyim-process-run-async) (pyim-process-run-1): Use new hooks. * pyim-preview.el (pyim-process-ui-init-hook) (pyim-process-ui-refresh-hook, pyim-process-ui-hide-hook) (pyim-process-ui-position-function): * pyim-page.el (pyim-page-refresh, pyim-process-ui-refresh-hook) (pyim-process-ui-hide-hook): --- pyim-page.el | 6 +++--- pyim-preview.el | 8 ++++---- pyim-process.el | 38 +++++++++++++++----------------------- pyim.el | 2 +- 4 files changed, 23 insertions(+), 31 deletions(-) diff --git a/pyim-page.el b/pyim-page.el index a0bf325144..53e6836603 100644 --- a/pyim-page.el +++ b/pyim-page.el @@ -230,10 +230,10 @@ page 的概念,比如,上面的 “nihao” 的 *待选词列表* 就可以 (null unread-post-input-method-events)) (pyim-page-show (pyim-page-info-format page-info tooltip) - (pyim-process-ui-position) + (funcall pyim-process-ui-position-function) tooltip)))) -(advice-add 'pyim-process-page-refresh :after #'pyim-page-refresh) +(add-hook 'pyim-process-ui-refresh-hook #'pyim-page-refresh) (defun pyim-page-next-page (arg) "Pyim page 翻页命令." @@ -549,7 +549,7 @@ page 的概念,比如,上面的 “nihao” 的 *待选词列表* 就可以 (setq-local cursor-type t)) (setq pyim-page-last-minibuffer-string nil))))) -(advice-add 'pyim-process-page-hide :after #'pyim-page-hide) +(add-hook 'pyim-process-ui-hide-hook #'pyim-page-hide) ;; * Footer (provide 'pyim-page) diff --git a/pyim-preview.el b/pyim-preview.el index 7ec28d9606..f6ccf5b88d 100644 --- a/pyim-preview.el +++ b/pyim-preview.el @@ -57,7 +57,7 @@ (if input-method-highlight-flag (overlay-put pyim-preview-overlay 'face 'pyim-preview-face))))) -(advice-add 'pyim-process-init-ui :after #'pyim-preview-setup-overlay) +(add-hook 'pyim-process-ui-init-hook #'pyim-preview-setup-overlay) (defun pyim-preview-delete-overlay () "删除 pyim 光标处实时预览功能所需要的 overlay. @@ -97,7 +97,7 @@ pyim 会使用 Emacs overlay 机制在 *待输入buffer* 光标处高亮显示 (move-overlay pyim-preview-overlay (overlay-start pyim-preview-overlay) (point)))) -(advice-add 'pyim-process-preview-refresh :after #'pyim-preview-refresh) +(add-hook 'pyim-process-ui-refresh-hook #'pyim-preview-refresh) (defun pyim-preview-delete-string () "删除已经插入 buffer 的 preview 预览字符串。" @@ -105,13 +105,13 @@ pyim 会使用 Emacs overlay 机制在 *待输入buffer* 光标处高亮显示 (delete-region (overlay-start pyim-preview-overlay) (overlay-end pyim-preview-overlay)))) -(advice-add 'pyim-process-preview-hide :after #'pyim-preview-delete-string) +(add-hook 'pyim-process-ui-hide-hook #'pyim-preview-delete-string) (defun pyim-preview-start-point () "Preview 字符串的开始位置。" (overlay-start pyim-preview-overlay)) -(advice-add 'pyim-process-ui-position :override #'pyim-preview-start-point) +(setq pyim-process-ui-position-function #'pyim-preview-start-point) ;; * Footer (provide 'pyim-preview) diff --git a/pyim-process.el b/pyim-process.el index 1fce8061fe..d1c8f47905 100644 --- a/pyim-process.el +++ b/pyim-process.el @@ -116,6 +116,18 @@ entered (nihaom) 的第一个候选词。 (defvar pyim-process-run-exhibit-timer nil) +(defvar pyim-process-ui-init-hook nil + "Hook used to run ui init functions.") + +(defvar pyim-process-ui-refresh-hook nil + "Hook used to run ui refresh functions.") + +(defvar pyim-process-ui-hide-hook nil + "Hook used to run ui hide functions.") + +(defvar pyim-process-ui-position-function #'point + "The value is a function returned a position where ui place.") + (pyim-register-local-variables '(pyim-process-input-ascii pyim-process-translating)) @@ -134,12 +146,6 @@ entered (nihaom) 的第一个候选词。 (defun pyim-process-update-personal-words () (pyim-dcache-call-api 'update-personal-words t)) -(defun pyim-process-init-ui () - "PYIM 流程,用户界面相关的初始化工作。") - -(defun pyim-process-ui-position () - "用户界面定位点获取函数接口.") - (defun pyim-process-start-daemon () "启动 pyim 流程需要的相关 daemon, 接口函数.") @@ -322,14 +328,7 @@ entered (nihaom) 的第一个候选词。 (pyim-entered-get 'point-after)) (pyim-process-terminate)) (t (setq pyim-candidate-position 1) - (pyim-process-preview-refresh) - (pyim-process-page-refresh)))))) - -(defun pyim-process-preview-refresh () - "Preview refresh 接口函数。") - -(defun pyim-process-page-refresh () - "Page refresh 接口函数。") + (run-hooks 'pyim-process-ui-refresh-hook)))))) (defun pyim-process-self-insert-command-p (cmd) "测试 CMD 是否是一个 pyim self insert command." @@ -341,8 +340,7 @@ entered (nihaom) 的第一个候选词。 (words (delete-dups (pyim-candidates-create pyim-imobjs scheme-name t)))) (when words (setq pyim-candidates words) - (pyim-process-preview-refresh) - (pyim-process-page-refresh)))) + (run-hooks 'pyim-process-ui-refresh-hook)))) (defun pyim-process-run-async-timer-reset () "Reset `pyim-process-run-async-timer'." @@ -646,8 +644,7 @@ BUG:拼音无法有效地处理多音字。" (setq pyim-process-force-input-chinese nil) (setq pyim-candidates nil) (setq pyim-candidates-last nil) - (pyim-process-preview-hide) - (pyim-process-page-hide) + (run-hooks 'pyim-process-ui-hide-hook) (setq pyim-cstring-to-code-criteria nil) (pyim-process-run-async-timer-reset) (let* ((class (pyim-scheme-get-option (pyim-scheme-name) :class)) @@ -655,11 +652,6 @@ BUG:拼音无法有效地处理多音字。" (when (and class (functionp func)) (funcall func)))) -(defun pyim-process-preview-hide () - "Preview hide 接口函数.") - -(defun pyim-process-page-hide () - "Page hide 接口函数.") ;; * Footer (provide 'pyim-process) diff --git a/pyim.el b/pyim.el index d6cf4cc473..8924a95a3b 100644 --- a/pyim.el +++ b/pyim.el @@ -144,7 +144,7 @@ Tip: 用户也可以利用 `pyim-outcome-trigger-function-default' 函数 overriding-local-map) (list key) ;; (message "call with key: %S" key-or-string) - (pyim-process-init-ui) + (run-hooks 'pyim-process-ui-init-hook) (with-silent-modifications (unwind-protect (let ((input-string (pyim-input-method-1 key)))