学习笔记

Arch 桌面工具链配置:Helium 滚动 + Wofi 词典

这篇记录两个在 Arch + Hyprland 环境下实际用起来的小工具配置。

一个是 Helium 浏览器的触控板滚动优化,另一个是基于 wofi 启动器的快速查词流程。


一、Helium 浏览器滚动优化

问题

在 Hyprland + Wayland 下,触控板在终端里的滚动速度是正常的,但到了 Helium 浏览器的网页里,轻轻一滑就滚出很远。

Hyprland 的 scroll_factor = 0.6 确实已经让输入层变慢了,但网页的滚动体验仍然过快。这说明问题不在纯粹的输入层,而是浏览器对高精度触控板 wheel 事件的解释方式。

解决方案

最终采用了“启动参数 + 网页层 wheel 事件减速”的组合方案。

1. 启动包装脚本

新建 ~/bin/helium-wayland

1exec /home/alice/Applications/Helium.AppImage \
2  --enable-features=UseOzonePlatform,WaylandWindowDecorations \
3  --ozone-platform=wayland \
4  --disable-features=TouchpadOverscrollHistoryNavigation,ElasticOverscroll,TouchpadAndWheelScrollLatching,WindowsScrollingPersonality,PrecisionScrollingPhase \
5  --disable-smooth-scrolling \
6  --disable-zero-copy \
7  --disable-gpu-memory-buffer-video-frames \
8  --load-extension=/home/alice/.local/share/helium-scroll-slow \
9  "$@"

作用:强制 Wayland、禁用一批 Chromium 的 overscroll 相关特性、并加载一个本地扩展来对网页滚动做二次减速。

2. 桌面入口覆盖

修改 ~/.local/share/applications/helium.desktop,让从启动器打开的 Helium 统一走上面的包装脚本。

3. 本地扩展减速

扩展目录:~/.local/share/helium-scroll-slow/

核心在 content.js

1const SCROLL_FACTOR = 0.18;

扩展会在网页最早阶段注入脚本,捕获 wheel 事件,把原始滚动量换算成像素,按倍率缩小后再用 scrollBy() 手动滚动。

当前配置下,网页实际滚动量约为原始值的 18%。如果想调,改这个数值然后完全退出并重新打开 Helium 即可。

经验参考:

  • 0.08:非常慢
  • 0.14:偏慢
  • 0.18:当前值,减速明显但不夸张(降低了使用浏览器中vim快捷键的affordance,这个速度适用于在快捷键之外轻微滚动)
  • 0.25:温和减速
  • 0.30:只做轻度减速

相关文件

  • Hyprland 配置:~/.config/hypr/hyprland.conf
  • Helium 启动脚本:~/bin/helium-wayland
  • 桌面入口:~/.local/share/applications/helium.desktop
  • 扩展:~/.local/share/helium-scroll-slow/

二、Wofi 快速查词流程

目标

在 Hyprland 下搭一套快速查词工具链,要求是:轻量、快速、支持中英、能看到正常的格式化结果。

之前一直用一个自己写的 LLM skill(Oxford-Collins + Early Modern English 专家)来查词。它能结合 Oxford 和 Collins 词典的优点,并且输出很规范:自动标注词频等级(High / Medium / Low / Archaic)、提供英式 IPA 音标、深度例句、还兼容文艺复兴/KJV 古义,查完自动同步到 Anki。但每次查词都要走 LLM,长期下来 token 消耗不可忽视。对于日常高频查词,本地化的方案更经济。

最终形态是两条并行路径:

  • Alt+D:wofi 输入 → sdcv 查询 → 终端显示清洁后的纯文本
  • Alt+Shift+D:wofi 输入 → 交给 Goldendict-ng 渲染完整的词典条目

分开的原因很简单:sdcv 轻快适合一眼看结果,Goldendict-ng 适合长条目和富格式文本。

安装的组件

  • wofi — 启动器风格的输入框
  • sdcv — 命令行查词
  • goldendict-ng-git — 带 HTML 渲染的词典浏览器
  • libeblibzimxapian-coreqt6-webengine — 依赖

Arch 打包小坑

安装 goldendict-ng-git 时有两个非显性的问题:

  1. libeb 不在官方仓库,需要先从 AUR 构建它,再构建 goldendict-ng-git

  2. 上游 tag 格式变为了 v26.5.1-Release.9973c461 这种形式,导致 AUR 打包脚本(PKGBUILD)里的版本号提取逻辑失效,生成了无效版本号 26.5.1-.r6483.8c76225d5

    PKGBUILD 是 AUR 软件包的构建脚本,定义了如何下载源码、编译、打包。当上游 tag 格式变化时,脚本里的 pkgver() 函数可能会提取出非法版本号,导致 makepkg 报错中断。

    这种情况下需要手动修改 PKGBUILD 中的版本号提取逻辑(或直接将生成的版本号修正为 26.5.1.r6483.8c76225d5),然后重新运行 makepkg

词典数据

词典文件放在 ~/.stardict/dic

  • reader.dict EN
  • reader.dict ZH
  • English-中文 (Zhōngwén) FreeDict+WikDict dictionary

来源:

  • FreeDict 英汉 StarDict 档案
  • reader.dict 英/中 StarDict 档案
  • 下载地址:https://freedict.org/downloads/https://www.reader-dict.com/download/

验证已安装的词典:

1sdcv -l

sdcv + wofi:解决 HTML 碎片可读性问题

主脚本:~/dotfiles/dotfiles/bin/wofi-dict

行为:

  • 用 wofi 弹出输入框
  • 英文查询优先走 EN-ZH,中文查询优先走 ZH-ZH
  • 捕获 sdcv 输出
  • 把带 HTML 碎片的原始结果清理成可读的纯文本
  • 复制到剪贴板
  • 在 kitty + less 中打开

这解决了 StarDict 原始条目含 HTML 碎片、直接打印到终端无法阅读的问题。

Goldendict-ng 配置

配置文件:~/.config/goldendict/config

核心是加上词典路径:

1<paths>
2  <path recursive="1">/home/alice/.stardict/dic</path>
3</paths>

让 Goldendict-ng 递归扫描整个词典目录。

修改后用 xmllint --noout ~/.config/goldendict/config 验证 XML 是否合法。

Goldendict + wofi 整合

启动脚本:~/dotfiles/dotfiles/bin/wofi-goldendict

行为:wofi 输入 → 调用 goldendict --main-window <word>

这样保持了快速输入流,渲染则交给 Goldendict-ng。

Hyprland 快捷键

1bind = ALT, D, exec, /home/alice/dotfiles/dotfiles/bin/wofi-dict
2bind = ALT SHIFT, D, exec, /home/alice/dotfiles/dotfiles/bin/wofi-goldendict

修改后如果不生效,运行 hyprctl reload

为什么保留两套工具

这两条路径不是重复建设,而是针对不同查询模式的专门化设计。

sdcv 的不可替代性在于速度。看到一个生词,按 Alt+D,终端几乎瞬间返回结果,没有 GUI 启动的开销。这是最频繁的查询场景:只需要一眼看到释义,不需要富格式。

Goldendict-ng 的不可替代性在于正确渲染。有些词典条目带复杂的 HTML 格式、音标、例句排版,纯文本下这些信息会丢失或变得难以阅读。当需要深入阅读一个条目时,Alt+Shift+D 调出它是合理的。

如果只用 sdcv,遇到复杂条目体验极差;如果只用 Goldendict-ng,每次查词都等 GUI 弹窗,对"一眼看过"的场景太重。

至于为什么不继续用前面提到的 LLM skill 查词:那个 skill 确实很强,输出格式规范,还有词频标注、KJV 古义、自动 Anki 同步。但没 token。

用 sdcv 的场景:

  • 想要最快的一眼结果
  • 不需要富格式
  • 习惯终端风格阅读

用 Goldendict-ng 的场景:

  • 条目带 HTML 格式
  • 文章较长
  • 想要真正的词典 UI

常用命令

查已安装词典:

1sdcv -l

测试英文查询:

1sdcv --non-interactive --utf8-input --utf8-output hello

测试中文查询:

1sdcv --non-interactive --utf8-input --utf8-output 你好

手动打开 Goldendict:

1goldendict
2goldendict --main-window hello

文件清单

  • /home/alice/.stardict/dic — 词典数据
  • /home/alice/.config/goldendict/config — Goldendict 配置
  • /home/alice/dotfiles/dotfiles/bin/wofi-dict — sdcv 快捷查词
  • /home/alice/dotfiles/dotfiles/bin/wofi-goldendict — Goldendict 启动器
  • /home/alice/dotfiles/dotfiles/.config/hypr/hyprland.conf — 快捷键绑定

当前状态

已工作:

  • StarDict 词典已安装
  • sdcv 查询正常
  • wofi → sdcv 快速查词工作
  • Goldendict-ng 已安装并配置
  • wofi → Goldendict-ng 启动器工作

后续可以做的:

  • 调整 Goldendict 中词典的分组和查询优先级
  • 添加更多词典源

Continue Reading

comments powered by Disqus
to-top