diff options
| author | Phillip Lord <phillip.lord@russet.org.uk> | 2019-04-08 10:28:21 +0100 |
|---|---|---|
| committer | Phillip Lord <phillip.lord@russet.org.uk> | 2019-04-08 10:28:21 +0100 |
| commit | ef9bad812cbd22e3fdf5e18095fb95ed9fb52384 (patch) | |
| tree | be3bf2345e9b2d1bfb9d9a95397a8e832254fb03 | |
| parent | ef79a22735d66c2f18b21ec4ad41109ad4675b8e (diff) | |
| download | org-drill-ef9bad812cbd22e3fdf5e18095fb95ed9fb52384.tar.gz org-drill-ef9bad812cbd22e3fdf5e18095fb95ed9fb52384.zip | |
Explain tags now inherit
Previously, explanation tags were placed on the entry requiring an
entry; now they are placed on the entry providing the explanation and
inherited. It is also possible to provide multiple explanations at
several levels.
| -rw-r--r-- | org-drill.el | 47 |
1 files changed, 31 insertions, 16 deletions
diff --git a/org-drill.el b/org-drill.el index bdafb40..4bc8dde 100644 --- a/org-drill.el +++ b/org-drill.el @@ -3687,19 +3687,32 @@ returns its return value." ;; org-drill :explain: implementations -(defun org-drill-get-parent-entry-text () - "Fetch the text from the parent entry" +(defun org-drill-get-explain-text (&optional existing-text) + "Fetch the explaination texts for this entry. + +Explaination text is found in parent entries with an :explain: +tag. If there are multiple parents entries with such a tag, all +of them are returned. + +Returns a list of strings." (save-excursion (save-restriction (widen) - (outline-up-heading 1 t) - (org-drill-get-entry-text)))) + (if (>= 1 (funcall outline-level)) + existing-text + (outline-up-heading 1 t) + (if (org-drill-explain-entry-p t) + (org-drill-get-explain-text + (cons + (org-drill-get-entry-text) + existing-text)) + existing-text))))) (defvar org-drill-explain-overlay nil) -(defun org-drill-explain-entry-p () +(defun org-drill-explain-entry-p (&optional no-inherit) "Returns non-nil if an entry is associated with explanation" - (member "explain" (org-get-tags nil t))) + (member "explain" (org-get-tags nil no-inherit))) (defun org-drill-end-of-entry-pos () (save-excursion @@ -3707,16 +3720,18 @@ returns its return value." (point))) (defun org-drill-explain-answer-presenter () - (when org-drill-explain-overlay - (delete-overlay org-drill-explain-overlay)) - (let* ((end (org-drill-end-of-entry-pos)) - (ov (make-overlay - end end - (current-buffer)))) - (overlay-put ov 'after-string - (concat "\n\nExplanation:\n\n" - (org-drill-get-parent-entry-text))) - (setq org-drill-explain-overlay ov))) + (save-excursion + (when org-drill-explain-overlay + (delete-overlay org-drill-explain-overlay)) + (let* ((end (org-drill-end-of-entry-pos)) + (ov (make-overlay + end end + (current-buffer)))) + (overlay-put ov 'after-string + (format "\n\nExplanation:\n\n%s" + (mapconcat 'identity + (org-drill-get-explain-text) "\n\n"))) + (setq org-drill-explain-overlay ov)))) (defun org-drill-explain-cleaner () (when org-drill-explain-overlay |
