|
@@ -1976,23 +1976,6 @@ visible content of the card."
|
|
|
(org-drill-hide-subheadings-if 'org-drill-entry-p)))))
|
|
|
|
|
|
|
|
|
-;;; The following macro is necessary because `org-save-outline-visibility'
|
|
|
-;;; currently discards the value returned by its body and returns a garbage
|
|
|
-;;; value instead. (as at org mode v 7.5)
|
|
|
-
|
|
|
-(defmacro org-drill-save-visibility (&rest body)
|
|
|
- "Store the current visibility state of the org buffer, and restore it
|
|
|
-after executing BODY. Return the value of the last expression
|
|
|
-in BODY."
|
|
|
- (let ((retval (gensym)))
|
|
|
- `(let ((,retval nil))
|
|
|
- (org-save-outline-visibility t
|
|
|
- (setq ,retval
|
|
|
- (progn
|
|
|
- ,@body)))
|
|
|
- ,retval)))
|
|
|
-
|
|
|
-
|
|
|
(defun org-drill-entry ()
|
|
|
"Present the current topic for interactive review, as in `org-drill'.
|
|
|
Review will occur regardless of whether the topic is due for review or whether
|
|
@@ -2012,38 +1995,41 @@ See `org-drill' for more details."
|
|
|
;; (org-back-to-heading))
|
|
|
(let ((card-type (org-entry-get (point) "DRILL_CARD_TYPE"))
|
|
|
(answer-fn 'org-drill-present-default-answer)
|
|
|
- (cont nil))
|
|
|
- (org-drill-save-visibility
|
|
|
- (save-restriction
|
|
|
- (org-narrow-to-subtree)
|
|
|
- (org-show-subtree)
|
|
|
- (org-cycle-hide-drawers 'all)
|
|
|
-
|
|
|
- (let ((presentation-fn (cdr (assoc card-type org-drill-card-type-alist))))
|
|
|
- (if (listp presentation-fn)
|
|
|
- (psetq answer-fn (or (second presentation-fn)
|
|
|
- 'org-drill-present-default-answer)
|
|
|
- presentation-fn (first presentation-fn)))
|
|
|
- (cond
|
|
|
- ((null presentation-fn)
|
|
|
- (message "%s:%d: Unrecognised card type '%s', skipping..."
|
|
|
- (buffer-name) (point) card-type)
|
|
|
- (sit-for 0.5)
|
|
|
- 'skip)
|
|
|
- (t
|
|
|
- (setq cont (funcall presentation-fn))
|
|
|
- (cond
|
|
|
- ((not cont)
|
|
|
- (message "Quit")
|
|
|
- nil)
|
|
|
- ((eql cont 'edit)
|
|
|
- 'edit)
|
|
|
- ((eql cont 'skip)
|
|
|
- 'skip)
|
|
|
- (t
|
|
|
- (save-excursion
|
|
|
- (funcall answer-fn
|
|
|
- (lambda () (org-drill-reschedule)))))))))))))
|
|
|
+ (cont nil)
|
|
|
+ ;; fontification functions in `outline-view-change-hook' can cause big
|
|
|
+ ;; slowdowns, so we temporarily bind this variable to nil here.
|
|
|
+ (outline-view-change-hook nil))
|
|
|
+ (org-save-outline-visibility t
|
|
|
+ (save-restriction
|
|
|
+ (org-narrow-to-subtree)
|
|
|
+ (org-show-subtree)
|
|
|
+ (org-cycle-hide-drawers 'all)
|
|
|
+
|
|
|
+ (let ((presentation-fn (cdr (assoc card-type org-drill-card-type-alist))))
|
|
|
+ (if (listp presentation-fn)
|
|
|
+ (psetq answer-fn (or (second presentation-fn)
|
|
|
+ 'org-drill-present-default-answer)
|
|
|
+ presentation-fn (first presentation-fn)))
|
|
|
+ (cond
|
|
|
+ ((null presentation-fn)
|
|
|
+ (message "%s:%d: Unrecognised card type '%s', skipping..."
|
|
|
+ (buffer-name) (point) card-type)
|
|
|
+ (sit-for 0.5)
|
|
|
+ 'skip)
|
|
|
+ (t
|
|
|
+ (setq cont (funcall presentation-fn))
|
|
|
+ (cond
|
|
|
+ ((not cont)
|
|
|
+ (message "Quit")
|
|
|
+ nil)
|
|
|
+ ((eql cont 'edit)
|
|
|
+ 'edit)
|
|
|
+ ((eql cont 'skip)
|
|
|
+ 'skip)
|
|
|
+ (t
|
|
|
+ (save-excursion
|
|
|
+ (funcall answer-fn
|
|
|
+ (lambda () (org-drill-reschedule)))))))))))))
|
|
|
|
|
|
|
|
|
(defun org-drill-entries-pending-p ()
|
|
@@ -3013,4 +2999,3 @@ returns its return value."
|
|
|
|
|
|
|
|
|
(provide 'org-drill)
|
|
|
-
|