Giter VIP home page Giter VIP logo

incremental-writing's Introduction

Incremental Writing Plugin for Obsidian

This plugin allows you to do incremental writing in Obsidian. In incremental writing you add notes and blocks from your Obsidian vault to prioritised queues to be reviewed incrementally over time.

If you are interested in learning more about this plugin and incremental writing in general, here are some resources you may find useful:

Also, if you find incremental writing useful, you should definitely check out incremental reading!

Support

I want to put all of my energy into these projects and work on them full time! I also want to keep as much of my content open source and freely available as possible. That those seeking knowledge may find it!

If you would like to support my work, I have a Patreon page with rewards for each tier or you can buy me a coffee.

Using the plugin

Notes

  • This plugin adds a button to the search pane using private Obsidian APIs which could cause the plugin to break when Obsidian updates until I have time to fix it.
  • The Obsidian API is in early alpha so this plugin could break (temporarily) after an update.
  • I strongly recommend installing the Natural Language Dates plugin alongside this plugin because it allows you to use natural language when you are asked to provide a date eg. "tomorrow" or "in two weeks", rather than having to type out a date like "2020-02-02".
  • This plugin is not supported on mobile! (yet)

Important! Priorities

  • Confusingly, low priority numbers correspond to high priorities! That means your daily queue of repetitions will be sorted from lowest priority number (most important) to highest priority number (least important). This is because this is the way priorities work in SuperMemo and having used it for a couple years I just got used to thinking about it like that. I didn't realise how confusing this could be until someone mentioned it in an issue. Apologies for any confusion!

Features

Commands

  • Load a queue: The plugin supports multiple incremental writing queues that you can switch between using a fuzzy search menu. This command uses a fuzzy search component to search in the queue folder specified in the settings for queue files.
  • Open queue in current pane: Open the currently loaded queue in the current pane. You can check which queue is currently loaded by looking at the status bar at the bottom of the Obsidian window.
  • Open queue in new pane: Same as above, but open the currently loaded queue in a new pane.
  • Add note to queue: Adds the active note in Obsidian to the currently loaded incremental writing queue.
  • Add block to queue: Adds the current block to the currently loaded incremental writing queue.
  • Current repetition: Goes to the current repetition for the currently loaded queue.
  • Next repetition: Goes to the next repetition for the currently loaded queue.
  • Edit current repetition data: Edit the interval, priority, next repetition date or notes for the current repetition.
  • Next repetition and manually schedule: Executes next repetition and opens a modal for you to edit the next repetition date and interval manually.
  • Dismiss current repetition: Dismiss the current repetition from the queue. This note or block will not show up again for review.
  • Add links within the current note to a queue: Add any links to other notes within the current note to a queue.
  • Bulk add blocks with references to queue: Add all of the blocks with "^references" to an incremental writing queue.
  • Add note to queue through a fuzzy finder: Opens a fuzzy finder which you can use to add any note in your vault to the current incremental writing queue.
  • Add search results to a queue: Do a search and click the "Add to IW Queue" button at the top of the search pane to add all of the results to a queue.
  • Add folders, files and links to a queue: You can also right click on folders, files and links to add them to queues through the context menu.

Automatically Add Notes to Queues

There are some options for automatically adding notes to queues.

  • Auto add notes using tags: In the settings page you can define a list of queue names and associated tags. When you modify a note, the plugin will check to see if a queue tag was added. If so, the note will automatically get added to the queue. This mapping only applies to newly created notes, ie. when you install the plugin it won't automatically add all notes with a given tag to a queue. So the recommended workflow is to begin by searching for all notes with a given tag and adding those to a queue using the "add search results to queue" function (see above). Then you can set up the queue to tag mapping in the settings to make sure that future notes with a given tag get added to the queue.

  • Auto add new notes option: When toggled on in the settings, new will automatically get added to the default queue. I recommend using the tag method above rather than this because using tags gives you more control over which notes get added and which queue(s) they get added to.

Scheduling Options

There are currently two scheduling styles to choose from: A-Factor and Simple.

  • Simple: When you hit next repetition, the current repetition gets pushed to the end of the queue by setting its priority to 99.
  • A-Factor: When you hit next repetition, the interval between repetitions gets multiplied by the A-Factor to work out the next repetition date.

incremental-writing's People

Contributors

bjsi avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

incremental-writing's Issues

Trouble using bulk add options

You can also add the output from an inbuilt search to a queue. Do a search and click the button at the top of the search pane to try it out. You can also right click on folders, files and links to add them to queues through the context menu.

I'm having trouble using any of these methods of adding notes in bulk to the queue. I can't really find the new button at the top of the search pane. And right clicking on files/folders doesn't show anything related to the plugin? Adding everything to the initial queue would really make it easy to get going with IW!

neural review

From: https://help.supermemo.org/wiki/Neural_creativity

Spreading activation algorithm
Neural review will go through the sequence determined by spreading activation. In that activation, concepts have higher priority than links, or knowledge tree. However, knowledge tree will be participating as well (with lower weights). Activation will spread slowly to unrelated sibling articles whose relative priorities will increase in absence of children, concept links, and the like. In other words, only small collections will make neural review pointless. Concept maps are not obligatory.

Priorities are combined to determine the spread of activation:

associated concepts are added to the queue at CombinedPriority(Priority,0.01)
links are added at CombinedPriority(Priority,0.05)
descendants at CombinedPriority(Priority,0.16)
siblings at CombinedPriority(Priority,0.26) (or up to 0.5 for unrelated siblings containing full articles)
The procedure is repeated recursively with successive layers taking random picks from the queue such that a pick is more likely for a higher priority

function CombinePriority(OriginalP,GroupP:real):real;
//e.g. element of P=0.2 for a group of P=0.6 should yield (1-0.2)(1-0.6)=0.32
var OP,GP:real;
begin
OP:=1-OriginalP;
GP:=1-GroupP;
Result:=1-OP*GP;
end;
This is the status for Feb 26, 2016. The sequence, priorities, and other parameters will change in the future. It all depends on user feedback and field tests.

Silent error if queue folder exists

Upon installing the plugin, I configured it to use a queue file of "To Review" under my "Inbox" folder, then tried to open the queue file. Nothing happened, so I checked the console and saw "Error: Folder already exists". Apparently the default queue creation unconditionally tries to create a folder, rather than verifying whether the folder exists first.

(It's also not clear to me why there are separate settings for the file and folder names in the first place, vs. using a single note specifier field (with suggestions) as is done by the Zettelkasten prefixer, daily notes, and other plugins' settings for template files.)

Remove deleted notes from the queue

Hi! This plugin is amazing, thank you a lot for the effort you put in.

Would it be possible to automatically remove deleted notes from the queue? Otherwise the plugin creates empty notes with the header once they come up in the queue.

Cleaning Up

  • Refactor a little bit
  • Error checking, handling and logging

Status bar

  • whether the active note is in your queue
  • show the priority
  • show notes
  • ability to change priority of the current repetition

create "dependency subset reviews"

"For each linked note in the current note, find the notes / blocks that are linked to from the current note. If any are part of my incremental writing queue, show them to me in order of priority"

No loading plugin on mobile

Great plugin. Really useful.
So far only issue for me is I can't use it on mobile.
Happy to test it out on mobile if you would like.

Feature Request: inbox processing

I really like the concept of inbox processing from Andy Matuschak and it seems like this plugin could support it with a few tweaks. Would it be possible to add options when marking a repetition complete to adjust the interval time like shown in this video: https://www.youtube.com/watch?v=zG5r7QIY_TM (where you can set it to normal repetition time, sooner, or later)

Add suggestions from @pjeby on the Obsidian Discord

Huge thanks to @pjeby for these suggestions:

FYI, there are some problems with your versioning. manifest.json is missing the version number, and your version tags must not start with a 'v'. Also, you have an unused private function ellipsis. But the concept of the plugin is intriguing and I'll want to give it a try some time.

Oh, also, you don't need to put (IW) at the end of all your command names because they'll be listed in the command palette as "Obsidian Incremental Writing Plugin: Next repetition"

Which incidentally, there is no reason to include the words "Obsidian" or "Plugin" in the name field of your manifest, as they will be redundant when displayed in Obsidian's list of plugins. ๐Ÿ˜‰

So calling it just "Incremental Writing" would suffice and result in command names like "Incremental Writing: Next repetition"

The idea of using a markdown table as a (link-preserving) database was very clever, though. I'm curious how it handles names or text with | in, as I didn't look at how parsing or rendering are done yet.

The idea of using a markdown table as a (link-preserving) database was very clever, though. I'm curious how it handles names or text with | in, as I didn't look at how parsing or rendering are done yet.

Be sure to put in a PR to the obsidianmd/obsidian-releases repo to get it included in the official plugin directory once you do. I'm really looking forward to using it, and to some of your planned improvements. Btw, do you have any plan to allow targeting sections, or just blocks and notes?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.