emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] externals/pyim b13a2ee 1/5: Add Refresh Component.


From: ELPA Syncer
Subject: [elpa] externals/pyim b13a2ee 1/5: Add Refresh Component.
Date: Thu, 3 Jun 2021 23:57:14 -0400 (EDT)

branch: externals/pyim
commit b13a2ee5c9ef64f4011b611c6191cb4648851099
Author: Feng Shu <tumashu@163.com>
Commit: Feng Shu <tumashu@163.com>

    Add Refresh Component.
    
        * Development.org (整体架构): Add Refresh info.
    
        * pyim-entered.el (pyim-entered-refresh-timer)
        (pyim-entered-backward-point, pyim-entered-backward-imelem)
        (pyim-entered-forward-imelem, pyim-entered-end-of-line)
        (pyim-entered-beginning-of-line, pyim-entered-refresh)
        (pyim-entered-refresh-1, pyim-entered-refresh-with-thread)
        (pyim-entered-refresh-timer-reset)
        (pyim-entered-delete-backward-char)
        (pyim-entered-delete-forward-char)
        (pyim-entered-delete-backward-imelem)
        (pyim-entered-delete-forward-imelem): Removed.
    
        * pyim-liberime.el (pyim-select-word:rime): Use pyim-refresh.
    
        * pyim-refresh.el (pyim-refresh-timer, pyim-refresh)
        (pyim-refresh-1, pyim-refresh-with-thread)
        (pyim-refresh-timer-reset): New file.
    
        * pyim.el (pyim-self-insert-command, pyim-terminate-translation)
        (pyim-select-word:pinyin, pyim-select-word:xingma)
        (pyim-toggle-assistant-scheme): use pyim-refresh-*
        (pyim-entered-forward-point, pyim-entered-backward-point)
        (pyim-entered-backward-imelem, pyim-entered-forward-imelem)
        (pyim-entered-end-of-line, pyim-entered-beginning-of-line)
        (pyim-entered-delete-backward-char)
        (pyim-entered-delete-forward-char)
        (pyim-entered-delete-backward-imelem)
        (pyim-entered-delete-forward-imelem): Move from pyim-entered.el
---
 Development.org  |  34 +++++-----
 pyim-entered.el  | 197 -------------------------------------------------------
 pyim-liberime.el |   2 +-
 pyim-refresh.el  | 156 +++++++++++++++++++++++++++++++++++++++++++
 pyim.el          |  85 ++++++++++++++++++++++--
 5 files changed, 254 insertions(+), 220 deletions(-)

diff --git a/Development.org b/Development.org
index 5239d7b..8324dd1 100644
--- a/Development.org
+++ b/Development.org
@@ -3,22 +3,22 @@
 
 * 整体架构
 #+begin_example
------------------------------------------------------------------------------------------------
-| 用户命令层:     Pyim 用户命令,Entered 用户命令                 |                          
|
-|                  Cregexp 用户命令,Cstring 用户命令              |                    
      |
-|                  Dict 管理命令,标点用户命令,Pymap 管理命令     |                          |
--------------------------------------------------------------------|           
               |
-| PYIM流程层:     Entered, Outcome  |  PYIM 视图层:Page, Preview |                   
       |
--------------------------------------------------------------------|           
               |
-| PYIM组件层:     Imobjs, Codes, Candidates, Punctuations         |         
Scheme           |
-|                  Cregexp, Cstring, Probe, Autoselector           |     
Assistant-scheme     |
-|                  Pinyin                                          |         
Common           |
-|------------------------------------------------------------------|           
               |
-| 词库缓存接口层: Dcache                                          |                   
       |
--------------------------------------------------------------------|           
               |
-| 词库缓存实现层: Dregcache, Dhashcache                           |                   
       |
--------------------------------------------------------------------|           
               |
-| 词库文件层:     Dict, Pymap                                     |                 
         |
-----------------------------------------------------------------------------------------------|
++------------------+------------------------------------------------------------------+--------------------------+
+| 用户命令层:     | Pyim 用户命令,Entered 用户命令                                  |       
                   |
+|                  | Cregexp 用户命令,Cstring 用户命令                               | 
                         |
+|                  | Dict 管理命令,标点用户命令,Pymap 管理命令                      |        
                  |
++------------------+-----------------------------------------+------------------------+
                          |
+| PYIM 流程层:    | Refresh, Outcome                        | PYIM 视图组件:        | 
                         |
++------------------+-----------------------------------------|                 
       |                          |
+| PYIM 组件层:    | Entered, Imobjs, Codes, Candidates,     | Page, Preview       
   |         Scheme           |
+|                  | Punctuations, Cregexp, Cstring, Probe,  |                 
       |     Assistant-scheme     |
+|                  | Autoselector, Pinyin                    |                 
       |         Common           |
++------------------+-----------------------------------------+------------------------+
                          |
+|                  | 词库缓存接口层: Dcache                                          
|                          |
+| PYIM 持久化层    
|------------------------------------------------------------------+            
              |
+|                  | 词库缓存实现层: Dregcache, Dhashcache                           
|                          |
++------------------+------------------------------------------------------------------+
                          |
+| 词库文件层:     | Dict, Pymap                                                     
 |                          |
++------------------+------------------------------------------------------------------+--------------------------+
 #+end_example
 
diff --git a/pyim-entered.el b/pyim-entered.el
index 03fc09d..4bc63ec 100644
--- a/pyim-entered.el
+++ b/pyim-entered.el
@@ -43,9 +43,6 @@
 
 (defvar pyim-entered--exhibit-timer nil)
 
-(defvar pyim-entered-refresh-timer nil
-  "异步处理 intered 时时,使用的 timer.")
-
 (defvar pyim-entered-buffer " *pyim-entered-buffer*"
   "一个 buffer,用来处理用户已经输入的字符串: entered。
 
@@ -94,53 +91,6 @@ TYPE 取值为 point-after, 返回 entered buffer 中 point 之后的字符
   (pyim-with-entered-buffer
     (erase-buffer)))
 
-;; pyim-entered-buffer 中进行光标移动的函数
-;; point move function in `pyim-entered-buffer'
-(defun pyim-entered-forward-point ()
-  "`pyim-entered-buffer' 中光标前移"
-  (interactive)
-  (pyim-with-entered-buffer
-    (ignore-errors
-      (forward-char)))
-  (pyim-entered-refresh t))
-
-(defun pyim-entered-backward-point ()
-  "`pyim-entered-buffer' 中光标后移"
-  (interactive)
-  (pyim-with-entered-buffer
-    (ignore-errors
-      (backward-char)))
-  (pyim-entered-refresh t))
-
-(defun pyim-entered-backward-imelem (&optional search-forward)
-  "`pyim-entered-buffer’ 中光标向后移动一个 imelem 对应的字符串
-
-在全拼输入法中,就是向前移动一个拼音"
-  (interactive)
-  (let* ((position (pyim-entered-next-imelem-position 1 search-forward)))
-    (pyim-with-entered-buffer
-      (goto-char position))
-    (pyim-entered-refresh t)))
-
-(defun pyim-entered-forward-imelem ()
-  "`pyim-entered-buffer’ 中光标向前移动一个 imelem 对应的字符串"
-  (interactive)
-  (pyim-entered-backward-imelem t))
-
-(defun pyim-entered-end-of-line ()
-  "`pyim-entered-buffer' 中光标移至行尾"
-  (interactive)
-  (pyim-with-entered-buffer
-    (end-of-line))
-  (pyim-entered-refresh t))
-
-(defun pyim-entered-beginning-of-line ()
-  "`pyim-entered-buffer' 中光标移至行首"
-  (interactive)
-  (pyim-with-entered-buffer
-    (beginning-of-line))
-  (pyim-entered-refresh t))
-
 (defun pyim-entered-next-imelem-position (num &optional search-forward start)
   "从 `pyim-entered-buffer' 的当前位置,找到下一个或者下 NUM 个 imelem 对应的位置
 
@@ -174,153 +124,6 @@ TYPE 取值为 point-after, 返回 entered buffer 中 point 之后的字符
               (cl-decf pos)))))
       end-position)))
 
-(declare-function pyim-terminate-translation "pyim")
-
-(defun pyim-entered-refresh (&optional no-delay)
-  "延迟 `pyim-entered-exhibit-delay-ms' 显示备选词等待用户选择。"
-  (if (= (length (pyim-entered-get 'point-before)) 0)
-      (pyim-terminate-translation)
-    (when pyim-entered--exhibit-timer
-      (cancel-timer pyim-entered--exhibit-timer))
-    (cond
-     ((or no-delay
-          (not pyim-entered-exhibit-delay-ms)
-          (eq pyim-entered-exhibit-delay-ms 0))
-      (pyim-entered-refresh-1))
-     (t (setq pyim-entered--exhibit-timer
-              (run-with-timer (/ pyim-entered-exhibit-delay-ms 1000.0)
-                              nil
-                              #'pyim-entered-refresh-1))))))
-
-;; 没有这一行,native-compilation 会出现奇怪的问题,pyim-outcome-handle 会获取到
-;; 错误的 pyim-candidates 取值。原因未知。
-(defvar pyim-candidates)
-
-(defun pyim-entered-refresh-1 ()
-  "查询 `pyim-entered-buffer' 光标前的拼音字符串(如果光标在行首则为光标后的), 显示备选词等待用户选择。"
-  (let* ((scheme-name (pyim-scheme-name))
-         entered-to-translate)
-    (setq entered-to-translate
-          (pyim-entered-get 'point-before))
-    (setq pyim-imobjs (pyim-imobjs-create entered-to-translate scheme-name))
-    (setq pyim-candidates
-          (or (delete-dups (pyim-candidates-create pyim-imobjs scheme-name))
-              (list entered-to-translate)))
-    (pyim-entered-refresh-timer-reset)
-    ;; 延迟1秒异步处理 entered, pyim 内置的输入法目前不使用异步获取
-    ;; 词条的方式,主要用于 pyim-liberime 支持。
-    (setq pyim-entered-refresh-timer
-          (run-with-timer
-           1 nil
-           (lambda ()
-             (if (functionp 'make-thread)
-                 (make-thread #'pyim-entered-refresh-with-thread
-                              "pyim-entered-refresh-with-thread")
-               (pyim-entered-refresh-with-thread)))))
-    ;; 自动上屏功能
-    (let ((autoselector-results
-           (mapcar (lambda (x)
-                     (when (functionp x)
-                       (ignore-errors
-                         (funcall x))))
-                   (cl-remove-duplicates pyim-autoselector :from-end t)))
-          result)
-      (cond
-       ;; 假如用户输入 "nihao", 然后按了 "m" 键, 那么当前的 entered
-       ;; 就是"nihaom", 如果 autoselector 返回 list: (:select last),
-       ;; 那么,“nihao” 对应的第一个候选词将上屏,m键下一轮继续处理。
-       ;; 这是一种 "踩雷确认模式".
-       ((and
-         ;; autoselector 功能会影响手动连续选择功能,所以这里做了一些限制,
-         ;; 只有在输入的时候才能够触发 autoselector 机制。
-         (eq this-command 'pyim-self-insert-command)
-         (cl-find-if (lambda (x)
-                       (setq result x)
-                       (equal (plist-get x :select) 'last))
-                     autoselector-results))
-        (let* ((str (plist-get result :replace-with))
-               (pyim-candidates
-                (if (and str (stringp str))
-                    (list str)
-                  pyim-candidates-last)))
-          (pyim-outcome-handle 'candidate))
-        ;; autoselector 机制已经触发的时候,如果发现 entered buffer 中
-        ;; point 后面还有未处理的输入,就将其转到下一轮处理,这种情况
-        ;; 很少出现,一般是型码输入法,entered 编辑的时候有可能触发。
-        (pyim-add-unread-command-events
-         (listify-key-sequence (pyim-entered-get 'point-after)))
-        (pyim-add-unread-command-events last-command-event)
-        (pyim-terminate-translation))
-       ;; 假设用户已经输入 "niha", 然后按了 "o" 键,那么,当前
-       ;; entered 就是 "nihao". 如果 autoselector 函数返回一个 list:
-       ;; (:select current), 那么就直接将 "nihao" 对应的第一个候选词
-       ;; 上屏幕。
-       ((and (eq this-command 'pyim-self-insert-command)
-             (cl-find-if (lambda (x)
-                           (setq result x)
-                           (equal (plist-get x :select) 'current))
-                         autoselector-results))
-        (let* ((str (plist-get result :replace-with))
-               (pyim-candidates
-                (if (and str (stringp str))
-                    (list str)
-                  pyim-candidates)))
-          (pyim-outcome-handle 'candidate))
-        (pyim-add-unread-command-events
-         (listify-key-sequence (pyim-entered-get 'point-after)))
-        (pyim-terminate-translation))
-       (t (setq pyim-candidate-position 1)
-          (pyim-preview-refresh)
-          (pyim-page-refresh))))))
-
-(defun pyim-entered-refresh-with-thread ()
-  "Function used by `pyim-entered-refresh-timer'"
-  (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)
-      ;; NEED HELP: 目前只有 posframe 和 minibufer 可以正确处理异步刷新 page
-      (when (and (member pyim-page-tooltip '(posframe minibuffer))
-                 (not (eq (selected-window) (minibuffer-window))))
-        (pyim-page-refresh)))))
-
-(defun pyim-entered-refresh-timer-reset ()
-  "Reset `pyim-entered-refresh-timer'."
-  (when pyim-entered-refresh-timer
-    (cancel-timer pyim-entered-refresh-timer)
-    (setq pyim-entered-refresh-timer nil)))
-
-;; ** 与拼音输入相关的用户命令
-(defun pyim-entered-delete-backward-char (&optional n)
-  "在pyim-entered-buffer中向后删除1个字符"
-  (interactive)
-  (pyim-with-entered-buffer
-    (ignore-errors
-      (delete-char (- 0 (or n 1)))))
-  (if (> (length (pyim-entered-get 'point-before)) 0)
-      (pyim-entered-refresh t)
-    (pyim-outcome-handle "")
-    (pyim-terminate-translation)))
-
-(defun pyim-entered-delete-forward-char ()
-  "在pyim-entered-buffer中向前删除1个字符"
-  (interactive)
-  (pyim-entered-delete-backward-char -1))
-
-(defun pyim-entered-delete-backward-imelem (&optional search-forward)
-  "`pyim-entered-buffer’ 中向后删除一个 imelem 对应的字符串"
-  (interactive)
-  (let ((position (pyim-entered-next-imelem-position 1 search-forward)))
-    (pyim-with-entered-buffer
-      (delete-region (point) position))
-    (pyim-entered-refresh t)))
-
-(defun pyim-entered-delete-forward-imelem ()
-  "`pyim-entered-buffer’ 中向前删除一个 imelem 对应的字符串"
-  (interactive)
-  (pyim-entered-delete-backward-imelem t))
-
 ;; * Footer
 (provide 'pyim-entered)
 
diff --git a/pyim-liberime.el b/pyim-liberime.el
index cdefbba..9e89d20 100644
--- a/pyim-liberime.el
+++ b/pyim-liberime.el
@@ -156,7 +156,7 @@
             (delete-region (point-min) (point))
             (insert to-be-translated)
             (goto-char (point-max)))
-          (pyim-entered-refresh))
+          (pyim-refresh))
       ;; 在 rime 后端造词和调整瓷瓶词频
       (pyim-liberime-create-word
        (reverse pyim-liberime-code-log)
diff --git a/pyim-refresh.el b/pyim-refresh.el
new file mode 100644
index 0000000..571f3a4
--- /dev/null
+++ b/pyim-refresh.el
@@ -0,0 +1,156 @@
+;;; pyim-refresh.el --- Refresh function of pyim.        -*- lexical-binding: 
t; -*-
+
+;; * Header
+;; Copyright (C) 2021 Free Software Foundation, Inc.
+
+;; Author: Feng Shu <tumashu@163.com>
+;; Maintainer: Feng Shu <tumashu@163.com>
+;; URL: https://github.com/tumashu/pyim
+;; Keywords: convenience, Chinese, pinyin, input-method
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;;; Code:
+;; * 代码                                                           :code:
+(require 'cl-lib)
+(require 'pyim-common)
+
+(defvar pyim-refresh-timer nil
+  "异步处理 intered 时时,使用的 timer.")
+
+(declare-function pyim-terminate-translation "pyim")
+
+(defun pyim-refresh (&optional no-delay)
+  "延迟 `pyim-entered-exhibit-delay-ms' 显示备选词等待用户选择。"
+  (if (= (length (pyim-entered-get 'point-before)) 0)
+      (pyim-terminate-translation)
+    (when pyim-entered--exhibit-timer
+      (cancel-timer pyim-entered--exhibit-timer))
+    (cond
+     ((or no-delay
+          (not pyim-entered-exhibit-delay-ms)
+          (eq pyim-entered-exhibit-delay-ms 0))
+      (pyim-refresh-1))
+     (t (setq pyim-entered--exhibit-timer
+              (run-with-timer (/ pyim-entered-exhibit-delay-ms 1000.0)
+                              nil
+                              #'pyim-refresh-1))))))
+
+;; 没有这一行,native-compilation 会出现奇怪的问题,pyim-outcome-handle 会获取到
+;; 错误的 pyim-candidates 取值。原因未知。
+(defvar pyim-candidates)
+
+(defun pyim-refresh-1 ()
+  "查询 `pyim-entered-buffer' 光标前的拼音字符串(如果光标在行首则为光标后的), 显示备选词等待用户选择。"
+  (let* ((scheme-name (pyim-scheme-name))
+         entered-to-translate)
+    (setq entered-to-translate
+          (pyim-entered-get 'point-before))
+    (setq pyim-imobjs (pyim-imobjs-create entered-to-translate scheme-name))
+    (setq pyim-candidates
+          (or (delete-dups (pyim-candidates-create pyim-imobjs scheme-name))
+              (list entered-to-translate)))
+    (pyim-refresh-timer-reset)
+    ;; 延迟1秒异步处理 entered, pyim 内置的输入法目前不使用异步获取
+    ;; 词条的方式,主要用于 pyim-liberime 支持。
+    (setq pyim-refresh-timer
+          (run-with-timer
+           1 nil
+           (lambda ()
+             (if (functionp 'make-thread)
+                 (make-thread #'pyim-refresh-with-thread
+                              "pyim-refresh-with-thread")
+               (pyim-refresh-with-thread)))))
+    ;; 自动上屏功能
+    (let ((autoselector-results
+           (mapcar (lambda (x)
+                     (when (functionp x)
+                       (ignore-errors
+                         (funcall x))))
+                   (cl-remove-duplicates pyim-autoselector :from-end t)))
+          result)
+      (cond
+       ;; 假如用户输入 "nihao", 然后按了 "m" 键, 那么当前的 entered
+       ;; 就是"nihaom", 如果 autoselector 返回 list: (:select last),
+       ;; 那么,“nihao” 对应的第一个候选词将上屏,m键下一轮继续处理。
+       ;; 这是一种 "踩雷确认模式".
+       ((and
+         ;; autoselector 功能会影响手动连续选择功能,所以这里做了一些限制,
+         ;; 只有在输入的时候才能够触发 autoselector 机制。
+         (eq this-command 'pyim-self-insert-command)
+         (cl-find-if (lambda (x)
+                       (setq result x)
+                       (equal (plist-get x :select) 'last))
+                     autoselector-results))
+        (let* ((str (plist-get result :replace-with))
+               (pyim-candidates
+                (if (and str (stringp str))
+                    (list str)
+                  pyim-candidates-last)))
+          (pyim-outcome-handle 'candidate))
+        ;; autoselector 机制已经触发的时候,如果发现 entered buffer 中
+        ;; point 后面还有未处理的输入,就将其转到下一轮处理,这种情况
+        ;; 很少出现,一般是型码输入法,entered 编辑的时候有可能触发。
+        (pyim-add-unread-command-events
+         (listify-key-sequence (pyim-entered-get 'point-after)))
+        (pyim-add-unread-command-events last-command-event)
+        (pyim-terminate-translation))
+       ;; 假设用户已经输入 "niha", 然后按了 "o" 键,那么,当前
+       ;; entered 就是 "nihao". 如果 autoselector 函数返回一个 list:
+       ;; (:select current), 那么就直接将 "nihao" 对应的第一个候选词
+       ;; 上屏幕。
+       ((and (eq this-command 'pyim-self-insert-command)
+             (cl-find-if (lambda (x)
+                           (setq result x)
+                           (equal (plist-get x :select) 'current))
+                         autoselector-results))
+        (let* ((str (plist-get result :replace-with))
+               (pyim-candidates
+                (if (and str (stringp str))
+                    (list str)
+                  pyim-candidates)))
+          (pyim-outcome-handle 'candidate))
+        (pyim-add-unread-command-events
+         (listify-key-sequence (pyim-entered-get 'point-after)))
+        (pyim-terminate-translation))
+       (t (setq pyim-candidate-position 1)
+          (pyim-preview-refresh)
+          (pyim-page-refresh))))))
+
+(defun pyim-refresh-with-thread ()
+  "Function used by `pyim-refresh-timer'"
+  (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)
+      ;; NEED HELP: 目前只有 posframe 和 minibufer 可以正确处理异步刷新 page
+      (when (and (member pyim-page-tooltip '(posframe minibuffer))
+                 (not (eq (selected-window) (minibuffer-window))))
+        (pyim-page-refresh)))))
+
+(defun pyim-refresh-timer-reset ()
+  "Reset `pyim-refresh-timer'."
+  (when pyim-refresh-timer
+    (cancel-timer pyim-refresh-timer)
+    (setq pyim-refresh-timer nil)))
+
+;; * Footer
+(provide 'pyim-refresh)
+
+;;; pyim-refresh.el ends here
diff --git a/pyim.el b/pyim.el
index b7dee79..7c3ef99 100644
--- a/pyim.el
+++ b/pyim.el
@@ -380,7 +380,7 @@ REFRESH-COMMON-DCACHE 已经废弃,不要再使用了。"
       ;; 一定要注意,point 可能不在 point-min, 或者 point-max. 因为用
       ;; 户可能通过命令移动了 entered 中的 point。
       (insert (char-to-string last-command-event)))
-    (pyim-entered-refresh))
+    (pyim-refresh))
    (pyim-candidates
     (pyim-outcome-handle 'candidate-and-last-char)
     (pyim-terminate-translation))
@@ -430,7 +430,7 @@ REFRESH-COMMON-DCACHE 已经废弃,不要再使用了。"
   (pyim-page-hide)
   (pyim-entered-erase-buffer)
   (setq pyim-cstring-to-code-criteria nil)
-  (pyim-entered-refresh-timer-reset)
+  (pyim-refresh-timer-reset)
   (let* ((class (pyim-scheme-get-option (pyim-scheme-name) :class))
          (func (intern (format "pyim-terminate-translation:%S" class))))
     (when (and class (functionp func))
@@ -656,7 +656,7 @@ FILE 的格式与 `pyim-dcache-export' 生成的文件格式相同,
             ;; 一轮处理时的“光标前字符串”比较长,这种方式可能比逐字选
             ;; 择更加好用。
             (goto-char (pyim-entered-next-imelem-position 20 t 1)))
-          (pyim-entered-refresh))
+          (pyim-refresh))
       ;; pyim 词频调整策略:
       ;; 1. 如果一个词条是用户在输入过程中,自己新建的词条,那么就将这个词条
       ;;    添加到个人词库的后面(不放置前面是为了减少误输词条的影响)。
@@ -684,7 +684,7 @@ FILE 的格式与 `pyim-dcache-export' 生成的文件格式相同,
           ;; 把本次已经选择的词条对应的子 entered, 从 entered
           ;; 字符串里面剪掉。
           (delete-region (point-min) (point)))
-        (pyim-entered-refresh))
+        (pyim-refresh))
     ;; 型码输入法,只考虑将词条保存到个人词库,用于调整词频,单字不保存。
     (when (> (length (pyim-outcome-get)) 1)
       (if (member (pyim-outcome-get) pyim-candidates)
@@ -758,7 +758,82 @@ FILE 的格式与 `pyim-dcache-export' 生成的文件格式相同,
         (pyim-terminate-translation))
     (setq pyim-assistant-scheme-enable
           (not pyim-assistant-scheme-enable))
-    (pyim-entered-refresh)))
+    (pyim-refresh)))
+
+;; ** 在 entered 中操作的相关命令
+(defun pyim-entered-forward-point ()
+  "`pyim-entered-buffer' 中光标前移"
+  (interactive)
+  (pyim-with-entered-buffer
+    (ignore-errors
+      (forward-char)))
+  (pyim-refresh t))
+
+(defun pyim-entered-backward-point ()
+  "`pyim-entered-buffer' 中光标后移"
+  (interactive)
+  (pyim-with-entered-buffer
+    (ignore-errors
+      (backward-char)))
+  (pyim-refresh t))
+
+(defun pyim-entered-backward-imelem (&optional search-forward)
+  "`pyim-entered-buffer’ 中光标向后移动一个 imelem 对应的字符串
+
+在全拼输入法中,就是向前移动一个拼音"
+  (interactive)
+  (let* ((position (pyim-entered-next-imelem-position 1 search-forward)))
+    (pyim-with-entered-buffer
+      (goto-char position))
+    (pyim-refresh t)))
+
+(defun pyim-entered-forward-imelem ()
+  "`pyim-entered-buffer’ 中光标向前移动一个 imelem 对应的字符串"
+  (interactive)
+  (pyim-entered-backward-imelem t))
+
+(defun pyim-entered-end-of-line ()
+  "`pyim-entered-buffer' 中光标移至行尾"
+  (interactive)
+  (pyim-with-entered-buffer
+    (end-of-line))
+  (pyim-refresh t))
+
+(defun pyim-entered-beginning-of-line ()
+  "`pyim-entered-buffer' 中光标移至行首"
+  (interactive)
+  (pyim-with-entered-buffer
+    (beginning-of-line))
+  (pyim-refresh t))
+
+(defun pyim-entered-delete-backward-char (&optional n)
+  "在pyim-entered-buffer中向后删除1个字符"
+  (interactive)
+  (pyim-with-entered-buffer
+    (ignore-errors
+      (delete-char (- 0 (or n 1)))))
+  (if (> (length (pyim-entered-get 'point-before)) 0)
+      (pyim-refresh t)
+    (pyim-outcome-handle "")
+    (pyim-terminate-translation)))
+
+(defun pyim-entered-delete-forward-char ()
+  "在pyim-entered-buffer中向前删除1个字符"
+  (interactive)
+  (pyim-entered-delete-backward-char -1))
+
+(defun pyim-entered-delete-backward-imelem (&optional search-forward)
+  "`pyim-entered-buffer’ 中向后删除一个 imelem 对应的字符串"
+  (interactive)
+  (let ((position (pyim-entered-next-imelem-position 1 search-forward)))
+    (pyim-with-entered-buffer
+      (delete-region (point) position))
+    (pyim-refresh t)))
+
+(defun pyim-entered-delete-forward-imelem ()
+  "`pyim-entered-buffer’ 中向前删除一个 imelem 对应的字符串"
+  (interactive)
+  (pyim-entered-delete-backward-imelem t))
 
 ;; ** 金手指功能
 ;;;###autoload



reply via email to

[Prev in Thread] Current Thread [Next in Thread]