Skip to content

What would be included in a first iteration of CAN?

Each point will be expanded on as I get around to it

  • CAN is a REPL-like (readline) command-line environment
  • The CAN list command should show the names of your notes
  • scratchfiles have the .z extension
  • scratchfiles have a 'fold'
  • Add notes from a scratchfile
  • CAN will have an init command
  • the notebook is stored in the .can directory
  • a note is stored using its AST
  • notes are identified by their hashes
  • internal links use hashes
  • notes are written in a subset of markdown
  • notes can be exported as markdown (including transclusion or not)
  • notes can be exported as HTML (using marked renderer)
  • the notebook is append only
  • existing notes can be edited in a scratchfile
  • internal links for a note can be enumerated
  • internal links for a note can be followed in-REPL
  • the content of an internal link can be displayed in a scratchfile
  • backlinks have context
  • backlinks for a note can be enumerated
  • backlinks for a note can be followed in-REPL
  • backlink context for a note can be displayed in a scratchfile
  • full backlink content can be displayed in a scratchfile
  • one note may have many names
  • you can assign names to a note
  • you can remove names from a note
  • when a note is edited, links which target it point to the edited note
  • changes generate patches, which can be applied
  • full-text search from in-REPL
  • in-REPL notes are rendered with enumerated links displayed using note names (not addresses)
  • in-REPL notes are rendered in chunks with next/prev style navigation
  • transclusion can be used to compose notes
  • a way to handle empty links in notes (search w/ link text to suggest links or allow a new note creation directly from an empty link)
  • note names have no spaces / restricted character set

explicit wont haves (these are for later)

  • namespaces (assume all notes are in the root namespace for a notebook)
  • extra metadata (semantic links / semantic marks)
  • 'refactoring' tools
    • splitting / merging notes or namespaces
    • not having these makes distributed / multiuser notebooks harder
  • tab-completion in-REPL