GithubHelp home page GithubHelp logo

tumashu / pyim Goto Github PK

View Code? Open in Web Editor NEW
880.0 27.0 89.0 5.63 MB

一个 emacs 中文输入法,支持全拼,双拼,五笔,仓颉和Rime,pyim 是 GNU elpa 包。

Emacs Lisp 99.68% Makefile 0.32%

pyim's Introduction

PYIM 是一个 Emacs 中文输入法,支持全拼,双拼,五笔,仓颉 和 Rime 等

Github Action GNU ELPA GNU-devel ELPA MELPA

不兼容更新

<2022-06-15 Wed> Do not require popup in pyim-page.el

popup 是一个非 gnu elpa 包,pyim-page.el 不应该 require 它,需要用户自己手动 require, 使用 popup tooltip 的用户需要在配置中添加:

(require 'popup)

<2022-06-13 Mon> pyim-dcache-backend 所需的 package 需要用户手工加载了。

以前 pyim 可以根据 pyim-dcache-backend 的取值自动加载需要的 package, 这样做虽然 方便,但代码特别容易出现问题,考虑到 pyim 未来支持的后端不会有太大变化,我删除了 这个功能,为了向后兼容,pyim 目前会自动加载 pyim-dregcache 包, 但这个兼容代码未 来可能会删除,所以使用 pyim-dregcache 的用户,建议给自己的配置中添加:

(require 'pyim-dregcache)

<2022-05-29 Sun> pyim-cregexp-utils, pyim-cstring-utils 和 pyim-dict-manager 需要用户手动 require.

为降低 pyim 代码的复杂度,减少 pyim 依赖包的数量,下面三个包不会自动加载,需要用 户手动 require.

  1. pyim-cregexp-utils
  2. pyim-cstring-utils
  3. pyim-dict-manager (使用 elpa 安装词库,或者手动管理 pyim-dicts 变量的用户不需要这个包)

<2021-04-28 Wed> 五笔输入法和仓颉输入法的不兼容更新

五笔输入法和仓颉输入法原来使用一个标点符号作为 code-prefix, 现在使用 “wubi/” 和 “cangjie/” 这种形式的 code-prefix, 这样可以减少不同输入法误用同一个 code-prefix 带来的词库冲突。

五笔输入法的 scheme 设置已经移到 pyim-wbdict 包,仓颉输入法的 scheme 设置已经移 到 pyim-cangjie5dict 包。

使用上述两个包的用户,此次变更不受影响,因为两个包使用新的 code-prefix.

受影响的是自己维护五笔和仓颉词库用户,这些用户需要做以下更新:

  1. 五笔用户
    1. 需要 (require ‘pyim-wbdict), 加载五笔 scheme 设置。
    2. 需要将自己的五笔词库文件中的 code-prefix “.” 替换为 “wubi/”.
    3. 运行 `pyim-upgrade’ 命令,升级 icode2word 词库缓存。
  2. 仓颉用户
    1. 需要 (require ‘pyim-cangjie5dict), 加载仓颉 scheme 设置。
    2. 需要将自己的五笔词库文件中的 code-prefix “@” 替换为 “cangjie/”.

截图

./snapshots/pyim-linux-x-with-toolkit.png

简介

pyim 是 Emacs 环境下的一个中文输入法,最初这个输入法只支持全拼输入,后来根据同学 的提议,添加了五笔等输入法的支持,“pyim” 现在可以理解为:

(Peng You input method)

背景

pyim 源于 Emacs-eim。

Emacs-eim 是 Emacs 环境下的一个中文输入法框架, 支持拼音,五笔,仓颉,二笔等多种 输入法,但遗憾的是,2008 年之后它就停止了开发。

虽然外部输入法功能强大,但不能和 Emacs 默契的配合,这一点极大的损害了 Emacs 那种 行云流水 的感觉。而本人在使用 Emacs-eim 的过程中发现:

  1. 当 Emacs-eim 词库词条很大时,选词频率大大降低,中文体验增强。
  2. 随着使用时间的延长,Emacs-eim 会越来越好用(个人词库的积累)。

于是我 fork 了 Emacs-eim 输入法的部分代码, 创建了新项目:pyim。

目标

pyim 的目标是: 尽最大的努力成为一个好用的 Emacs 中文输入法 , 具体可表现为三个方面:

  1. Fallback: 当外部输入法不能使用时,比如在 console 或者 cygwin 环境下,尽最大可 能让 Emacs 用户不必为输入中文而烦恼。
  2. Integration: 尽最大可能减少输入法切换频率,让中文输入不影响 Emacs 的体验。
  3. Exchange: 尽最大可能简化 pyim 使用其他优秀输入法的词库的难度和复杂度。

特点

  1. pyim 支持全拼,双拼,五笔和仓颉等输入法,其中对全拼的支持最好。
  2. pyim 通过添加词库的方式优化输入法。
  3. pyim 使用文本词库格式,方便处理。
  4. pyim 可以作为 rime 的前端使用。

安装

  1. M-x package-install RET pyim RET
  2. 在 Emacs 配置文件中(比如: ~/.emacs)添加如下代码:
    (require 'pyim)
    (require 'pyim-basedict) ; 拼音词库设置,五笔用户 *不需要* 此行设置
    (pyim-basedict-enable)   ; 拼音词库,五笔用户 *不需要* 此行设置
    (setq default-input-method "pyim")
        

配置

配置实例

对 pyim 感兴趣的同学,可以看看本人的 pyim 配置,但要注意不要乱抄探针配置。

(require 'pyim)
(require 'pyim-basedict)
(require 'pyim-cregexp-utils)

;; 如果使用 popup page tooltip, 就需要加载 popup 包。
;; (require 'popup nil t)
;; (setq pyim-page-tooltip 'popup)

;; 如果使用 pyim-dregcache dcache 后端,就需要加载 pyim-dregcache 包。
;; (require 'pyim-dregcache)
;; (setq pyim-dcache-backend 'pyim-dregcache)

;; 加载 basedict 拼音词库。
(pyim-basedict-enable)

;; 将 Emacs 默认输入法设置为 pyim.
(setq default-input-method "pyim")

;; 显示 5 个候选词。
(setq pyim-page-length 5)

;; 金手指设置,可以将光标处的编码(比如:拼音字符串)转换为中文。
(global-set-key (kbd "M-j") 'pyim-convert-string-at-point)

;; 按 "C-<return>" 将光标前的 regexp 转换为可以搜索中文的 regexp.
(define-key minibuffer-local-map (kbd "C-<return>") 'pyim-cregexp-convert-at-point)

;; 设置 pyim 默认使用的输入法策略,我使用全拼。
(pyim-default-scheme 'quanpin)
;; (pyim-default-scheme 'wubi)
;; (pyim-default-scheme 'cangjie)

;; 设置 pyim 是否使用云拼音
;; (setq pyim-cloudim 'baidu)

;; 设置 pyim 探针
;; 设置 pyim 探针设置,这是 pyim 高级功能设置,可以实现 *无痛* 中英文切换 :-)
;; 我自己使用的中英文动态切换规则是:
;; 1. 光标只有在注释里面时,才可以输入中文。
;; 2. 光标前是汉字字符时,才能输入中文。
;; 3. 使用 M-j 快捷键,强制将光标前的拼音字符串转换为中文。
;; (setq-default pyim-english-input-switch-functions
;;               '(pyim-probe-dynamic-english
;;                 pyim-probe-isearch-mode
;;                 pyim-probe-program-mode
;;                 pyim-probe-org-structure-template))

;; (setq-default pyim-punctuation-half-width-functions
;;               '(pyim-probe-punctuation-line-beginning
;;                 pyim-probe-punctuation-after-punctuation))

;; 开启代码搜索中文功能(比如拼音,五笔码等)
(pyim-isearch-mode 1)

添加词库文件

pyim 默认使用 pyim-basedict 词库, 这个词库的词条量8万左右,是一个 非常小 的拼 音词库,源于:libpinyin 项目

如果 pyim-basedict 不能满足需求,用户可以使用其他方式为 pyim 添加拼音词库,具体 方式请参考 如何添加自定义拼音词库 小结。

激活 pyim

(setq default-input-method "pyim")
(global-set-key (kbd "C-\\") 'toggle-input-method)

使用

常用快捷键

输入法快捷键功能
C-n 或 M-n 或 + 或 .向下翻页
C-p 或 M-p 或 - 或 ,向上翻页
C-f选择下一个备选词
C-b选择上一个备选词
SPC确定输入
RET 或 C-m字母上屏
C-c取消输入
C-g取消输入并保留已输入的中文
TAB模糊音调整
DEL 或 BACKSPACE删除最后一个字符
C-DEL 或 C-BACKSPACE删除最后一个拼音
M-DEL 或 M-BACKSPACE删除最后一个拼音
F1,F2,F3,F4以词定字

使用云输入法

pyim 可以使用搜索引擎提供的云输入法服务,比如:

(setq pyim-cloudim 'baidu)
;; (setq pyim-cloudim 'google)

使用双拼模式

pyim 支持双拼输入模式,用户可以通过变量 `pyim-default-scheme’ 来设定:

(pyim-default-scheme 'pyim-shuangpin)

注意:

  1. pyim 支持微软双拼(microsoft-shuangpin)和小鹤双拼(xiaohe-shuangpin)。
  2. 用户可以使用函数 `pyim-scheme-add’ 添加自定义双拼方案。
  3. 用户可能需要重新设置 `pyim-outcome-trigger’。

使用 rime 输入法

具体安装和使用方式请查看 pyim-liberime 包的 Commentary 部分。

使用型码输入法

  1. 五笔输入法可以参考: https://github.com/tumashu/pyim-wbdict
  2. 仓颉输入法可以参考:https://github.com/p1uxtar/pyim-cangjiedict
  3. 三码郑码(至至郑码)输入法可以参考: https://github.com/p1uxtar/pyim-smzmdict

如果用户在使用型码输入法的过程中,忘记了某个字的编码,可以按 TAB 键临时切换到辅 助输入法来输入,辅助输入法可以通过 `pyim-assistant-scheme’ 来设置。

让选词框跟随光标

用户可以通过下面的设置让 pyim 在 光标处 显示一个选词框:

  1. 使用 popup 或者 popon 包来绘制选词框 (emacs overlay 机制)
    (require 'popup)
    (setq pyim-page-tooltip 'popup)
        
    (require 'popon)
    (setq pyim-page-tooltip 'popon)
        
  2. 使用 posframe 来绘制选词框
    (require 'posframe)
    (setq pyim-page-tooltip 'posframe)
        

    注意:pyim 不会自动安装 posframe, 用户需要手动安装这个包,

  3. 按照优先顺序自动选择一个可用的 tooltip
    (setq pyim-page-tooltip '(posframe popup minibuffer))
        

调整 tooltip 选词框的显示样式

pyim 的选词框默认使用 双行显示 的样式,在一些特殊的情况下(比如:popup 显示的 菜单错位),用户可以使用 *单行显示*的样式:

(setq pyim-page-style 'one-line)

设置模糊音

可以通过设置 `pyim-pinyin-fuzzy-alist’ 变量来自定义模糊音。

使用魔术转换器

用户可以将待选词 “特殊处理” 后再 “上屏”,比如 “简体转繁体” 或者 “输入中文,上屏 英文” 之类的。

用户需要设置 `pyim-outcome-magic-converter’, 比如:下面这个例子实现,输入 “二呆”, “一个超级帅的小伙子” 上屏 :-)

(defun my-converter (string)
  (if (equal string "二呆")
      "“一个超级帅的小伙子”"
    string))
(setq pyim-outcome-magic-converter #'my-converter)

切换全角标点与半角标点

  1. 第一种方法:使用命令 `pyim-punctuation-toggle’,全局切换。这个命令主要用来设 置变量: `pyim-punctuation-translate-p’, 用户也可以手动设置这个变量, 比如:
    (setq-default pyim-punctuation-translate-p '(yes))    ;使用全角标点。
    (setq-default pyim-punctuation-translate-p '(no))     ;使用半角标点。
    (setq-default pyim-punctuation-translate-p '(auto))   ;中文使用全角标点,英文使用半角标点。
        
  2. 第二种方法:使用命令 `pyim-punctuation-translate-at-point’ 只切换光标处标点的 样式。
  3. 第三种方法:设置变量 `pyim-outcome-trigger’ ,输入变量设定的字符会切换光标处 标点的样式。

手动加词和删词

  1. `pyim-convert-string-at-point’ 金手指命令,可以比较方便的添加和删除词条,比如:
    1. 在 “你好” 后面输入2, 然后运行金手指命令,可以将 “你好” 加入个人词库。
    2. 在 “你好” 后面输入2-, 然后运行金手指命令,可以将 “你好” 从个人词库删除。
    3. 如果用户选择了一个词条,则运行金手指命令可以将选择的词条加入个人词库。
  2. `pyim-create-Ncchar-word-at-point’ 这是一组命令,从光标前提取N个汉字字符组成字 符串,并将其加入个人词库。
  3. `pyim-outcome-trigger’ 以默认设置为例:在 “我爱吃红烧肉” 后输入 “5v”,可以将 “爱吃红烧肉”这个词条保存到用户个人词库。
  4. `pyim-create-word-from-selection’, 选择一个词条,运行这个命令后,就可以将这个 词条添加到个人词库。
  5. `pyim-delete-word’ 从个人词库中删除当前高亮选择的词条。

pyim 输入状态指示器

pyim 输入状态指示器可以帮助用户快速了解当前 pyim 是处于英文输入状态还是中文输入 状态,因为 pyim probe 探针功能可以让中英文输入状态动态切换,所以快速了解当前中英 文输入状态有时候显得很重要。

pyim 当前内置两种指示器实现方式:

  1. 改变光标颜色: pyim-indicator-with-cursor-color, 用户可以使用变量 pyim-indicator-cursor-color 来配置两种输入状态对应的光标颜色。
  2. 使用 modeline 显示状态字符串:pyim-indicator-with-mode-line, 用户可以使用变量 pyim-indicator-modeline-string 来配置两种状态对应的显示字符串。

设置默认启用的指示器有两个,用户可以使用下面的变量调整:

(setq pyim-indicator-list (list #'pyim-indicator-with-cursor-color #'pyim-indicator-with-modeline))

注意事项:

  1. 用户切换 emacs 主题之后,最好重启 pyim 一下。
  2. pyim-indicator-with-cursor-color 这个 indicator 很容易和其它设置 cursor 颜色 的包冲突,因为都调用 set-cursor-color,遇到这种情况后,用户需要自己解决冲突, pyim-indicator 提供了一个简单的机制:
    (setq pyim-indicator-list (list #'my-pyim-indicator-with-cursor-color #'pyim-indicator-with-modeline))
    
    (defun my-pyim-indicator-with-cursor-color (input-method chinese-input-p)
      (if (not (equal input-method "pyim"))
          (progn
            ;; 用户在这里定义 pyim 未激活时的光标颜色设置语句
            (set-cursor-color "red"))
        (if chinese-input-p
            (progn
              ;; 用户在这里定义 pyim 输入中文时的光标颜色设置语句
              (set-cursor-color "green"))
          ;; 用户在这里定义 pyim 输入英文时的光标颜色设置语句
          (set-cursor-color "blue"))))
        

pyim 高级功能

  1. 根据环境自动切换到英文输入模式,使用 pyim-english-input-switch-functions 配置。
  2. 根据环境自动切换到半角标点输入模式,使用 pyim-punctuation-half-width-functions 配置。
  3. 如果想在某种环境下强制输入中文,可以使用 pyim-force-input-chinese-functions 来配置,这个设置可以屏蔽掉 pyim-english-input-switch-functions 的设置。

注意:上述两个功能使用不同的变量设置, 千万不要搞错

根据环境自动切换到英文输入模式

探针函数功能说明
pyim-probe-program-mode如果当前的 mode 衍生自 prog-mode,那么仅仅在字符串和 comment 中开启中文输入模式
pyim-probe-org-speed-commands解决 org-speed-commands 与 pyim 冲突问题
pyim-probe-isearch-mode使用 isearch 搜索时,强制开启英文输入模式
注意:想要使用这个功能,pyim-isearch-mode 必须激活
pyim-probe-org-structure-template使用 org-structure-template 时,关闭中文输入模式
1. 当前字符为中文字符时,输入下一个字符时默认开启中文输入
pyim-probe-dynamic-english2. 当前字符为其他字符时,输入下一个字符时默认开启英文输入
3. 使用命令 pyim-convert-string-at-point 可以将光标前的拼音字符串强制转换为中文。

激活方式:

(setq-default pyim-english-input-switch-functions
              '(probe-function1 probe-function2 probe-function3))

注意事项:

  1. 上述函数列表中,任意一个函数的返回值为 t 时,pyim 切换到英文输入模式。
  2. Emacs-rimesmart-input-source 也有类似探针的功能,其对应函数可以直接或者简 单包装后作为 pyim 探针使用,有兴趣的同学可以了解一下。

根据环境自动切换到半角标点输入模式

探针函数功能说明
pyim-probe-punctuation-line-beginning行首强制输入半角标点
pyim-probe-punctuation-after-punctuation半角标点后强制输入半角标点

激活方式:

(setq-default pyim-punctuation-half-width-functions
              '(probe-function4 probe-function5 probe-function6))

注:上述函数列表中,任意一个函数的返回值为 t 时,pyim 切换到半角标点输入模式。

开发

请参考 Development.org 文档

试用

在pyim项目根目录运行shell命令 `make runemacs’ 试用最新的pyim。

只有pyim和其依赖的包被载入。用户自己的emacs配置不会被载入。

指定运行的Emacs版本用以下命令,

EMACS=~/my-whatever-directory/bin/emacs make runemacs

Emacs启动后 “M-x toggle-input-method” 或按 “C-\” 打开输入法。

Tips

pyim 有时候会出现卡顿,如何处理。

可以将云搜词和当前 buffer 搜词功能关闭试试看。

(setq pyim-cloudim nil)
(setq pyim-candidates-search-buffer-p nil)

如何快速切换 scheme

可以试试 pyim-default-scheme 命令。

关闭输入联想词功能 (默认开启)

(setq pyim-enable-shortcode nil)

形码输入法如何微调候选词序

(setq pyim-candidates-xingma-words-function #'my-func)

如何将个人词条相关信息导入和导出?

  1. 导入使用命令: pyim-dcache-import
  2. 导出使用命令: pyim-dcache-export

pyim 出现错误时,如何开启 debug 模式

(setq debug-on-error t)

将光标处的拼音或者五笔字符串转换为中文 (与 vimim 的 “点石成金” 功能类似)

(global-set-key (kbd "M-i") 'pyim-convert-string-at-point)

如何使用其它字符翻页

(define-key pyim-mode-map "." 'pyim-page-next-page)
(define-key pyim-mode-map "," 'pyim-page-previous-page)

如何用 “;” 来选择第二个候选词

(define-key pyim-mode-map ";"
  (lambda ()
    (interactive)
    (pyim-select-word-by-number 2)))

如何添加自定义拼音词库

pyim 默认没有携带任何拼音词库,用户可以使用下面几种方式,获取质量较好的拼音词库:

第一种方式 (Windows 用户推荐使用)

使用词库转换工具将其他输入法的词库转化为 pyim 使用的词库:这里只介绍 windows 平 台下的一个词库转换软件:

  1. 软件名称: imewlconverter
  2. 中文名称: 深蓝词库转换
  3. 下载地址: https://github.com/studyzy/imewlconverter
  4. 依赖平台: Microsoft .NET Framework (>= 3.5)

使用方式:

snapshots/imewlconverter-basic.gif

如果生成的词库词频不合理,可以按照下面的方式处理(非常有用的功能):

snapshots/imewlconverter-wordfreq.gif

生成词库后,

(require 'pyim-dict-manager)

然后运行 `pyim-dicts-manager’ ,按照命令提示,将转换得到的词库文件的信息添加到 `pyim-dicts’ 中,完成后运行命令 `pyim-restart’ 或者重启emacs。

第二种方式 (Linux & Unix 用户推荐使用)

E-Neo 同学编写了一个词库转换工具: scel2pyim , 可以将一个搜狗词库转换为 pyim 词库。

  1. 软件名称: scel2pyim
  2. 下载地址: https://github.com/E-Neo/scel2pyim
  3. 编写语言: C语言

第三种方式

可以了解:https://github.com/redguardtoo/pyim-tsinghua-dict

如何手动安装和管理词库

这里假设有两个词库文件:

  1. /path/to/pyim-dict1.pyim
  2. /path/to/pyim-dict2.pyim

在 ~/.emacs 文件中添加如下一行配置。

(setq pyim-dicts
      '((:name "dict1" :file "/path/to/pyim-dict1.pyim")
        (:name "dict2" :file "/path/to/pyim-dict2.pyim")))

注意事项:

  1. 只有 :file 是 必须 设置的。
  2. 必须使用词库文件的绝对路径。
  3. 词库文件的编码必须为 utf-8-unix,否则会出现乱码。

Emacs 启动时加载 pyim 词库

(add-hook 'emacs-startup-hook
          (lambda () (pyim-restart-1 t)))

将汉字字符串转换为拼音字符串

下面两个函数可以将中文字符串转换的拼音字符串或者列表,用于 emacs-lisp 编程。

  1. `pyim-cstring-to-pinyin’ (尽可能处理多音字,但有可能得到多个拼音)
  2. `pyim-cstring-to-pinyin-simple’ (尽可能处理多音字,但是只从可能的拼音中获取第一个拼音)

中文分词

pyim-cstring-utils 包含了一个简单的分词函数:`pyim-cstring-split-to-list’, 可以 将一个中文字符串分成一个词条列表,比如:

(require 'pyim-cstring-utils)
(pyim-cstring-split-to-list "我爱北京***")

其中,每一个词条列表中包含三个元素,第一个元素为词条本身,第二个元素为词条相对于 字符串的起始位置,第三个元素为词条结束位置。

另一个分词函数是 `pyim-cstring-split-to-string’, 这个函数将生成一个新的字符串, 在这个字符串中,词语之间用空格或者用户自定义的分隔符隔开。

注意,上述两个分词函数使用暴力匹配模式来分词,所以,*不能检测出* pyim 词库中不存 在的中文词条。

获取光标处的中文词条

pyim-cstring-utils 包含了一个简单的命令:`pyim-cstring-words-at-point’, 这个命令 可以得到光标处的 英文 或者 中文 词条的 *列表*,这个命令依赖分词函数: `pyim-cstring-split-to-list’。

让 `forward-word’ 和 `back-backward’ 在中文环境下正常工作

中文词语没有强制用空格分词,所以 Emacs 内置的命令 `forward-word’ 和 `backward-word’ 在中文环境不能按用户预期的样子执行,而是 forward/backward “句子” ,pyim自带的两个命令可以在中文环境下正常工作:

  1. `pyim-forward-word
  2. `pyim-backward-word

用户只需将其绑定到快捷键上就可以了,比如:

(require 'pyim-cstring-utils)
(global-set-key (kbd "M-f") 'pyim-forward-word)
(global-set-key (kbd "M-b") 'pyim-backward-word)

为 isearch 相关命令添加拼音搜索支持

pyim 安装后,可以通过下面的设置开启拼音搜索功能:

(require 'pyim-cregexp-utils)
(pyim-isearch-mode 1)

注意:这个功能有一些限制,搜索字符串中只能出现 “a-z” 和 “’”,如果有其他字符(比 如 regexp 操作符),则自动关闭拼音搜索功能。

开启这个功能后,一些 isearch 扩展有可能失效,如果遇到这种问题, 只能禁用这个 Minor-mode,然后联系 pyim 的维护者,看有没有法子实现兼容。

用户激活这个 mode 后,可以使用下面的方式 强制关闭 isearch 搜索框中文输入(即使 在 pyim 激活的时候)。

(setq-default pyim-english-input-switch-functions
              '(pyim-probe-isearch-mode))

创建一个搜索中文的 regexp

(pyim-cregexp-build ".*nihao.*")

让 ivy 支持拼音搜索候选项功能

(require 'pyim-cregexp-utils)
(setq ivy-re-builders-alist
      '((t . pyim-cregexp-ivy)))

让 avy 支持拼音搜索

(with-eval-after-load 'avy
  (defun my-avy--regex-candidates (fun regex &optional beg end pred group)
    (let ((regex (pyim-cregexp-build regex)))
      (funcall fun regex beg end pred group)))
  (advice-add 'avy--regex-candidates :around #'my-avy--regex-candidates))

让 vertico, selectrum 等补全框架,通过 orderless 支持拼音搜索候选项功能。

(defun my-orderless-regexp (orig-func component)
  (let ((result (funcall orig-func component)))
    (pyim-cregexp-build result)))

(advice-add 'orderless-regexp :around #'my-orderless-regexp)

让 pyim 在 Termux Emacs 中正常工作

Pyim 在 Termux Emacs 中,可能遇到类似下面的报错:

error in process sentinel: End of file during parsing

这可能是 Termux Emacs 中的 emacs-async 包运行不正常导致的,全拼和双拼的用户可以 使用 pyim-dregcache 后端,因为这个后端不需要 emacs-async 提供的功能。

(require 'pyim-dregcache)
(setq pyim-dcache-backend 'pyim-dregcache)

形码用户暂时没有什么好办法,可以将其他设备上的 ~/.emacs.d/pyim/dcache 目录拷贝到 Termux Emacs 对应的目录,然后设置:

(setq pyim-dcache-auto-update nil)

pyim's People

Contributors

akirak avatar albert748 avatar cireu avatar et2010 avatar geometryolife avatar hitswint avatar hungyiloo avatar jackycxh avatar jiegec avatar laampui avatar levindu avatar liu233w avatar lld2001 avatar manateelazycat avatar maxc01 avatar monnier avatar nanjj avatar realasking avatar renwenshan avatar ruijieyu avatar smallst avatar sun409 avatar tumashu avatar w0lker avatar whatacold avatar xuchunyang avatar z572 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

pyim's Issues

头脑风暴一下 Chinese-pyim 的未来

记录一下头脑中的灵光一现,也许它们会添加到未来的 Chinese-pyim 里 :-)

  • DONE 核心支持模糊音
  • 开发一个语音tooltip,闭着眼也可以打字 :-)
  • DONE 优化 guess-dict,提高 Chinese-pyim 响应速度
  • DONE 词库文件词频调整
  • DONE 扩展词库格式,添加词频统计信息
  • 通过拼音朗读中文

输入法已经不“学习”用户的习惯用法?

好像一两个月之前,pyim更新了之后,有两个比较大的变化,不知道是我自己的问题还是什么。

首先,我用arch linux,emacs是git的版本,chinese-pyim是通过packages来安装。我的配置如下:

(require 'chinese-pyim)
(setq pyim-dicts
'((:name "bigdict" :file "/home/eric/.emacs.d/pyim-bigdict.txt" :coding utf-8-unix)))
(setq pyim-use-tooltip t)

我感觉pyim之前会按照我选词组的频率来调理它的备选词的排序,是这样吗?现在好像就不这样了,比如,我打“shijian”,它给我的选择是:

1。 尸检 2。时间 (等)

不管我多少次选“时间”,地一个备选词永远是“尸检”。类似的例子很多很多(“yijing”永远是“遗精”,而不是“已经”,等)。我怎么让它“学”我的用法?

还有长句。比如我打“liubai”,在长词组里边有“六百块”和“六百万”,就是没有“六百”。我怎么教它这个?

谢谢!

无法开启tooltip

已经设置了pyim-use-tooltip,但是仍然显示在minibuffer:

pyim-not-use-tooltip

pyim-tooltip-option

另外,切换输入法时总是会提示*Chinese-pyim*可能不是一个有效的词库 buffer,忽略,不知道是什么问题?只安装了pyim-bigdict.pyim词库。

pyim-chinese-pyim-not-valid-buffer

pyim-not-valid-buffer

猜测词组的问题

我发现当我想输入比较长的词组时,pyim的反应可能不是最理想,我直接拿例子说事:

比如我想打出“朋友价”,因为我是腐败分子。我打这三个字,pyim给我是个“peng”字,让我选。然后给我一个“you”字,这个不仅跟“peng”没有关系,而且还包括很多以“you”为开头的词组,我得翻好几页才翻到“友”字。|“jia”就算又开始了。

pyim是不是可以从最长的词组开始?比如,加入它没有“pengyoujia”这个选择,是不是可以从最长的选择开始,那就是“pengyou”。“pengyou“选完了,就剩一个”jia“,就好办。

现在的情况下,我选完了“peng”,“you”就从头开始,包括很多“you”开头的很长的词组,不好找。

我不知道这样难不难实现,反正我先提供一点反馈!

添加pause和resume函数

org-mode中使用speed-command时,每次还需要再切换到默认输入法,总感觉还是有点麻烦。
所以希望能添加两个函数和一个hook,比如这样:

(add-hook 'pyim-mode-hook 
      (lambda ()
              (if (bolp) (looking-at org-heading-regexp)
                     (pause-pyim-mode)
               (resume-pyim-mode)                      

pyim-start: Symbol's value as variable is void: pyim-automatic-generate-word

无法启动,提示pyim-automatic-generate-word 没有定义:(最新的代码 4958540

chinese-pyim git:(master) ack pyim-automatic-generate-word
chinese-pyim.el
1883:  (when pyim-automatic-generate-word
1884:    (message "Chinese-pyim 自动组词功能已经开启,具体细节参考: `pyim-automatic-generate-word'。"))

chinese-pyim.org
2020:  (when pyim-automatic-generate-word
2021:    (message "Chinese-pyim 自动组词功能已经开启,具体细节参考: `pyim-automatic-generate-word'。"))

通过看 git log,pyim-automatic-generate-word 是在 781b007 引入(定义)的,不清楚什么时候被去掉了。又或者有关这个变量的功能已经删掉了,但是忘记把这个变量删掉了(因为目前这个变量没有实际作用)。

C-; NOT work in console

按照您的教程

(global-set-key (kbd "C-;") 'pyim-toggle-full-width-punctuation)

在console (没有X)下无法实现。C-h k: C-;也没有任何输出。

melpa package warn and error

build.el:8:1:Error: Cannot open load file: no such file or directory, commander
...

lentic-asciidoc.el:166:1:Warning: the following functions might not be defined at runtime:
    lentic-commented-asciidoc-configuration,
    lentic-uncommented-asciidoc-configuration
...
lentic-block.el:290:1:Warning: Unused lexical argument `e'
lentic-block.el:401:1:Warning: Unused lexical argument `e'

...
In lentic-dev-enable-insertion-marking:
lentic-dev.el:171:11:Warning: assignment to free variable
    `lentic-enable-insertion-marking'

...
lentic-dev.el:178:1:Warning: the following functions are not known to be defined:
    lentic-mode-after-save-hook, lentic-mode-buffer-list-update-hook

...
lentic-doc.el:85:1:Warning: Unused lexical variable `org-export-htmlize-generate-css'

关于用pyim-article2dict-words函数生成词库文件

我在网上找到了搜狗的核心词库,只有词没有拼音,想利用这个命令为词库文件添加拼音码但出了一点意外情况:

在我指定的空文件new.pyim里什么都没有,但是确实生成了分别以ConvertStage-xxxxxxx-CleanStage-xxxxxxx-开头的两个文件,其中Convert开头的文件包含拼音码。虽然也得到了词库,但是我想这个应该不是预期的行为。

收集中英文自动切换探测函数

为了解决 #15 提出的问题,我添加了变量 pyim-english-input-switch-function ,用于探测
当前编辑环境,自动开启或者关闭英文输入模式:

比如:当开启 org-mode speed commands 时,下面这个探测函数可以自动切换中英文输入。

(defun pyim-org-speed-commands-active-p ()
  (and (string= major-mode "org-mode")
       (bolp) (looking-at org-heading-regexp)
       org-use-speed-commands))

(setq pyim-english-input-switch-function
      'pyim-org-speed-commands-active-p)

大家可以在下面贴出适用于其他编辑环境的探测程序: 比如:evil, isearch,等等。。。。

添加一个类似 package 的词库管理界面。

添加一个类似 package 的词库管理界面。最起码有以下几个功能:

  1. 显示所有的可使用的词库信息。
  2. 显示正在使用的词库信息。
  3. 对正在使用的词库信息优先级进行排序。
  4. 添加和删除词库信息。

从 chinese-pyim.org 生成文件不匹配

我在没有修改任何代码的情况下(具体是 4958540),用 M-x pyim-devtools-tangle-and-export 生成的 README.mdchinese-pyim.el 与你的不一样,具体的不一样见: https://github.com/xuchunyang/chinese-pyim/commit/2bf30b9a7f137e5433ebfa71f433678ea5dca005

我的相关的 Emacs 配置:

;;; init.el --- Sample `user-init-file' for chinese-pyim dev

;; Use git version of org-mode
(add-to-list 'load-path "~/repos/org-mode/lisp")
(add-to-list 'load-path "~/repos/org-mode/contrib/lisp")

(require 'org)

(setq org-edit-src-content-indentation 0)
(org-babel-do-load-languages 'org-babel-load-languages
                             '((emacs-lisp . t)))
(setq org-confirm-babel-evaluate nil)

(add-to-list 'load-path "~/wip/chinese-pyim/")

(require 'chinese-pyim)
(require 'chinese-pyim-devtools)

(setq pyim-dicts '((:name "中文拼音词库" :file "/Users/xcy/Desktop/pyim-bigdict.txt" :coding utf-8-unix)))

(setq default-input-method "chinese-pyim")

PS. 我的 Emacs 版本为 25.0.50.1,org-mode 是最新的(git master)。

能不能设置一个开关,可以将mini buffer中输入法屏蔽?

这个输入法非常赞!但有一个问题:
当输入法开启时,如果C-h v,选词会出现在mini buffer中,对英文变量名的输入造成影响。

但是除了这种情况之外,minibuffer中的选词还是非常有用的,搜索替换中文都很好用。是不是可以建一个列表,凡是不需要输入法的函数就丢进去?

我做了一个搜狗核心词库希望贡献出来

多亏了 @tumashu 大神的帮忙,终于把搜狗核心词库给转成了pyim格式,我又将7000常用汉字加了进去,形成了新的pyim词库 pyim-sgcore.pyim

为了完善这个词库,我建了一个本地git repository,暂时还没有push到github。我会不断完善它的。

我建这个词库的初衷是因为那个Bigdict实在是big,好多词我都用不到。。。这个搜狗核心词库我初步试了一下还挺好用的。。。

还是中文 README.md 换行变空格的问题

这个问题我在你的另一个项目中已经提过一次了:tumashu/cnfonts#5

跟 README.md 比起来,我更愿意直接在 Github 看文档的,而在中文之间莫名其妙的多了一个空格破坏了句子的连贯性,读起来比较困难。

我已经在 tumashu/cnfonts#5 中提到了一个虽然不聪明,但简单且有效的方法:不考虑最长行限制,也就是说不在不需要的时候换行。具体而言:就是把生成的 README.md 中不需要的换行符删掉,可以手动删除,或者用query-replace-regexp,比如:

\(.\)\n\([^\n]\) -> \1\2

就是把中间的\n删掉,当然有些条件下不应该换,需要手动决定是否替换。估计也就一两分钟的事(当然每次更新 README.md 都要重新做一次)。

总而言之,我觉得这是一个烦人但是很容易解决的问题,你怎么看?

No Chinese characters in tooltip

Hi,

I am trying to use this package. This is how it is setup in my configuration:

(use-package chinese-pyim ; Chinese Pinyin Input Method
  :ensure t
  :init (progn
          (require 'chinese-pyim)
          (require 'chinese-pyim-company)
          (setq pyim-company-predict-words-number 10))
  :bind ("C-;" . pyim-toggle-full-width-punctuation))

When I switch input method to chinese-pyim, this message appears:

*Chinese-pyim* 可能不是一个有效的词库 buffer,忽略。

Also, the tooltip does not show Chinese characters:
2015-06-05-111002_1366x768_scrot
I can input Chinese characters using chinese-py input method, though.

Literate Programming 在本项目中的问题

目前,我觉得有以下两个问题:

  1. 可能由于每个开发者的 Emacs 配置和使用到的扩展及 Emacs 版本的不同,导致不能自动生成完全相同结果。(见 #22
  2. 由于 Git 跟踪了自动生成的文件,commit、diff 中必然就会出现重复。

问题 1 应该比较好(暂时地)解决,但是很可能会复发。而问题 2 则不好解决,我能想到的解决方法有:

  1. 开一个新的分支,比如叫 develop ,在这个分支中只跟踪 chinese-pyim.org,其它文件都由此生成,不生成它们。当开发到一个新版本时,再合并到 master 中,此时再自动生成其它文件[1]。
  2. 放弃 Literate Programming,换回原来的方法。

大家怎么看?

[1]:因为 MELPA 会用 master 分支,所以需要有比较稳定的 *.el 文件,同时也不宜频繁的更新 master

pyim 与 isearch 冲突?

遇到了一个很诡异的问题。

init.el 里面添加 (require 'chinese-pyim) 后,isearch 输入 a, e, i, o, u 几个韵母时出错,
提示 (wrong-type-argument stringp nil)。其他字母能用。

直接用 eval 执行也是一样的结果。

chinese-pyim-20160121无法使用gtk的tooltip

升级之前chinese-pyim能使用系统的gtk的tooltips,但升级之后貌似不能用了,而且打字很卡顿,没有了之前的流畅感。

qq 20160126122231

对chinese-pyim唯一的配置是(setq pyim-enable-words-predict nil)

Mac OSX上的emacs无法正常使用

chinese-pyim在公司的Linux上可以很好的运行,但是在家中的Mac上却不行。Mac使用10.10系统,emacs版本为24.3.1。现象为pyim输入法状态下,输入字符时输入栏中没有相应汉字出现,而使用之前的eim时是没有问题的。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.