Efficiently create Anki flashcards from your notes.
I created this package to facilitate faster creation of Anki cards while I study utilizing the fantastic text editing of Emacs.
Requires Emacs 27.2+.Dependencies:
expand-region.el(link).
Recommended package:
anki-editorWhile not required, this is theanki-editorpackage that allows the output of my package to be sent to Anki (utilizing the AnkiConnect addon).
Then put this file in your load-path, and put this in your init file:
Clone the repository.
git clone https://www.github.com/adham-omran/ankifierLoad the package.
(load! "/path/to/ankifier/ankifier.el")
(require 'ankifier)Run one of these commands on an active region:
ankifier-create-basic-from-region: Create Basic question(s) from active region.ankifier-create-cloze-from-region: Create Cloze question(s) from active region.ankifier-create-from-region: Parse basic and cloze questions in the active region.ankifier-find-to-be-ankified: Interactively search the buffer for un-ankified questions and prompt to ankify them.
Variables
- Set
ankifier-insert-elsewheretotif you want the questions to be created under a* Cardsorg heading (This is what I mostly do).The name of the heading can be modified through
ankifier-cards-heading. - Set
ankifier-context-questiontotif you want to use contextual questions, see examples for uses. - Set
ankifier-feedbacktotif you notes you ankify to have ANKIFIED at the start of the text to indicate that this has been ankified. Useful when you return to your notes after a while and wonder if you Ankified something or not. ankifier-anki-cloze-note-typesets the card type for cloze cards.ankifier-anki-basic-note-typesets the card type for basic cards.ankifier-anki-decksets the Anki deck to push cards to (default: “All”).ankifier-anki-tagssets the tags to apply to created cards (default: “”).- Set
ankifier-arabictotto use Arabic question marks (؟) instead of Latin (?).
For a basic question, the questions must be separated by two newlines and have a single question mark to indicate the Question part and the Answer part.
For a cloze question, the sentences must be separated by two new lines.
What is Emacs?
An extensible, customizable, free/libre text editor — and more.
When was Emacs 27.2 released?
Mar 25, 2021.
Emacs is an {{c1::extensible}}, {{c2::customizable}}, free/libre {{c2::text
editor::application type}} — and more.
Context: Question?
Context: Cloze.
Geography: What's the capital of France?
Paris.
Geography: {{c1::Paris}} is the capital of France.
This results in the “:” being replaced with two newline characters.
This is the config I’m using at the moment.
(setq ankifier-insert-elsewhere t
ankifier-anki-basic-note-type "E-Basic"
ankifier-anki-cloze-note-type "E-Cloze"
ankifier-anki-deck "My Deck"
ankifier-anki-tags "study"
ankifier-arabic nil
ankifier-feedback t
ankifier-context-question t)- You can customize settings in the
ankifiergroup. - Check out Power up Anki with Emacs, Org mode, anki-editor and more for ideas about general anki-editor use and how to get code highlighting working properly.
Extra fields can be added to generated cards via the ankifier--extra-fields
variable. It holds a list of plists, each with three keys:
field-name— The name of the field in your Anki note template (e.g. “Source”).source-name— The keyword or property name to read the value from.source-type— How to retrieve the value:file— reads from an org file keyword (e.g.#+SOURCE_NAME: value). All cards in the file get the same value.property— reads from an org property drawer (e.g.:SOURCE_NAME: value). Supports inheritance, so different headings can have different values.
Given this in your org file:
#+SOURCE_NAME: Introduction to Algorithms
And this configuration:
(setq ankifier--extra-fields
'(( field-name "Source" source-name "SOURCE_NAME" source-type file )))Each generated card will include a “Source” field with the value “Introduction to Algorithms”.
Given this in your org file:
* Chapter 1
:PROPERTIES:
:SOURCE_NAME: Introduction to Algorithms, Ch. 1
:END:
What is an algorithm?
A well-defined computational procedure.
* Chapter 2
:PROPERTIES:
:SOURCE_NAME: Introduction to Algorithms, Ch. 2
:END:
What is insertion sort?
A sorting algorithm that builds the sorted array one item at a time.
And this configuration:
(setq ankifier--extra-fields
'(( field-name "Source" source-name "SOURCE_NAME" source-type property )))Cards created under “Chapter 1” will have Source: Introduction to Algorithms, Ch. 1,
while cards under “Chapter 2” will have Source: Introduction to Algorithms, Ch. 2.
- 1.4.2: Fix a bug where a space after
::broke cloze deletion cards. - 1.4.1: Fix bug with multiple ‘:’ in a question for the basic card type.
- 1.4.0: Add the function
ankifier-find-to-be-ankified. Remove dependency oncl-lib. - 1.3.0: Add the function
ankifier-create-from-region. - 1.2.0: Add the ability to include feedback for ankified notes.
- 1.1.0: Add the ability to format contextual questions.
- 1.0.0: Initial release.
- [ ] Fix author on old commits
