branch: externals/pyim commit f10e097e2380277254c1396a953e766ed17b7327 Author: Feng Shu <tuma...@163.com> Commit: Feng Shu <tuma...@163.com>
Add pyim-entered-longest and use it. * pyim.el (pyim-terminate-translation, pyim-create-pyim-word) (pyim-select-word): Deal with pyim-entered-longest. * pyim-entered.el (pyim-entered-longest): New variable. --- pyim-entered.el | 3 +++ pyim.el | 11 +++++++++-- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/pyim-entered.el b/pyim-entered.el index 3f5d7d9..c30c949 100644 --- a/pyim-entered.el +++ b/pyim-entered.el @@ -64,6 +64,9 @@ pyim 使用一个 buffer 来处理 entered, 以实现 “用户输入字符串 继续处理后面的输入,这种方式方便长词的输入; 3. 如果光标在行首,则处理整行。") +(defvar pyim-entered-longest nil + "记录用户在连续选词之前的最长输入,用于全拼输入法多音字矫正。") + (defmacro pyim-with-entered-buffer (&rest forms) (declare (indent 0) (debug t)) `(with-current-buffer (get-buffer-create pyim-entered-buffer) diff --git a/pyim.el b/pyim.el index e700df2..ae7c29a 100644 --- a/pyim.el +++ b/pyim.el @@ -434,6 +434,7 @@ REFRESH-COMMON-DCACHE 已经废弃,不要再使用了。" (setq pyim-force-input-chinese nil) (pyim-page-hide) (pyim-entered-erase-buffer) + (setq pyim-entered-longest nil) (pyim-entered-refresh-timer-reset) (let* ((class (pyim-scheme-get-option (pyim-scheme-name) :class)) (func (intern (format "pyim-terminate-translation:%S" class)))) @@ -465,9 +466,8 @@ BUG:拼音无法有效地处理多音字。" (setq pyim-last-created-word word) (let* ((scheme-name (pyim-scheme-name)) (class (pyim-scheme-get-option scheme-name :class)) - (entered (pyim-entered-get 'point-before)) (code-prefix (pyim-scheme-get-option scheme-name :code-prefix)) - (codes (pyim-cstring-to-codes word scheme-name entered))) + (codes (pyim-cstring-to-codes word scheme-name pyim-entered-longest))) ;; 保存对应词条的词频 (when (> (length word) 0) (pyim-dcache-update-iword2count word prepend wordcount-handler)) @@ -590,6 +590,13 @@ FILE 的格式与 `pyim-dcache-export' 生成的文件格式相同, (defun pyim-select-word () "从选词框中选择当前词条,然后删除该词条对应拼音。" (interactive) + ;; 记录用户在没有多次选词前的输入,用于多音字矫正。 + (setq pyim-entered-longest + (let ((entered (pyim-entered-get 'point-before))) + (if (> (length pyim-entered-longest) + (length entered)) + pyim-entered-longest + entered))) (if (null pyim-candidates) ; 如果没有选项,输入空格 (progn (pyim-outcome-handle 'last-char)