english-teacher mode 英语渣看文档必备

当你在阅读英文文档时,English Teacher 可以像英语老师一样给你关心和关爱,手把手给你翻译英文句子。

English Teacher 支持 google, baidu , youdao 后端。

默认使用 google 翻译,如果你需要默认百度翻译

(setq english-teacher-backend 'baidu
      english-teacher-backend-baidu-appid "xxxxxxx"
      english-teacher-backend-baidu-secret-key "XXXXXXXXXXX")

use-package 设置

(use-package! english-teacher
  :hook ((Info-mode
          elfeed-show-mode
          eww-mode
          Man-mode
          Woman-Mode) . english-teacher-follow-mode))

选择后端: M-x english-teacher-choose-backend 切换后端: M-x english-teacher-next-backend

自定义后端

实现 english-teacher-translate 这个多态方法, 这个方法接受要翻译的文本, 返回值的格式为 (cons result origin)

;;;###autoload
(cl-defmethod english-teacher-translate ((text  t) (backend (eql english-teacher-backend-youdao)))
  (english-teacher-backend-youdao-request "AUTO" "AUTO" text))

随后添加你的后端到 english-teacher-backends-alist

(add-to-list english-teacher-backends-alist 'your-backend)

项目地址:

用 eldoc 显示翻译结果

(setq english-teacher-show-result-function 'english-teacher-eldoc-show-result-function)

自定义显示方式

;;;###autoload
(defun english-teacher-eldoc-show-result-function (origin translation)
  (eldoc-message (format "%s:%s"
                         (symbol-name english-teacher-backend)
                         translation)))

(setq english-teacher-show-result-function 'english-teacher-eldoc-show-result-function)
7赞

好诶!紫薯布丁

能像 eldoc 那样就更棒了ww

eldoc 是不是鼠标所处的句子改变,随后自动翻译? 如果是这个的话已经实现了。

不是指那个啦,现在不是用 posframe 嘛,是说,如果能用 eldoc 来显示就能结合更多的东西了w(比如那些已有的 eldoc ui

我定义了一个

(defcustom english-teacher-show-result-function
'english-teacher-default-show-result-function
""
:type 'function)

如果需要用不同的ui去现实,直接实现这个方法就行了,忘记加到文档了

嗯嗯 (ノω\)

这样会不会影响移动光标的速度?

我设置了延迟翻译,并且缓存了翻译结果,目前我在我的电脑上还没遇到卡顿,如果网络是在太卡,肯定是会卡顿的

(defun english-teacher-follow-mode-translate ()
  (when english-teacher-timer (cancel-timer english-teacher-timer))

  ;; (require (alist-get english-teacher-backend english-teacher-backends-alist))
  (let* ((sentence (english-teacher-sentence-at-point))
         cache func args)
    (when sentence
      (setq cache (english-teacher-get-cache sentence))
      (setq func (if cache english-teacher-show-result-function #'english-teacher-translate-sentence))
      (setq args (if cache (list (funcall english-teacher-format-result-function sentence cache)) (list sentence)))
      (english-teacher-lazy-execute func args))))

已经添加了 eldoc 的显示 方式 这样子设置就行了

(setq english-teacher-show-result-function 'english-teacher-eldoc-show-result-function)

好棒!紫薯布丁

配置

(use-package english-teacher
    :hook ((Info-mode
            elfeed-show-mode
            eww-mode
            Man-mode
            Woman-Mode) . english-teacher-follow-mode)
    :config
    (setq english-teacher-show-result-function 'english-teacher-eldoc-show-result-function)
    )

开启english-teacher-follow-mode时报这个错是为什么呀? Error in post-command-hook (english-teacher-follow-mode-translate): (invalid-function english-teacher-lazy-execute)

你用下面的配置试试,或者你提供以下可以复现这个问题的配置

最好是 git pull 一下,english-teacher-eldoc-show-result-function 是我今天加的函数,在本地测试是 ok 的

启动的时候用 emacs -Q -l h.el 注意,把下面的 load-path 改成 english-teacher.el 的路径

;;;; h.el
(setq package-enable-at-startup nil)
(setq package-archives
      '(("org"          . "http://orgmode.org/elpa/")
	("gnu" . "http://elpa.gnu.org/packages/")
	("melpa"        . "https://melpa.org/packages/")
	("melpa-stable" . "http://stable.melpa.org/packages/")))

(package-initialize)

;; Bootstrap `use-package'
(unless (package-installed-p 'use-package)
  (package-refresh-contents)
  (package-install 'use-package))
(require 'use-package)


(use-package english-teacher
      :load-path "~/tmp/english-teacher.el" ;;; 这里使用你的路径
    :hook ((Info-mode
            elfeed-show-mode
            eww-mode
            Man-mode
            Woman-Mode) . english-teacher-follow-mode)
    :config
    (setq english-teacher-show-result-function 'english-teacher-eldoc-show-result-function))

这样测试没报错,但是翻译结果没出来。 english-teacher 库是刚克隆下来的。

image https://emacs-china.org/uploads/default/original/2X/4/4a83acb8ec70a04d4e12bd27fb72d8e268bc5c97.png

不要编译 english-teacher。

嘿,刚又git pull了一下,emacs -Q 和我的配置 都没问题了!ヽ( ^∀^)ノ

你试试把elc格式的文件删除试试

确实一编译就会出现刚才的情况,把elc文件删除就好了。 为啥会出现这种情况呐?

我晚上回去看看 现在在外面吃饭

你再 pull 一下,然后删除所有 elc 文件应该就好了。

嗯嗯,现在已经不自动编译,装下来就可以用了。赞一个!ヽ( ^∀^)ノ