【讨论】一种提升英文阅读体验的可能性

嗯嗯,以后key 这种东西还是要仔细想想唯一性的问题。

恩恩,等有空了改一改。

1 个赞

关于 “men-闷”,我猜是sdcv查询的结果。

个人觉得sdcv的质量略低,baidu翻译成知乎,zhihu翻译成百度(大概是这样子的),经常看到离谱翻译或直接拼音转化,我是不太推荐放前面。

把local/macos这种高质量词典放前面才是正解。sdcv放到后面去,web依赖网络较慢,放最后。

linux 下 sdcv 是唯一可用的 local 词典。

可以开放让用户使用自定义的 sdcv 词典,默认的这个kdic-ec-11w 可能解释排序不太智能,而我默认使用了第一个解释。

例如楼上有用户提出的 【讨论】一种提升英文阅读体验的可能性 - #236,来自 heisaari 词典,按照常用性排序的,可能比较适合 D-O 的场景。

然后用GitHub - ilius/pyglossary: A tool for converting dictionary files aka glossaries. Mainly to help use our offline glossaries in any Open Source dictionary we like on any modern operating system / device. 转换一下词典格式,应该就可用了。

1 个赞

还有 GoldenDict

这个 fork 更新比较勤,也有安装包提供。

macOS 推荐这个版本:

新拉了一个分支。尝试支持用户自定义的 StatDict 词典。增加了一个变量 dictionary-overlay-sdcv-dictionary-path 例如,我转换了 【讨论】一种提升英文阅读体验的可能性 - #236,来自 heisaari 这个词典。然后设置:

(setq dictionary-overlay-sdcv-dictionary-path
      "/Users/jinqiqi/Downloads/TLD")

就可以使用这个词典了。但是:由于目前写的正则表达式的匹配有点粗暴:匹配所有的中文词语。

因此,存在如下的问题:

image

其中,men 的 “原型” 是man,因此直接使用了 “原型” 作为翻译 其中,pop web 是考研词汇,会展示第一个中文,考研。

如果需要支持自定义的词典,也许要开放自定义的正则表达式,让用户自己去匹配。

1 个赞

退出 emacs 时会有这几个进程在,eaf 和 popweb为啥是双数的

又多了不少有益的楼层,等有空了我慢慢看来再回复

是用的最新的,其他的buffer看起来还好,就C-h i那个看起来问题比较多;下面这个图片是C-h k的界面

嗯嗯,已经定位到问题了。应该是同名 buffer 的问题导致的。当前的版本有个bug,用 buffer 名字作为唯一key来区分不同buffer的渲染内容。但如果一个buffer kill 掉,重开一个同名的buffer 就可能有问题。

dictd 实际上支持本地词典, dictd - ArchWiki

我在Debian Linux上的Emacs里使用本地词典很简单,

  • sudo apt install dictd # install dictd
  • sudo apt install dict-wn or sudo apt install dict-gcide # install dictionary
  • sudo systemctl restart dictd
  • 在emacs配置里添加(setq dictionary-server "127.0.0.1"), 可以使用 M-x eval-expression ENTER (dictionary-definition "hello") 测试
1 个赞

关键是词典的生态,外面开放的词典基本上是 mdx 格式的, 开源的 stardict 不支持 mdx 格式,goldendict 没有命令行版本,也没有 mdx 格式到 stardict格式的转换程序。这些问题解决一个本地词典也就很好用了

GitHub - ilius/pyglossary: A tool for converting dictionary files aka glossaries. Mainly to help use our offline glossaries in any Open Source dictionary we like on any modern operating system / device.

这个python 程序可以进行词典转换。我试过把 mdx 词典转换为 stardict 格式,是可行的。

不过由于我用 macOS 的词典加猫哥默认的 kdic-ec-11w 基本够用了,就没去物色好用的词典。

有自己常用个人词典的人可以试试,自己转换词典。

2 个赞

排查了一天,才发现报错的原因,给其他小白提个醒

D-O 需要 emacs-websocket,但是

(use-package websocket; 这里名称不同太坑了
  :straight (emacs-websocket
	     :type git
	     :host github
	     :repo "ahyatt/emacs-websocket"))

;; Example setting: alpha-version, with `straight', `use-package'

(use-package websocket
  :straight (:host github :repo "ahyatt/emacs-websocket"))

(use-package websocket-bridge
  :straight (:host github :repo "ginqi7/websocket-bridge")
  :commands (websocket-bridge-server-start)) ; autoload it

(use-package dictionary-overlay
  :straight (:host github :repo "gingi7/dictionary-overlay")
  :commands (dictionary-overlay-render-buffer)
  :custom-face
  (dictionary-overlay-unknownword ((t :inherit font-lock-keyword-face)))
  (dictionary-overlay-translation ((t :inherit font-lock-comment-face)))
  :config
  ;; Pave the infrastructure
  (require 'websocket-bridge) ; make sure it is running
  (dictionary-overlay-start)

  ;; Customize the goodies, opinionated.
  (setq
   dictionary-overlay-just-unknown-words nil ; default is t, usually i prefer `nil' for long-term goal
   dictionary-overlay-position 'after ; alt: 'help-echo. i switch between the two occasionally.
   dictionary-overlay-translation-format "(%s)"
   dictionary-overlay-user-data-directory
   (locate-user-emacs-file "dictionary-overlay-data/")
   dictionary-overlay-crow-engine "google" ; alt: crow
   dictionary-overlay-inhibit-keymap nil ; don't touch it untill you know it
   dictionary-overlay-auto-jump-after
   '(mark-word-known         ; recommended
     ;; mark-word-unknown ; not recommended
     render-buffer           ; opinionated, but turn it on, why not
     )
   dictionary-overlay-recenter-after-mark-and-jump nil ; alt: line number, e.g., 10, at eye-level
   dictionary-overlay-translators '("local" "darwin" "sdcv" "web") ; darwin has better quality than sdcv, also google translation has quota limit, dont over use it, or will be blocked.
   )

  ;; Advanced features
  (setq dictionary-overlay-lookup-with 'dictionary-lookup-definition) ; advanced, since it might go wrong
  (setq dictionary-overlay-sdcv-dictionary-path nil) ; TODO

  :bind
  ("C-c d" . dictionary-overlay-render-buffer)
  (:map dictionary-overlay-map
   ("d" . dictionary-overlay-lookup)
   ("r" . dictionary-overlay-refresh-buffer)
   ("p" . dictionary-overlay-jump-prev-unknown-word)
   ("n" . dictionary-overlay-jump-next-unknown-word)
   ("<" . dictionary-overlay-jump-first-unknown-word)
   (">" . dictionary-overlay-jump-last-unknown-word)
   ("m" . dictionary-overlay-mark-word-smart)
   ("M" . dictionary-overlay-mark-word-smart-reversely)
   ("c" . dictionary-overlay-modify-translation)
   ("<escape>" . dictionary-overlay-jump-out-of-overlay)))

python 依赖的安装:

M-x dictionary-overlay-install RET
M-x dictionary-overlay-install-google-translate RET

1 个赞

学到了,原来里面的名字和type都可以省略

btw: 像 popweb 可以如上安装上,但它的 dict 不行,因此写成这样

;;popweb
(use-package popweb
  :straight (:host github :repo "manateelazycat/popweb"))
(use-package popweb-dict
  :load-path "straight/repos/popweb/extension/dict")

我是没太搞懂如何写到一起,但是这样也能跑

btw:关于“粘”的问题,可不可以让 D-O 定时 render ,比如3分钟一次,再定义个快捷键用于中间手动刷新,是不是能改善?另外它对比词表时不知是不是要对比整个文章,如果对比的是屏显内容的话应该快一些

请问 macos 词典是怎么用的可以分享下吗,个人有限经验(也许是因为不会搞)

mac上词典似乎不好用,字很小,格式也不好

我就用mac 默认的词典。没有进行过多的配置。日常查询单词详情还是emacs youdao-dictionary.

mac上词典就只用来 dictionary-overlay 展示基础释义。

呃,遇到新问题,执行了一下 C-c d 来 render buffer

[WebsocketBridge] Server has start.
websocket-send: Cannot send message to a closed websocket: #s(websocket-frame text "[\"data\",[\"render\",\"Fuck, I fancy my flatmate.\\nAnd we're gonna find\\nthe Johnny White\\nand等等很长

另外 dictionary-overlay-install

ERROR: Could not open requirements file: [Errno 2] No such file or directory: '/Users/someone/.emacs.d/straight/build/dictionary-overlay/requirements.txt'

去看了下 build 目录下的d-o目录,里面只有一个dictionary-overlay.el文件,而 repos 目录下是全的(手动执行了一下pip install -r requirement.txt 显示都安装了倒是)

最近不用straight了,靠着记忆写了一下多层文件夹的straight写法,引入 :files 机制,告诉straight, 我build 这些文件:

(use-package popweb
  :straight (:host github :repo "manateelazycat/popweb"
             :files (:defaults
                     ("*.el"
                      "extension/dict"
                      ;; "extension/latex"
                      ;; "extension/org-roam"
                      ;; "extension/url-preview"
                      ))))

关于手感延迟的问题,需要重写底层py了。 :grin:

这个比较迷,我也经常遇到,主要原因3种:

  1. d-o server 没打开,手动打开一下。
  2. 手速过快,上面的server还没准备就开始render。中间准备过程以我的老电脑来看,<1s
  3. 本地 dictionary-overlay.json 坏了。比如emacs 崩溃导致的 json文件末尾缺胳膊少腿

解决方法:

  1. 用 dictionary-overlay-restart, 耗时预计1s,请等待
  2. 看看json文件是不是完整的
  3. 重启emacs

再不行就听天由命了,有时候我也排查不出来什么,但切换到以前能工作的commit就好。

没看明白这里要讲的问题 :grin: