{"id":13711938,"url":"https://github.com/wenbinye/emacs-eim","last_synced_at":"2025-07-16T22:32:35.958Z","repository":{"id":1930264,"uuid":"2858852","full_name":"wenbinye/emacs-eim","owner":"wenbinye","description":"Emacs Input Method","archived":false,"fork":false,"pushed_at":"2016-09-18T07:26:56.000Z","size":1789,"stargazers_count":116,"open_issues_count":2,"forks_count":29,"subscribers_count":13,"default_branch":"master","last_synced_at":"2025-05-21T09:12:38.591Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Emacs Lisp","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/wenbinye.png","metadata":{"files":{"readme":"README.org","changelog":"ChangeLog","contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2011-11-27T02:12:52.000Z","updated_at":"2025-03-23T03:39:24.000Z","dependencies_parsed_at":"2022-09-09T05:21:33.645Z","dependency_job_id":null,"html_url":"https://github.com/wenbinye/emacs-eim","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/wenbinye/emacs-eim","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wenbinye%2Femacs-eim","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wenbinye%2Femacs-eim/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wenbinye%2Femacs-eim/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wenbinye%2Femacs-eim/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/wenbinye","download_url":"https://codeload.github.com/wenbinye/emacs-eim/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wenbinye%2Femacs-eim/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":265545961,"owners_count":23785885,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-08-02T23:01:13.096Z","updated_at":"2025-07-16T22:32:35.940Z","avatar_url":"https://github.com/wenbinye.png","language":"Emacs Lisp","funding_links":[],"categories":["Emacs Lisp"],"sub_categories":[],"readme":"#+TITLE: Eim -- Emacs Input Method\n#+OPTIONS: toc:nil num:t todo:t pri:nil tags:nil ^:nil TeX:nil\n\n* 特点\n** 五笔\n   1. 临时拼音输入汉字。用 z 开头可以输入汉字的拼音并查看其五笔字码。\n   2. 反查五笔。用 M-x eim-describe-char 可以查看光标处汉字的五笔字码。\n   3. 加入自造词。M-x eim-table-add-word，默认是光标前的两个汉字。用 C-a 和 C-e\n      调整。\n   4. 可以保存选择的历史。\n\n** 拼音\n   1. 自动调频\n   2. 自动加入输入的词组。\n   3. 不必输入词组的全部拼音，比较智能的查找词组。\n\n   在数字后输入标点会不转换成中文标点符号，这是为了方便输入序号和数字。如果需要\n   作为中文标点符号，再次输入这个标点就好了。可以用 ~M-x eim-punc-translate-toggle~\n   命令切换输入中英文标点。\n\n* 安装\n\n  如果有 make 命令，可以用 make 和 make install 命令安装。可以修改 PREFIX 使文件\n  安装到指定位置。Windows 下可以直接设置 ELISPDIR。如果没有 make 命令，可以直接\n  复制 EL 和 EXTRAFILES 到 load-path 里的目录里，推荐是在 site-lisp/eim 目录中。\n\n  在 .emacs 加入这几行就行了。五笔输入法要修改 eim-wb-history-file 和\n  eim-wb-user-file 的位置。eim-wb-history-file 要修改成能保存的文件名即\n  可。eim-wb-user-file 可以不修改，如果不改则使用默认的 mywb.txt。如果修\n  改则可以自己指定一个文件。文件格式参考 mywb.txt。\n\n  #+BEGIN_SRC emacs-lisp -n -r\n    (add-to-list 'load-path \"~/.emacs.d/site-lisp/eim\")\n    (autoload 'eim-use-package \"eim\" \"Another emacs input method\")\n    ;; Tooltip 暂时还不好用\n    (setq eim-use-tooltip nil)\n\n    (register-input-method\n     \"eim-wb\" \"euc-cn\" 'eim-use-package\n     \"五笔\" \"汉字五笔输入法\" \"wb.txt\")\n    (register-input-method\n     \"eim-py\" \"euc-cn\" 'eim-use-package\n     \"拼音\" \"汉字拼音输入法\" \"py.txt\")\n\n    ;; 用 ; 暂时输入英文\n    (require 'eim-extra)\n    (global-set-key \";\" 'eim-insert-ascii)\n  #+END_SRC\n\n\n  注意，如果所有文件都在 load-path 里的某个目录中，就能找到（如果没有同名文件的\n  话），否则，请在文件或者配置中使用文件全名。\n\n* 常用的按键：\n  |------+----------|\n  | 按键 | 功能     |\n  |------+----------|\n  | C-n  | 向下翻页 |\n  | C-p  | 向上翻页 |\n  | C-c  | 取消输入 |\n  | SPC  | 确定输入 |\n  | RET  | 字母上屏 |\n  |------+----------|\n\n  按键绑定可以用 C-h I (M-x describe-input-method) 查看。\n\n* 其余无关文件\n\n  - charpy.st        用 Storable 模块保存的汉字拼音列表\n  - pychr.txt        原始的汉字拼音列表\n  - pyword2tbl.pl    用于把词组文件转换成可用的词库的 perl 程序\n  - sanguo.txt       一个测试文件\n  - mergepy.pl       可以更新词库的程序。\n\n  详细说明一下 mergepy.pl 的用法。如果我发布一个新版本的拼音词库，要使用这个词库\n  又不想丢失自己词库里新造的词和词频信息，这时就可以用这个程序。在命令行中用这样\n  的命令：\n\n  ~$ perl mergepy.pl 自己的词库文件 新词库文件 -o py-new.txt~\n\n  然后把自己的词库文件备份或者删除，把 py-new.txt 改名成 py.txt 就行了。\n\n* 增加汉字\n** 五笔输入法\n   对于五笔输入法，可以选择导入 eim-wb-gbk，只要在 .emacs 里加上：\n\n   ~(setq eim-wb-use-gbk t)~\n\n   另一个选择是在 eim-wb-user-file 里加上需要的汉字。这样基本上是够用的。一般的\n   输入 gbk 汉字是没有问题，因为wb.txt 中已经加入了 fcitx 中所有的 gbk 汉字，只\n   是如果需要造词时，不导入 gbk 汉字是无法自动造词的。\n\n** 拼音输入法\n   对于拼音输入法，可以通过这样一个折衷的办法，在 .emacs 中加上：\n\n   #+BEGIN_SRC emacs-lisp -n -r\n     (add-hook 'eim-py-load-hook\n               (lambda ()\n                 (eim-py-make-char-table\n                  '(\n                    (\"ye\" \"葉\")\n                    (\"rong\" \"镕\")\n                    ))))\n   #+END_SRC\n\n   然后在 otherpy.txt 的 [Table] 一行后加上：\n\n   ye 葉\n   rong 镕\n\n   ~M-x eim-build-table~\n\n   这样应该就能正常使用了。\n\n* 如何定制一个输入法\n\n** 初级定制方法：\n   例如，要设置按键，可以这样：\n\n   #+BEGIN_SRC emacs-lisp -n -r\n     (defun my-eim-wb-activate-function ()\n       (add-hook 'eim-active-hook\n                 (lambda ()\n                   (let ((map (eim-mode-map)))\n                     (define-key map \"-\" 'eim-previous-page)\n                     (define-key map \"=\" 'eim-next-page)))))\n   #+END_SRC\n\n   然后要这样 register-input-method：\n\n   #+BEGIN_SRC emacs-lisp -n -r\n     (register-input-method\n      \"eim-wb\" \"euc-cn\" 'eim-use-package\n      \"五笔\" \"汉字五笔输入法\" \"wb.txt\"\n      'my-eim-wb-activate-function)\n   #+END_SRC\n\n   或者这样：\n\n   #+BEGIN_SRC emacs-lisp -n -r\n     (add-hook 'eim-wb-load-hook\n               (lambda ()\n                 (let ((map (eim-mode-map)))\n                   (define-key map \"-\" 'eim-previous-page)\n                   (define-key map \"=\" 'eim-next-page))))\n   #+END_SRC\n\n   这样不需要再写一个函数。\n\n   拼音输入法是类似的。\n\n   对于五笔输入法，如果不想记录上次输入位置，设置 eim-wb-history-file 为nil。\n\n** 高级定制方法：\n   eim-use-package 可以接受两个参数，一个是 word-file，给出一个词库，一个是\n   active-function，这个 active-function 是在每次切换时都要调用的。如果想只在第\n   一次启动输入法时调用一些命令，最好定义一个变量，在启动之后设置为 t，或者加入\n   到 eim-load-hook 中。在调用这个命令时，eim-current-package可能还没有定义（第\n   一次启动），这样，如果要修改或者使用\n\n   eim-current-package 中的变量，就要用 eim-load-hook 或者eim-active-hook或者\n   eim-active-function。eim-load-hook 只在第一次启动输入法时调用，\n   eim-active-function 和 eim-active-hook 每次都要调用。一般来说，如果要修改按键\n   绑定，就加入到 eim-load-hook 中。如果要修改 eim-page-length这样的局部变量，使\n   用 eim-active-function 或者 eim-active-hook。eim-active-function 是为有专门的\n   lib 的输入法设计的，这样不用在register-input-method 中加入一个\n   active-function。而 eim-active-hook是为用户定制设计的，这样不用专门写到一个文\n   件中。设置eim-active-function 使用eim-set-active-function 函数。\n\n\n   eim-stop-function: 这个函数是用于决定是否停止转换。比如五笔中可以设置当\n   eim-current-key 大于 4时就停止。默认是 nil，也就是说可以无限的输入。\n\n   eim-translate-function:当输入的字符是第一个字符（eim-current-key为空）时，如\n   果不在eim-first-char 中，或者不是第一个字符，但是不在 eim-total-char 中，会停\n   止转换。这时，会调用这个函数来处理最后一个输入字符。通常用这个函数来输入标点。\n\n   eim-add-completion-function:通过这个函数来为当前的词条添加更多的选项。当往后\n   翻页超出直接查找到的词条时，会调用这个函数，如果添加结束，返回 t，还需要再添\n   加返回 nil。我写的五笔输入法用这个函数时是直接一次性加完。如果要每次添加几个\n   的话，一种办法就是在 eim-current-choice 中加入一个新元素，记录这次搜索到哪个\n   位置。下次从这个位置继续，直到结束，比较麻烦。而且，一次加完的速度也很快，就\n   用简单的办法好了。\n\n   eim-format-function: eim-current-choice 中的第一个元素是通常是一个字符串列表。\n   但是也可以含有 list。这时需要给出一个显示的函数。比如我在五笔输入法中搜索出可\n   能的单字或者输入拼音时显示五笔字根。这个函数要接受四个参数，分别是当前输入的\n   字符串 eim-current-key，当前页数，所有页数，这一页的选项。\n\n   eim-handle-function:这个函数是决定输入法行为的核心函数。通常要完成的任务是：\n   1. 决定是否要继续转换。\n   2. 设置 eim-current-choice, eim-current-pos, eim-current-str,\n      eim-guidance-str, 最后调用 eim-show 显示结果。通常如果 eim-current-choice\n      的 CAR 不为空的话，就调用 eim-format-page 显示。 如果为空，则设置相应的\n      eim-current-str 和 eim-guidance-str，调用eim-show 显示。\n\n   参考 eim-wb 和 eim-py 的写法。\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwenbinye%2Femacs-eim","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwenbinye%2Femacs-eim","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwenbinye%2Femacs-eim/lists"}