Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time

ir.el - Incremental Reading

The term is orginally coined by Piotr Wozniak and he describes it as:

Incremental reading is a learning technique that makes it possible to read thousands of articles at the same time without getting lost. Incremental reading begins with importing articles from electronic sources, e.g. the Internet. The student then extracts the most important fragments of individual articles for further review. Extracted fragments are then converted into questions and answers. These in turn become subject to systematic review and repetition that maximizes the long-term recall.

Introduction to Incremental Reading

This project aims to cover all the useful features of incremental reading. The main features I have implemented so far are scheduling of material and extraction from PDFs.

The current way to create questions and clozes out of the extracts is to write them out using ankifier but I want to improve on this in the future.





  • 0.7.0:
    • Refactor (ir-start-session).
    • Fix issues in the algorithm.
    • Add org-roam integration.
    • Generalize (ir–check-duplicate)
  • 0.6.0: Add session functions (ir-start-session).
  • 0.5.0: Add editing function (ir-edit-update-column).
  • 0.4.0: Add function (ir-add-bibtex-entry).
  • 0.3.0: Add basic view by due functions.
  • 0.2.0: Add basic persistent highlighting functions.
  • 0.1.0: Initial release with basic extraction functions.

What’s Next?

  • [ ] Implement ordering by priority.
  • [ ] Video playback (vlc vs mpv).
    • [ ] From YouTube.
    • [ ] From local files.
  • [ ] Change the affinity for priority from INTEGER to REAL.
  • [ ] Create a heading of a pdf even if the pdf is not in the db.
  • [ ] Research the possibility of sioyek integration

    Release 1.4.0 of sioyek adds the ability to control a running instance of sioyek with the command line.

Implementation of question creation

I see a reason to implement a way to create basic or cloze questions. This is not SuperMemo and I’ve already worked out a way to create basic and cloze cards using ankifier.el. Such that the form of my final workflow would be:



Design of the Database

Using emacsql I created the following table.

idTEXTUnique ID using org-id
dateINTEGERDate of next repetition
typeTEXTType of file (org-mode, pdf)
pathTEXTPath to file if applicalble

One of my goals is to support as many possible file types as possible. This would allow one to incrementally learn any piece of material. This also allows others to easily extend the program by including their favorite file types and programs to open them.

One way to query the database is to sort the ir table by date, then match the file type to a function that opens that file type.

Such files have a path which is inserted in the path column.


File typeMethodDescription.
textorg-id-findA simple org heading.
pdfdired-find-fileA pdf file.
mp4@TODOA video.

Algorithm Design

I use a simplified SM2 algorithm to calculate the intervals. The A Factor increases by 0.08 per repetition.

$\text{New Interval} = \text{round}(\text{Old Interval} × \text{A Factor})$

$\text{New Date} = \text{Old Date} + \text{New Interval}$


Incremental Reading for Emacs & Org-mode