lorniu
21
;; pop-to-buffer
(setq gt-buffer-render-follow-p t)
;; window config
(setq gt-buffer-prompt-window-config
'(display-buffer-reuse-window (inhibit-same-window . nil)))
在 evil 中,默认情况下使用 ,
作为前缀触发快捷键。比如 , q
表示关闭。
当前,你那样绑定也没问题,但最好在 gt-buffer-render-init-hook
中绑定。
1 个赞
lorniu
22
Add support for LibreTranslate.
2 个赞
lorniu
23
有感于 【讨论】一种提升英文阅读体验的可能性, 增加了透析翻译的基本实现:
道友好,添加 Libre translate 后,翻译结果显示 http 400(如下图所示)
配置文件如下:
(use-package go-translate
:config
(setq gt-langs '(en zh))
(setq gt-default-translator
(gt-translator
:taker (gt-taker :text 'buffer :pick 'paragraph) ; 配置拾取器
:engines (list
(gt-bing-engine)
(gt-youdao-dict-engine)
(gt-libre-engine)) ;指定多引擎
:render (gt-buffer-render))) ; 配置渲染器
)
lorniu
25
LibreTranslate 可以使用官方服务,也可以使用第三方或本地服务。
官方服务需要购买 token,所以我就随便设置了一个第三方(https://translate.disroot.org/)。在我这里,它能正常使用,你的上述配置不会报错。
对于你的出错,应该跟 disroot.org 有关。因此建议你搜索并使用你那里可用的 LibreTranslate 服务。比如:
配置 host:
(setq gt-libre-host "https://translate.terraprint.co/")
或指定 host:
...
:engines
(gt-libre-engine :host "https://translate.terraprint.co/")
...
lorniu
26
增加新接口,简化适用于多场景的翻译器的配置。
现在 :taker/engines/render 都可以是列表。对于 engines,使用所有可用的;对于 taker/render,使用第一个可用的。根据 :if
值进行可用性判定。
示例:
;; 对于选中的文本,不分段,并使用 posframe 渲染
;; 对于 Info,翻译当前段落,使用 overlay 显示结果
;; 对于只读文本,翻译整个 buffer 中的生词,并使用 overlay 渲染
;; 对于 Magit commit buffer,将翻译结果插入到光标位置
;; 对于单词,使用 google 引擎翻译; 其他使用 deepl 引擎
(setq gt-default-translator
(gt-translator
:taker (list (gt-taker :pick nil :if 'selection)
(gt-taker :text 'paragraph :if '(Info-mode help-mode))
(gt-taker :text 'buffer :pick 'fresh-word :if 'read-only)
(gt-taker :text 'word))
:engines (list (gt-google-engine :if 'word)
(gt-deepl-engine :if 'no-word))
:render (list (gt-posframe-pop-render :if 'selection)
(gt-overlay-render :if 'read-only)
(gt-insert-render :if (lambda (translator) (member (buffer-name) '("COMMIT_EDITMSG"))))
(gt-alert-render :if '(and xxx-mode (or not-selection (and read-only parts))))
(gt-buffer-render))))
3 个赞
这个好评,原来我是设置了 3 个 gt-preset-translators
的,现在只需要设置一个,不用频繁切换了。
jixiuf
28
有个体验上的小问题。gt-overlay-render
翻译之后光标在overlay 之后,导致 直接执行 M-x:gt-delete-render-overlays 无效, 能否让光标一直在原文区域。
我想实现的效果是翻译之后 C-g
可以马上delete overlay
(defun vmacs-gt-delete-render-overlays()
(call-interactively #'gt-delete-render-overlays))
(advice-add 'keyboard-quit :before #'vmacs-gt-delete-render-overlays))
要是go-translate
能和 fanyi
结合就好了
各有优缺点啊,go-translate
灵活,可自己定制扩展,用child frame,overlay,buffer等展示;fanyi
只能在buffer展示,但是翻译源多,还带语音等信息,翻译很全。可以
自己试试。
lorniu
34
你说的很有道理。
不需要使用 advice,直接绑定按键到 gt-overlay-render-map 即可:
(define-key gt-overlay-render-map
(kbd "C-g") #'gt-delete-render-overlays)
请测试。
1 个赞
lorniu
35
还带语音等信息
在我看来,命令 gt-do-speak
很好用,可以通过 C-n
或 C-p
切换不同语音引擎。
lorniu
36
思路不一样吧,fanyi用的是在线语音,显示比较直观。
lorniu
39
fanyi用的是在线语音
也是在线的。在 buffer-render 中,直接按 y 或选中文本按 y 实现用当前 engine 提供的 tts 服务进行在线播报。
也可以在任意地方调用命令 gt-do-speak
并选择服务进行播报。
我自己用起来挺顺的。
显示比较只管
我有时会在终端下使用,所以更偏向使用快捷键,那样更简洁。当然,也确实不够直观
请问这个错误怎么解呢?mpv 已经安装,Windows11
[BING-TTS] error in request, (user-error You should install ‘mpv’ first or config ‘gt-tts-speaker’ correctly)