Add anki-editor-delete-note-at-point

It improves upon `anki-editor-delete-notes` when deleting note at
point, allowing aribtrary position in the note when calling it,
and also allowing deletion in Org. `anki-editor-delete-notes` is
removed.
This commit is contained in:
orgtre 2022-11-15 23:59:46 +01:00
parent 6ae4420e2a
commit 0928dd6465
2 changed files with 34 additions and 14 deletions

View file

@ -46,7 +46,7 @@
[""
("I" " insert note" anki-editor-insert-note :level 1)
("T" " set note type" anki-editor-set-note-type :level 1)
("d" " delete note" anki-editor-delete-notes :level 1)]]
("d" " delete note" anki-editor-delete-note-at-point :level 1)]]
[["Push"
("." " note at point " anki-editor-push-note-at-point :level 2)
("n" " new notes " anki-editor-push-new-notes :level 2)

View file

@ -1083,19 +1083,39 @@ matching non-empty `ANKI_FAILURE_REASON' properties."
(anki-editor-push-notes scope
(concat anki-editor-prop-failure-reason "<>\"\"")))
(defun anki-editor-delete-notes (noteids)
"Delete notes in NOTEIDS or the note at point."
(interactive (list (list (org-entry-get nil anki-editor-prop-note-id))))
(when (or (not (called-interactively-p 'interactive))
(yes-or-no-p
(format (concat "Do you really want to delete note %s? "
"This can't be undone.")
(nth 0 noteids))))
(anki-editor-api-call-result 'deleteNotes
:notes noteids)
(org-entry-delete nil anki-editor-prop-note-id)
(when (called-interactively-p 'interactive)
(message "Deleted note %s" (nth 0 noteids)))))
(defun anki-editor-delete-note-at-point (&optional prefix)
"Delete the note at point from Anki.
With PREFIX also delete it from Org."
(interactive "P")
(save-excursion
(let (note-type note-id)
(while
(and (org-back-to-heading)
(not (setq note-type
(org-entry-get nil anki-editor-prop-note-type)))
(org-up-heading-safe)))
(when (not note-type)
(user-error "No note to delete found"))
(setq note-id (condition-case nil
(string-to-number
(org-entry-get nil anki-editor-prop-note-id))
(error nil)))
(if (not note-id)
(if prefix
(message "Note at point is not in Anki (no note-id)")
(user-error "Note at point is not in Anki (no note-id)"))
(when (yes-or-no-p
(format (concat "Do you really want to delete note %s "
"from Anki?")
note-id))
(anki-editor-api-call-result 'deleteNotes
:notes (list note-id))
(org-entry-delete nil anki-editor-prop-note-id)
(message "Deleted note %s from Anki" note-id)))
(when prefix
(org-mark-subtree)
(kill-region nil nil t)
(message "Deleted note at point from Org")))))
(defun anki-editor-insert-note (&optional prefix note-type)
"Insert a note interactively.