From mboxrd@z Thu Jan 1 00:00:00 1970 From: stardiviner Subject: Re: [PATCH] Add feature to org-drill to auto pronounce word Date: Thu, 24 Jan 2019 22:25:34 +0800 Message-ID: <87a7jqdtep.fsf@gmail.com> References: <87r2dmmd8g.fsf@gmail.com> Reply-To: numbchild@gmail.com Mime-Version: 1.0 Content-Type: text/plain Return-path: Received: from eggs.gnu.org ([209.51.188.92]:53878) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gmgSM-0001ig-Ig for emacs-orgmode@gnu.org; Thu, 24 Jan 2019 09:58:15 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gmgSL-0001sI-4a for emacs-orgmode@gnu.org; Thu, 24 Jan 2019 09:58:14 -0500 Received: from [115.236.250.197] (port=47558 helo=dark.localdomain) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gmgSJ-0001c5-KM for emacs-orgmode@gnu.org; Thu, 24 Jan 2019 09:58:13 -0500 In-reply-to: <87r2dmmd8g.fsf@gmail.com> List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Sender: "Emacs-orgmode" To: org-mode Cc: Nicolas Goaziou 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