[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