rime / ibus-rime

【中州韻】Rime for Linux/IBus
https://rime.im
GNU General Public License v3.0
718 stars 103 forks source link

可不可以让 ibus-rime 读取环境变量:IBUS_RIME_SHARED_DATA_DIR #153

Open tumashu opened 1 year ago

tumashu commented 1 year ago

NixOS 或者 GUIX 这两种 linux 发行版比较特殊,没有固定的 /usr/share/rime-data 目录,所以需要 ibus-rime 运行时,从环境变量来获取一个目录,目前我了解 GUIX 编译 ibus-rime 的时候,将 IBUS_RIME_SHARED_DATA_DIR 绑定到 rime-data 包的安装路径,比如:

/gnu/store/b3f1s6nnj1rg7szcmb3n3y194ayhfgja-rime-data-0.38.20210802/share/rime-data

这样导致很难支持其他 rime schema 包,因为其它包不能将文件安装到 rime-data 包的目录。

lotem commented 1 year ago

很好。这样更灵活。 我想先请教一下,通过编译时指定CMake变量能行吗?比如这里CMAKE_INSTALL_FULL_DATADIR。 除了 rime-data 的路径,还有其他路径比如 ibus-engine-rime 的位置需要指定 prefix。

tumashu commented 1 year ago

应该不行吧,guix 中,每个用户的汇总rime-data目录可能都不一样,所以估计没法编译的时候指定,需要运行的时候动态设定。

lotem commented 1 year ago

越來越迷糊了。看來得實際用過才能完全理解。 每個用戶的數據不一樣,聽上去全部放在 用戶文件夾 更合適。而 共享文件夾 對應「機器上預裝的輸入法數據」。

tumashu commented 1 year ago

是呢,NixOS 和 GUIX 这两个 linux 发行版和其它常见的 linux 发行版区别都特别大,如果没用过确实不好理解,

GUIX 会将软件包放在 store 中, 比如 rime-data-0.38 就放在

/gnu/store/b3f1s6nnj1rg7szcmb3n3y194ayhfgja-rime-data-0.38.20210802

而提供给每个用户的系统样子,是通过软链接生成的,这个和 git 操作项目目录的模式类似。

比如:我的帐号下,rime-data 在目录:

${HOME}/.guix-home/profile/share/rime-data

这个 rime-data 目录包含的文件都是软链接,链接到具体的 rime-data 包中。

由于这个目录不固定,所以需要动态获取。

从rime角度来说,完全放在用户文件夹里也可以使用,但这样就不能给 guix 打包了,需要用户自己管理 rime-data 文件,

比如:我准备打包 rime-cloverpinyin 这个 rime schema 包,下载之后,文件会放在

/gnu/store/yimjxq5yqfv80arb90cjyh9zf411id7n-rime-cloverpinyin-1.1.4

如果我在我的 HOME 目录中安装了它,它包含的 scheme 文件就会以软链接的方式出现在:

${HOME}/.guix-home/profile/share/rime-data

如果我设置了一个环境变量指向这个目录, ibus-rime 就可以自动找到它。

不然,用户只能将 rime-cloverpinyin 拷贝到 .config/ibus/rime 目录中手动管理了。

tumashu commented 1 year ago

许多有 plugin 的包,在给 NixOS 或者 Guix 打包时,都会遇到 search path 的问题,比如 thunar,

  dirs_string = (gchar *) g_getenv ("THUNARX_DIRS");
  if (!dirs_string)
    dirs_string = THUNARX_DIRECTORY;

thunar 处理 plugin 的时候,大概是这么处理的,如果 $THUNARX_DIRS 存在,就用它,如果不存在,就用 THUNARX_DIRECTORY,THUNARX_DIRECTORY 是编译的时候指定的。

如果这个机制不好包含在 ibus-rime 中,能不能提供一个 patch,最起码可以让 guix 打包的时候 apply 这个 patch。 我 c 语言能力不行,对 ibus-rime 也不太了解,所以没法写 patch