#+TITLE: liberime [开发中]

* 简介

liberime 是一个 Emacs 动态模块，提供了 librime 库绑定。目前只实现了几
个方法，理想情况是暴露所有 librime 的 API 到 emacs-lisp.

* 依赖
1. Emacs 需要启用动态模块支持，一般是在编译的时候使用 --with-modules
   选项。
2. librime 版本 > 1.3.2

* 编译
** Linux 系统下编译 liberime:

   #+BEGIN_SRC shell
   make liberime-core
   ls build/

   # try
   make test
   #+END_SRC

** Mac (Darwin) 系统下编译 liberime:
1. Mac 下编译 librime, 需要安装 Xcode (good luck), 可以参考：
   [[https://github.com/rime/librime/blob/master/README-mac.md]] 
2. 环境变量 RIME_PATH 的取值设置为 librime 所在的目录，比如：
   #+begin_src shell
   export RIME_PATH=~/Develop/others/librime
   #+end_src
3. 编译 liberime:

   #+BEGIN_SRC shell
   make liberime-core
   ls build/

   # try
   make test
   #+END_SRC

** Windows 系统下使用 msys2 编译 liberime
1. 打开 MSYS2 MinGW 终端
2. 切换到 liberime 所在的目录
3. 运行下面的命令

   #+BEGIN_SRC shell
   ./msys2-build.sh
   #+END_SRC

4. =./msys2-build.sh= 命令有许多选项，可以使用下面的命令获取帮助

   #+BEGIN_SRC shell
   ./msys2-build.sh --help
   #+END_SRC

注意事项：

1. =liberime-core.dll= 加载有时候会报错，遇到这种情况，首先应该检查环
   境变量 =PATH= 的设置，确保 =librime.dll= 可以通过 PATH 找到。
2. 如果你用的是 Windows msys2 编译的 liberime，不要将 shared_data_dir
   设置为小狼毫的 data 目录，因为小狼毫使用 MSVC 编译的，OpenCC 的
   .ocd 文件格式不同。

* 使用
** Emacs 配置
#+BEGIN_SRC emacs-lisp
(require 'pyim)
(require 'liberime nil t)
(setq default-input-method "pyim")
(with-eval-after-load "liberime"
  (liberime-select-schema "luna_pinyin_simp")
  (setq pyim-default-scheme 'rime-quanpin))
#+END_SRC

除了使用这个 hook 来选择 schema，用户也可以通过 Rime 配置文件 (默认
为：~/.emacs.d/rime/default.custom.yaml) 来设置默认 schema，设置方式可
以参考：https://gist.github.com/merrickluo/553f39c131d0eb717cd59f72c9d4b60d

注意事项：
1. 一般情况下，liberime 和 [[https://github.com/tumashu/pyim][pyim]] 配合使用
2. 默认情况下，liberime 会自动搜索 rime 共享数据（shared_data_dir）和
   rime 用户数据（user_data_dir）, 用户可以使用下面两个变量强制设置：
   1. liberime-shared-data-dir
   2. liberime-user-data-dir

** 部署 Rime

手动修改 librime 配置后，可以调用 ~(liberime-deploy)~ 重新部署。

** 同步 Rime 词库
使用 liberime 存在词库跟系统输入法不一致的问题，可以使用 rime 词库同步
功能来变相的解决。

1. 设置 sync_dir 目录 (默认修改 $HOME/.emacs.d/rime/installation.yaml 文件)
2. 运行 liberime-sync 函数，比如：将其加入 ~after-init-hook~ 中。
   #+begin_src emacs-lisp
   (add-hook 'after-init-hook #'liberime-sync)
   #+end_src

Rime 同步功能的其它信息可以参考：[[https://github.com/rime/home/wiki/UserGuide#%E5%90%8C%E6%AD%A5%E7%94%A8%E6%88%B6%E8%B3%87%E6%96%99][Rime 同步用户资料]]。

