branch: externals/pyim
commit b6eb72c8493b45a376203e29b012e77162283f3c
Author: Feng Shu <[email protected]>
Commit: Feng Shu <[email protected]>
pyim-autoselector 依赖 pyim-process.
* pyim-liberime.el (pyim-process-autoselector): Use.
(pyim-autoselector): Removed.
* pyim.el (pyim-autoselector): Required.
* pyim-process.el (pyim-process-autoselector): New custom.
(pyim-autoselector): Alias to pyim-process-autoselector.
* pyim-autoselector.el (pyim-entered, pyim-candidates): Do not
require.
(pyim-process): Require.
(pyim-autoselector): Removed.
(pyim-autoselector-xingma): Prefer functions in pyim-process.
* Development.org (整体架构): 调整自动上屏器的位置。
---
Development.org | 8 ++++----
pyim-autoselector.el | 35 +++++++----------------------------
pyim-liberime.el | 2 +-
pyim-process.el | 29 +++++++++++++++++++++++++++--
pyim.el | 1 +
5 files changed, 40 insertions(+), 35 deletions(-)
diff --git a/Development.org b/Development.org
index 3819afcf4c..70fc29976f 100644
--- a/Development.org
+++ b/Development.org
@@ -16,9 +16,9 @@
| | Dict 管理命令,标点用户命令,Pymap 管理命令 Indicator | |
| |
| |
| | +---------------------------------------------+
| |
-| | | PYIM 用例层: Process |
| |
-| | | |
| |
-| | | +-------------------------------+ |
| |
+| | 自动上屏器: | PYIM 用例层: Process |
| |
+| | ---------- | |
| |
+| | Autoselector | +-------------------------------+ |
| |
| | | | PYIM 实体层: | |
| |
| | | | ----------- | |
| |
| | | | Entered, Imobjs, Codes, | |
| |
@@ -31,7 +31,7 @@
| | | | | |
| |
| | | +-------------------------------+ |
| |
| | | |
| |
-| | | 自动上屏器: Autoselector |
| |
+| | | |
| |
| | +---------------------------------------------+
| |
| |
| |
| | PYIM 持久化层: 探针:
| |
diff --git a/pyim-autoselector.el b/pyim-autoselector.el
index b082abd9ec..973d6b3a6f 100644
--- a/pyim-autoselector.el
+++ b/pyim-autoselector.el
@@ -29,35 +29,12 @@
;; * 代码 :code:
(require 'cl-lib)
(require 'pyim-scheme)
-(require 'pyim-entered)
-(require 'pyim-candidates)
+(require 'pyim-process)
(defgroup pyim-autoselector nil
"Autoselector for pyim."
:group 'pyim)
-(defcustom pyim-autoselector '(pyim-autoselector-xingma)
- "已经启用的自动上屏器.
-
-自动上屏器是一个函数。假设用户已经输入 \"nihao\", 并按下 \"m\" 键,
-那么当前entered 就是 \"nihaom\". 上次 entered 是 \"nihao\". 那么
-返回值有3种情况(优先级按照下面的顺序):
-
-1. (:select last :replace-with \"xxx\") 自动上屏上次
-entered (nihao) 的第一个候选词,m 键下一轮处理。
-
-2. (:select current :replace-with \"xxx\") 自动上屏当前
-entered (nihaom) 的第一个候选词。
-
-3. nil 不自动上屏。
-
-如果 :replace-with 设置为一个字符串,则选择最终会被这个字符串替代。
-
-注意:多个 autoselector 函数运行时,最好不要相互影响,如果相互有
-影响,需要用户自己管理。"
- :type '(choice (const nil)
- (repeat function)))
-
(defun pyim-autoselector-xingma (&rest _args)
"适用于型码输入法的自动上屏器.
@@ -66,18 +43,20 @@ entered (nihaom) 的第一个候选词。
(let* ((scheme-name (pyim-scheme-name))
(class (pyim-scheme-get-option scheme-name :class))
(n (pyim-scheme-get-option scheme-name :code-split-length))
- (entered (pyim-entered-get 'point-before)))
+ (entered (pyim-process-get-entered 'point-before))
+ (candidates (pyim-process-get-candidates))
+ (last-candidates (pyim-process-get-last-candidates)))
(when (eq class 'xingma)
(cond
((and (= (length entered) n)
- (= (length pyim-candidates) 1)
+ (= (length candidates) 1)
;; 如果没有候选词,pyim 默认将用户输入当做候选词,这时不能自动上屏,
;; 因为这种情况往往是用户输入有误,自动上屏之后,调整输入就变得麻烦了。
- (not (equal entered (car pyim-candidates))))
+ (not (equal entered (car candidates))))
'(:select current))
((and (> (length entered) n)
(equal (substring entered 0 n)
- (car pyim-candidates-last)))
+ (car last-candidates)))
;; 自动清除错误输入模式,类似微软五笔:敲第五个字母的时候,前面四个字母自
;; 动清除。
'(:select last :replace-with ""))
diff --git a/pyim-liberime.el b/pyim-liberime.el
index 5d0d140419..b7167796a8 100644
--- a/pyim-liberime.el
+++ b/pyim-liberime.el
@@ -190,7 +190,7 @@
`(:select current :replace-with ,commit))
(t nil))))))
-(add-to-list 'pyim-autoselector 'pyim-autoselector-rime)
+(add-to-list 'pyim-process-autoselector 'pyim-autoselector-rime)
(defun pyim-liberime-create-word (codes words)
"通过 CODES 和 WORDS 的信息,在 rime 后端重新造词和调整词频。
diff --git a/pyim-process.el b/pyim-process.el
index b511a5b958..1fce8061fe 100644
--- a/pyim-process.el
+++ b/pyim-process.el
@@ -37,7 +37,6 @@
(require 'pyim-candidates)
(require 'pyim-outcome)
(require 'pyim-punctuation)
-(require 'pyim-autoselector)
(require 'pyim-cstring)
(defgroup pyim-process nil
@@ -61,6 +60,29 @@
`pyim-english-input-switch-functions' 的设置."
:type 'symbol)
+(defvaralias 'pyim-autoselector 'pyim-process-autoselector)
+(defcustom pyim-process-autoselector '(pyim-autoselector-xingma)
+ "已经启用的自动上屏器.
+
+自动上屏器是一个函数。假设用户已经输入 \"nihao\", 并按下 \"m\" 键,
+那么当前entered 就是 \"nihaom\". 上次 entered 是 \"nihao\". 那么
+返回值有3种情况(优先级按照下面的顺序):
+
+1. (:select last :replace-with \"xxx\") 自动上屏上次
+entered (nihao) 的第一个候选词,m 键下一轮处理。
+
+2. (:select current :replace-with \"xxx\") 自动上屏当前
+entered (nihaom) 的第一个候选词。
+
+3. nil 不自动上屏。
+
+如果 :replace-with 设置为一个字符串,则选择最终会被这个字符串替代。
+
+注意:多个 autoselector 函数运行时,最好不要相互影响,如果相互有
+影响,需要用户自己管理。"
+ :type '(choice (const nil)
+ (repeat function)))
+
(defcustom pyim-exhibit-delay-ms 0
"输入或者删除拼音字符后等待多少毫秒后才显示可选词
当用户快速输入连续的拼音时可提升用户体验.
@@ -251,7 +273,7 @@
(when (functionp x)
(ignore-errors
(funcall x))))
- (cl-remove-duplicates pyim-autoselector :from-end t)))
+ (cl-remove-duplicates pyim-process-autoselector :from-end
t)))
result)
(cond
;; 假如用户输入 "nihao", 然后按了 "m" 键, 那么当前的 entered
@@ -331,6 +353,9 @@
(defun pyim-process-get-candidates ()
pyim-candidates)
+(defun pyim-process-get-last-candidates ()
+ pyim-candidates-last)
+
(defun pyim-process-get-candidate-position ()
pyim-candidate-position)
diff --git a/pyim.el b/pyim.el
index 363ba1c4c0..d6cf4cc473 100644
--- a/pyim.el
+++ b/pyim.el
@@ -41,6 +41,7 @@
(require 'pyim-preview)
(require 'pyim-indicator)
(require 'pyim-process)
+(require 'pyim-autoselector)
(require 'pyim-cstring)
(require 'pyim-dict)