有没有插件或是编辑器能在一个英文单词输入结束后,自动发音的?

如题,大家是否知道有相关插件或是应用?不限于Emacs。

原因:感觉使用语音来强化英语这类表音文字的学习可以起到事半功倍的效果。

这个我觉得更适合自定义空格键行为,在指定mode绑定空格键就可。正常情况下,输入一个英文单词后都会按一下空格

比如我在某个mode中,按空格时会触发保存,并不影响空格的正常输入。

发音插件可以看看 分享和请教:在win emacs中选中文本后朗读出来

1 个赞

感觉可以咨询一下用 Emacs 的视障碍朋友,Emacs 在这方面是很强的

好主意 :+1: 只要再看下怎么把最近的单词找出来就行。

(defun my-get-wd()
  "获取当前要发音的词"
  ;;(interactive)
  (if mark-active ;;当前是否有鼠标选中词 这时不需要获取后一个词
      (string-trim (buffer-substring-no-properties
       (region-beginning) (region-end)))
    (progn
      (thing-at-point 'filename);;'filename
      ))
  )

这是我获取当前要发音处词的办法,实际写起来如果要做到按空格可以智能识别当前词是否需要发音还比较麻烦,需要判断:

1,按空格当前光标处取不到词则正常插入空格;

2,按空格发现上一个操作还没结束也是正常插入空格;

3,按空格取到的词非英文也正常插入空格;

4,按空格取到的词与上一次执行发音时取到的词完全一致也正常插入空格而不发音;

我的需求比较简单,只找到上个单词就行。下面是目前的实现:

;; -*- lexical-binding: t -*-

(defun english-mode-map-fun (key)
  (lambda ()
    (interactive)
    (shell-command
     (format "espeak-ng %s" (word-at-point)))
    (insert-char key)))

(define-minor-mode english-mode
  "Toggles global english-mode."
  nil
  :global nil
  :group 'dotfiles
  :lighter " En"
  :keymap
  (list (cons (kbd "SPC") (english-mode-map-fun 32))
        (cons (kbd ",") (english-mode-map-fun 44))
        (cons (kbd ".") (english-mode-map-fun 46)))

  (if english-mode
      (message "english-mode activated!")
    (message "english-mode deactivated!")))

(add-hook 'english-mode-hook (lambda () (message "Hook was executed!")))
(add-hook 'english-mode-on-hook (lambda () (message "english turned on!")))
(add-hook 'english-mode-off-hook (lambda () (message "english turned off!")))