branch: externals/pyim commit 47a4c5131be4e5586c44b112a05d9a7062b8a021 Author: Feng Shu <tuma...@163.com> Commit: Feng Shu <tuma...@163.com>
New pyim-magic.el --- pyim-magic.el | 58 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ pyim-preview.el | 5 ++--- pyim-process.el | 26 +++++--------------------- pyim.el | 2 +- 4 files changed, 66 insertions(+), 25 deletions(-) diff --git a/pyim-magic.el b/pyim-magic.el new file mode 100644 index 0000000..b304e29 --- /dev/null +++ b/pyim-magic.el @@ -0,0 +1,58 @@ +;;; pyim-magic.el --- magic convert for pyim. -*- lexical-binding: t; -*- + +;; * Header +;; Copyright (C) 2021 Free Software Foundation, Inc. + +;; Author: Feng Shu <tuma...@163.com> +;; Maintainer: Feng Shu <tuma...@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) + +(defgroup pyim-magic nil + "Magic converter for pyim." + :group 'pyim) + +(defcustom pyim-magic-converter nil + "将 “待选词条” 在 “上屏” 之前自动转换为其他字符串. +这个功能可以实现“简转繁”,“输入中文得到英文”之类的功能。" + :type 'boolean) + +(defvar pyim-magic-convert-cache nil + "用来临时保存 `pyim-magic-convert' 的结果. +从而加快同一个字符串第二次的转换速度。") + +(defun pyim-magic-convert (str) + "用于处理 `pyim-magic-converter' 的函数。" + (if (functionp pyim-magic-converter) + (or (cdr (assoc str pyim-magic-convert-cache)) + (let ((result (funcall pyim-magic-converter str))) + (setq pyim-magic-convert-cache + `((,str . ,result))) + result)) + str)) + +;; * Footer +(provide 'pyim-magic) + +;;; pyim-magic.el ends here diff --git a/pyim-preview.el b/pyim-preview.el index 300ce87..7b2b223 100644 --- a/pyim-preview.el +++ b/pyim-preview.el @@ -29,6 +29,7 @@ ;; * 代码 :code: (require 'cl-lib) (require 'pyim-common) +(require 'pyim-magic) (defgroup pyim-preview nil "Preview libs for pyim." @@ -64,8 +65,6 @@ (if (and (overlayp pyim-preview-overlay) (overlay-start pyim-preview-overlay)) (delete-overlay pyim-preview-overlay))) -(declare-function pyim-process-magic-convert "pyim") - (defun pyim-preview-refresh () "刷新光标处预览. @@ -86,7 +85,7 @@ pyim 会使用 Emacs overlay 机制在 *待输入buffer* 光标处高亮显示 "'"))) (when (string< "" rest) (setq preview (concat preview rest))))) - (setq preview (pyim-process-magic-convert preview)) + (setq preview (pyim-magic-convert preview)) ;; Delete old preview string. (pyim-preview-delete-string) ;; Insert new preview string. diff --git a/pyim-process.el b/pyim-process.el index 58984a6..2df402e 100644 --- a/pyim-process.el +++ b/pyim-process.el @@ -41,6 +41,7 @@ (require 'pyim-punctuation) (require 'pyim-autoselector) (require 'pyim-cstring) +(require 'pyim-magic) (defcustom pyim-english-input-switch-functions nil "让 pyim 开启英文输入功能. @@ -55,11 +56,6 @@ 如果为 0 或者 nil, 则不等待立刻显示可选词." :type 'integer) -(defcustom pyim-magic-converter nil - "将 “待选词条” 在 “上屏” 之前自动转换为其他字符串. -这个功能可以实现“简转繁”,“输入中文得到英文”之类的功能。" - :type 'boolean) - (defvar pyim-process-input-ascii nil "是否开启 pyim 英文输入模式.") @@ -72,10 +68,6 @@ (defvar pyim-process-translating nil "记录是否在转换状态.") -(defvar pyim-process-magic-convert-cache nil - "用来临时保存 `pyim-magic-convert' 的结果. -从而加快同一个字符串第二次的转换速度。") - (defvar pyim-process-last-created-word nil "记录最近一次创建的词条, 用于实现快捷删词功能: `pyim-delete-last-word' .") @@ -301,19 +293,11 @@ (defun pyim-process-get-imobjs () pyim-imobjs) -(defun pyim-process-get-outcome (&optional n) +(defun pyim-process-get-outcome (&optional n magic-convert) "PYIM 流程的输出" - (pyim-outcome-get n)) - -(defun pyim-process-magic-convert (str) - "用于处理 `pyim-magic-convert' 的函数。" - (if (functionp pyim-magic-converter) - (or (cdr (assoc str pyim-process-magic-convert-cache)) - (let ((result (funcall pyim-magic-converter str))) - (setq pyim-process-magic-convert-cache - `((,str . ,result))) - result)) - str)) + (if magic-convert + (pyim-magic-convert (pyim-outcome-get n)) + (pyim-outcome-get n))) (defun pyim-process-outcome-handle (type) "依照 TYPE, 获取 pyim 的 outcome,并将其加入 `pyim-outcome-history'." diff --git a/pyim.el b/pyim.el index 3e76141..2de0639 100644 --- a/pyim.el +++ b/pyim.el @@ -213,7 +213,7 @@ Tip: 用户也可以利用 `pyim-outcome-trigger-function-default' 函数 ;; (message "unread-command-events: %s" unread-command-events) (pyim-process-terminate)))) ;; (message "return: %s" (pyim-process-get-outcome)) - (pyim-process-magic-convert (pyim-process-get-outcome))) + (pyim-process-get-outcome nil t)) ;; Since KEY doesn't start any translation, just return it. ;; But translate KEY if necessary. (char-to-string key)))