折腾了下没能成功,特来请教各位大佬们~
我按照这个贴子配置成功了emacs vterm,但是rime还是不行,尝试了
((emacsPackagesNgGen emacs).emacsWithPackages
(epkgs: [ epkgs.vterm epkgs.rime ]))
加上copy 了nixos安装的librime到~/emacs.d/librime
里,cp -r /nix/store/lmyqq18a3ns3gl6pcrjdh3mcpffg5dmc-librime-1.5.3/* ~/.emacs.d/librime/
.emacs.d/librime on develop [?]
➜ ll
dr-xr-xr-x - ztlevi users 20 Jun 20:28 bin
dr-xr-xr-x - ztlevi users 20 Jun 20:28 include
dr-xr-xr-x - ztlevi users 20 Jun 20:28 lib
dr-xr-xr-x - ztlevi users 20 Jun 20:28 share
但是编译rime还是报错了
gcc lib.c -o librime-emacs.so -fPIC -O2 -Wall -I /home/ztlevi/.emacs.d/librime/include/ -shared -L /home/ztlevi/.emacs.d/librime/lib/ -Wl,-rpath /home/ztlevi/.emacs.d/librime/lib/ -lrime
lib.c:23:10: fatal error: emacs-module.h: No such file or directory
23 | #include <emacs-module.h>
| ^~~~~~~~~~~~~~~~
compilation terminated.
make: *** [Makefile:40: lib] Error 1
rime-compile-module: Compile Rime dynamic module failed
dcsjx
2020 年6 月 21 日 03:55
2
设置变量
(rime-emacs-module-header-root(concat(shell-command-to-string "nix eval --raw '(let pkgs = import <nixpkgs> {}; in with pkgs; lib.getLib emacs)'") "/include"))
(rime-librime-root (shell-command-to-string "nix eval --raw '(let pkgs = import <nixpkgs> {}; in with pkgs; lib.getLib librime)'"))
(rime-share-data-dir (concat (shell-command-to-string "nix eval --raw '(let pkgs = import <nixpkgs> {}; in with pkgs; lib.getLib brise)'") "/share/rime-data"))
4 个赞
参考了你的设置,在 Mac 上 使用 Nix 只要设置以下两个变量就可以自动编译 emacs-rime。
(when (eq system-type 'darwin)
(setq rime-librime-root "~/emacs-data/librime/dist") ;; 从 librime 仓库下载相应的预编译包
(setq rime-emacs-module-header-root "~/.nix-profile/include"))
dcsjx
2021 年9 月 23 日 01:22
5
现在 nixpkg 里已经有 emacs-rime 了 , 用 nix-env -iA nixpkgs.emacs26Packages.rime 就能用。(不知道 mac 会不会有问题。(可能会写错,因为我现在不用 nix 了。
现在有 librime,是最新的 1.7.3 版本,但是只支持 Linux,不支持 darwin。
所以在 Mac 平台还是需要到官方仓库下载最新的Release,
rime-with-plugins-1.7.3-osx.zip 这个是带插件的,支持 lua。
通过 nix eval --raw '(let pkgs = import <nixpkgs> {}; in with pkgs; lib.getLib emacs)'
获取路径并不靠谱,当更新过 channel 或者升级过 nix 之后,获得的路径可能就实效了:
⋊> nix eval --raw '(let pkgs = import <nixpkgs> {}; in with pkgs; lib.getLib emacs)'
/nix/store/gkvj9d90wjrp69vbnnqp6496cc996dkf-emacs-27.2
⋊> ls /nix/store/gkvj9d90wjrp69vbnnqp6496cc996dkf-emacs-27.2
ls: cannot access '/nix/store/gkvj9d90wjrp69vbnnqp6496cc996dkf-emacs-27.2': No such file or directory
readlink
获取到的路径才是有效的,也是 wiki 推荐的方法:
⋊> readlink -f ~/.nix-profile/bin/emacs
/nix/store/nycbav7by9ii4l62scwsn952hpxbpak1-emacs-27.2/bin/emacs
⋊> ls /nix/store/nycbav7by9ii4l62scwsn952hpxbpak1-emacs-27.2/
Applications bin include lib libexec share
而且 readlink
耗时极少。
EDIT:
更可靠的方法应该是获取当前 Emacs 路径:
(file-truename (concat invocation-directory invocation-name))
;; => "/nix/store/nycbav7by9ii4l62scwsn952hpxbpak1-emacs-27.2/bin/emacs-27.2"
2 个赞
请教下这个命令得到的 Emacs 路径,怎么得到 /nix/store/nycbav7by9ii4l62scwsn952hpxbpak1-emacs-27.2/include
这个路径?
(epkgs.melpaPackages.rime.overrideAttrs (old: {
recipe = pkgs.writeText "recipe" ''
(rime :repo "DogLooksGood/emacs-rime"
:files (:defaults "lib.c" "Makefile" "librime-emacs.so")
:fetcher github)
'';
postPatch = old.postPatch or "" + ''
emacs --batch -Q -L . \
--eval "(progn (require 'rime) (rime-compile-module))"
'';
buildInputs = old.buildInputs ++ (with pkgs; [ librime ]);
}))