diff options
-rw-r--r-- | lisp/acdw-org.el | 44 |
1 files changed, 27 insertions, 17 deletions
diff --git a/lisp/acdw-org.el b/lisp/acdw-org.el index 7e9fecd..dc85015 100644 --- a/lisp/acdw-org.el +++ b/lisp/acdw-org.el | |||
@@ -79,23 +79,33 @@ appropriate. In tables, insert a new row or end the table." | |||
79 | (org-insert-todo-heading nil)) | 79 | (org-insert-todo-heading nil)) |
80 | 80 | ||
81 | ((org-in-item-p) | 81 | ((org-in-item-p) |
82 | ;; Plain list. Yes, this gets a little complicated... | 82 | ;; Plain list |
83 | (let ((context (org-element-context))) | 83 | (let* ((context (org-element-context)) |
84 | (if (or (eq 'plain-list (car context)) ; First item in list | 84 | (first-item-p (eq 'plain-list (car context))) |
85 | (and (eq 'item (car context)) | 85 | (itemp (eq 'item (car context))) |
86 | (not (eq (org-element-property | 86 | (emptyp (eq (org-element-property :contents-begin context) |
87 | :contents-begin context) | 87 | (org-element-property :contents-end context))) |
88 | (org-element-property | 88 | (item-child-p |
89 | :contents-end context)))) | 89 | (unpackaged/org-element-descendant-of 'item context))) |
90 | ;; Element in list item, e.g. a link | 90 | (message "(or %S (and %S %S) %S)" |
91 | (unpackaged/org-element-descendant-of 'item context)) | 91 | first-item-p |
92 | ;; Non-empty item: Add new item. | 92 | itemp (not emptyp) |
93 | (org-insert-item) | 93 | item-child-p) |
94 | ;; Empty item: Close the list. | 94 | ;; The original function from unpackaged just tested the (or ...) test |
95 | ;; TODO: Do this with org functions rather than operating | 95 | ;; in this cond, in an if. However, that doesn't auto-end nested |
96 | ;; on the text. Can't seem to find the right function. | 96 | ;; lists. So I made this form a cond and added the (and...) test in |
97 | (delete-region (line-beginning-position) (line-end-position)) | 97 | ;; the first position, which is clunky (the delete-region... stuff |
98 | (insert "\n")))) | 98 | ;; comes twice) and might not be needed. More testing, obviously, but |
99 | ;; for now, it works well enough. | ||
100 | (cond ((and itemp emptyp) | ||
101 | (delete-region (line-beginning-position) (line-end-position)) | ||
102 | (insert "\n\n")) | ||
103 | ((or first-item-p | ||
104 | (and itemp (not emptyp)) | ||
105 | item-child-p) | ||
106 | (org-insert-item)) | ||
107 | (t (delete-region (line-beginning-position) (line-end-position)) | ||
108 | (insert "\n"))))) | ||
99 | 109 | ||
100 | ((when (fboundp 'org-inlinetask-in-task-p) | 110 | ((when (fboundp 'org-inlinetask-in-task-p) |
101 | (org-inlinetask-in-task-p)) | 111 | (org-inlinetask-in-task-p)) |