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

@zqso 使用 after-string 会存在一个问题: 如果把原始的单词给删掉了,它的翻译还会存在。只有删除 overlay 它才会消失。

虽然我个人阅读模式,几乎不会删除单词。

请问标记词后,可以在minibuffer显示一下已标记了么

生词的话,buffer 会刷新,但 knownword 就不会了,有时不确定是不是标上了

另, knownword.txt 和 unknownword.txt 加入单词是按啥顺序,目前感觉是随机的?

恩,可以加一个。

这个是什么意思?

会在 python 内存里保存一个set集合,存储生词。然后定期写入到文件。set 本身是无序的,也不确定python 是会按什么顺序存储。

想按你这样对应着回但不会 :sweat_smile:

是连在一起说的,意思是生词因为 buffer 刷新可以知道是标记了;而认知词没有反馈的情况下自己不确定

还是没掌握换行,上而那楼已加换行也许好些

选中一段文字,就可以引用了。

懂了,调用mark命令时加一段 message 好了

Python 应该有 OrderedDict 这样的东西。

python 应该可以 set 转 list 再 sort 下写入,不过不知开销大不大

@ginqi7 学会了谢谢

不用 ordereddict可以直接有序排列的,转换会有不必要的开销。

你再加一个这个参数试试看?

更新:

测试完毕,加evaporate可行:

(defun dictionary-add-overlay-from (begin end _source target)
  "Add a overlay with range BEGIN to END for the translation SOURCE to TARGET."
  (let ((ov (make-overlay begin end)))
    (overlay-put ov 'face 'dictionary-overlay-unknownword)
    (pcase dictionary-overlay-position
      ('after (progn (overlay-put
                      ov 'after-string
                      (propertize (format dictionary-overlay-translation-format target)
                                  'face 'dictionary-overlay-translation))
                     (overlay-put ov 'evaporate t)))
      ('help-echo (overlay-put
                   ov 'help-echo
                   (format dictionary-overlay-translation-format target))))))

再更:

已PR: https://github.com/ginqi7/dictionary-overlay/pull/38。 似乎和你的 hash-table 新分支 conflict 了

修改释意功能的小建议: dictionary-overlay-modify-translation 目前似乎执行后是等待输入(没有见到选择项可能是我不会用)。 那么,能否让 mini buffer 里等待输入处保持之前的释意的同时全选

场景,阅读中遇到一个单词 drawn 默认给的释意是”拔出的“, 查到合适句意的释意项是”硬拉入“,手工输入新释意后 render 时它会按”硬拉入“翻译 但后续遇到此词,比如新句子里是”取出“的意思 我希望是在已保留释意的前(或后)加入新释意项(目前是替换); 保留释意同时在全选状态,接下来可以按向左、向右添加或直接输入替换比较灵活(相当于选蓝后编辑)

先合并你的,我那个还得再调整调整。

我估计是网络等原因导致的bug。理论上是会有本地翻译和网络词典的结果都展示出来,供用户选择或者输入。你可以看看list-process 对应的buffer里有没有相关的错误信息。

这个功能估计实现不了。当前一个单词只保存了一个“解释”,展示的时候只能展示一个。所以修改是一个全局的。

好的,我再试试

明白了,在原文中选中释义再复制到 mini buffer里也能实现,原来只是想方便些;)

另有办法将当前buffer中渲染的所有生词一次性地提取出来吗

计划接下来,会有一个变量dictionary-overlay-hash-table-keys 包含当前buffer 中生词的一些信息。还在测试中。示例如图:

1 个赞

@ginqi7 新PR Pull requests · ginqi7/dictionary-overlay · GitHub :

  1. 增加了个keymap, 优先级高于minor mode, 光标在词首和词中keymap就会启用,在词末(不一定可靠,继续测试) 则失效。借鉴了 symbol-overlay。
  2. 增加了自动跳转,词汇标记后自动跳转到至一个生词,如果前一个命令是向前/向后跳转,则自动跳转方向与其一致。
  3. 把refresh buffer命令做成了interactive
  4. 新引入的这些命令/参数命名可能不够好,有需要就修改哈
  1. 引入keymap 还是挺有用的,dictionary-overlay-modify-translation 也可以加一个快捷键。
  2. 自动跳转,有什么应用场景吗?是不是默认会nil 比较好。否则生词阅读模式,标记一个生词之后,瞬间跳转了一大段影响阅读吧。

我一会儿加上。

我目前是开启透析模式 (setq dictionary-overlay-just-unknown-words nil), 一般喜欢一看文章就先标完所有生词熟词,因为长文章生词较多,所以喜欢快速标记,标记完一个词,自动跳到下一个生词。

我刚写完了一个recenter, 但还不完美。晚些提交。

(defcustom dictonary-overlay-recenter-after-mark-and-jump nil
  "Recenter after mark or jump."
  :group 'dictionary-overlay
  :type '(boolean))

这个 keymap 是不是不能用作标记一个单词为unknown?只有先有 overlay keymap才能生效。但是不标记为 unknown 就没有overlay

目前所有keymap都是基于render之后的overlay。光标必须在overlay (BEG END)内。

自动跳转的功能,默认关闭吧。高级的功能还是用户手动设置比较好。