Closed lyjdwh closed 1 year ago
如果向 gts-translate
方法直接传递 text 和 path,是会跳过 picker 进行翻译的。
这样的函数实现不太容易,因为翻译是异步进行的,不是立即返回结果。
不过尝试写了一下,曲线救国,通过轮询的方式获取最后的返回值。仅供参考:
;; 定义一个 render,用于将结果插入到当前 buffer
(defclass your-insert-at-point-render (gts-render) ())
(cl-defmethod gts-out ((_ your-insert-at-point-render) task)
(insert (oref task parsed)))
;; 定义的函数
(defun your-function-return-result-directly (input)
(let ((translator (gts-translator :engines (gts-stardict-engine)
:render (your-insert-at-point-render))))
(with-temp-buffer
(gts-translate translator input (cons "en" "zh"))
;; 轮询,不断检查当前 Buffer 是否有内容,如果有则返回。需要判断出错或超时
;; (while t ... (sleep 0.1))
(buffer-string))))
;; 调用函数
(your-function-return-result-directly "hello, world")
感谢大佬的方案!
有没有办法实现一个函数,待翻译文本作为输入,翻译结果作为输出呢?
似乎要修改picker和render,picker如何传参数呢,render能让它返回一个值么