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

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

[elpa] externals/pyim 8b4692a 3/6: Sort pyim.el


From: ELPA Syncer
Subject: [elpa] externals/pyim 8b4692a 3/6: Sort pyim.el
Date: Sun, 25 Apr 2021 00:57:11 -0400 (EDT)

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

    Sort pyim.el
---
 pyim.el | 521 +++++++++++++++++++++++++++++++++-------------------------------
 1 file changed, 267 insertions(+), 254 deletions(-)

diff --git a/pyim.el b/pyim.el
index 23e6e38..82ac438 100644
--- a/pyim.el
+++ b/pyim.el
@@ -168,10 +168,149 @@
    ;;pyim-english-input-switch-functions
    describe-current-input-method-function))
 
-;; ** 注册 Pyim 输入法
+;; ** pyim 输入法定义
+(defun pyim-input-method (key)
+  "得到需要插入到 buffer 的字符串, 并将其插入到待输入 buffer.
+
+这个函数会处理用户输入的字符,并最终的得到需要插入 buffer 的字符
+串。这个字符串会被分解为 event list, 通过 emacs 低层函数
+`read-event' 来将这些 list 插入到 *待输入buffer*。"
+  (if (or buffer-read-only
+          overriding-terminal-local-map
+          overriding-local-map)
+      (list key)
+    ;; (message "call with key: %S" key-or-string)
+    (pyim-preview-setup-overlay)
+    (with-silent-modifications
+      (unwind-protect
+          (let ((input-string (pyim-start-translation key)))
+            ;; (message "input-string: %s" input-string)
+            (when (and (stringp input-string)
+                       (> (length input-string) 0))
+              (if input-method-exit-on-first-char
+                  (list (aref input-string 0))
+                (mapcar #'identity input-string))))
+        (pyim-preview-delete-overlay)
+        (pyim-entered-erase-buffer)))))
+
+(defun pyim-start-translation (key)
+  "Start translation of the typed character KEY-OR-STRING by pyim.
+Return the input string.
+
+`pyim-start-translation' 这个函数较复杂,作许多低层工作,但它的一
+个重要流程是:
+
+1. 使用函数 `read-key-sequence' 得到 key-sequence
+2. 使用函数 `lookup-key' 查询 `pyim-mode-map' 中,与上述 key-sequence 对应
+   的命令。
+3. 如果查询得到的命令是 `pyim-self-insert-command' 时,
+   `pyim-start-translation' 会调用这个函数。
+4. 这个函数最终会返回需要插入到 buffer 的字符串。
+
+这个部份的代码涉及许多 emacs 低层函数,相对复杂,不容易理解,有兴
+趣的朋友可以参考:
+1. `quail-input-method' 相关函数。
+2. elisp 手册相关章节:
+   1. Invoking the Input Method
+   2. Input Methods
+   3. Miscellaneous Event Input Features
+   4. Reading One Event"
+  ;; Check the possibility of translating KEY.
+  ;; If KEY is nil, we can anyway start translation.
+  (if (or (integerp key) (null key))
+      ;; OK, we can start translation.
+      (let* ((echo-keystrokes 0)
+             (help-char nil)
+             (overriding-terminal-local-map pyim-mode-map)
+             ;; (generated-events nil)
+             (input-method-function nil)
+             ;; Quail package 用这个变量来控制是否在 buffer 中
+             ;; 插入 preview string, pyim *强制* 将其设置为 nil
+             (input-method-use-echo-area nil)
+             (modified-p (buffer-modified-p))
+             last-command-event last-command this-command)
+
+        (setq pyim-translating t)
+        (pyim-entered-erase-buffer)
+        (pyim-outcome-handle "")
+
+        (when key
+          (setq unread-command-events
+                (cons key unread-command-events)))
+
+        (while pyim-translating
+          (set-buffer-modified-p modified-p)
+          (let* ((keyseq (read-key-sequence nil nil nil t))
+                 (cmd (lookup-key pyim-mode-map keyseq)))
+            ;; (message "key: %s, cmd:%s\nlcmd: %s, lcmdv: %s, tcmd: %s"
+            ;;          key cmd last-command last-command-event this-command)
+            (if (if key
+                    (commandp cmd)
+                  (eq cmd 'pyim-self-insert-command))
+                (progn
+                  ;; (message "keyseq: %s" keyseq)
+                  (setq last-command-event (aref keyseq (1- (length keyseq)))
+                        last-command this-command
+                        this-command cmd)
+                  (setq key t)
+                  (condition-case-unless-debug err
+                      (call-interactively cmd)
+                    (error (message "pyim 出现错误: %S , 开启 debug-on-error 
后可以了解详细情况。" err)
+                           (beep))))
+              ;; KEYSEQ is not defined in the translation keymap.
+              ;; Let's return the event(s) to the caller.
+              (setq unread-command-events
+                    (string-to-list (this-single-command-raw-keys)))
+              ;; (message "unread-command-events: %s" unread-command-events)
+              (pyim-terminate-translation))))
+        ;; (message "return: %s" (pyim-outcome-get))
+        (pyim-magic-convert (pyim-outcome-get)))
+    ;; Since KEY doesn't start any translation, just return it.
+    ;; But translate KEY if necessary.
+    (char-to-string key)))
+
+(defun pyim-magic-convert (str)
+  "用于处理 `pyim-magic-convert' 的函数。"
+  (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))
+
+(defun pyim-wash-current-line-function ()
+  "清理当前行的内容,比如:删除不必要的空格,等。"
+  (interactive)
+  (let* ((begin (line-beginning-position))
+         (end (point))
+         (string (buffer-substring-no-properties begin end))
+         new-string)
+    (when (> (length string) 0)
+      (delete-region begin end)
+      (setq new-string
+            (with-temp-buffer
+              (insert string)
+              (goto-char (point-min))
+              (while (re-search-forward "\\([,。;?!;、)】]\\)  
+\\([[:ascii:]]\\)" nil t)
+                (replace-match (concat (match-string 1) (match-string 2))  nil 
t))
+              (goto-char (point-min))
+              (while (re-search-forward "\\([[:ascii:]]\\)  +\\([(【]\\)" nil t)
+                (replace-match (concat (match-string 1) (match-string 2))  nil 
t))
+              (goto-char (point-min))
+              (while (re-search-forward "\\([[:ascii:]]\\)  +\\(\\cc\\)" nil t)
+                (replace-match (concat (match-string 1) " " (match-string 2))  
nil t))
+              (goto-char (point-min))
+              (while (re-search-forward "\\(\\cc\\)  +\\([[:ascii:]]\\)" nil t)
+                (replace-match (concat (match-string 1) " " (match-string 2))  
nil t))
+              (buffer-string)))
+      (insert new-string))))
+
+;; ** Pyim 输入法注册
 ;;;###autoload
 (register-input-method "pyim" "euc-cn" 'pyim-start (nth 0 pyim-titles))
 
+;; ** PYim 输入法启动功能
 ;;;###autoload
 (defun pyim-start (_name &optional _active-func restart save-personal-dcache 
_refresh-common-dcache)
   "pyim 启动函数.
@@ -228,6 +367,7 @@ pyim 使用函数 `pyim-start' 启动输入法的时候,会将变量
   (when (<= (minibuffer-depth) 1)
     (remove-hook 'minibuffer-exit-hook 'pyim-exit-from-minibuffer)))
 
+;; ** pyim 重启功能
 (defun pyim-restart ()
   "重启 pyim,不建议用于编程环境.
 
@@ -246,6 +386,74 @@ pyim 使用函数 `pyim-start' 启动输入法的时候,会将变量
 REFRESH-COMMON-DCACHE 已经废弃,不要再使用了。"
   (pyim-start "pyim" nil t save-personal-dcache))
 
+;; ** 键盘输入处理功能
+(defun pyim-self-insert-command ()
+  "Pyim 版本的 self-insert-command."
+  (interactive "*")
+  (setq pyim-candidates-last pyim-candidates)
+  (cond
+   ((pyim-input-chinese-p)
+    (pyim-with-entered-buffer
+      ;; 一定要注意,point 可能不在 point-min, 或者 point-max. 因为用
+      ;; 户可能通过命令移动了 entered 中的 point。
+      (insert (char-to-string last-command-event)))
+    (pyim-entered-refresh))
+   (pyim-candidates
+    (pyim-outcome-handle 'candidate-and-last-char)
+    (pyim-terminate-translation))
+   (t
+    (pyim-outcome-handle 'last-char)
+    (pyim-terminate-translation))))
+
+(defun pyim-auto-switch-english-input-p ()
+  "判断是否 *根据环境自动切换* 为英文输入模式,这个函数处理变量:
+`pyim-english-input-switch-functions'"
+  (let* ((func-or-list pyim-english-input-switch-functions))
+    (and (cl-some (lambda (x)
+                    (if (functionp x)
+                        (funcall x)
+                      nil))
+                  (cond ((functionp func-or-list) (list func-or-list))
+                        ((listp func-or-list) func-or-list)
+                        (t nil)))
+         (setq current-input-method-title
+               (if pyim-input-ascii
+                   (nth 1 pyim-titles)
+                 (nth 2 pyim-titles))))))
+
+(defun pyim-input-chinese-p ()
+  "确定 pyim 是否需要启动中文输入模式."
+  (let* ((scheme-name (pyim-scheme-name))
+         (first-chars (pyim-scheme-get-option scheme-name :first-chars))
+         (rest-chars (pyim-scheme-get-option scheme-name :rest-chars)))
+    (and (or pyim-force-input-chinese
+             (and (not pyim-input-ascii)
+                  (not (pyim-auto-switch-english-input-p))))
+         (if (not (string< "" (pyim-entered-get 'point-before)))
+             (member last-command-event
+                     (mapcar #'identity first-chars))
+           (member last-command-event
+                   (mapcar #'identity rest-chars)))
+         (setq current-input-method-title (nth 0 pyim-titles)))))
+
+;; ** 键盘输入停止功能
+(defun pyim-terminate-translation ()
+  "Terminate the translation of the current key."
+  (setq pyim-translating nil)
+  (pyim-preview-delete-string)
+  (setq pyim-candidates nil)
+  (setq pyim-candidates-last nil)
+  (setq pyim-assistant-scheme-enable nil)
+  (setq pyim-force-input-chinese nil)
+  (pyim-page-hide)
+  (pyim-entered-erase-buffer)
+  (pyim-entered-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))
+      (funcall func))))
+
+;; ** 加词功能
 (defun pyim-create-word (word &optional prepend wordcount-handler)
   (pyim-create-pyim-word word prepend wordcount-handler))
 
@@ -311,7 +519,6 @@ BUG:拼音无法有效地处理多音字。"
   (interactive)
   (pyim-create-word-at-point 4))
 
-;; ** 删词功能
 (defun pyim-create-word-from-selection ()
   "Add the selected text as a Chinese word into the personal dictionary."
   (interactive)
@@ -324,19 +531,7 @@ BUG:拼音无法有效地处理多音字。"
           (pyim-create-word string)
           (message "将词条: %S 插入 personal file。" string))))))
 
-(defun pyim-search-word-code ()
-  "选择词条,然后反查它的 code. 这个功能对五笔用户有用。"
-  (interactive)
-  (when (region-active-p)
-    (let* ((string (buffer-substring-no-properties (region-beginning) 
(region-end)))
-           code)
-      (if (not (string-match-p "^\\cc+\\'" string))
-          (error "不是纯中文字符串")
-        (setq code (pyim-dcache-search-word-code string))
-        (if code
-            (message "%S -> %S " string code)
-          (message "没有找到 %S 对应的编码。" string))))))
-
+;; ** 删词功能
 (defun pyim-delete-words-in-file (file)
   "从个人词库缓存中批量删除 FILE 文件中列出的词条.
 
@@ -387,223 +582,7 @@ FILE 的格式与 `pyim-dcache-export' 生成的文件格式相同,
           (message "将词条: %S 从 personal 缓冲中删除。" string)))
     (message "请首先高亮选择需要删除的词条。")))
 
-;; ** 处理用户输入字符的相关函数
-(defun pyim-input-method (key)
-  "得到需要插入到 buffer 的字符串, 并将其插入到待输入 buffer.
-
-这个函数会处理用户输入的字符,并最终的得到需要插入 buffer 的字符
-串。这个字符串会被分解为 event list, 通过 emacs 低层函数
-`read-event' 来将这些 list 插入到 *待输入buffer*。"
-  (if (or buffer-read-only
-          overriding-terminal-local-map
-          overriding-local-map)
-      (list key)
-    ;; (message "call with key: %S" key-or-string)
-    (pyim-preview-setup-overlay)
-    (with-silent-modifications
-      (unwind-protect
-          (let ((input-string (pyim-start-translation key)))
-            ;; (message "input-string: %s" input-string)
-            (when (and (stringp input-string)
-                       (> (length input-string) 0))
-              (if input-method-exit-on-first-char
-                  (list (aref input-string 0))
-                (mapcar #'identity input-string))))
-        (pyim-preview-delete-overlay)
-        (pyim-entered-erase-buffer)))))
-
-(defun pyim-magic-convert (str)
-  "用于处理 `pyim-magic-convert' 的函数。"
-  (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))
-
-(defun pyim-wash-current-line-function ()
-  "清理当前行的内容,比如:删除不必要的空格,等。"
-  (interactive)
-  (let* ((begin (line-beginning-position))
-         (end (point))
-         (string (buffer-substring-no-properties begin end))
-         new-string)
-    (when (> (length string) 0)
-      (delete-region begin end)
-      (setq new-string
-            (with-temp-buffer
-              (insert string)
-              (goto-char (point-min))
-              (while (re-search-forward "\\([,。;?!;、)】]\\)  
+\\([[:ascii:]]\\)" nil t)
-                (replace-match (concat (match-string 1) (match-string 2))  nil 
t))
-              (goto-char (point-min))
-              (while (re-search-forward "\\([[:ascii:]]\\)  +\\([(【]\\)" nil t)
-                (replace-match (concat (match-string 1) (match-string 2))  nil 
t))
-              (goto-char (point-min))
-              (while (re-search-forward "\\([[:ascii:]]\\)  +\\(\\cc\\)" nil t)
-                (replace-match (concat (match-string 1) " " (match-string 2))  
nil t))
-              (goto-char (point-min))
-              (while (re-search-forward "\\(\\cc\\)  +\\([[:ascii:]]\\)" nil t)
-                (replace-match (concat (match-string 1) " " (match-string 2))  
nil t))
-              (buffer-string)))
-      (insert new-string))))
-
-(defun pyim-start-translation (key)
-  "Start translation of the typed character KEY-OR-STRING by pyim.
-Return the input string.
-
-`pyim-start-translation' 这个函数较复杂,作许多低层工作,但它的一
-个重要流程是:
-
-1. 使用函数 `read-key-sequence' 得到 key-sequence
-2. 使用函数 `lookup-key' 查询 `pyim-mode-map' 中,与上述 key-sequence 对应
-   的命令。
-3. 如果查询得到的命令是 `pyim-self-insert-command' 时,
-   `pyim-start-translation' 会调用这个函数。
-4. 这个函数最终会返回需要插入到 buffer 的字符串。
-
-这个部份的代码涉及许多 emacs 低层函数,相对复杂,不容易理解,有兴
-趣的朋友可以参考:
-1. `quail-input-method' 相关函数。
-2. elisp 手册相关章节:
-   1. Invoking the Input Method
-   2. Input Methods
-   3. Miscellaneous Event Input Features
-   4. Reading One Event"
-  ;; Check the possibility of translating KEY.
-  ;; If KEY is nil, we can anyway start translation.
-  (if (or (integerp key) (null key))
-      ;; OK, we can start translation.
-      (let* ((echo-keystrokes 0)
-             (help-char nil)
-             (overriding-terminal-local-map pyim-mode-map)
-             ;; (generated-events nil)
-             (input-method-function nil)
-             ;; Quail package 用这个变量来控制是否在 buffer 中
-             ;; 插入 preview string, pyim *强制* 将其设置为 nil
-             (input-method-use-echo-area nil)
-             (modified-p (buffer-modified-p))
-             last-command-event last-command this-command)
-
-        (setq pyim-translating t)
-        (pyim-entered-erase-buffer)
-        (pyim-outcome-handle "")
-
-        (when key
-          (setq unread-command-events
-                (cons key unread-command-events)))
-
-        (while pyim-translating
-          (set-buffer-modified-p modified-p)
-          (let* ((keyseq (read-key-sequence nil nil nil t))
-                 (cmd (lookup-key pyim-mode-map keyseq)))
-            ;; (message "key: %s, cmd:%s\nlcmd: %s, lcmdv: %s, tcmd: %s"
-            ;;          key cmd last-command last-command-event this-command)
-            (if (if key
-                    (commandp cmd)
-                  (eq cmd 'pyim-self-insert-command))
-                (progn
-                  ;; (message "keyseq: %s" keyseq)
-                  (setq last-command-event (aref keyseq (1- (length keyseq)))
-                        last-command this-command
-                        this-command cmd)
-                  (setq key t)
-                  (condition-case-unless-debug err
-                      (call-interactively cmd)
-                    (error (message "pyim 出现错误: %S , 开启 debug-on-error 
后可以了解详细情况。" err)
-                           (beep))))
-              ;; KEYSEQ is not defined in the translation keymap.
-              ;; Let's return the event(s) to the caller.
-              (setq unread-command-events
-                    (string-to-list (this-single-command-raw-keys)))
-              ;; (message "unread-command-events: %s" unread-command-events)
-              (pyim-terminate-translation))))
-        ;; (message "return: %s" (pyim-outcome-get))
-        (pyim-magic-convert (pyim-outcome-get)))
-    ;; Since KEY doesn't start any translation, just return it.
-    ;; But translate KEY if necessary.
-    (char-to-string key)))
-
-(defun pyim-auto-switch-english-input-p ()
-  "判断是否 *根据环境自动切换* 为英文输入模式,这个函数处理变量:
-`pyim-english-input-switch-functions'"
-  (let* ((func-or-list pyim-english-input-switch-functions))
-    (and (cl-some (lambda (x)
-                    (if (functionp x)
-                        (funcall x)
-                      nil))
-                  (cond ((functionp func-or-list) (list func-or-list))
-                        ((listp func-or-list) func-or-list)
-                        (t nil)))
-         (setq current-input-method-title
-               (if pyim-input-ascii
-                   (nth 1 pyim-titles)
-                 (nth 2 pyim-titles))))))
-
-(defun pyim-input-chinese-p ()
-  "确定 pyim 是否需要启动中文输入模式."
-  (let* ((scheme-name (pyim-scheme-name))
-         (first-chars (pyim-scheme-get-option scheme-name :first-chars))
-         (rest-chars (pyim-scheme-get-option scheme-name :rest-chars)))
-    (and (or pyim-force-input-chinese
-             (and (not pyim-input-ascii)
-                  (not (pyim-auto-switch-english-input-p))))
-         (if (not (string< "" (pyim-entered-get 'point-before)))
-             (member last-command-event
-                     (mapcar #'identity first-chars))
-           (member last-command-event
-                   (mapcar #'identity rest-chars)))
-         (setq current-input-method-title (nth 0 pyim-titles)))))
-
-(defun pyim-self-insert-command ()
-  "Pyim 版本的 self-insert-command."
-  (interactive "*")
-  (setq pyim-candidates-last pyim-candidates)
-  (cond
-   ((pyim-input-chinese-p)
-    (pyim-with-entered-buffer
-      ;; 一定要注意,point 可能不在 point-min, 或者 point-max. 因为用
-      ;; 户可能通过命令移动了 entered 中的 point。
-      (insert (char-to-string last-command-event)))
-    (pyim-entered-refresh))
-   (pyim-candidates
-    (pyim-outcome-handle 'candidate-and-last-char)
-    (pyim-terminate-translation))
-   (t
-    (pyim-outcome-handle 'last-char)
-    (pyim-terminate-translation))))
-
-(defun pyim-terminate-translation ()
-  "Terminate the translation of the current key."
-  (setq pyim-translating nil)
-  (pyim-preview-delete-string)
-  (setq pyim-candidates nil)
-  (setq pyim-candidates-last nil)
-  (setq pyim-assistant-scheme-enable nil)
-  (setq pyim-force-input-chinese nil)
-  (pyim-page-hide)
-  (pyim-entered-erase-buffer)
-  (pyim-entered-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))
-      (funcall func))))
-
-(defun pyim-toggle-assistant-scheme ()
-  "临时切换到辅助输入法.
-
-这个功能一般用于五笔等形码输入法,在忘记编码的时候临时用拼音输入
-中文。"
-  (interactive)
-  (if (= (length (pyim-entered-get 'point-before)) 0)
-      (progn
-        (pyim-outcome-handle 'last-char)
-        (pyim-terminate-translation))
-    (setq pyim-assistant-scheme-enable
-          (not pyim-assistant-scheme-enable))
-    (pyim-entered-refresh)))
-
+;; ** 选词功能
 (define-obsolete-function-alias 'pyim-page-select-word-simple 
'pyim-select-word-simple "4.0")
 (defun pyim-select-word-simple ()
   "从选词框中选择当前词条.
@@ -745,6 +724,50 @@ Return the input string.
     ;; 不能用来选词了。
     (call-interactively #'pyim-self-insert-command)))
 
+;; ** 取消当前输入功能
+(defun pyim-quit-clear ()
+  "取消当前输入的命令."
+  (interactive)
+  (pyim-outcome-handle "")
+  (pyim-terminate-translation))
+
+;; ** 字母上屏功能
+(defun pyim-quit-no-clear ()
+  "字母上屏命令."
+  (interactive)
+  (pyim-outcome-handle 'pyim-entered)
+  (pyim-terminate-translation))
+
+;; ** 取消激活功能
+(defun pyim-inactivate ()
+  "取消 pyim 的激活状态."
+  (interactive)
+  (pyim-kill-local-variables)
+  (run-hooks 'pyim-inactive-hook))
+
+;; ** 中英文输入模式切换
+(defun pyim-toggle-input-ascii ()
+  "pyim 切换中英文输入模式。同时调整标点符号样式。"
+  (interactive)
+  (setq pyim-input-ascii
+        (not pyim-input-ascii)))
+
+;; ** 主辅输入法切换功能
+(defun pyim-toggle-assistant-scheme ()
+  "临时切换到辅助输入法.
+
+这个功能一般用于五笔等形码输入法,在忘记编码的时候临时用拼音输入
+中文。"
+  (interactive)
+  (if (= (length (pyim-entered-get 'point-before)) 0)
+      (progn
+        (pyim-outcome-handle 'last-char)
+        (pyim-terminate-translation))
+    (setq pyim-assistant-scheme-enable
+          (not pyim-assistant-scheme-enable))
+    (pyim-entered-refresh)))
+
+;; ** 金手指功能
 ;;;###autoload
 (define-obsolete-function-alias
   'pyim-convert-code-at-point #'pyim-convert-string-at-point "2.0")
@@ -821,29 +844,19 @@ Return the input string.
                (setq pyim-force-input-chinese t)))
             (t (message "Pyim: pyim-convert-string-at-point do noting."))))))
 
-(defun pyim-quit-clear ()
-  "取消当前输入的命令."
-  (interactive)
-  (pyim-outcome-handle "")
-  (pyim-terminate-translation))
-
-(defun pyim-quit-no-clear ()
-  "字母上屏命令."
-  (interactive)
-  (pyim-outcome-handle 'pyim-entered)
-  (pyim-terminate-translation))
-
-(defun pyim-inactivate ()
-  "取消 pyim 的激活状态."
-  (interactive)
-  (pyim-kill-local-variables)
-  (run-hooks 'pyim-inactive-hook))
-
-(defun pyim-toggle-input-ascii ()
-  "pyim 切换中英文输入模式。同时调整标点符号样式。"
+;; ** 编码反查功能
+(defun pyim-search-word-code ()
+  "选择词条,然后反查它的 code. 这个功能对五笔用户有用。"
   (interactive)
-  (setq pyim-input-ascii
-        (not pyim-input-ascii)))
+  (when (region-active-p)
+    (let* ((string (buffer-substring-no-properties (region-beginning) 
(region-end)))
+           code)
+      (if (not (string-match-p "^\\cc+\\'" string))
+          (error "不是纯中文字符串")
+        (setq code (pyim-dcache-search-word-code string))
+        (if code
+            (message "%S -> %S " string code)
+          (message "没有找到 %S 对应的编码。" string))))))
 
 ;; ** pyim 中文字符串工具
 (require 'pyim-cstring)



reply via email to

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