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

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

[elpa] externals/pyim fb287f2: Split rime support to pyim-liberime.el


From: Feng Shu
Subject: [elpa] externals/pyim fb287f2: Split rime support to pyim-liberime.el
Date: Fri, 26 Feb 2021 01:10:09 -0500 (EST)

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

    Split rime support to pyim-liberime.el
---
 README.md        | 192 +++++++++++++++++-------------------
 pyim-liberime.el | 296 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 pyim.el          | 270 +++-----------------------------------------------
 3 files changed, 402 insertions(+), 356 deletions(-)

diff --git a/README.md b/README.md
index 85e2482..8419512 100644
--- a/README.md
+++ b/README.md
@@ -3,62 +3,62 @@ Note: this file is auto converted from pyim.el by 
[el2org](https://github.com/tu
 
 # &#30446;&#24405;
 
-1.  [pyim 使用说明](#org0575cb8)
-    1.  [截图](#org060b651)
-    2.  [简介](#org5e1d315)
-    3.  [背景](#org7f4b998)
-    4.  [目标](#orgc345ff2)
-    5.  [特点](#orgf3197bc)
-    6.  [安装](#orgbd895cc)
-    7.  [配置](#orga713125)
-        1.  [配置实例](#org4b46949)
-        2.  [添加词库文件](#org929d1e4)
-        3.  [激活 pyim](#org07774f2)
-    8.  [使用](#org35f9007)
-        1.  [常用快捷键](#org8677252)
-        2.  [使用双拼模式](#org300b615)
-        3.  [通过 pyim 来支持 rime 所有输入法](#org30c4f8f)
-        4.  [使用五笔输入](#org55dc6ab)
-        5.  [使用仓颉输入法](#org4a6c079)
-        6.  [让选词框跟随光标](#org7368772)
-        7.  [调整 tooltip 选词框的显示样式](#orgbd022ba)
-        8.  [设置模糊音](#org3b72885)
-        9.  [使用魔术转换器](#org2f6c191)
-        10. [切换全角标点与半角标点](#org56fe195)
-        11. [手动加词和删词](#org177eda0)
-        12. [pyim 高级功能](#org45a5b8e)
-    9.  [捐赠](#org2482eb9)
-    10. [Tips](#orgcfe03bf)
-        1.  [关闭输入联想词功能 (默认开启)](#org1719542)
-        2.  [如何将个人词条相关信息导入和导出?](#org1258502)
-        3.  [pyim 出现错误时,如何开启 debug 模式](#org57aa8af)
-        4.  [如何查看 pyim 文档。](#org4498681)
-        5.  [将光标处的拼音或者五笔字符串转换为中文 (与 vimim 的 “点石成金” 功能类似)](#org45b805f)
-        6.  [如何使用其它字符翻页](#org458f055)
-        7.  [如何用 ";" 来选择第二个候选词](#org6119ede)
-        8.  [如何添加自定义拼音词库](#org1b350d2)
-        9.  [如何手动安装和管理词库](#orgb999ecf)
-        10. [Emacs 启动时加载 pyim 词库](#orgeeaedec)
-        11. [将汉字字符串转换为拼音字符串](#org34b8215)
-        12. [中文分词](#org489e173)
-        13. [获取光标处的中文词条](#org0f535fb)
-        14. [让 \`forward-word' 和 \`back-backward’ 在中文环境下正常工作](#org421207e)
-        15. [为 isearch 相关命令添加拼音搜索支持](#orgfbb740c)
-
-
-<a id="org0575cb8"></a>
+1.  [pyim 使用说明](#org1a50b51)
+    1.  [截图](#org25ff3a4)
+    2.  [简介](#org780a8c5)
+    3.  [背景](#org28f85b7)
+    4.  [目标](#org1056777)
+    5.  [特点](#org5351807)
+    6.  [安装](#org3f99a8d)
+    7.  [配置](#org0abf75c)
+        1.  [配置实例](#org14b4c60)
+        2.  [添加词库文件](#org7712405)
+        3.  [激活 pyim](#orgfe2d0df)
+    8.  [使用](#orgb834c8b)
+        1.  [常用快捷键](#orgbb28e52)
+        2.  [使用双拼模式](#org144333f)
+        3.  [使用 rime 输入法](#orgd5380d2)
+        4.  [使用五笔输入](#orgca2e51d)
+        5.  [使用仓颉输入法](#org746da00)
+        6.  [让选词框跟随光标](#org599f6a5)
+        7.  [调整 tooltip 选词框的显示样式](#org79091b2)
+        8.  [设置模糊音](#orgec7070f)
+        9.  [使用魔术转换器](#org63a6a1d)
+        10. [切换全角标点与半角标点](#orgd10a20b)
+        11. [手动加词和删词](#org960fae7)
+        12. [pyim 高级功能](#org0d40aef)
+    9.  [捐赠](#org778c2ee)
+    10. [Tips](#org2109336)
+        1.  [关闭输入联想词功能 (默认开启)](#orgb0a391b)
+        2.  [如何将个人词条相关信息导入和导出?](#org7109c22)
+        3.  [pyim 出现错误时,如何开启 debug 模式](#org11a4c5d)
+        4.  [如何查看 pyim 文档。](#orgea0afea)
+        5.  [将光标处的拼音或者五笔字符串转换为中文 (与 vimim 的 “点石成金” 功能类似)](#orgd80df71)
+        6.  [如何使用其它字符翻页](#org9b083fa)
+        7.  [如何用 ";" 来选择第二个候选词](#org709d8a6)
+        8.  [如何添加自定义拼音词库](#org96ab21d)
+        9.  [如何手动安装和管理词库](#orgc1e986a)
+        10. [Emacs 启动时加载 pyim 词库](#org00bc777)
+        11. [将汉字字符串转换为拼音字符串](#org4401c59)
+        12. [中文分词](#org345a5a0)
+        13. [获取光标处的中文词条](#orgd5c17b2)
+        14. [让 \`forward-word' 和 \`back-backward’ 在中文环境下正常工作](#org4360c5c)
+        15. [为 isearch 相关命令添加拼音搜索支持](#org1ec670b)
+
+
+<a id="org1a50b51"></a>
 
 # pyim 使用说明
 
 
-<a id="org060b651"></a>
+<a id="org25ff3a4"></a>
 
 ## 截图
 
 ![img](./snapshots/pyim-linux-x-with-toolkit.png)
 
 
-<a id="org5e1d315"></a>
+<a id="org780a8c5"></a>
 
 ## 简介
 
@@ -66,7 +66,7 @@ pyim 是 Emacs 环境下的一个中文输入法,最初它只支持全拼输
 "pyim" 代表 "Chinese Pinyin Input Method" 的意思,后来根据同学的提议,添加了五笔的支持,再叫 “拼音输入法” 
就不太合适了,所以你现在可以将它理解为 “PengYou input method”: 平时像朋友一样帮助你,偶尔也像朋友一样犯二 。。。
 
 
-<a id="org7f4b998"></a>
+<a id="org28f85b7"></a>
 
 ## 背景
 
@@ -83,7 +83,7 @@ emacs-eim 是 Emacs 环境下的一个中文输入法框架, 支持拼音,
 于是我 fork 了 emacs-eim 输入法的部分代码, 创建了一个项目:pyim。
 
 
-<a id="orgc345ff2"></a>
+<a id="org1056777"></a>
 
 ## 目标
 
@@ -95,7 +95,7 @@ pyim 的目标是: **尽最大的努力成为一个好用的 Emacs 中文输
 3.  Exchange:     尽最大可能简化 pyim 使用其他优秀输入法的词库的难度和复杂度。
 
 
-<a id="orgf3197bc"></a>
+<a id="org5351807"></a>
 
 ## 特点
 
@@ -104,7 +104,7 @@ pyim 的目标是: **尽最大的努力成为一个好用的 Emacs 中文输
 3.  pyim 使用文本词库格式,方便处理。
 
 
-<a id="orgbd895cc"></a>
+<a id="org3f99a8d"></a>
 
 ## 安装
 
@@ -118,12 +118,12 @@ pyim 的目标是: **尽最大的努力成为一个好用的 Emacs 中文输
         (setq default-input-method "pyim")
 
 
-<a id="orga713125"></a>
+<a id="org0abf75c"></a>
 
 ## 配置
 
 
-<a id="org4b46949"></a>
+<a id="org14b4c60"></a>
 
 ### 配置实例
 
@@ -161,11 +161,11 @@ pyim 的目标是: **尽最大的努力成为一个好用的 Emacs 中文输
       ;; 开启拼音搜索功能
       (pyim-isearch-mode 1)
     
-      ;; 使用 popup-el 来绘制选词框, 如果用 emacs26, 建议设置
-      ;; 为 'posframe, 速度很快并且菜单不会变形,不过需要用户
-      ;; 手动安装 posframe 包。
+      ;; 使用 posframe 绘制 page, (需要用户手动安装 posframe 包)。
       ;; (setq pyim-page-tooltip 'posframe)
-      (setq pyim-page-tooltip 'popup)
+    
+      ;; 如果 posframe 不可用,可以试着安装 popup 包,然后设置:
+      ;; ;; (setq pyim-page-tooltip 'popup)
     
       ;; 选词框显示5个候选词
       (setq pyim-page-length 5)
@@ -175,7 +175,7 @@ pyim 的目标是: **尽最大的努力成为一个好用的 Emacs 中文输
        ("C-;" . pyim-delete-word-from-personal-buffer)))
 
 
-<a id="org929d1e4"></a>
+<a id="org7712405"></a>
 
 ### 添加词库文件
 
@@ -185,10 +185,10 @@ pyim 当前的默认的拼音词库是 pyim-basedict, 这个词库的词条量
 1.  libpinyin 项目的内置词库
 2.  pyim 用户贡献的个人词库
 
-如果 pyim-basedict 不能满足需求,用户可以使用其他方式为 pyim 添加拼音词库,具体方式请参考 [1.10.8](#org1b350d2) 
小结。
+如果 pyim-basedict 不能满足需求,用户可以使用其他方式为 pyim 添加拼音词库,具体方式请参考 [1.10.8](#org96ab21d) 
小结。
 
 
-<a id="org07774f2"></a>
+<a id="orgfe2d0df"></a>
 
 ### 激活 pyim
 
@@ -196,12 +196,12 @@ pyim 当前的默认的拼音词库是 pyim-basedict, 这个词库的词条量
     (global-set-key (kbd "C-\\") 'toggle-input-method)
 
 
-<a id="org35f9007"></a>
+<a id="orgb834c8b"></a>
 
 ## 使用
 
 
-<a id="org8677252"></a>
+<a id="orgbb28e52"></a>
 
 ### 常用快捷键
 
@@ -295,7 +295,7 @@ pyim 当前的默认的拼音词库是 pyim-basedict, 这个词库的词条量
 </table>
 
 
-<a id="org300b615"></a>
+<a id="org144333f"></a>
 
 ### 使用双拼模式
 
@@ -310,24 +310,14 @@ pyim 支持双拼输入模式,用户可以通过变量 \`pyim-default-scheme'
 3.  用户可能需要重新设置 \`pyim-translate-trigger-char'。
 
 
-<a id="org30c4f8f"></a>
+<a id="orgd5380d2"></a>
 
-### 通过 pyim 来支持 rime 所有输入法
+### 使用 rime 输入法
 
-1.  安裝配置 liberime 和 pyim, 
方式见:[liberime](https://github.com/merrickluo/liberime).
-2.  使用 rime 全拼输入法的用户,也可以使用 rime-quanpin scheme,
-    这个 scheme 是专门针对 rime 全拼输入法定制的,支持全拼v快捷键。
-    
-        (setq pyim-default-scheme 'rime-quanpin)
-3.  如果通过 rime 使用微软双拼,可以用以下设置:
-    
-        (liberime-select-schema "double_pinyin_mspy")
-        (setq pyim-default-scheme 'rime-microsoft-shuangpin)
-    
-    默认是用繁体中文,想要改成简体中文的话,可以参考 [rime 
wiki](https://github.com/rime/home/wiki/CustomizationGuide#%E4%B8%80%E4%BE%8B%E5%AE%9A%E8%A3%BD%E7%B0%A1%E5%8C%96%E5%AD%97%E8%BC%B8%E5%87%BA),或者[这篇博客](http://wenshanren.org/?p=1070#orgc7dbd8e)
+具体安装和使用方式请查看 pyim-liberime 包的 Commentary 部分。
 
 
-<a id="org55dc6ab"></a>
+<a id="orgca2e51d"></a>
 
 ### 使用五笔输入
 
@@ -359,7 +349,7 @@ pyim 支持五笔输入模式,用户可以通过变量 \`pyim-default-scheme'
 键临时切换到辅助输入法来输入,选词完成之后自动退出。辅助输入法可以通过 \`pyim-assistant-scheme' 来设置。
 
 
-<a id="org4a6c079"></a>
+<a id="org746da00"></a>
 
 ### 使用仓颉输入法
 
@@ -384,7 +374,7 @@ pyim 支持其它版本的仓颉,但需要用户自己创建词库文件。
 用户可以使用命令:\`pyim-search-word-code' 来查询当前选择词条的仓颉编码
 
 
-<a id="org7368772"></a>
+<a id="org599f6a5"></a>
 
 ### 让选词框跟随光标
 
@@ -400,7 +390,7 @@ pyim 支持其它版本的仓颉,但需要用户自己创建词库文件。
     注意:pyim 不会自动安装 posframe, 用户需要手动安装这个包,
 
 
-<a id="orgbd022ba"></a>
+<a id="org79091b2"></a>
 
 ### 调整 tooltip 选词框的显示样式
 
@@ -412,14 +402,14 @@ pyim 的 tooltip 选词框默认使用 **双行显示** 的样式,在一些特
 注:用户可以添加函数 pyim-page-style:STYLENAME 来定义自己的选词框格式。
 
 
-<a id="org3b72885"></a>
+<a id="orgec7070f"></a>
 
 ### 设置模糊音
 
 可以通过设置 \`pyim-fuzzy-pinyin-alist' 变量来自定义模糊音。
 
 
-<a id="org2f6c191"></a>
+<a id="org63a6a1d"></a>
 
 ### 使用魔术转换器
 
@@ -434,7 +424,7 @@ pyim 的 tooltip 选词框默认使用 **双行显示** 的样式,在一些特
     (setq pyim-magic-converter #'my-converter)
 
 
-<a id="org56fe195"></a>
+<a id="orgd10a20b"></a>
 
 ### 切换全角标点与半角标点
 
@@ -447,7 +437,7 @@ pyim 的 tooltip 选词框默认使用 **双行显示** 的样式,在一些特
 3.  第三种方法:设置变量 \`pyim-translate-trigger-char' ,输入变量设定的字符会切换光标处标点的样式。
 
 
-<a id="org177eda0"></a>
+<a id="org960fae7"></a>
 
 ### 手动加词和删词
 
@@ -457,7 +447,7 @@ pyim 的 tooltip 选词框默认使用 **双行显示** 的样式,在一些特
 4.  \`pyim-delete-word' 从个人词库中删除当前高亮选择的词条。
 
 
-<a id="org45a5b8e"></a>
+<a id="org0d40aef"></a>
 
 ### pyim 高级功能
 
@@ -587,7 +577,7 @@ pyim 的 tooltip 选词框默认使用 **双行显示** 的样式,在一些特
     注:上述函数列表中,任意一个函数的返回值为 t 时,pyim 切换到半角标点输入模式。
 
 
-<a id="org2482eb9"></a>
+<a id="org778c2ee"></a>
 
 ## 捐赠
 
@@ -599,19 +589,19 @@ pyim 的 tooltip 选词框默认使用 **双行显示** 的样式,在一些特
     ![img](snapshots/QR-code-for-author.jpg)
 
 
-<a id="orgcfe03bf"></a>
+<a id="org2109336"></a>
 
 ## Tips
 
 
-<a id="org1719542"></a>
+<a id="orgb0a391b"></a>
 
 ### 关闭输入联想词功能 (默认开启)
 
     (setq pyim-enable-shortcode nil)
 
 
-<a id="org1258502"></a>
+<a id="org7109c22"></a>
 
 ### 如何将个人词条相关信息导入和导出?
 
@@ -619,14 +609,14 @@ pyim 的 tooltip 选词框默认使用 **双行显示** 的样式,在一些特
 2.  导出使用命令: pyim-export
 
 
-<a id="org57aa8af"></a>
+<a id="org11a4c5d"></a>
 
 ### pyim 出现错误时,如何开启 debug 模式
 
     (setq debug-on-error t)
 
 
-<a id="org4498681"></a>
+<a id="orgea0afea"></a>
 
 ### 如何查看 pyim 文档。
 
@@ -635,14 +625,14 @@ pyim 的文档隐藏在 comment 中,如果用户喜欢阅读 html 格式的文
 <http://tumashu.github.io/pyim/>
 
 
-<a id="org45b805f"></a>
+<a id="orgd80df71"></a>
 
 ### 将光标处的拼音或者五笔字符串转换为中文 (与 vimim 的 “点石成金” 功能类似)
 
     (global-set-key (kbd "M-i") 'pyim-convert-string-at-point)
 
 
-<a id="org458f055"></a>
+<a id="org9b083fa"></a>
 
 ### 如何使用其它字符翻页
 
@@ -650,7 +640,7 @@ pyim 的文档隐藏在 comment 中,如果用户喜欢阅读 html 格式的文
     (define-key pyim-mode-map "," 'pyim-page-previous-page)
 
 
-<a id="org6119ede"></a>
+<a id="org709d8a6"></a>
 
 ### 如何用 ";" 来选择第二个候选词
 
@@ -660,7 +650,7 @@ pyim 的文档隐藏在 comment 中,如果用户喜欢阅读 html 格式的文
         (pyim-page-select-word-by-number 2)))
 
 
-<a id="org1b350d2"></a>
+<a id="org96ab21d"></a>
 
 ### 如何添加自定义拼音词库
 
@@ -705,7 +695,7 @@ pyim 默认没有携带任何拼音词库,用户可以使用下面几种方式
     3.  编写语言: C语言
 
 
-<a id="orgb999ecf"></a>
+<a id="orgc1e986a"></a>
 
 ### 如何手动安装和管理词库
 
@@ -727,7 +717,7 @@ pyim 默认没有携带任何拼音词库,用户可以使用下面几种方式
 3.  词库文件的编码必须为 utf-8-unix,否则会出现乱码。
 
 
-<a id="orgeeaedec"></a>
+<a id="org00bc777"></a>
 
 ### Emacs 启动时加载 pyim 词库
 
@@ -735,7 +725,7 @@ pyim 默认没有携带任何拼音词库,用户可以使用下面几种方式
               #'(lambda () (pyim-restart-1 t)))
 
 
-<a id="org34b8215"></a>
+<a id="org4401c59"></a>
 
 ### 将汉字字符串转换为拼音字符串
 
@@ -746,7 +736,7 @@ pyim 默认没有携带任何拼音词库,用户可以使用下面几种方式
 2.  \`pyim-hanzi2pinyin-simple'  (不考虑多音字)
 
 
-<a id="org489e173"></a>
+<a id="org345a5a0"></a>
 
 ### 中文分词
 
@@ -765,7 +755,7 @@ pyim 包含了一个简单的分词函数:\`pyim-cstring-split-to-list', 可
 词库中不存在的中文词条。
 
 
-<a id="org0f535fb"></a>
+<a id="orgd5c17b2"></a>
 
 ### 获取光标处的中文词条
 
@@ -773,7 +763,7 @@ pyim 包含了一个简单的命令:\`pyim-cwords-at-point', 这个命令可
 \`pyim-cstring-split-to-list'。
 
 
-<a id="org421207e"></a>
+<a id="org4360c5c"></a>
 
 ### 让 \`forward-word' 和 \`back-backward’ 在中文环境下正常工作
 
@@ -790,7 +780,7 @@ pyim 包含了一个简单的命令:\`pyim-cwords-at-point', 这个命令可
     (global-set-key (kbd "M-b") 'pyim-backward-word)
 
 
-<a id="orgfbb740c"></a>
+<a id="org1ec670b"></a>
 
 ### 为 isearch 相关命令添加拼音搜索支持
 
diff --git a/pyim-liberime.el b/pyim-liberime.el
new file mode 100644
index 0000000..f84504e
--- /dev/null
+++ b/pyim-liberime.el
@@ -0,0 +1,296 @@
+;;; pyim-liberime.el --- Rime support for 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
+;; Version: 3.2
+;; Keywords: convenience, Chinese, pinyin, input-method
+;; Package-Requires: ((emacs "24.4") (async "1.6") (xr "1.13"))
+
+;; 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:
+
+;; * pyim-liberime 使用说明                                          :README:doc:
+;; 1. 安裝配置 liberime 和 pyim, 
方式见:[[https://github.com/merrickluo/liberime][liberime]].
+;; 2. 使用 rime 全拼输入法的用户,也可以使用 rime-quanpin scheme,
+;;    这个 scheme 是专门针对 rime 全拼输入法定制的,支持全拼v快捷键。
+;;    #+BEGIN_EXAMPLE
+;;    (require 'pyim-liberime)
+;;    (setq pyim-default-scheme 'rime-quanpin)
+;;    #+END_EXAMPLE
+;; 3. 如果通过 rime 使用微软双拼,可以用以下设置:
+;;    #+BEGIN_EXAMPLE
+;;    (liberime-select-schema "double_pinyin_mspy")
+;;    (setq pyim-default-scheme 'rime-microsoft-shuangpin)
+;;    #+END_EXAMPLE
+;;    默认是用繁体中文,想要改成简体中文的话,可以参考 
[[https://github.com/rime/home/wiki/CustomizationGuide#%E4%B8%80%E4%BE%8B%E5%AE%9A%E8%A3%BD%E7%B0%A1%E5%8C%96%E5%AD%97%E8%BC%B8%E5%87%BA][rime
 wiki]],或者[[http://wenshanren.org/?p=1070#orgc7dbd8e][这篇博客]]
+
+;;; Code:
+;; * 代码                                                           :code:
+(require 'pyim)
+(require 'liberime nil t)
+
+(pyim-scheme-add
+ '(rime
+   :document
+   "rime 输入法。
+
+这个 scheme 适用于 librime 支持的所有输入法,通用性较好,但无法支
+持 trigger-chars, 所以类似 pyim 全拼支持的v快捷键将无法使用。"
+   :class rime
+   :code-prefix "&"
+   :first-chars "abcdefghijklmnopqrstuvwxyz"
+   :rest-chars "abcdefghijklmnopqrstuvwxyz'-a"
+   :prefer-trigger-chars nil))
+
+(pyim-scheme-add
+ '(rime-quanpin
+   :document
+   "rime 全拼输入法。
+
+这个 scheme 专门用于 librime 全拼输入法,同时支持 trigger-chars,
+也就是v快捷键,使用 rime 全拼的朋友建议使用这个 scheme。"
+   :class rime
+   :code-prefix "&"
+   :first-chars "abcdefghjklmnopqrstwxyz"
+   :rest-chars "vmpfwckzyjqdltxuognbhsrei'-a"
+   :prefer-trigger-chars "v"))
+
+(pyim-scheme-add
+ '(rime-microsoft-shuangpin
+   :document "rime 微软双拼输入法。"
+   :class rime
+   :code-prefix "&"
+   :first-chars "abcdefghijklmnopqrstuvwxyz"
+   :rest-chars "abcdefghijklmnopqrstuvwxyz;"
+   :prefer-trigger-chars nil))
+
+(declare-function liberime-get-commit "liberime")
+(declare-function liberime-get-context "liberime")
+(declare-function liberime-clear-commit "liberime")
+(declare-function liberime-clear-composition "liberime")
+(declare-function liberime-search "liberime" (string limit))
+(declare-function liberime-get-preedit "liberime")
+(declare-function liberime-get-status "liberime")
+(declare-function liberime-process-key "liberime" (keycode &optional mask))
+(declare-function liberime-select-candidate "liberime" (num))
+
+(defun pyim-liberime-scheme-name (orig_func &optional default)
+  "Advice function of `pyim-scheme-name'."
+  (let* ((scheme-name (funcall orig_func default))
+         (class (pyim-scheme-get-option scheme-name :class)))
+    (if (eq class 'rime)
+        (if (featurep 'liberime-core)
+            scheme-name
+          'quanpin)
+      scheme-name)))
+
+(advice-add 'pyim-scheme-name :around #'pyim-liberime-scheme-name)
+
+(defun pyim-imobjs-create:rime (entered &optional _)
+  (list (list entered)))
+
+(defun pyim-codes-create:rime (imobj scheme-name &optional first-n)
+  (pyim-codes-create:xingma imobj scheme-name first-n))
+
+(defun pyim-candidates-create:rime (imobjs scheme-name &optional async)
+  "`pyim-candidates-create' 处理 rime 输入法的函数."
+  (let* ((code (car (pyim-codes-create (car imobjs) scheme-name)))
+         (code-prefix (pyim-scheme-get-option scheme-name :code-prefix))
+         (s (replace-regexp-in-string "-" "" code))
+         ;; `liberime-search' 搜索的时候不需要 code-prefix, 去除。
+         (s (if code-prefix (substring s 1) s))
+         (words (liberime-search s (if async
+                                       nil
+                                     (* pyim-page-length 2)))))
+    words))
+
+(defun pyim-page-preview-create:rime (&optional separator)
+  (let* ((preedit (or (liberime-get-preedit)
+                      (pyim-entered-get 'point-before))))
+    (pyim-with-entered-buffer
+      (if (equal 1 (point))
+          (concat "|" preedit)
+        (concat (replace-regexp-in-string (concat separator "'") "'" preedit)
+                " |" (buffer-substring-no-properties (point) (point-max)))))))
+
+(defvar pyim-liberime-code-log nil)
+(defvar pyim-liberime-word-log nil)
+(defun pyim-page-select-word:rime ()
+  "从选词框中选择当前词条,然后删除该词条对应拼音。"
+  (interactive)
+  (pyim-outcome-handle 'candidate)
+  (let* ((entered (pyim-entered-get 'point-before))
+         (word (string-remove-prefix
+                (or (pyim-outcome-get 1) "") (pyim-outcome-get)))
+         (code (pyim-liberime-get-code word entered))
+         (to-be-translated
+          (string-remove-prefix code entered)))
+    (push code pyim-liberime-code-log)
+    (push word pyim-liberime-word-log)
+    (if (or (> (length to-be-translated) 0) ;是否有光标前未转换的字符串
+            (> (length (pyim-entered-get 'point-after)) 0)) ;是否有光标后字符串
+        (progn
+          (pyim-with-entered-buffer
+            (delete-region (point-min) (point))
+            (insert to-be-translated)
+            (goto-char (point-max)))
+          (pyim-entered-refresh))
+      ;; 在 rime 后端造词和调整瓷瓶词频
+      (pyim-liberime-create-word
+       (reverse pyim-liberime-code-log)
+       (reverse pyim-liberime-word-log))
+      ;; 使用 rime 的同时,也附带的优化 quanpin 的词库。
+      (let ((pyim-default-scheme 'quanpin))
+        (if (member (pyim-outcome-get) pyim-candidates)
+            (pyim-create-pyim-word (pyim-outcome-get) t)
+          (pyim-create-pyim-word (pyim-outcome-get))))
+      (setq pyim-liberime-code-log nil)
+      (setq pyim-liberime-word-log nil)
+      (pyim-terminate-translation)
+      ;; pyim 使用这个 hook 来处理联想词。
+      (run-hooks 'pyim-page-select-finish-hook))))
+
+(defun pyim-autoselector-rime (&rest _args)
+  "适用于RIME的自动上屏器."
+  (let* ((scheme-name (pyim-scheme-name))
+         (class (pyim-scheme-get-option scheme-name :class)))
+    (when (eq class 'rime)
+      (let* ((commit (liberime-get-commit))
+             (context (liberime-get-context))
+             (composition (alist-get 'composition context))
+             (length (alist-get 'length composition)))
+        (cond
+         ;; 有新输入的顶屏模式
+         ((and commit (eq length 1))
+          `(:select last :replace-with ,commit))
+         ;; 无新输入的顶屏模式
+         (commit
+          `(:select current :replace-with ,commit))
+         (t nil))))))
+
+(add-to-list 'pyim-autoselector 'pyim-autoselector-rime)
+
+(defun pyim-liberime-create-word (codes words)
+  "通过 CODES 和 WORDS 的信息,在 rime 后端重新造词和调整词频。
+比如:
+
+1. CODES -> (\"nihao\" \"ma\")
+2. WORDS -> (\"你好\" \"吗\")
+
+在 rime 后端将生成 “你好吗” 这个词条。"
+  (when (and (listp codes)
+             (listp words)
+             (not (cl-find-if-not #'stringp codes))
+             (not (cl-find-if-not #'stringp words)))
+    (liberime-clear-composition)
+    (dolist (key (string-to-list (mapconcat #'identity codes "")))
+      (liberime-process-key key))
+    (let (word)
+      (while (setq word (pop words))
+        (let ((status t))
+          (while status
+            (let* ((context (liberime-get-context))
+                   (menu (alist-get 'menu context))
+                   (last-page-p (alist-get 'last-page-p menu))
+                   (candidates (alist-get 'candidates menu))
+                   (pos (cl-position word candidates :test #'equal)))
+              (cond
+               (pos (liberime-select-candidate pos)
+                    (setq status nil))
+               ((or last-page-p
+                    (not menu))
+                (setq status nil)
+                (setq words nil))
+               (t (liberime-process-key 65366))))))))))
+
+(defun pyim-create-rime-word (word &optional _prepend _wordcount-handler)
+  "Create WORD at current rime backend.
+ONlY works with quanpin."
+  ;; 判断当前 rime 环境是否支持全拼,如果支持,就添加词条。
+  (ignore-errors
+    (let ((codes (pyim-hanzi2pinyin word nil "-" t nil t)))
+      (when (member "你好" (liberime-search "nihao" 10))
+        (dolist (code codes)
+          (unless (pyim-string-match-p "[^ a-z-]" code)
+            (pyim-liberime-create-word
+             (split-string code "-")
+             (remove "" (split-string word "")))
+            (pyim-terminate-translation:rime)))))))
+
+(advice-add 'pyim-create-word :after #'pyim-create-rime-word)
+
+(defun pyim-liberime-get-code (word input &optional _limit)
+  "Get the code of WORD from the beginning of INPUT.
+`liberime-search' with LIMIT argument is used internal.
+
+NOTE: This is a hacky approach, the better way is let librime
+provide an API.
+
+Please see: https://github.com/rime/librime/issues/349";
+  (cond
+   ;; 处理基于语音的输入法,比如:拼音,这类输入法 preedit 一般用空格
+   ;; 分隔,与汉字一一对应。
+   ((string-match-p
+     (mapconcat #'identity
+                '("pinyin" "luna" "terra" "bopomofo" "stenotype"
+                  "jyut6ping3" "wugniu" "soutzoe" "zyenpheng"
+                  "sampheng" "clover")
+                "\\|")
+     (alist-get 'schema_id (liberime-get-status)))
+    (unless (liberime-get-preedit)
+      (liberime-search input 1))
+    (let* ((n (length word))
+           (preedit (split-string (liberime-get-preedit) "[ ']+"))
+           (preedit-list (cl-subseq preedit 0 (min n (length preedit))))
+           (i (min (length input) (* n 5)))
+           str)
+      (while (> i 0)
+        (setq str (substring input 0 i))
+        (liberime-search str 1)
+        (if (equal preedit-list (split-string (liberime-get-preedit) "[ ']+"))
+            (setq i 0)
+          (setq i (- i 1))))
+      str))
+   ((string-match-p
+     (mapconcat #'identity
+                '("wubi86" "wubi98")
+                "\\|")
+     (alist-get 'schema_id (liberime-get-status)))
+    (let ((lst (split-string (liberime-get-preedit) "[ ']+"))
+          (str "")
+          words)
+      (while lst
+        (setq str (concat str (pop lst)))
+        (setq words (liberime-search str 20))
+        (when (member word words)
+          (setq lst nil)))
+      (or str input)))
+   ;; 找不到通用的处理方式的话就不做截取处理。
+   (t input)))
+
+(defun pyim-terminate-translation:rime ()
+  (liberime-clear-commit)
+  (liberime-clear-composition))
+
+;; * Footer
+(provide 'pyim-liberime)
+
+;;; pyim.el ends here
diff --git a/pyim.el b/pyim.el
index 1384213..8983e41 100644
--- a/pyim.el
+++ b/pyim.el
@@ -177,20 +177,9 @@
 ;; 2. 用户可以使用函数 `pyim-scheme-add' 添加自定义双拼方案。
 ;; 3. 用户可能需要重新设置 `pyim-translate-trigger-char'。
 
-;; *** 通过 pyim 来支持 rime 所有输入法
+;; *** 使用 rime 输入法
+;; 具体安装和使用方式请查看 pyim-liberime 包的 Commentary 部分。
 
-;; 1. 安裝配置 liberime 和 pyim, 
方式见:[[https://github.com/merrickluo/liberime][liberime]].
-;; 2. 使用 rime 全拼输入法的用户,也可以使用 rime-quanpin scheme,
-;;    这个 scheme 是专门针对 rime 全拼输入法定制的,支持全拼v快捷键。
-;;    #+BEGIN_EXAMPLE
-;;    (setq pyim-default-scheme 'rime-quanpin)
-;;    #+END_EXAMPLE
-;; 3. 如果通过 rime 使用微软双拼,可以用以下设置:
-;;    #+BEGIN_EXAMPLE
-;;    (liberime-select-schema "double_pinyin_mspy")
-;;    (setq pyim-default-scheme 'rime-microsoft-shuangpin)
-;;    #+END_EXAMPLE
-;;    默认是用繁体中文,想要改成简体中文的话,可以参考 
[[https://github.com/rime/home/wiki/CustomizationGuide#%E4%B8%80%E4%BE%8B%E5%AE%9A%E8%A3%BD%E7%B0%A1%E5%8C%96%E5%AD%97%E8%BC%B8%E5%87%BA][rime
 wiki]],或者[[http://wenshanren.org/?p=1070#orgc7dbd8e][这篇博客]]
 ;; *** 使用五笔输入
 ;; pyim 支持五笔输入模式,用户可以通过变量 `pyim-default-scheme' 来设定:
 
@@ -809,7 +798,7 @@ pyim 内建的有三种选词框格式:
   :group 'pyim
   :type 'integer)
 
-(defcustom pyim-autoselector '(pyim-autoselector-xingma pyim-autoselector-rime)
+(defcustom pyim-autoselector '(pyim-autoselector-xingma)
   "已经启用的自动上屏器.
 
 自动上屏器是一个函数。假设用户已经输入 \"nihao\", 并按下 \"m\" 键,
@@ -1054,16 +1043,6 @@ dcache 文件的方法让 pyim 正常工作。")
 但同时产生了无效拼音 king .  用户手动输入的无效拼音无需考虑.
 因为用户有即时界面反馈,不可能连续输入无效拼音.")
 
-(declare-function liberime-get-commit "liberime")
-(declare-function liberime-get-context "liberime")
-(declare-function liberime-clear-commit "liberime")
-(declare-function liberime-clear-composition "liberime")
-(declare-function liberime-search "liberime" (string limit))
-(declare-function liberime-get-preedit "liberime")
-(declare-function liberime-get-status "liberime")
-(declare-function liberime-process-key "liberime" (keycode &optional mask))
-(declare-function liberime-select-candidate "liberime" (num))
-
 (defvar pyim-mode-map
   (let ((map (make-sparse-keymap))
         (i ?\ ))
@@ -1522,8 +1501,7 @@ code 对应的中文词条了."
   (pyim-dcache-call-api 'insert-word-into-icode2word word pinyin prepend))
 
 (defun pyim-create-word (word &optional prepend wordcount-handler)
-  (pyim-create-pyim-word word prepend wordcount-handler)
-  (pyim-create-rime-word word))
+  (pyim-create-pyim-word word prepend wordcount-handler))
 
 (defun pyim-create-pyim-word (word &optional prepend wordcount-handler)
   "将中文词条 WORD 添加编码后,保存到用户选择过的词生成的缓存中。
@@ -1568,20 +1546,6 @@ BUG:拼音无法有效地处理多音字。"
       ;; TODO, 排序个人词库?
       )))
 
-(defun pyim-create-rime-word (word)
-  "Create WORD at current rime backend.
-ONlY works with quanpin."
-  ;; 判断当前 rime 环境是否支持全拼,如果支持,就添加词条。
-  (ignore-errors
-    (let ((codes (pyim-hanzi2pinyin word nil "-" t nil t)))
-      (when (member "你好" (liberime-search "nihao" 10))
-        (dolist (code codes)
-          (unless (pyim-string-match-p "[^ a-z-]" code)
-            (pyim-liberime-create-word
-             (split-string code "-")
-             (remove "" (split-string word "")))
-            (pyim-terminate-translation:rime)))))))
-
 (defun pyim-hanzi2xingma (string scheme-name &optional return-list)
   "返回汉字 STRING 对应形码方案 SCHEME-NAME 的 code (不包括
 code-prefix)。当RETURN-LIST 设置为 t 时,返回一个 code list。"
@@ -1906,24 +1870,6 @@ Return the input string.
         '(:select last))
        (t nil)))))
 
-(defun pyim-autoselector-rime (&rest _args)
-  "适用于RIME的自动上屏器."
-  (let* ((scheme-name (pyim-scheme-name))
-         (class (pyim-scheme-get-option scheme-name :class)))
-    (when (eq class 'rime)
-      (let* ((commit (liberime-get-commit))
-             (context (liberime-get-context))
-             (composition (alist-get 'composition context))
-             (length (alist-get 'length composition)))
-        (cond
-         ;; 有新输入的顶屏模式
-         ((and commit (eq length 1))
-          `(:select last :replace-with ,commit))
-         ;; 无新输入的顶屏模式
-         (commit
-          `(:select current :replace-with ,commit))
-         (t nil))))))
-
 (defun pyim-self-insert-command ()
   "Pyim 版本的 self-insert-command."
   (interactive "*")
@@ -1967,7 +1913,7 @@ Return the input string.
     (when pyim-candidates-create-timer
       (cancel-timer pyim-candidates-create-timer))
     ;; 延迟1秒异步获取 candidates, pyim 内置的输入法目前不使用异步获取
-    ;; 词条的方式,主要用于 rime 支持。
+    ;; 词条的方式,主要用于 pyim-liberime 支持。
     (setq pyim-candidates-create-timer
           (run-with-timer
            1 nil
@@ -2065,12 +2011,10 @@ Return the input string.
              (pyim-posframe-valid-p))
     (posframe-hide pyim-page-tooltip-posframe-buffer))
   (pyim-entered-erase-buffer)
-  (when (eq (pyim-scheme-get-option (pyim-scheme-name) :class) 'rime)
-    (pyim-terminate-translation:rime)))
-
-(defun pyim-terminate-translation:rime ()
-  (liberime-clear-commit)
-  (liberime-clear-composition))
+  (let* ((class (pyim-scheme-get-option (pyim-scheme-name) :class))
+         (func (intern (format "pyim-terminate-translation:%S" class))))
+    (when (and class (functionp func))
+      (funcall func))))
 
 ;; 分解拼音的相关函数
 (defun pyim-pinyin-get-shenmu (pinyin)
@@ -2173,41 +2117,6 @@ Return the input string.
    :prefer-trigger-chars "v"))
 
 (pyim-scheme-add
- '(rime
-   :document
-   "rime 输入法。
-
-这个 scheme 适用于 librime 支持的所有输入法,通用性较好,但无法支
-持 trigger-chars, 所以类似 pyim 全拼支持的v快捷键将无法使用。"
-   :class rime
-   :code-prefix "&"
-   :first-chars "abcdefghijklmnopqrstuvwxyz"
-   :rest-chars "abcdefghijklmnopqrstuvwxyz'-a"
-   :prefer-trigger-chars nil))
-
-(pyim-scheme-add
- '(rime-quanpin
-   :document
-   "rime 全拼输入法。
-
-这个 scheme 专门用于 librime 全拼输入法,同时支持 trigger-chars,
-也就是v快捷键,使用 rime 全拼的朋友建议使用这个 scheme。"
-   :class rime
-   :code-prefix "&"
-   :first-chars "abcdefghjklmnopqrstwxyz"
-   :rest-chars "vmpfwckzyjqdltxuognbhsrei'-a"
-   :prefer-trigger-chars "v"))
-
-(pyim-scheme-add
- '(rime-microsoft-shuangpin
-   :document "rime 微软双拼输入法。"
-   :class rime
-   :code-prefix "&"
-   :first-chars "abcdefghijklmnopqrstuvwxyz"
-   :rest-chars "abcdefghijklmnopqrstuvwxyz;"
-   :prefer-trigger-chars nil))
-
-(pyim-scheme-add
  '(wubi
    :document "五笔输入法。"
    :class xingma
@@ -2435,12 +2344,7 @@ Return the input string.
                   pyim-default-scheme))
       (setq scheme-name pyim-default-scheme))
     (if (assq scheme-name pyim-schemes)
-        (let ((class (pyim-scheme-get-option scheme-name :class)))
-          (if (eq class 'rime)
-              (if (featurep 'liberime-core)
-                  scheme-name
-                'quanpin)
-            scheme-name))
+        scheme-name
       'quanpin)))
 
 (defun pyim-toggle-assistant-scheme ()
@@ -2565,9 +2469,6 @@ Return the input string.
             (split-string entered "'"))
       (list (nreverse output)))))
 
-(defun pyim-imobjs-create:rime (entered &optional _)
-  (list (list entered)))
-
 (defun pyim-imobjs-find-fuzzy:quanpin (imobjs)
   "用于处理模糊音的函数。"
   (let (fuzzy-imobjs result1 result2)
@@ -2675,9 +2576,6 @@ Return the input string.
                      x)))
        imobj))))
 
-(defun pyim-codes-create:rime (imobj scheme-name &optional first-n)
-  (pyim-codes-create:xingma imobj scheme-name first-n))
-
 (defun pyim-code-search (word scheme-name)
   "从 SCHEME-NAME 对应的输入法词库中,搜索 WORD 对应的 code.
 
@@ -2728,18 +2626,6 @@ IMOBJS 获得候选词条。"
       (when (car result)
         result))))
 
-(defun pyim-candidates-create:rime (imobjs scheme-name &optional async)
-  "`pyim-candidates-create' 处理 rime 输入法的函数."
-  (let* ((code (car (pyim-codes-create (car imobjs) scheme-name)))
-         (code-prefix (pyim-scheme-get-option scheme-name :code-prefix))
-         (s (replace-regexp-in-string "-" "" code))
-         ;; `liberime-search' 搜索的时候不需要 code-prefix, 去除。
-         (s (if code-prefix (substring s 1) s))
-         (words (liberime-search s (if async
-                                       nil
-                                     (* pyim-page-length 2)))))
-    words))
-
 (defun pyim-candidates-create:quanpin (imobjs scheme-name &optional async)
   "`pyim-candidates-create' 处理全拼输入法的函数."
   (unless async
@@ -3168,15 +3054,6 @@ minibuffer 原来显示的信息和 pyim 选词框整合在一起显示
                (reverse result)
                (or separator " "))))
 
-(defun pyim-page-preview-create:rime (&optional separator)
-  (let* ((preedit (or (liberime-get-preedit)
-                      (pyim-entered-get 'point-before))))
-    (pyim-with-entered-buffer
-      (if (equal 1 (point))
-          (concat "|" preedit)
-        (concat (replace-regexp-in-string (concat separator "'") "'" preedit)
-                " |" (buffer-substring-no-properties (point) (point-max)))))))
-
 (defun pyim-page-preview-create:xingma (&optional separator)
   (let* ((scheme-name (pyim-scheme-name)))
     (cl-flet* ((segment (x)
@@ -3400,10 +3277,11 @@ minibuffer 原来显示的信息和 pyim 选词框整合在一起显示
       (progn
         (pyim-outcome-handle 'last-char)
         (pyim-terminate-translation))
-    (cl-case (pyim-scheme-get-option (pyim-scheme-name) :class)
-      (rime (call-interactively #'pyim-page-select-word:rime))
-      (xingma (call-interactively #'pyim-page-select-word:xingma))
-      (t (call-interactively #'pyim-page-select-word:pinyin)))))
+    (let* ((class (pyim-scheme-get-option (pyim-scheme-name) :class))
+           (func (intern (format "pyim-page-select-word:%S" class))))
+      (if (and class (functionp func))
+          (funcall func)
+        (call-interactively #'pyim-page-select-word:pinyin)))))
 
 (defun pyim-page-select-word:pinyin ()
   "从选词框中选择当前词条,然后删除该词条对应拼音。"
@@ -3495,124 +3373,6 @@ minibuffer 原来显示的信息和 pyim 选词框整合在一起显示
     ;; pyim 使用这个 hook 来处理联想词。
     (run-hooks 'pyim-page-select-finish-hook)))
 
-(defvar pyim-liberime-code-log nil)
-(defvar pyim-liberime-word-log nil)
-(defun pyim-page-select-word:rime ()
-  "从选词框中选择当前词条,然后删除该词条对应拼音。"
-  (interactive)
-  (pyim-outcome-handle 'candidate)
-  (let* ((entered (pyim-entered-get 'point-before))
-         (word (string-remove-prefix
-                (or (pyim-outcome-get 1) "") (pyim-outcome-get)))
-         (code (pyim-liberime-get-code word entered))
-         (to-be-translated
-          (string-remove-prefix code entered)))
-    (push code pyim-liberime-code-log)
-    (push word pyim-liberime-word-log)
-    (if (or (> (length to-be-translated) 0) ;是否有光标前未转换的字符串
-            (> (length (pyim-entered-get 'point-after)) 0)) ;是否有光标后字符串
-        (progn
-          (pyim-with-entered-buffer
-            (delete-region (point-min) (point))
-            (insert to-be-translated)
-            (goto-char (point-max)))
-          (pyim-entered-refresh))
-      ;; 在 rime 后端造词和调整瓷瓶词频
-      (pyim-liberime-create-word
-       (reverse pyim-liberime-code-log)
-       (reverse pyim-liberime-word-log))
-      ;; 使用 rime 的同时,也附带的优化 quanpin 的词库。
-      (let ((pyim-default-scheme 'quanpin))
-        (if (member (pyim-outcome-get) pyim-candidates)
-            (pyim-create-pyim-word (pyim-outcome-get) t)
-          (pyim-create-pyim-word (pyim-outcome-get))))
-      (setq pyim-liberime-code-log nil)
-      (setq pyim-liberime-word-log nil)
-      (pyim-terminate-translation)
-      ;; pyim 使用这个 hook 来处理联想词。
-      (run-hooks 'pyim-page-select-finish-hook))))
-
-(defun pyim-liberime-create-word (codes words)
-  "通过 CODES 和 WORDS 的信息,在 rime 后端重新造词和调整词频。
-比如:
-
-1. CODES -> (\"nihao\" \"ma\")
-2. WORDS -> (\"你好\" \"吗\")
-
-在 rime 后端将生成 “你好吗” 这个词条。"
-  (when (and (listp codes)
-             (listp words)
-             (not (cl-find-if-not #'stringp codes))
-             (not (cl-find-if-not #'stringp words)))
-    (liberime-clear-composition)
-    (dolist (key (string-to-list (mapconcat #'identity codes "")))
-      (liberime-process-key key))
-    (let (word)
-      (while (setq word (pop words))
-        (let ((status t))
-          (while status
-            (let* ((context (liberime-get-context))
-                   (menu (alist-get 'menu context))
-                   (last-page-p (alist-get 'last-page-p menu))
-                   (candidates (alist-get 'candidates menu))
-                   (pos (cl-position word candidates :test #'equal)))
-              (cond
-               (pos (liberime-select-candidate pos)
-                    (setq status nil))
-               ((or last-page-p
-                    (not menu))
-                (setq status nil)
-                (setq words nil))
-               (t (liberime-process-key 65366))))))))))
-
-(defun pyim-liberime-get-code (word input &optional _limit)
-  "Get the code of WORD from the beginning of INPUT.
-`liberime-search' with LIMIT argument is used internal.
-
-NOTE: This is a hacky approach, the better way is let librime
-provide an API.
-
-Please see: https://github.com/rime/librime/issues/349";
-  (cond
-   ;; 处理基于语音的输入法,比如:拼音,这类输入法 preedit 一般用空格
-   ;; 分隔,与汉字一一对应。
-   ((string-match-p
-     (mapconcat #'identity
-                '("pinyin" "luna" "terra" "bopomofo" "stenotype"
-                  "jyut6ping3" "wugniu" "soutzoe" "zyenpheng"
-                  "sampheng" "clover")
-                "\\|")
-     (alist-get 'schema_id (liberime-get-status)))
-    (unless (liberime-get-preedit)
-      (liberime-search input 1))
-    (let* ((n (length word))
-           (preedit (split-string (liberime-get-preedit) "[ ']+"))
-           (preedit-list (cl-subseq preedit 0 (min n (length preedit))))
-           (i (min (length input) (* n 5)))
-           str)
-      (while (> i 0)
-        (setq str (substring input 0 i))
-        (liberime-search str 1)
-        (if (equal preedit-list (split-string (liberime-get-preedit) "[ ']+"))
-            (setq i 0)
-          (setq i (- i 1))))
-      str))
-   ((string-match-p
-     (mapconcat #'identity
-                '("wubi86" "wubi98")
-                "\\|")
-     (alist-get 'schema_id (liberime-get-status)))
-    (let ((lst (split-string (liberime-get-preedit) "[ ']+"))
-          (str "")
-          words)
-      (while lst
-        (setq str (concat str (pop lst)))
-        (setq words (liberime-search str 20))
-        (when (member word words)
-          (setq lst nil)))
-      (or str input)))
-   ;; 找不到通用的处理方式的话就不做截取处理。
-   (t input)))
 
 (defun pyim-page-select-word-by-number (&optional n)
   "使用数字编号来选择对应的词条。"



reply via email to

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