137 lines
6.2 KiB
Markdown
137 lines
6.2 KiB
Markdown
# fcitx5-m3ui
|
|
|
|
给 [Fcitx5](https://github.com/fcitx/fcitx5) 用的 Material 3 风格候选框,
|
|
以界面插件(`m3ui`)的形式替换 `classicui`。
|
|
|
|
## 特性
|
|
|
|
- Material 3 圆角面板,深色 / 浅色主题跟随系统。
|
|
- 弹簧动画:候选框带轻微回弹从侧边滑入并淡入,高亮块在候选词之间滑动。
|
|
刚度、阻尼、方向、距离都可以调。
|
|
- 在候选词上**右键**打开动作菜单,内容取决于输入法提供的动作。拼音有
|
|
"忘记候选词 / 置顶为自定义短语 / 从自定义短语中删除"。
|
|
- 候选菜单只调用引擎提供的原生动作,不在前端屏蔽词语。
|
|
- Wayland 和 X11(Xwayland)输入上下文都支持,定位和鼠标处理沿用 `classicui`。
|
|
- 可选的 KWin 辅助脚本:只缩短候选框自己的 KWin 淡出时间。
|
|
|
|
## 状态
|
|
|
|
个人项目,只在 Fedora 44、KDE Plasma 6.7(Wayland)、NVIDIA 显卡、
|
|
Fcitx5 5.1.23、拼音引擎上用过。动画、右键菜单、忘记候选词、开机自动启动
|
|
在这套环境里都实际用过。
|
|
|
|
`scripts/build.sh` 在干净目录里从零完整构建通过过一次(Fedora 44),其他发行版和桌面没有试过,
|
|
遇到问题请开 issue。
|
|
|
|
本插件是 `classicui` 的分支,需要在 Fcitx5 源码树内构建:Fcitx5 的 Wayland
|
|
协议封装不包含在 `fcitx5-devel` 里。构建用的源码版本必须和已安装的 Fcitx5 一致,
|
|
Fcitx5 升级后需要重新构建;如果插件加载失败,Fcitx5 会自动退回 `classicui`,
|
|
不会没有输入法。
|
|
|
|
没有自己的淡出动画:Wayland 下面板没有内容时窗口会被立刻销毁。
|
|
|
|
## 构建
|
|
|
|
需要 Fcitx5 开发文件和 `classicui` 的依赖(cairo、pango、librsvg、gdk-pixbuf、
|
|
wayland-protocols、xcb 相关库)。Fedora 上:
|
|
|
|
```
|
|
sudo dnf install fcitx5-devel extra-cmake-modules cairo-devel pango-devel \
|
|
gdk-pixbuf2-devel librsvg2-devel wayland-protocols-devel \
|
|
plasma-wayland-protocols-devel systemd-devel libuuid-devel fmt-devel \
|
|
expat-devel iso-codes-devel json-devel xkeyboard-config-devel \
|
|
xcb-util-devel xcb-util-keysyms-devel xcb-util-wm-devel \
|
|
xcb-util-image-devel xcb-imdkit-devel libxkbfile-devel libxkbcommon-x11-devel
|
|
```
|
|
|
|
然后:
|
|
|
|
```
|
|
scripts/build.sh # 下载 Fcitx5、yoga 和 libmonet 源码,叠加 src/,构建 m3ui
|
|
scripts/install.sh # 安装到 ~/.local,不改动 $HOME 以外的任何东西
|
|
```
|
|
|
|
`build.sh` 会用 `pkg-config` 取已安装的 Fcitx5 版本,可以用 `FCITX_VERSION` 覆盖。
|
|
源码是**按提交哈希**从 GitHub 取的并在取完后校验(标签可以被移动,提交哈希无法伪造),
|
|
没有固定提交的版本会被拒绝,除非你自己用 `FCITX_COMMIT=<sha>` 指定。这个插件跑在输入法进程里,
|
|
看得到你打的所有字,所以构建来源值得认真对待。
|
|
|
|
## 莫奈取色
|
|
|
|
候选窗的颜色由 [libmonet](https://git.oeo.one/justme/libmonet) 从桌面强调色生成(`UseMonet=True`,默认开),
|
|
深浅色跟随系统。输入法进程内不会启动任何子进程:直接复用 Fcitx5 自己监听的 XDG portal
|
|
(KDE Plasma 6、GNOME 47+ 都有),取不到时回退到默认的粉色。`UseMonet=False` 回到主题文件里的固定颜色。
|
|
|
|
## 使用
|
|
|
|
手动试用:
|
|
|
|
```
|
|
FCITX_ADDON_DIRS=$HOME/.local/m3ui/lib64/fcitx5:/usr/lib64/fcitx5 fcitx5 -r -u m3ui
|
|
```
|
|
|
|
`FCITX_ADDON_DIRS` 是让 Fcitx5 找到系统目录以外的插件,`fcitx5 -r`(不带参数)
|
|
可以回到原版界面。
|
|
|
|
**开机自动使用**:
|
|
|
|
```
|
|
scripts/enable-autostart.sh
|
|
systemctl --user daemon-reload && systemctl --user restart app-org.fcitx.Fcitx5@autostart.service
|
|
```
|
|
|
|
它会在家目录里写两个覆盖文件(XDG 自启动项和 D-Bus 激活项),只改 `Exec` 一行。
|
|
撤销只需删掉脚本输出的那两个文件。
|
|
|
|
## 配置
|
|
|
|
配置文件是 `~/.config/fcitx5/conf/m3ui.conf`,示例见
|
|
[config/m3ui.conf.example](config/m3ui.conf.example)。
|
|
|
|
| 键 | 默认值 | 含义 |
|
|
|---|---|---|
|
|
| `Animations` | True | 动画总开关 |
|
|
| `Bounce` | True | 关闭后移动为临界阻尼(无回弹) |
|
|
| `SpatialStiffness` | 2000 | 移动的弹簧刚度,越大越快 |
|
|
| `SpatialDamping` | 62 | 阻尼比(百分数),越小回弹越明显 |
|
|
| `EffectsStiffness` | 3800 | 淡入的弹簧刚度 |
|
|
| `SlideDistance` | 22 | 滑入距离(像素) |
|
|
| `SlideDirection` | 0 | 0 从左,1 从右,2 从下 |
|
|
| `Theme` / `DarkTheme` | `m3ui-light` / `m3ui-dark` | `themes/` 里的主题 |
|
|
|
|
主题是 classicui 主题,在 `[InputPanel]` 里多了几个键:`SurfaceColor`、
|
|
`OutlineColor`、`HighlightFillColor`、`PanelRadius`、`ItemRadius`。
|
|
`SurfaceColor` 完全透明时回退到 classicui 的图片绘制,所以原有的 classicui
|
|
主题仍然可用(但没有动画)。
|
|
|
|
## 候选动作与资源防护
|
|
|
|
右键菜单只显示引擎的 `candidateActions()` 并通过 `triggerAction()` 调用。
|
|
“忘记”由引擎处理,不保证永久隐藏或降低到某个排名。前端不再读取或写入
|
|
旧的 `blocked-words.txt`,已有文件不会被删除。
|
|
|
|
图片限制为 16 MiB 文件、单边不超过 8192 像素、总计不超过 16 Mi 像素。
|
|
SVG 渲染一次后缓存为位图,异常资源回退到既有主题或文字图标。
|
|
这些限制不是解码沙箱,不能保证复杂 SVG 的处理时间,也不能替代底层库安全更新。
|
|
|
|
`patches/fcitx5-icon-cache.patch` 修复核心图标缓存的循环链、越界、
|
|
字符串终止和映射文件截断问题,损坏缓存回退为文件查找。
|
|
`build.sh` 会检查并应用此补丁;但 `install.sh` 只安装插件,
|
|
**不会替换运行中的 Fcitx5 核心库**,所以仅安装插件不代表核心修复已部署。
|
|
|
|
构建后可运行 `bash scripts/test.sh` 验证候选菜单、缓存和真实图片解码。
|
|
也可通过 `FCITX_SOURCE_DIR`、`FCITX_BUILD_DIR` 指定已有源码和构建目录。
|
|
|
|
## KWin 淡出(可选,KDE Plasma)
|
|
|
|
KWin 的"渐隐弹出窗口"特效会把弹出窗口淡出 600 毫秒,候选框也被算作弹出窗口。
|
|
`kwin/install-fadingpopups-override.sh` 会把系统里的这个特效复制到
|
|
`~/.local/share/kwin-wayland/effects/` 并打补丁,只对窗口类 `fcitx fcitx` 生效:
|
|
跳过 KWin 的淡入(让 m3ui 自己的弹入动画可见),并把淡出缩短到 90 毫秒
|
|
(`FADE_OUT_MS` 可调)。其他弹出窗口不受影响。如果上游特效的源码变了、补丁对不上,
|
|
脚本会直接报错退出。
|
|
|
|
## 许可证
|
|
|
|
LGPL-2.1-or-later,见 [NOTICE.md](NOTICE.md)。
|