在Mac版的Emacs中使用RIME输入法

问个很蠢的问题,这和用外置的 Squirrel 相比有什么优势么🤣

可以像我这样用快捷键激活 insert-translated-name.el 后,写入中文,自动翻译成英文。 写中文的时候,就自动激活成中文状态,按空格翻译后,自动切换成英文。

外部输入法你就要手动切换输入法状态,内置的可以直接自动切换输入法状态,而且可以通过光标颜色就知道当前是什么状态。

1 个赞
make liberime

这一步有问题吧,我看没有 liberime 这个 rule,有 all 和 librime-static 执行 make all 的时候,需要好几个依赖 cmake, boost, glog, gtest 到了 gtest 没找到 brew 里面的安装包,不知道后面还有什么。。。。。

你的系统是什么版本的?或许可以直接分享那个 .so 出来?

要在 liberime 目录中执行 make lierime, 而不是 librime 目录

你还是直接编译比较好

可以了。。。居然有这个差别。。。 我看了一下 make lierime 找的是这两个,只要这两个路径对就可以

$ENV{RIME_PATH}/xbuild/lib/Release/
$ENV{RIME_PATH}/src

哈哈哈,你一定是没有认真看我写的文档。 :wink:

1 个赞
Debugger entered--Lisp error: (file-error "Cannot open load file" "Not a directory" "liberime")
  require(liberime)
  eval((require (quote liberime)) nil)
  elisp--eval-last-sexp(nil)
  eval-last-sexp(nil)
  funcall-interactively(eval-last-sexp nil)
  call-interactively(eval-last-sexp nil nil)
  command-execute(eval-last-sexp)

require 的时候提示这个错误

(setq load-path (cons (file-truename "~/.emacs.d/") load-path))
(require 'liberime)

/Users/wd/.emacs.d/liberime.so 文件是存在的,这个可能是什么问题呢?

似乎是我这里没有动态加在这个的功能? 我试了一下 (module-load "~/.emacs.d/liberime.so") 也报错的,void-function

似乎是的,我用brew 装的 emacs-mac,看了一下有一个编译参数 --with-modules Build with dynamic modules support

(liberime-select-schema "luna_pinyin_simp") 除了luna_pinyin_simp还有别的什么可选值?

我用仓颉输入,要怎么设罝?

(setq pyim-default-scheme 'cangjie) 并没有起作用。

thx.

可以用 (liberime-get-schema-list), 查看 liberime-select-schema 的其它可选值。

折腾了一下,总算可以用了。弄好了小鹤双拼。

默认现在不自带小鹤的方案,需要先复制一个小鹤的方案到 /Library/Input Methods/Squirrel.app/Contents/SharedSupport 里面。

然后还需要设置一下 ~/.emacs.d/pyim/rime/default.custom.yaml 里面增加这个方案的选项,主要是 schema_list 那个。

patch:
     schema_list:
         - schema: double_pinyin_flypy
     "menu/page_size": 50
     "speller/auto_select": false
     "speller/auto_select_unique_candidate": false

然后执行 (liberime-get-schema-list) 可以确认下是不是 ok 了。

然后是 emacs 设置,我需要自己 module-load 我也不知道怎么回事,不需要的话可以不用。

(module-load "/Users/wd/.emacs.d/liberime.so")
(use-package liberime
  (liberime-start "/Library/Input Methods/Squirrel.app/Contents/SharedSupport" (file-truename "~/.emacs.d/pyim/rime/"))

  (liberime-select-schema "double_pinyin_flypy")
  (setq pyim-default-scheme 'rime))

然后可以 C-\ 启用一下输入法看看,是不是可以输入了,这个时候还有一个问题,候选里面好多繁体,如果不需要可以写一个 ~/.emacs.d/pyim/rime/double_pinyin_flypy.custom.yaml 里面写上

patch:
    "switches/@2/reset" : 1

也可以自己加其他设置,反正这个目录里面就是 rime 的配置了,和那个独立的配置的逻辑一样。

2 个赞

报个道,今天也配置好了 pyim + librime 并且使用上了 极点五笔拼音输入法,加上pyim的 probe函数,现在在Emacs里面使用中文输入法完全不用切换了。 好爽。

同时,因为我是evil用户,当从normal模式切换到insert模式的时候,我希望知道当前输入法的状态,我写了几个函数支持这个功能:

    (eval-and-compile
      (if (fboundp 'window-inside-edges)
          ;; Emacs devel.
          (defalias 'th-window-edges
            'window-inside-edges)
        ;; Emacs 21
        (defalias 'th-window-edges
          'window-edges)
        ))

    (defun th-point-position ()
      "Return the location of POINT as positioned on the selected frame.
  Return a cons cell (X . Y)"
      (let* ((w (selected-window))
             (f (selected-frame))
             (edges (th-window-edges w))
             (col (current-column))
             (row (count-lines (window-start w) (point)))
             (x (+ (car edges) col))
             (y (+ (car (cdr edges)) row)))
        (cons x y)))


    (defun display-current-input-method-title (arg1 &optional arg2 arg3)
      "display current input method name"
      (when current-input-method-title
        (set-mouse-position (selected-frame) (car (th-point-position)) (cdr (th-point-position)))
        (x-show-tip current-input-method-title (selected-frame) nil 1  20 -30)))

    (advice-add 'evil-insert :after 'display-current-input-method-title)
2 个赞

@manateelazycat @donney_luck 我也盯着瞅了半天咋不动 结果发现是 13.19 MB 的动图… 压缩一下吧 我的经验是直接 MP4 格式效果最好

求助

我在 mac doom eamcs 下面配置里面设置

  (use-package liberime
  :load-path "~/.doom.d/liberime.[so|dll]"
  :config
  ;; 注意事项:
  
  ;; 1. 文件路径需要用 `expand-file-name' 函数处理。
  ;; 2. `librime-start' 的第一个参数说明 "rime 共享数据文件夹"
  ;;     的位置,不同的平台其位置也各不相同,可以参考:
  ;;     https://github.com/rime/home/wiki/RimeWithSchemata
  (liberime-start (expand-file-name "~/Libray/Rime/")
                  (expand-file-name "~/.doom.d/rime/"))
  (liberime-select-schema "double_pinyin_flpy")
  (setq pyim-default-scheme 'rime))

然后运行 doom refresh 出现提示 package error: (error Could not find package liberime in recipe repositories: (org-elpa melpa gnu-elpa-mirror emacsmirror-mirror))

emacs 不是能加载动态库吗?

你这个错误也遇到了,最后你是怎么解决的

用emacs -Q启动配置,排除你的配置文件问题

1 个赞
:load-path "~/.doom.d/liberime.[so|dll]"

这个地方设置的是 liberime.so 文件所在的目录

1 个赞

阿感谢 找了好多地方终于用你的配置把小鹤的配置成功了 但是有一个疑问 为什么rime没有用我的个人辞典呢?

导致我用鼠须管在emacs外打字 和pyim在emacs里面打字 候选词天差地别 :rofl:

(use-package liberime
  :config
  (liberime-start (expand-file-name "/Library/Input Methods/Squirrel.app/Contents/SharedSupport/")
		  (file-truename "~/.emacs.d/pyim/rime/"))
  (liberime-select-schema "double_pinyin_flypy")
  (setq pyim-default-scheme 'rime))

我有把所有 dic.yaml 文件 copy 到两个文件夹 也在 ~/.emacs.d/pyim/rime/defaults.custom.yaml 里定义了dictionary

你可以 copy 到这个目录试试

/Library/Input Methods/Squirrel.app/Contents/SharedSupport/

对的 我是把 ~/Library/Rime 里面的 dict 文件同时拷贝进了

/Library/Input Methods/Squirrel.app/Contents/SharedSupport/

~/.emacs.d/pyim/rime/

但是字典好像没能加载

@manateelazycat 感谢分享,终于解决了在Mac上的emacs全屏不支持posframe的问题。Pyim在emacs下的表现真的很好。