emacs + goldendict 查单词

这里用的是 goldendict 的一个现代 fork

Archlinux 用户可以直接 yay -Syu goldendict-ng-git

设置里面可以添加多个网络或离线词典。

(defun +dict-word-at-point ()
  "Search word in goldendict"
  (interactive)
  (call-process-shell-command (concat "goldendict " (current-word) " &") nil 0)
  )

(global-set-key (kbd "s-d") '+dict-word-at-point)

demo: Peek 2022-11-29 05-45

弹出的 popup 可以用键盘控制:

  • Esc 关闭
  • up/down
  • Alt + updown
  • PageUp/PageDown

Limitation:

弹出的 popup 必须要开启右上角的 置顶+Pin 才能完全用键盘控制

1 个赞

emacs 中的词典应该还挺多的。这样还需要弹出外部应用的词典似乎不太好用。

下的 Appimage,gnome 里跑不起来,提示 QtMultimedia is not currently supported on this platform or compiler.

Emacs 本体是没办法看网页的,现有的方案大部分是调 API 薅免费的羊毛,维护成本高,支持的语言也有限。开一个外部应用这些问题都解决的了,而且这个外部应用还可以在非 Emacs 的地方用。

这个 fork 的 goldendict 的 popup 可以完全用键盘控制,不会影响 emacs 的体验。 @ginqi7

另外一些词典是没有在线版本的。

前人的帖子 一个支持多词典的翻译插件(目前仅支持单词)

你的 linux 发行版和版本是啥?CI 里面用的是 ubuntu 20.04 打包的,Appimage 只能从最小的版本往上支持。

fedora 37

popweb这样的css样式隐藏的方式,基本上没有任何维护成本。

2 个赞

在 fedora 上试了一下,用 6.4.1 的 appimage 的话,Qt Multimedia 需要用系统安装 ffmpeg,sudo dnf install ffmpeg-free

看了一下 popweb 的实现,感觉这个方法妙呀。这就照着抄走,哈哈。

popweb/popweb-dict-bing.el at 230b89721c2be72ba79fda8a1bdf0bdaa2f3ee0e · manateelazycat/popweb · GitHub

之前也考虑过怎么在 popup 里面显示网络词典,我用的方法是模拟手机设备,自动就适应小窗口了

kpDict/kpWebView.cpp at 6cc58cc569b3bfcc5e6879c1704274eea0b6fa31 · shenlebantongying/kpDict · GitHub

你就正常用官网的页面,然后不要的元素css直接隐藏了,如果官网变化了,5分钟就可以调好。

这个比API方法省事,稳定,而且不会被封锁。

请问除了加顶楼的defun那段还需要些啥,执行报

command-execute: Wrong type argument: commandp, +dict-word-at-point

不懂代码,和下面这个

区别是?

添加 interactive

@manateelazycat 没懂,这里不是有interactive吗

更新:两段都放了,这个也就能用了,混乱中