[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/greader 484ef1a836 17/23: New feature added: greader-co
From: |
ELPA Syncer |
Subject: |
[elpa] externals/greader 484ef1a836 17/23: New feature added: greader-compile. |
Date: |
Wed, 26 Oct 2022 05:57:49 -0400 (EDT) |
branch: externals/greader
commit 484ef1a836c3d0e518f3361c42568fd27749a95a
Author: Michelangelo Rodriguez <michelangelo.rodriguez@gmail.com>
Commit: Michelangelo Rodriguez <michelangelo.rodriguez@gmail.com>
New feature added: greader-compile.
Greader-compile feature allows to compile "espeak dictionary
definitions" in one-shot.
---
greader.el | 162 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 161 insertions(+), 1 deletion(-)
diff --git a/greader.el b/greader.el
index 619adfb2be..c3018eb9b5 100644
--- a/greader.el
+++ b/greader.el
@@ -855,7 +855,167 @@ If prefix, it will be used to decrement rate."
"Print text properties associated with current char."
(interactive)
(print (text-properties-at (point))))
-(provide 'greader)
+
+(defcustom greader-compile-command "--compile="
+ "espeak-ng parameter to compile a lang."
+ :tag "greader compile command"
+ :type 'string)
+
+(defcustom greader-compile-extra-parameters nil
+ "Extra parameters to pass to espeak-ng.
+In general you should specify an alternative path for espeak voice
+ data."
+ :tag "greader compile extra parameters"
+ :type '(repeat :tag "extra parameter" string))
+
+ ;###autoload
+
+(define-minor-mode greader-compile-mode
+ "Questo minor-mode globale di greader permette il salvataggio di un
+file dizionario di espeak-ng e la successiva compilazione della voce
+corrispondente in una sola operazione.
+In alcuni casi, la directory in cui espeak-ng conserva i dati relativi
+alle lingue non è scrivibile dall'utente normale, in questo caso, al
+salvataggio del file, verrà chiesto d'inserire la password di
+amministratore.
+Verrà chiesto anche se si vorrà salvare la password nel database
+auth-info.
+Per disabilitare quest'ultima domanda, configurare la variabile
+`greader-compile-ask-for-authinfo'
+Il valore predefinito è off, quindi la password di amministratore
+verrà chiesta sempre."
+ :global t
+
+ (if greader-compile-mode
+ (progn
+ (unless greader-compile-dictsource
+ (error "Please set or customize `greader-compile-dictsource'
+ to define espeak-ng dictionary source location."))
+ (add-hook 'after-save-hook 'greader-check-visited-file)
+ (message "greader-compile minor mode enabled"))
+ (when (member 'greader-check-visited-file after-save-hook)
+ (message "greader-compile mode disabled")
+ (remove-hook 'after-save-hook 'greader-check-visited-file))))
+
+(defun greader-compile (&optional lang)
+
+ "La funzione greader-compile, se chiamata interattivamente, compila le
+definizioni di espeak-ng per una determinata lingua.
+In modo predefinito, greader-compile deduce la lingua dalle prime due
+lettere del file che si sta visitando.
+Se il suo parametro LANG è `non-nil', la funzione chiederà di
+specificare la lingua da compilare, ignorando il nome del file attuale
+ma proponendolo come default.
+In caso la lingua specificata non dovesse sembrare compatibile con
+l'ambiente del buffer, questa funzione chiederà conferma prima di
+procedere.
+Avviso importante: il parametro serve esclusivamente per una chiamata
+interattiva, dato che la funzione utilizza il minibuffer per ottenere
+la lingua.
+Se non viene chiamata interattivamente, non passarle argomenti, la
+funzione è progettata specificamente per essere eseguita da un hook."
+
+ (interactive "p")
+
+ (if lang
+ (progn
+
+ (setq lang (read-from-minibuffer "Language (2 letters):"
+ nil
+ nil
+ nil
+ nil
+ nil
+ (greader-compile-guess-lang))))
+
+ (setq lang (greader-compile-guess-lang))
+
+ (let (data-is-writable (command (append '("espeak") (list (concat
greader-compile-command lang)) greader-compile-extra-parameters)))
+
+ (with-temp-buffer
+ (call-process "espeak" nil t t "--version")
+ (goto-char (point-min))
+ (search-forward "/")
+ (setq data-is-writable (file-writable-p (thing-at-point
+ 'filename))))
+
+ (if (not data-is-writable)
+ (setq command (append '("sudo")command)))
+
+ (let ((espeak-process (make-process
+ :name "greader-espeak"
+ :filter 'greader-compile--filter
+ :command command)))))))
+
+(defun greader-compile--filter (&optional process str)
+ (when (string-match "password" str)
+ (process-send-string process (concat (read-passwd str) "\n")))
+ (when (string-match "error" str)
+ (error "%s" str)))
+
+(defun greader-compile-guess-lang ()
+ (when (buffer-file-name)
+ (let*
+ ((lang (buffer-file-name))
+
+ (start (string-match "/[[:alpha:]][[:alpha:]]_" lang))
+
+ end)
+ (if start
+ (progn
+ (setq start (1+ start))
+ (setq end (string-match "_" lang start))
+ (substring lang start end))
+ nil))))
+
+(defcustom greader-compile-dictsource nil
+ "Location of espeak dictionary source data.
+You must configure this variable in order to use
+ `greader-compile-mode'."
+ :tag "greader compile source dictionary directory"
+ :type '(repeat :tag "directory:" string))
+
+(defun greader-check-visited-file ()
+ (and
+ (member default-directory greader-compile-dictsource)
+ (greader-compile-guess-lang)
+ (greader-compile)))
+
+(defcustom greader-compile-default-source ""
+ "dictsource file to use when `greader-compile-at-point' is called.
+If `nil', you can not use `greader-compile-at-point'."
+ :tag "greader compile default dictionary source file"
+ :type 'string)
+
+(let (history)
+ (defun greader-compile-at-point (&optional src dst)
+ (interactive "P")
+ (unless greader-compile-default-source
+ (error "You must set or customize `greader-compile-default-source'"))
+
+ (unless src
+ (setq src (thing-at-point 'word t))
+ (unless src
+ (setq src (read-string "Word to add:"))))
+
+ (when (listp src)
+ (setq src (read-string "word to add:"))
+ (if (equal src "")
+ (setq src (thing-at-point 'word t))))
+ (unless dst
+ (setq dst (read-string (concat "Redefine " src " to: ") nil history)))
+ (let ((lang-file
+ (if (string-prefix-p "/" greader-compile-default-source)
+ greader-compile-default-source
+ (concat greader-compile-dictsource
+ greader-compile-default-source))))
+ (with-current-buffer (find-file-noselect lang-file)
+ (goto-char (point-max))
+ (insert (concat src " " dst "\n"))
+ (save-buffer)
+ (unless greader-compile-mode
+ (greader-compile))
+ (kill-buffer)))))
(provide 'greader)
;;; greader.el ends here
- [elpa] externals/greader 63de204419 14/23: Removed handling of auto-tired-mode in greader-minor-mode definition, (continued)
- [elpa] externals/greader 63de204419 14/23: Removed handling of auto-tired-mode in greader-minor-mode definition, ELPA Syncer, 2022/10/26
- [elpa] externals/greader 68c694f9f6 10/23: Changed references from "chung" to "chunk"., ELPA Syncer, 2022/10/26
- [elpa] externals/greader e17dbbf002 09/23: Revert "Aggiunto il diario a .gitignore", ELPA Syncer, 2022/10/26
- [elpa] externals/greader f13b963692 03/23: More work on last commit., ELPA Syncer, 2022/10/26
- [elpa] externals/greader 976d1b11d3 06/23: greader-dehyphenate rewritten., ELPA Syncer, 2022/10/26
- [elpa] externals/greader c926c9d48a 11/23: Changed `actual-backend' definitions to `current-backend'., ELPA Syncer, 2022/10/26
- [elpa] externals/greader 9b95142531 19/23: More restiling and minor fixes on new features., ELPA Syncer, 2022/10/26
- [elpa] externals/greader 9da8bcf54e 18/23: General cleanup and rehorganization., ELPA Syncer, 2022/10/26
- [elpa] externals/greader bb6990c384 13/23: Removed some unused variables, ELPA Syncer, 2022/10/26
- [elpa] externals/greader 62f81b5e81 22/23: cleanup and restiling., ELPA Syncer, 2022/10/26
- [elpa] externals/greader 484ef1a836 17/23: New feature added: greader-compile.,
ELPA Syncer <=
- [elpa] externals/greader fe403c8ea1 05/23: Variable `greader-hyphen-regex' added., ELPA Syncer, 2022/10/26
- [elpa] externals/greader ae6e7524b9 23/23: Merge branch 'experimental', ELPA Syncer, 2022/10/26
- [elpa] externals/greader 1397216a72 08/23: Aggiunto il diario a .gitignore, ELPA Syncer, 2022/10/26
- [elpa] externals/greader 3e35f1ec72 01/23: Echo filtering of espeak process output disabled., ELPA Syncer, 2022/10/26
- [elpa] externals/greader e59b4b1d17 20/23: function greader-end-sentence-p removed, ELPA Syncer, 2022/10/26
- [elpa] externals/greader 80c0de7c66 02/23: function `greader-sentence-needs-dehyphenation' rewritten, ELPA Syncer, 2022/10/26