emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] externals/greader 92b8b1e204 4/4: Merge branch 'experimental'


From: ELPA Syncer
Subject: [elpa] externals/greader 92b8b1e204 4/4: Merge branch 'experimental'
Date: Sat, 28 Jan 2023 08:57:46 -0500 (EST)

branch: externals/greader
commit 92b8b1e20487b9b99f211a2c048d0966a4106caf
Merge: bc45d253f9 002a247162
Author: Michelangelo Rodriguez <michelangelo.rodriguez@gmail.com>
Commit: Michelangelo Rodriguez <michelangelo.rodriguez@gmail.com>

    Merge branch 'experimental'
---
 greader-mac.el | 98 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 greader.el     | 10 ++++--
 2 files changed, 106 insertions(+), 2 deletions(-)

diff --git a/greader-mac.el b/greader-mac.el
new file mode 100644
index 0000000000..9275d9fedc
--- /dev/null
+++ b/greader-mac.el
@@ -0,0 +1,98 @@
+(defgroup greader-mac
+  nil
+  "Back-end of mac for greader."
+  :group 'greader
+  )
+
+(defcustom greader-mac-voice nil
+  "Set the desired voice for the tts `say’.
+nil means to use the system voice."
+  :tag "mac tts voice"
+  :type '(choice (const :tag "system voice" nil)
+                (string :tag "Specify")))
+
+(defcustom greader-mac-rate 200
+  "Rate of tts expressed in words per minute."
+  :tag "Mac tts speech rate"
+  :type 'integer)
+
+(defcustom greader-mac-executable-name "say"
+  "Name of the program that actually produces the voice."  
+  :tag "mac tts command"
+  :type 'string)
+
+(defun greader-mac-set-rate (&optional rate)
+  "Return a string suitable for setting mac RATE."
+  (if (not rate)
+      (concat "-r" (number-to-string greader-mac-rate))
+    (progn
+      (setq-local greader-mac-rate rate)
+      (concat "-r" (number-to-string rate)))))
+
+(defun greader-mac-set-voice (voice)
+  "Set specified VOICE for `say'.
+When called interactively, this function reads a string from the minibuffer 
providing completion."
+  (interactive
+   (list (read-string "voice: " nil nil (greader--mac-get-voices))))
+  (let (result)
+    (if (called-interactively-p 'any)
+       (progn
+         (if (string-equal "system" voice)
+             (setq-local greader-mac-voice nil)
+           (setq-local greader-mac-voice voice)))
+      (when voice
+       (if (string-equal voice "system")
+           (progn
+             (setq result nil)
+             (setq-local greader-mac-voice nil))
+         (setq result (concat "-v" voice))
+         (setq-local greader-mac-voice voice)))
+      (unless voice
+       (if greader-mac-voice
+           (setq result (concat "-v" greader-mac-voice))
+         (setq result nil)))
+      result)))
+
+;;;###autoload
+(defun greader-mac (command &optional arg &rest _)
+  "Back-end main function of greader-mac.
+COMMAND must be a string suitable for `make-process'."
+  (pcase command
+    ('executable
+     greader-mac-executable-name)
+    ('lang
+     (greader-mac-set-voice arg))
+    ('set-voice
+     (call-interactively 'greader-mac-set-voice))
+    ('rate
+     (cond
+      ((equal arg 'value)
+       greader-mac-rate)
+      (t
+       (greader-mac-set-rate arg))))
+    ('punctuation
+     nil)
+    (_
+     'not-implemented)))
+(put 'greader-mac 'greader-backend-name "greader-mac")
+
+(defun greader--mac-get-voices ()
+  "Return a list which contains all voices suitable for this backend."
+  (with-temp-buffer
+    (call-process "say" nil t nil "-v" "?")
+    (beginning-of-buffer)
+    (let ((lines (list "system")))
+      (while (not (eobp))
+       (let ((mymarker (make-marker)))
+         (search-forward "_")
+         (backward-word)
+         (re-search-backward "[^ ]")
+         (forward-char)
+         (set-marker mymarker (point))
+         (end-of-line)
+         (delete-region mymarker (point)))       
+       (push (string-chop-newline (thing-at-point 'line)) lines)
+       (forward-line))
+      (reverse lines))))
+
+(provide 'greader-mac)
diff --git a/greader.el b/greader.el
index 49843cc8c2..f48c309438 100644
--- a/greader.el
+++ b/greader.el
@@ -503,7 +503,7 @@ if `GOTO-MARKER' is t and if you pass a prefix to this
       (when (not (eobp))
        (forward-sentence))
       (if (> (point) sentence-start)
-         (buffer-substring-no-properties sentence-start (point))
+         (string-trim (buffer-substring-no-properties sentence-start (point)) 
"[ \t\n\r]+")
        nil))))
 
 (defun greader-sentence-at-point ()
@@ -523,7 +523,13 @@ LANG must be in ISO code, for example 'en' for english or 
'fr' for
 french.  This function set the language of tts local for current
 buffer, so if you want to set it globally, please use 'm-x
 `customize-option' <RET> greader-language <RET>'."
-  (interactive "sset language to:")
+  (interactive
+   (list
+    (let (result)
+      (setq result (greader-call-backend 'set-voice nil))
+      (when (equal result 'not-implemented)
+       (setq result (read-string "Set language to: ")))
+      result)))
   (greader-call-backend 'lang lang))
 (defun greader-set-punctuation (flag)
   "Set punctuation to FLAG."



reply via email to

[Prev in Thread] Current Thread [Next in Thread]