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

哈哈哈,你一定是没有认真看我写的文档。 :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下的表现真的很好。