lorniu / go-translate

Translator on Emacs. Supports multiple engines such as Google, Bing, deepL, ChatGPT, StarDict, Youdao and so on.
GNU General Public License v3.0
274 stars 37 forks source link

如何将显示翻译的*Go-Translate* buffer设置为只读? #31

Closed Eason0210 closed 2 years ago

Eason0210 commented 2 years ago

@lorniu

大佬,请教一下如何将显示翻译的buffer设置为只读?因为我有时候会在中文输入法下启动 go-translate 进行翻译, *Go-Translate* 这个buffer 的输入法也会是中文,按 q 就没法退出了。(我使用了 sis 进行输入法切换)

另外,有时误按,会修改翻译界面的内容。

所以,我比较喜欢像看 Help buffer 一样查看翻译,看完按 q 退出。

我没有使用 posframe。

lorniu commented 2 years ago

可以像类似这样设置翻译完成后调整 buffer 属性:

;; fixed
(cl-defmethod gts-me-out :after ((_ gts-buffer-render) translator task)
    (when (= (oref translator state) 3)
      (with-current-buffer gts-buffer-name
        (read-only-mode 1))))

我是特意保留了翻译完成之后非只读的状态,因为很多时候,翻译完成后需要在翻译的结果上进行少许修改再复制到目的地,这样比较方便。

Eason0210 commented 2 years ago

多谢指点,不过我按你说的设置,执行完翻译命令后,我的当前buffer 变成只读了,显示翻译的buffer并没有变化。

lorniu commented 2 years ago

你可以仔细检查下,我这里没发现问题。

Eason0210 commented 2 years ago

我这边还是不行,感觉没有执行 gts-me-out,我在里面加了 message 函数,也没见打印内容。

我正常是执行下面这个自己定义的函数进行翻译:

  ;; Pick directly and use Google RPC API to translate
  (defun go-translate-at-point ()
    (interactive)
    (gts-translate (gts-translator
                    :picker (gts-noprompt-picker)
                    :engines (gts-google-rpc-engine)
                    :render (gts-buffer-render))))

会不会是因为我定制了这个函数的关系?

lorniu commented 2 years ago

哦,你配置使用的是单引擎的话,配置 gts-out 而非 gts-me-out:

(cl-defmethod gts-out :after ((_ gts-buffer-render) _)
  (with-current-buffer gts-buffer-name
    (read-only-mode 1)))
Eason0210 commented 2 years ago

哦,你配置使用的是单引擎的话,配置 gts-out 而非 gts-me-out:

确实,可以生效了。 👍

seagle0128 commented 2 years ago

@lorniu 是不是可以默认是readonly,需要修改的时候用快捷键把buffer变为可编辑的?默认好像是C-x C-q?最不合理的地方是,编辑buffer时无法输入快捷键占用的字符,比如 h, q, x... 编辑状态快捷键不起效才合理。

lorniu commented 2 years ago

@seagle0128 嗯,好像是有些不合理。我经常英译中,编辑时输入的是中文,所以没意识到。呃,抽空我再看看怎么优化一下。当然,如果有补丁,欢迎提交。

seagle0128 commented 2 years ago

@lorniu 我提交了一个PR #38 ,将buffer改为只读,用C-x C-q 可以切换只读状态,请review。这个PR没有处理快捷键问题,与目前使用保持一致,可以拷贝到其他buffer编辑。如果要考虑可以参考wgrep方式,只是我认为没有必要。

另外,还有几个warning值得注意,为保证PR单纯性,除了docstring问题其他都没有处理。

 gts-implements.el   199  18 warning         `marker-position' is an obsolete generalized variable; use `set-marker' instead. (emacs-lisp)
 gts-implements.el   567  40 warning         Ambiguous initform needs quoting: (gts-current-or-selection-texter) (emacs-lisp)