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

2022-12-02 21.42.27

一直出现这个是怎么回事,无法出现演示的效果?

Mac 系统使用 ClashX 代理,

export https_proxy=http://127.0.0.1:7890 http_proxy=http://127.0.0.1:7890 all_proxy=socks5://127.0.0.1:7890

Emacs 设置:

    (setq popweb-proxy-type "http")
    (setq popweb-proxy-host "127.0.0.1")
    (setq popweb-proxy-port "7890")

需要FQ, 请自己检查网络配置。

Error (websocket): in callback `on-message': End of file while parsing JSON: "unexpected token near end of file", "<string>", 1, 0, 0 Disable showing Disable logging
Error (websocket): in callback `on-message': could not parse JSON stream: "invalid token near '.'", "<string>", 1, 1, 1 Disable showing Disable logging
Error (websocket): in callback `on-message': could not parse JSON stream: "unable to decode byte 0xcf near 'u'", "<string>", 1, 1, 1 Disable showing Disable logging

标生词过程中偶尔遇到的,应该如何排查(前后查的都正常,而且也只是个提示不影响 render)

我也遇到了。目前还没头绪。在考虑,要不要直接在代码里把这个报错吞掉。目前这个错误不影响使用。

最新的提交,支持了 MacOS 系统的词典,Mac 用户可以更新一下,帮忙测试一波。非 Mac 用户也可以更新一下,修复了几个 bug

使用 MacOs 系统自带的词典需要安装 pyObjc

https://pyobjc.readthedocs.io/en/latest/

新增了一个配置变量:dictionary-overlay-translators 用于指定使用的翻译工具,以及顺序。 默认值 '(“local” “sdcv” “darwin” “web”)

  1. local 表示本地的 dictionary.txt 记录的上次查询结果
  2. sdcv 表示使用 dictionary-overlay 内置的sdcv词典
  3. darwin 表示 MacOS 系统词典
  4. web 表示使用网络翻译

例如,你如果网络有困难,就可以使用’(“local” “sdcv” “darwin”) 如果,你的 MacOS 系统词典质量比较高,可以用:'(“local” “darwin” “sdcv”) 交换词典的顺序

目前解析词典翻译结果使用正则表达式比较简单:直接获取所有的中文词句,生成list, 选取第一个用作默认展示,其他的作为修改翻译时的选项。因此理论上,可以支持任何导入到Mac 系统里的词典。

直接获取所有的中文词句,有一个缺点,进行翻译修改时,可选项可能太多(有的是例句的翻译)。我遇到的问题是,completing-read 会对选项重排序(不知道是不是某个包引起的),可能排在最前面的不是特别相关。

使用 c 修改,如果不选择任一结果按Ctrl-g,会提示:

error in process filter

再次按C-g才能退出。

dictionary-overlay 配合 rcirc 很好用。

聊天的时候就用 lsp-bridge-sdcv-helper + insert-translate-name 看聊天内容时就用 popweb + dictionary-overlay

我试了一下,没能复现。一次 C-g 就退出了。 你那边其他的 (completing-read) 的其他命令能正常退出吗?

我也去试试,多聊聊天提高提高表达能力。

emacs -q 用下面的配置:

(add-to-list 'load-path "~/.emacs.d/site-lisp/websocket-bridge")
(add-to-list 'load-path "~/.emacs.d/site-lisp/dictionary-overlay")
(add-to-list 'load-path "~/.emacs.d/elpa/websocket-20210110.17")
(require 'websocket)
(require 'websocket-bridge)
(require 'dictionary-overlay)
(with-eval-after-load 'dictionary-overlay
  (setq dictionary-overlay-translators '("local" "darwin" "sdcv" "web"))
  (setq dictionary-overlay-user-data-directory (expand-file-name "var/dictionary-overlay" user-emacs-directory)))

打开文本调用dictionary-overlay-start->dictionary-overlay-render-buffer,光标移动到翻译的单词上使用c修改翻译,跳出minibuffer之后使用C-g,就会弹出:

error in process filter: Quit [2 times]

minibuffer 里有弹出修改的选择选项吗?

运行一下 (websocket-bridge-app-open-buffer 'dictionary-overlay) 看看有错误日志吗?

按 TAB 可以弹出修改项。按一次C-g是弹出下面的错误通知,其实minibuffer己经退出了,就是这个error会卡一下。之后可以正常移动光标。

大佬指的哪个是340 万, TLD 还是ECIDT?

我对于 Dictionary overlay 的使用哲学可能和 @ginqi7 一样,不求释义准确,只用作参考。所以我倾向于尽量本地化查找单词,这样buffer渲染速度可以达到极致,这个340万就很有前途的样子。

我看一些文章如果署名带一系列作者的,网络词典从头到尾在线找一遍,渲染完了我都冲了一杯咖啡了(因为buffer被占用了,啥也干不了)。

(侧面也说明py渲染机制可以进一步改进,允许边渲染buffer, 边操作,比如jump, mark,而不用排队。)

不是大佬 :joy:

你划到一楼,看热门链接,找到 ECDICT,点进去看看就知道了,提供了 stardict、mdict、csv、sqlite 等各种格式。

坛子里各位都是大佬。我划上去看看,感谢!

:grimacing: 不客气

紫薯布丁

你是vertico么? 看你的截图,是不是vertico按长度排序了?越短越前。

以下是 vertico.el 摘的:

(defcustom vertico-sort-function #'vertico-sort-history-length-alpha
  "Default sorting function, used if no `display-sort-function' is specified."
  :type `(choice
          (const :tag "No sorting" nil)
          (const :tag "By history, length and alpha" ,#'vertico-sort-history-length-alpha)
          (const :tag "By history and alpha" ,#'vertico-sort-history-alpha)
          (const :tag "By length and alpha" ,#'vertico-sort-length-alpha)
          (const :tag "Alphabetically" ,#'vertico-sort-alpha)
          (function :tag "Custom function")))

(defcustom vertico-sort-override-function nil
  "Override sort function which overrides the `display-sort-function'."
  :type '(choice (const nil) function))

更新后,mark 完不会更新overlay了,手动更新overlay后,又重新下载所有词了,尤其是网络词。不知道是不是我配置的问题。

Edit1:似乎是macOS词典的问题?关掉后好了一些些,继续观察,后续有问题再更。

(defcustom dictionary-overlay-translators
  '("local"
    ;; "darwin"
    "sdcv" "web")
  "The translators and theirs's order."
  :group 'dictionary-overlay)

是的,我用的是vertico. 看来我要看看怎么让 vertico 在特定的命令下不排序。

那个选项设成nil (“no sorting”).

但是你最好只设在 dictionary-overlay 里,别溢到全局影响其他功能的使用了