Re: [O] [PATCH] Add feature to org-drill to auto pronounce word

2019-02-03 Thread Nicolas Goaziou
Hello,

Stig Brautaset  writes:

> stardiviner  writes:
>
> [...]
>
>> @@ -1486,7 +1521,7 @@ the current topic."
>>  (funcall test))
>>   (hide-subtree))
>> (push (point) drill-sections)))
>> -   "" 'tree))
>> +   nil 'tree))
>>  (reverse drill-sections)))
>
> Could we have this part of the patch applied separately? org-drill on
> Org 9.2 doesn't work for me without it. Other people have this problem
> too, as I found a reference to this fix here:
> https://emacs.stackexchange.com/a/46961/10625

I applied the whole thing (the fix plus the feature).

Thank you.

Regards,

-- 
Nicolas Goaziou



Re: [O] [PATCH] Add feature to org-drill to auto pronounce word

2019-02-01 Thread Stig Brautaset


stardiviner  writes:

[...]

> @@ -1486,7 +1521,7 @@ the current topic."
>  (funcall test))
>   (hide-subtree))
> (push (point) drill-sections)))
> -   "" 'tree))
> +   nil 'tree))
>  (reverse drill-sections)))

Could we have this part of the patch applied separately? org-drill on
Org 9.2 doesn't work for me without it. Other people have this problem
too, as I found a reference to this fix here:
https://emacs.stackexchange.com/a/46961/10625


Stig





Re: [O] [PATCH] Add feature to org-drill to auto pronounce word

2019-01-31 Thread stardiviner
Nicolas Goaziou  writes:

> Hello,
>
> stardiviner  writes:
>
>> Oh, sorry, seems yes.
>
> OK. A couple of comments if you don't mind.
>> +(defcustom org-drill-pronounce-command ""
>> +  "Org-drill pronounce command."
>> +  :type 'string
>> +  :safe #'stringp
>> +  :group 'org-drill)
>
> This is clearly not a safe command. You can remove the :safe keyword, or
> put :safe nil

Ok, I removed it. (I misunderstand it's functionality..)

>
>> +(defun org-drill-pronounce-word ()
>> +  "Pronounce word after querying."
>> +  (when org-drill-auto-pronounce
>> +(shell-command-to-string
>> + (format "%s %s %s &"
>> + org-drill-pronounce-command org-drill-pronounce-command-args
>> + (shell-quote-argument
>> +  (substring-no-properties
>> +   (org-get-heading 'no-tags 'no-todo 'no-priority 
>> 'no-comment)))
>
> Is there any reason to use `shell-command-to-string'? You don't seem to
> need the returned string anyway. Why not calling `start-process', or at
> least `async-shell-command'?

Changed to `start-process' now.

>
> Regards,

Also I add some new functionality, which can pronounce at anytime when
press the key [p] not just at start time.

I almost forgot my patch. I pressed [C-g] to interrupt it.

>From 73acb5177526f7bf5d621f45ca979ee7119c Mon Sep 17 00:00:00 2001
From: stardiviner 
Date: Sun, 27 Jan 2019 10:43:37 +0800
Subject: [PATCH] org-drill.el: Add feature let org-drill auto pronounce

* contrib/lisp/org-drill.el (org-drill-entry,
  org-drill-entry-before-hook, org-drill-entry-after-hook): Add two
  hooks around ~org-drill-entry~.
  (org-drill-auto-pronounce): option to toggle this functionality.
  (org-drill-pronounce-command,org-drill-pronounce-command-args): option
  to specify the pronounce command and arguments.
  (org-drill-pronounce-word): The real function to pronounce word.
  (org-drill-hide-subheadings-if): fix issue in Org 9.2 version.
---
 contrib/lisp/org-drill.el | 79 ---
 1 file changed, 66 insertions(+), 13 deletions(-)

diff --git a/contrib/lisp/org-drill.el b/contrib/lisp/org-drill.el
index c7f509bff..70d0dee4b 100644
--- a/contrib/lisp/org-drill.el
+++ b/contrib/lisp/org-drill.el
@@ -269,6 +269,9 @@ item.")
 (defvar org-drill--tags-key ?t
   "If this character is pressed during a drill session, edit the tags for
 the current item.")
+(defvar org-drill--pronounce-key ?p
+  "If this character is pressed during a drill session, pronounce for
+the current item.")
 
 
 (defcustom org-drill-card-type-alist
@@ -532,6 +535,35 @@ exponential effect on inter-repetition spacing."
   :type 'float)
 
 
+(defcustom org-drill-entry-before-hook nil
+  "A hook to run functions when every org-drill entry."
+  :type 'hook
+  :group 'org-drill)
+
+(defcustom org-drill-entry-after-hook nil
+  "A hook to run functions when every org-drill entry."
+  :type 'hook
+  :group 'org-drill)
+
+(defcustom org-drill-auto-pronounce t
+  "Auto pronounce org-drill word if non-nil."
+  :type 'boolean
+  :safe #'booleanp
+  :group 'org-drill)
+
+(defcustom org-drill-pronounce-command (executable-find "espeak")
+  "Org-drill pronounce command."
+  :type 'string
+  :group 'org-drill)
+
+(defcustom org-drill-pronounce-command-args
+  (if (string= org-drill-pronounce-command "/usr/bin/espeak")
+  "-v en")
+  "Org-drill pronounce command arguments."
+  :type 'string
+  :group 'org-drill)
+
+
 (defvar drill-answer nil
   "Global variable that can be bound to a correct answer when an
 item is being presented. If this variable is non-nil, the default
@@ -1364,8 +1396,9 @@ of QUALITY."
   (let ((ch nil)
 (input nil)
 (next-review-dates (org-drill-hypothetical-next-review-dates))
-(key-prompt (format "(0-5, %c=help, %c=edit, %c=tags, %c=quit)"
+(key-prompt (format "(0-5, %c=help, %c=pronounce, %c=edit, %c=tags, %c=quit)"
 org-drill--help-key
+			org-drill--pronounce-key
 org-drill--edit-key
 org-drill--tags-key
 org-drill--quit-key)))
@@ -1391,7 +1424,9 @@ How well did you do? %s"
  (round (nth 4 next-review-dates))
  (round (nth 5 next-review-dates))
  key-prompt)
-   (format "How well did you do? %s" key-prompt
+   (format "How well did you do? %s" key-prompt))
+		 (if (eq ch org-drill--pronounce-key)
+			 (org-drill-pronounce-word
 (cond
  ((stringp input)
   (setq ch (elt input 0)))
@@ -1486,7 +1521,7 @@ the current topic."
 (funcall test))
  (hide-subtree))
(push (point) drill-sections)))
-   "" 'tree))
+   nil 'tree))
 (reverse drill-sections)))
 
 
@@ -1511,7 +1546,8 @@ the current topic."
  (first fmt-and-args)
  (rest 

Re: [O] [PATCH] Add feature to org-drill to auto pronounce word

2019-01-30 Thread Nicolas Goaziou
Hello,

stardiviner  writes:

> Oh, sorry, seems yes.

OK. A couple of comments if you don't mind.
> +(defcustom org-drill-pronounce-command ""
> +  "Org-drill pronounce command."
> +  :type 'string
> +  :safe #'stringp
> +  :group 'org-drill)

This is clearly not a safe command. You can remove the :safe keyword, or
put :safe nil

> +(defun org-drill-pronounce-word ()
> +  "Pronounce word after querying."
> +  (when org-drill-auto-pronounce
> +(shell-command-to-string
> + (format "%s %s %s &"
> +  org-drill-pronounce-command org-drill-pronounce-command-args
> +  (shell-quote-argument
> +   (substring-no-properties
> +(org-get-heading 'no-tags 'no-todo 'no-priority 
> 'no-comment)))

Is there any reason to use `shell-command-to-string'? You don't seem to
need the returned string anyway. Why not calling `start-process', or at
least `async-shell-command'?

Regards,

-- 
Nicolas Goaziou



Re: [O] [PATCH] Add feature to org-drill to auto pronounce word

2019-01-29 Thread stardiviner

Nicolas Goaziou  writes:

> Hello,
>
> stardiviner  writes:
>
>> Nicolas Goaziou  writes:
>>
>>> Hello,
>>>
>>> stardiviner  writes:
>>>
 A gentle ping..
>>>
>>> I'm not sure "org-drill.el" is still actively maintained. I'm Cc'ing
>>> Paul Sexton. In the long run, I think this package could be packaged
>>> through ELPA instead.
>>
>> It is indeed not actively maintained. But still has some user are using
>> it. I found some recently used in Org Mode ML mentioned it.
>>
>> I will ping the author Paul Sexton, I would like to particited in
>> maintain it. If he agree to publish it to MELPA, I could help.
>
> Did you forget to add the new patch? Or is it intentional?
>
>
> Regards,

Oh, sorry, seems yes.

>From b95a90cbecdf4fa2f47079eed08d2395f2700d41 Mon Sep 17 00:00:00 2001
From: stardiviner 
Date: Sun, 27 Jan 2019 10:43:37 +0800
Subject: [PATCH] org-drill.el: Add feature let org-drill auto pronounce

* contrib/lisp/org-drill.el (org-drill-entry,
  org-drill-entry-before-hook, org-drill-entry-after-hook): Add two
  hooks around ~org-drill-entry~.
  (org-drill-auto-pronounce): option to toggle this functionality.
  (org-drill-pronounce-command,org-drill-pronounce-command-args): option
  to specify the pronounce command and arguments.
  (org-drill-pronounce-word): The real function to pronounce word.
  (org-drill-hide-subheadings-if): fix issue in Org 9.2 version.
---
 contrib/lisp/org-drill.el | 45 +--
 1 file changed, 43 insertions(+), 2 deletions(-)

diff --git a/contrib/lisp/org-drill.el b/contrib/lisp/org-drill.el
index c7f509bff..39785e7e3 100644
--- a/contrib/lisp/org-drill.el
+++ b/contrib/lisp/org-drill.el
@@ -532,6 +532,35 @@ exponential effect on inter-repetition spacing."
   :type 'float)
 
 
+(defcustom org-drill-entry-before-hook nil
+  "A hook to run functions when every org-drill entry."
+  :type 'hook
+  :group 'org-drill)
+
+(defcustom org-drill-entry-after-hook nil
+  "A hook to run functions when every org-drill entry."
+  :type 'hook
+  :group 'org-drill)
+
+(defcustom org-drill-auto-pronounce t
+  "Auto pronounce org-drill word if non-nil."
+  :type 'boolean
+  :safe #'booleanp
+  :group 'org-drill)
+
+(defcustom org-drill-pronounce-command ""
+  "Org-drill pronounce command."
+  :type 'string
+  :safe #'stringp
+  :group 'org-drill)
+
+(defcustom org-drill-pronounce-command-args ""
+  "Org-drill pronounce command arguments."
+  :type 'string
+  :safe #'stringp
+  :group 'org-drill)
+
+
 (defvar drill-answer nil
   "Global variable that can be bound to a correct answer when an
 item is being presented. If this variable is non-nil, the default
@@ -1486,7 +1515,7 @@ the current topic."
 (funcall test))
  (hide-subtree))
(push (point) drill-sections)))
-   "" 'tree))
+   nil 'tree))
 (reverse drill-sections)))
 
 
@@ -2163,6 +2192,15 @@ If ANSWER is supplied, set the global variable `drill-answer' to its value."
 (prog1 (org-drill-presentation-prompt)
   (org-drill-hide-subheadings-if 'org-drill-entry-p)
 
+(defun org-drill-pronounce-word ()
+  "Pronounce word after querying."
+  (when org-drill-auto-pronounce
+(shell-command-to-string
+ (format "%s %s %s &"
+	 org-drill-pronounce-command org-drill-pronounce-command-args
+	 (shell-quote-argument
+	  (substring-no-properties
+	   (org-get-heading 'no-tags 'no-todo 'no-priority 'no-comment)))
 
 (defun org-drill-entry ()
   "Present the current topic for interactive review, as in `org-drill'.
@@ -2202,6 +2240,7 @@ See `org-drill' for more details."
'org-drill-present-default-answer)
  present-empty-cards (third presentation-fn)
  presentation-fn (first presentation-fn)))
+	  (run-hook-with-args 'org-drill-entry-before-hook)
   (prog1
   (cond
((null presentation-fn)
@@ -2223,7 +2262,9 @@ See `org-drill' for more details."
   (save-excursion
 (funcall answer-fn
  (lambda () (org-drill-reschedule
-(org-remove-latex-fragment-image-overlays)))
+	(when org-drill-auto-pronounce org-drill-pronounce-word)
+	(run-hook-with-args 'org-drill-entry-after-hook)
+	(org-remove-latex-fragment-image-overlays)))
 
 
 (defun org-drill-entries-pending-p ()
-- 
2.20.1



-- 
[ stardiviner ]
   I try to make every word tell the meaning what I want to express.

   Blog: https://stardiviner.github.io/
   IRC(freenode): stardiviner, Matrix: stardiviner
   GPG: F09F650D7D674819892591401B5DF1C95AE89AC3
  


Re: [O] [PATCH] Add feature to org-drill to auto pronounce word

2019-01-27 Thread Nicolas Goaziou
Hello,

stardiviner  writes:

> Nicolas Goaziou  writes:
>
>> Hello,
>>
>> stardiviner  writes:
>>
>>> A gentle ping..
>>
>> I'm not sure "org-drill.el" is still actively maintained. I'm Cc'ing
>> Paul Sexton. In the long run, I think this package could be packaged
>> through ELPA instead.
>
> It is indeed not actively maintained. But still has some user are using
> it. I found some recently used in Org Mode ML mentioned it.
>
> I will ping the author Paul Sexton, I would like to particited in
> maintain it. If he agree to publish it to MELPA, I could help.

Did you forget to add the new patch? Or is it intentional?


Regards,

-- 
Nicolas Goaziou



Re: [O] [PATCH] Add feature to org-drill to auto pronounce word

2019-01-26 Thread stardiviner


Nicolas Goaziou  writes:

> Hello,
>
> stardiviner  writes:
>
>> A gentle ping..
>
> I'm not sure "org-drill.el" is still actively maintained. I'm Cc'ing
> Paul Sexton. In the long run, I think this package could be packaged
> through ELPA instead.

It is indeed not actively maintained. But still has some user are using
it. I found some recently used in Org Mode ML mentioned it.

I will ping the author Paul Sexton, I would like to particited in
maintain it. If he agree to publish it to MELPA, I could help.

>
>>> * etc/ORG-NEWS: mentioned this new feature.
>
> Changes to "contrib/" directory are usually not mentioned in this
> file.

Removed now.

>
>>> +(defun org-drill-pronounce-word ()
>>> +  "Pronounce word after querying."
>>> +  (if org-drill-auto-pronounce
>>> +  (shell-command-to-string
>>> +   (format "%s %s %s &"
>>> +  org-drill-pronounce-command org-drill-pronounce-command-args
>
> What are `org-drill-pronounce-command' and
> `org-drill-pronounce-command-args'? I don't see them defined anywhere.
>

I missed that. Now added.

> Also, please prefer `when' to one-armed `if'.

Modified.

>
>>> +  (shell-quote-argument
>>> +   (substring-no-properties
>>> +(org-get-heading 'no-tags 'no-todo 'no-priority 
>>> 'no-comment)))
>>> +
>>> +(add-hook 'org-drill-entry-after-hook #'org-drill-pronounce-word)
>
> Could it be more integrated? Using hook is usually for users. If you can
> modify the code, you probably can do better.

Modified now.

Those two hooks I think is necessary for user to add custom actions. So
keep them.

>
> Regards,

Regards :)

-- 
[ stardiviner ]
   I try to make every word tell the meaning what I want to express.

   Blog: https://stardiviner.github.io/
   IRC(freenode): stardiviner, Matrix: stardiviner
   GPG: F09F650D7D674819892591401B5DF1C95AE89AC3
  



Re: [O] [PATCH] Add feature to org-drill to auto pronounce word

2019-01-26 Thread Nicolas Goaziou
Hello,

stardiviner  writes:

> A gentle ping..

I'm not sure "org-drill.el" is still actively maintained. I'm Cc'ing
Paul Sexton. In the long run, I think this package could be packaged
through ELPA instead.

>> * etc/ORG-NEWS: mentioned this new feature.

Changes to "contrib/" directory are usually not mentioned in this file.

>> +(defun org-drill-pronounce-word ()
>> +  "Pronounce word after querying."
>> +  (if org-drill-auto-pronounce
>> +  (shell-command-to-string
>> +   (format "%s %s %s &"
>> +   org-drill-pronounce-command org-drill-pronounce-command-args

What are `org-drill-pronounce-command' and
`org-drill-pronounce-command-args'? I don't see them defined anywhere.

Also, please prefer `when' to one-armed `if'.

>> +   (shell-quote-argument
>> +(substring-no-properties
>> + (org-get-heading 'no-tags 'no-todo 'no-priority 
>> 'no-comment)))
>> +
>> +(add-hook 'org-drill-entry-after-hook #'org-drill-pronounce-word)

Could it be more integrated? Using hook is usually for users. If you can
modify the code, you probably can do better.

Regards,

-- 
Nicolas Goaziou



Re: [O] [PATCH] Add feature to org-drill to auto pronounce word

2019-01-24 Thread stardiviner


A gentle ping..

stardiviner  writes:

> I spend a little time to check out org-drill source code, to find out
> where I can insert hook to run function when presenting word.
>
> Then I finally found the place in ~org-drill-entry~. Here is my patch.
>
> From 81765e9395f5c0bec21d44aeaf16919d35a39eee Mon Sep 17 00:00:00 2001
> From: stardiviner 
> Date: Wed, 9 Jan 2019 16:25:38 +0800
> Subject: [PATCH] org-drill.el: Add feature let org-drill auto pronounce
>
> * contrib/lisp/org-drill.el (org-drill-entry,
>   org-drill-entry-before-hook, org-drill-entry-after-hook): Add two
>   hooks around ~org-drill-entry~.
>   (org-drill-auto-pronounce): option to toggle this functionality.
>   (org-drill-pronounce-word): The real function to pronounce word.
>   (org-drill-hide-subheadings-if): fix issue in Org 9.2 version.
>
> * etc/ORG-NEWS: mentioned this new feature.
> ---
>  contrib/lisp/org-drill.el | 31 ++-
>  etc/ORG-NEWS  |  3 +++
>  2 files changed, 33 insertions(+), 1 deletion(-)
>
> diff --git a/contrib/lisp/org-drill.el b/contrib/lisp/org-drill.el
> index c7f509bff..29a0cd8c9 100644
> --- a/contrib/lisp/org-drill.el
> +++ b/contrib/lisp/org-drill.el
> @@ -1486,7 +1486,7 @@ the current topic."
>  (funcall test))
>   (hide-subtree))
> (push (point) drill-sections)))
> -   "" 'tree))
> +   nil 'tree))
>  (reverse drill-sections)))
>  
>  
> @@ -2163,6 +2163,33 @@ If ANSWER is supplied, set the global variable 
> `drill-answer' to its value."
>  (prog1 (org-drill-presentation-prompt)
>(org-drill-hide-subheadings-if 'org-drill-entry-p)
>  
> +(defcustom org-drill-entry-before-hook nil
> +  "A hook to run functions when every org-drill entry."
> +  :type 'hook
> +  :group 'org-drill)
> +
> +(defcustom org-drill-entry-after-hook nil
> +  "A hook to run functions when every org-drill entry."
> +  :type 'hook
> +  :group 'org-drill)
> +
> +(defcustom org-drill-auto-pronounce t
> +  "Auto pronounce org-drill word if non-nil."
> +  :type 'boolean
> +  :safe #'booleanp
> +  :group 'org-drill)
> +
> +(defun org-drill-pronounce-word ()
> +  "Pronounce word after querying."
> +  (if org-drill-auto-pronounce
> +  (shell-command-to-string
> +   (format "%s %s %s &"
> +org-drill-pronounce-command org-drill-pronounce-command-args
> +(shell-quote-argument
> + (substring-no-properties
> +  (org-get-heading 'no-tags 'no-todo 'no-priority 
> 'no-comment)))
> +
> +(add-hook 'org-drill-entry-after-hook #'org-drill-pronounce-word)
>  
>  (defun org-drill-entry ()
>"Present the current topic for interactive review, as in `org-drill'.
> @@ -2202,6 +2229,7 @@ See `org-drill' for more details."
> 'org-drill-present-default-answer)
>   present-empty-cards (third presentation-fn)
>   presentation-fn (first presentation-fn)))
> +   (run-hook-with-args 'org-drill-entry-before-hook)
>(prog1
>(cond
> ((null presentation-fn)
> @@ -2223,6 +2251,7 @@ See `org-drill' for more details."
>(save-excursion
>  (funcall answer-fn
>   (lambda () (org-drill-reschedule
> + (run-hook-with-args 'org-drill-entry-after-hook)
>  (org-remove-latex-fragment-image-overlays)))
>  
>  
> diff --git a/etc/ORG-NEWS b/etc/ORG-NEWS
> index e06d0c09b..1bb485ad1 100644
> --- a/etc/ORG-NEWS
> +++ b/etc/ORG-NEWS
> @@ -49,6 +49,9 @@ alternative was removed and there is no more a :use-xcolor 
> options
>  since now it's implicitly always true.
>  
>  ** New features
> +*** Org-drill support auto pronounce word
> +You can set option ~org-drill-auto-pronounce~ to ~t~ to enable it
> +(This is default). You can disable it by setting it to ~nil~.
>  *** Add a dispatcher command to insert dynamic blocks
>  
>  You can add dynamic block into ~org-dynamic-block-alist~ with function
> -- 
> 2.20.1


-- 
[ stardiviner ]
   I try to make every word tell the meaning what I want to express.

   Blog: https://stardiviner.github.io/
   IRC(freenode): stardiviner, Matrix: stardiviner
   GPG: F09F650D7D674819892591401B5DF1C95AE89AC3
  



[O] [PATCH] Add feature to org-drill to auto pronounce word

2019-01-09 Thread stardiviner
I spend a little time to check out org-drill source code, to find out
where I can insert hook to run function when presenting word.

Then I finally found the place in ~org-drill-entry~. Here is my patch.

>From 81765e9395f5c0bec21d44aeaf16919d35a39eee Mon Sep 17 00:00:00 2001
From: stardiviner 
Date: Wed, 9 Jan 2019 16:25:38 +0800
Subject: [PATCH] org-drill.el: Add feature let org-drill auto pronounce

* contrib/lisp/org-drill.el (org-drill-entry,
  org-drill-entry-before-hook, org-drill-entry-after-hook): Add two
  hooks around ~org-drill-entry~.
  (org-drill-auto-pronounce): option to toggle this functionality.
  (org-drill-pronounce-word): The real function to pronounce word.
  (org-drill-hide-subheadings-if): fix issue in Org 9.2 version.

* etc/ORG-NEWS: mentioned this new feature.
---
 contrib/lisp/org-drill.el | 31 ++-
 etc/ORG-NEWS  |  3 +++
 2 files changed, 33 insertions(+), 1 deletion(-)

diff --git a/contrib/lisp/org-drill.el b/contrib/lisp/org-drill.el
index c7f509bff..29a0cd8c9 100644
--- a/contrib/lisp/org-drill.el
+++ b/contrib/lisp/org-drill.el
@@ -1486,7 +1486,7 @@ the current topic."
 (funcall test))
  (hide-subtree))
(push (point) drill-sections)))
-   "" 'tree))
+   nil 'tree))
 (reverse drill-sections)))
 
 
@@ -2163,6 +2163,33 @@ If ANSWER is supplied, set the global variable `drill-answer' to its value."
 (prog1 (org-drill-presentation-prompt)
   (org-drill-hide-subheadings-if 'org-drill-entry-p)
 
+(defcustom org-drill-entry-before-hook nil
+  "A hook to run functions when every org-drill entry."
+  :type 'hook
+  :group 'org-drill)
+
+(defcustom org-drill-entry-after-hook nil
+  "A hook to run functions when every org-drill entry."
+  :type 'hook
+  :group 'org-drill)
+
+(defcustom org-drill-auto-pronounce t
+  "Auto pronounce org-drill word if non-nil."
+  :type 'boolean
+  :safe #'booleanp
+  :group 'org-drill)
+
+(defun org-drill-pronounce-word ()
+  "Pronounce word after querying."
+  (if org-drill-auto-pronounce
+  (shell-command-to-string
+   (format "%s %s %s &"
+	   org-drill-pronounce-command org-drill-pronounce-command-args
+	   (shell-quote-argument
+		(substring-no-properties
+		 (org-get-heading 'no-tags 'no-todo 'no-priority 'no-comment)))
+
+(add-hook 'org-drill-entry-after-hook #'org-drill-pronounce-word)
 
 (defun org-drill-entry ()
   "Present the current topic for interactive review, as in `org-drill'.
@@ -2202,6 +2229,7 @@ See `org-drill' for more details."
'org-drill-present-default-answer)
  present-empty-cards (third presentation-fn)
  presentation-fn (first presentation-fn)))
+	  (run-hook-with-args 'org-drill-entry-before-hook)
   (prog1
   (cond
((null presentation-fn)
@@ -2223,6 +2251,7 @@ See `org-drill' for more details."
   (save-excursion
 (funcall answer-fn
  (lambda () (org-drill-reschedule
+	(run-hook-with-args 'org-drill-entry-after-hook)
 (org-remove-latex-fragment-image-overlays)))
 
 
diff --git a/etc/ORG-NEWS b/etc/ORG-NEWS
index e06d0c09b..1bb485ad1 100644
--- a/etc/ORG-NEWS
+++ b/etc/ORG-NEWS
@@ -49,6 +49,9 @@ alternative was removed and there is no more a :use-xcolor options
 since now it's implicitly always true.
 
 ** New features
+*** Org-drill support auto pronounce word
+You can set option ~org-drill-auto-pronounce~ to ~t~ to enable it
+(This is default). You can disable it by setting it to ~nil~.
 *** Add a dispatcher command to insert dynamic blocks
 
 You can add dynamic block into ~org-dynamic-block-alist~ with function
-- 
2.20.1



-- 
[ stardiviner ]
   I try to make every word tell the meaning what I want to express.

   Blog: https://stardiviner.github.io/
   IRC(freenode): stardiviner, Matrix: stardiviner
   GPG: F09F650D7D674819892591401B5DF1C95AE89AC3