emacs-eim
文件大小: unknow
源码售价: 5 个金币 积分规则     积分充值
资源说明:Emacs Input Method
#+TITLE: Eim -- Emacs Input Method
#+OPTIONS: toc:nil num:t todo:t pri:nil tags:nil ^:nil TeX:nil

* 特点
** 五笔
   1. 临时拼音输入汉字。用 z 开头可以输入汉字的拼音并查看其五笔字码。
   2. 反查五笔。用 M-x eim-describe-char 可以查看光标处汉字的五笔字码。
   3. 加入自造词。M-x eim-table-add-word,默认是光标前的两个汉字。用 C-a 和 C-e
      调整。
   4. 可以保存选择的历史。

** 拼音
   1. 自动调频
   2. 自动加入输入的词组。
   3. 不必输入词组的全部拼音,比较智能的查找词组。

   在数字后输入标点会不转换成中文标点符号,这是为了方便输入序号和数字。如果需要
   作为中文标点符号,再次输入这个标点就好了。可以用 ~M-x eim-punc-translate-toggle~
   命令切换输入中英文标点。

* 安装

  如果有 make 命令,可以用 make 和 make install 命令安装。可以修改 PREFIX 使文件
  安装到指定位置。Windows 下可以直接设置 ELISPDIR。如果没有 make 命令,可以直接
  复制 EL 和 EXTRAFILES 到 load-path 里的目录里,推荐是在 site-lisp/eim 目录中。

  在 .emacs 加入这几行就行了。五笔输入法要修改 eim-wb-history-file 和
  eim-wb-user-file 的位置。eim-wb-history-file 要修改成能保存的文件名即
  可。eim-wb-user-file 可以不修改,如果不改则使用默认的 mywb.txt。如果修
  改则可以自己指定一个文件。文件格式参考 mywb.txt。

  #+BEGIN_SRC emacs-lisp -n -r
    (add-to-list 'load-path "~/.emacs.d/site-lisp/eim")
    (autoload 'eim-use-package "eim" "Another emacs input method")
    ;; Tooltip 暂时还不好用
    (setq eim-use-tooltip nil)

    (register-input-method
     "eim-wb" "euc-cn" 'eim-use-package
     "五笔" "汉字五笔输入法" "wb.txt")
    (register-input-method
     "eim-py" "euc-cn" 'eim-use-package
     "拼音" "汉字拼音输入法" "py.txt")

    ;; 用 ; 暂时输入英文
    (require 'eim-extra)
    (global-set-key ";" 'eim-insert-ascii)
  #+END_SRC


  注意,如果所有文件都在 load-path 里的某个目录中,就能找到(如果没有同名文件的
  话),否则,请在文件或者配置中使用文件全名。

* 常用的按键:
  |------+----------|
  | 按键 | 功能     |
  |------+----------|
  | C-n  | 向下翻页 |
  | C-p  | 向上翻页 |
  | C-c  | 取消输入 |
  | SPC  | 确定输入 |
  | RET  | 字母上屏 |
  |------+----------|

  按键绑定可以用 C-h I (M-x describe-input-method) 查看。

* 其余无关文件

  - charpy.st        用 Storable 模块保存的汉字拼音列表
  - pychr.txt        原始的汉字拼音列表
  - pyword2tbl.pl    用于把词组文件转换成可用的词库的 perl 程序
  - sanguo.txt       一个测试文件
  - mergepy.pl       可以更新词库的程序。

  详细说明一下 mergepy.pl 的用法。如果我发布一个新版本的拼音词库,要使用这个词库
  又不想丢失自己词库里新造的词和词频信息,这时就可以用这个程序。在命令行中用这样
  的命令:

  ~$ perl mergepy.pl 自己的词库文件 新词库文件 -o py-new.txt~

  然后把自己的词库文件备份或者删除,把 py-new.txt 改名成 py.txt 就行了。

* 增加汉字
** 五笔输入法
   对于五笔输入法,可以选择导入 eim-wb-gbk,只要在 .emacs 里加上:

   ~(setq eim-wb-use-gbk t)~

   另一个选择是在 eim-wb-user-file 里加上需要的汉字。这样基本上是够用的。一般的
   输入 gbk 汉字是没有问题,因为wb.txt 中已经加入了 fcitx 中所有的 gbk 汉字,只
   是如果需要造词时,不导入 gbk 汉字是无法自动造词的。

** 拼音输入法
   对于拼音输入法,可以通过这样一个折衷的办法,在 .emacs 中加上:

   #+BEGIN_SRC emacs-lisp -n -r
     (add-hook 'eim-py-load-hook
               (lambda ()
                 (eim-py-make-char-table
                  '(
                    ("ye" "葉")
                    ("rong" "镕")
                    ))))
   #+END_SRC

   然后在 otherpy.txt 的 [Table] 一行后加上:

   ye 葉
   rong 镕

   ~M-x eim-build-table~

   这样应该就能正常使用了。

* 如何定制一个输入法

** 初级定制方法:
   例如,要设置按键,可以这样:

   #+BEGIN_SRC emacs-lisp -n -r
     (defun my-eim-wb-activate-function ()
       (add-hook 'eim-active-hook
                 (lambda ()
                   (let ((map (eim-mode-map)))
                     (define-key map "-" 'eim-previous-page)
                     (define-key map "=" 'eim-next-page)))))
   #+END_SRC

   然后要这样 register-input-method:

   #+BEGIN_SRC emacs-lisp -n -r
     (register-input-method
      "eim-wb" "euc-cn" 'eim-use-package
      "五笔" "汉字五笔输入法" "wb.txt"
      'my-eim-wb-activate-function)
   #+END_SRC

   或者这样:

   #+BEGIN_SRC emacs-lisp -n -r
     (add-hook 'eim-wb-load-hook
               (lambda ()
                 (let ((map (eim-mode-map)))
                   (define-key map "-" 'eim-previous-page)
                   (define-key map "=" 'eim-next-page))))
   #+END_SRC

   这样不需要再写一个函数。

   拼音输入法是类似的。

   对于五笔输入法,如果不想记录上次输入位置,设置 eim-wb-history-file 为nil。

** 高级定制方法:
   eim-use-package 可以接受两个参数,一个是 word-file,给出一个词库,一个是
   active-function,这个 active-function 是在每次切换时都要调用的。如果想只在第
   一次启动输入法时调用一些命令,最好定义一个变量,在启动之后设置为 t,或者加入
   到 eim-load-hook 中。在调用这个命令时,eim-current-package可能还没有定义(第
   一次启动),这样,如果要修改或者使用

   eim-current-package 中的变量,就要用 eim-load-hook 或者eim-active-hook或者
   eim-active-function。eim-load-hook 只在第一次启动输入法时调用,
   eim-active-function 和 eim-active-hook 每次都要调用。一般来说,如果要修改按键
   绑定,就加入到 eim-load-hook 中。如果要修改 eim-page-length这样的局部变量,使
   用 eim-active-function 或者 eim-active-hook。eim-active-function 是为有专门的
   lib 的输入法设计的,这样不用在register-input-method 中加入一个
   active-function。而 eim-active-hook是为用户定制设计的,这样不用专门写到一个文
   件中。设置eim-active-function 使用eim-set-active-function 函数。


   eim-stop-function: 这个函数是用于决定是否停止转换。比如五笔中可以设置当
   eim-current-key 大于 4时就停止。默认是 nil,也就是说可以无限的输入。

   eim-translate-function:当输入的字符是第一个字符(eim-current-key为空)时,如
   果不在eim-first-char 中,或者不是第一个字符,但是不在 eim-total-char 中,会停
   止转换。这时,会调用这个函数来处理最后一个输入字符。通常用这个函数来输入标点。

   eim-add-completion-function:通过这个函数来为当前的词条添加更多的选项。当往后
   翻页超出直接查找到的词条时,会调用这个函数,如果添加结束,返回 t,还需要再添
   加返回 nil。我写的五笔输入法用这个函数时是直接一次性加完。如果要每次添加几个
   的话,一种办法就是在 eim-current-choice 中加入一个新元素,记录这次搜索到哪个
   位置。下次从这个位置继续,直到结束,比较麻烦。而且,一次加完的速度也很快,就
   用简单的办法好了。

   eim-format-function: eim-current-choice 中的第一个元素是通常是一个字符串列表。
   但是也可以含有 list。这时需要给出一个显示的函数。比如我在五笔输入法中搜索出可
   能的单字或者输入拼音时显示五笔字根。这个函数要接受四个参数,分别是当前输入的
   字符串 eim-current-key,当前页数,所有页数,这一页的选项。

   eim-handle-function:这个函数是决定输入法行为的核心函数。通常要完成的任务是:
   1. 决定是否要继续转换。
   2. 设置 eim-current-choice, eim-current-pos, eim-current-str,
      eim-guidance-str, 最后调用 eim-show 显示结果。通常如果 eim-current-choice
      的 CAR 不为空的话,就调用 eim-format-page 显示。 如果为空,则设置相应的
      eim-current-str 和 eim-guidance-str,调用eim-show 显示。

   参考 eim-wb 和 eim-py 的写法。

本源码包内暂不包含可直接显示的源代码文件,请下载源码包。