Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Editor, formatting, checklists, saving and titles

The note editor (EditorSession/EditorEngine in the shared core, EditText on Android, UITextView on iOS), autosave and note titles. Decisions: D-08, D-12, D-14, D-22, D-23, D-28, D-30.

Formatting and structure

  • Bold on a selection
    • Shared: EditorSessionTest.boldSelection
    • Android UI: NoteEditingUiTest.formattingToolShowsItsState
    • iOS UI: NoteEditingUITests.FormattingToolShowsItsState
  • Bold with nothing selected applies to what’s typed next
    • Shared: EditorSessionTest.boldWithEmptySelectionAppliesToTypedText
    • Not tested: Android UI, iOS UI
  • Typing inside or right after styled text keeps the style
    • Shared: EditorSessionTest.typingInsideAndAfterStyledTextInheritsStyle
    • Not tested: Android UI, iOS UI
  • Italic, strikethrough, inline code
    • Shared: EditorSessionTest.inlineCodeStrikeItalic
    • Not tested: Android UI, iOS UI
  • The formatting tool shows which styles are on
    • Android UI: NoteEditingUiTest.formattingToolShowsItsState
    • iOS UI: NoteEditingUITests.FormattingToolShowsItsState
    • Not tested: Shared
  • Heading levels cycle; Enter after a heading starts a paragraph; Enter at its start keeps it
    • Shared: EditorSessionTest.headingCycles, EditorSessionTest.enterAfterHeadingStartsParagraph, EditorSessionTest.enterAtStartOfHeadingKeepsHeading
    • Not tested: Android UI, iOS UI
  • Numbered and bulleted lists, quotes, code blocks
    • Shared: EditorSessionTest.numberedAndBulletAndQuoteAndCodeBlock
    • Not tested: Android UI, iOS UI
  • Backspace at the start of a list item removes the list formatting
    • Shared: EditorSessionTest.backspaceAtListStartRemovesListFormatting
    • Not tested: Android UI, iOS UI
  • Pasting several lines makes several paragraphs
    • Shared: EditorSessionTest.multiLinePasteSplitsParagraphs
    • Not tested: Android UI, iOS UI
  • Deleting across paragraphs merges them and keeps the first one’s block type
    • Shared: EditorSessionTest.deletingAcrossParagraphsMergesAndKeepsFirstBlock
    • Not tested: Android UI, iOS UI
  • Undo and redo
    • Shared: EditorSessionTest.undoRedo
    • Android UI: NoteEditingUiTest.undoRemovesTyping
    • iOS UI: NoteEditingUITests.UndoRemovesTyping

Checklists

  • Inserting a checklist; Enter continues it
    • Shared: EditorSessionTest.checklistInsertionAndContinuation
    • Android UI: NoteEditingUiTest.checklistContinuesOnEnter
    • iOS UI: NoteEditingUITests.ChecklistContinuesOnReturn
  • Ticking a task changes only its checked state
    • Shared: EditorSessionTest.toggleTaskChangesOnlyCheckedState
    • Not tested: Android UI, iOS UI
  • Indenting makes nested tasks
    • Shared: EditorSessionTest.nestedTasksViaIndent
    • Not tested: Android UI, iOS UI
  • Ticking in the read view saves a TASK_TOGGLE revision and rejects a stale version
    • Shared: NotesCoreTest.taskToggleCreatesRevisionAndRejectsStaleState
    • Android UI: NoteEditingUiTest.checklistCanBeTickedInTheReadView
    • iOS UI: NoteEditingUITests.ChecklistCanBeTickedInTheReadView
  • Task items and completed counts come from the Markdown
    • Shared: MarkdownCodecTest.derivesTaskItems, NotesCoreTest.taskToggleCreatesRevisionAndRejectsStaleState
    • Not tested: Android UI, iOS UI

Saving

  • A new note opens straight in the editor
    • Android UI: NoteEditingUiTest.newNoteOpensStraightInTheEditor
    • iOS UI: NoteEditingUITests.NewNoteOpensStraightInTheEditor
    • Not tested: Shared
  • A written note is saved and shows in the list
    • Android UI: NoteEditingUiTest.writtenNoteIsSavedAndListed
    • iOS UI: NoteEditingUITests.WrittenNoteIsSavedAndListed
    • Not tested: Shared
  • An empty new note is discarded on leaving; one that ever had content is kept
    • Shared: NotesCoreTest.discardIfEmptyRemovesOnlyNotesThatNeverHeldContent
    • Android UI: NoteEditingUiTest.emptyNewNoteIsDiscardedOnLeaving
    • iOS UI: NoteEditingUITests.EmptyNewNoteIsDiscardedOnLeaving
  • Saves once 35 characters have been typed (D-14)
    • Android UI: NoteEditingUiTest.savesOnceThirtyFiveCharactersAreTyped
    • iOS UI: NoteEditingUITests.SavesOnceThirtyFiveCharactersAreTyped
    • Not tested: Shared
  • Each real change makes a revision; saving the same content doesn’t
    • Shared: NotesCoreTest.everySaveCreatesRevisionButNoOpSaveDoesNot
    • Not tested: Android UI, iOS UI
  • Saves within a minute of each other keep only the latest version
    • Shared: NotesCoreTest.savesWithinAMinuteKeepOnlyTheLatestVersion
    • Not tested: Android UI, iOS UI
  • Word and character counts follow typing
    • Android UI: NoteEditingUiTest.wordAndCharacterCountsFollowTyping
    • iOS UI: NoteEditingUITests.WordAndCharacterCountsFollowTyping
    • Not tested: Shared

Titles

  • The title follows the first line until set by hand; clearing it makes it automatic again
    • Shared: OrganizingTest.automaticTitlesFollowTheFirstLineUntilSetByHand
    • Android UI: NoteEditingUiTest.titleIsTheFirstLineUntilRenamed
    • iOS UI: NoteEditingUITests.TitleIsTheFirstLineUntilRenamed
  • A generated title is applied once, then kept
    • Shared: OrganizingTest.aGeneratedTitleIsAppliedOnceAndThenKept
    • Not tested: Android UI, iOS UI
  • A generated title the user asks for replaces a hand-set title
    • Shared: OrganizingTest.aRequestedGeneratedTitleReplacesAHandSetTitle
    • Not tested: Android UI, iOS UI
  • The displayed title falls back to the first line, then “Untitled”
    • Shared: DomainSupportTest.displayTitleFallsBackToFirstLine
    • Not tested: Android UI, iOS UI

Gaps

  • Headings, lists, quotes, code blocks, italic and strikethrough are tested only in the shared session, never through the real EditText/UITextView and the toolbar.
  • The 10-second autosave (D-14) is untested; only the 35-character trigger is.
  • Saving when the app goes to the background is untested on both platforms.
  • Generated titles: the platform TitleGenerator (Gemini Nano on Android, Apple Foundation Models on iOS) has no tests; only the core rules for applying a generated title do. docs/pending.md notes Android generation hasn’t been tried on a device with the model.
  • Paste on a device (rich or multi-line text from another app) is untested; only the shared paragraph split is.