>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