✅ Introduction

Editmarks is a track changes system for scientific writing and collaborative editing in VS Code. Inspired by `scimax-editmarks' from Emacs Scimax, it provides a lightweight markup syntax for tracking insertions, deletions, comments, and typo corrections directly in your documents.

Unlike traditional track changes systems that rely on binary formats or external tools, editmarks uses plain text markup that works seamlessly across org-mode, Markdown, and LaTeX files. Changes remain visible and editable as plain text, making them perfect for version control systems like Git.

✅ Key Features

  • Plain text markup: Changes are visible in any text editor

  • Language-agnostic: Works in org-mode, Markdown, LaTeX, and plain text

  • Four mark types: Insertions, deletions, comments, and typo corrections

  • Visual highlighting: Color-coded decorations for easy identification

  • Quick navigation: Jump between marks with keyboard shortcuts

  • Batch operations: Accept or reject all changes at once

  • Hover actions: Quick accept/reject from hover tooltips

  • Summary view: Overview of all changes in the document

✅ Use Cases

  1. Document review: Mark suggested changes when reviewing a colleague's work

  2. Collaborative editing: Track your edits when working on shared documents

  3. Self-revision: Keep track of your own changes during editing sessions

  4. Teaching and feedback: Provide inline suggestions to students or mentees

  5. Version control: Complement Git commits with inline change tracking

✅ Markup Syntax

Editmarks supports two markup formats to maximize compatibility:

✅ CriticMarkup Format (Alternative)

An alternative format inspired by CriticMarkup:

{++inserted text++}       # Insertion
{--deleted text--}        # Deletion
{>>comment text<<}        # Comment
{~~old text~>new text~~}  # Typo correction

Both formats are recognized and rendered identically. Choose whichever you prefer or is required by your workflow.

✅ Types of Editmarks

✅ Insertion

The quick brown fox @@+gracefully+@@ jumps over the lazy dog.
  • Suggesting new content

  • Adding missing words or phrases

  • Inserting clarifications or examples

✅ Deletion

The quick brown @@-very-@@ fox jumps over the lazy dog.
  • Removing redundant text

  • Deleting incorrect information

  • Suggesting text removal during review

✅ Comment

The results were statistically significant @@>verify p-value<@@.
  • Asking questions about the text

  • Leaving notes for the author

  • Marking sections that need attention

  • Providing context for other changes

✅ Typo Correction

The experment @@~experment|experiment~@@ was successful.
  • Correcting spelling mistakes

  • Fixing grammatical errors

  • Suggesting better word choices

  • Standardizing terminology

✅ Creating Editmarks

✅ Mark Insertion

  1. With text selected: Wraps selection with insertion markup

  2. Without selection: Prompts for text to insert

  1. Select "quickly" in your text (or place cursor where text should be inserted)

  2. Press `C-c e i'

  3. If no selection, type the text to insert

  4. Result: @@+quickly+@@

✅ Mark Deletion

  • Requires text selection

  • Wraps selected text with deletion markup

  1. Select "very" in your text

  2. Press `C-c e d'

  3. Result: @@-very-@@

✅ Insert Comment

  1. With text selected: Uses selection as comment text

  2. Without selection: Prompts for comment

  1. Place cursor at the relevant location

  2. Press `C-c e c'

  3. Type: "Check this citation"

  4. Result: @@>Check this citation<@@

✅ Mark Typo Correction

  • Requires text selection (the incorrect text)

  • Prompts for the correct text

  • Creates a typo mark showing old→new

  1. Select "teh" in your text

  2. Press `C-c e t'

  3. Type: "the"

  4. Result: @@`teh|the'@@

✅ Reviewing and Processing Editmarks

✅ Accept Edit Mark

Accepts the editmark at the cursor position:

  • Insertion: Keeps the inserted text, removes markup (@@+text+@@text)

  • Deletion: Removes the deleted text entirely (@@-text-@@ → empty)

  • Comment: Removes the comment (@@>text<@@ → empty)

  • Typo: Applies the correction (@@`old|new'@@` → 'new)

Before: The quick @@+brown+@@ fox
After:  The quick brown fox

✅ Reject Edit Mark

Rejects the editmark at the cursor position:

  • Insertion: Removes the inserted text (@@+text+@@ → empty)

  • Deletion: Keeps the original text (@@-text-@@text)

  • Comment: Removes the comment (@@>text<@@ → empty)

  • Typo: Keeps the original text (@@`old|new'@@` → 'old)

Before: The quick @@+brown+@@ fox
After:  The quick fox

✅ Accept All Edit Marks

Accepts all editmarks in the current document:

  1. Shows confirmation dialog with count

  2. Processes all marks from bottom to top

  3. Displays success message

✅ Reject All Edit Marks

Rejects all editmarks in the current document:

  1. Shows confirmation dialog with count

  2. Processes all marks from bottom to top

  3. Displays success message

✅ Hover Actions

Position your cursor over any editmark to see a hover tooltip with:

  • Mark type and content

  • Quick action links to accept or reject

  • For typos: Shows old → new transformation

This provides a quick way to review and act on individual changes without remembering keybindings.

✅ Navigation

✅ Next Edit Mark

Moves the cursor to the next editmark in the document:

  • Wraps around to the first mark if at the end

  • Centers the mark in the viewport

  • Useful for systematic review

✅ Previous Edit Mark

Moves the cursor to the previous editmark:

  • Wraps around to the last mark if at the beginning

  • Centers the mark in the viewport

✅ Keyboard Navigation Pattern

The bracket keys ([ and ]) create an intuitive navigation pattern:

  • C-c e ] → next (forward, like closing bracket points right)

  • C-c e [ → previous (backward, like opening bracket points left)

✅ Summary View

Opens a quick pick menu showing:

  1. Summary statistics: Total count and breakdown by type

  2. Individual marks: List of all editmarks with:

  • Searchable: Type to filter marks

  • Click to navigate: Select a mark to jump to it

  • Color-coded: Visual distinction between mark types

Summary
├── Insertions: 3 (Green)
├── Deletions: 2 (Red)
├── Comments: 1 (Yellow)
└── Typos: 2 (Orange)

📝 gracefully                    Line 12
❌ very                          Line 15
💬 Check this citation           Line 23
✏️  teh → the                    Line 34
...

✅ Visual Appearance

Editmarks are rendered with distinctive decorations (The icons are similar to what is shown in the summary view):

TypeBackground ColorBorderText StyleIcon
InsertionLight greenGreenNormal📝
DeletionLight redRedStrikethrough
CommentLight yellowYellowItalic💬
TypoLight orangeOrangeNormal✏️

All decorations include:

  • Semi-transparent background (20% opacity)

  • Solid border for clear delimitation

  • 2px border radius for rounded corners

Complete Command Reference

Insertion Commands

CommandKeybindingDescription
scimax.editmarks.insertionC-c e iMark text as insertion

Deletion Commands

CommandKeybindingDescription
scimax.editmarks.deletionC-c e dMark text for deletion

Comment Commands

CommandKeybindingDescription
scimax.editmarks.commentC-c e cInsert edit comment

Typo Correction Commands

CommandKeybindingDescription
scimax.editmarks.typoC-c e tMark typo correction

Review Commands

CommandKeybindingDescription
scimax.editmarks.acceptC-c e aAccept mark at cursor
scimax.editmarks.rejectC-c e rReject mark at cursor
scimax.editmarks.acceptAll(none)Accept all marks
scimax.editmarks.rejectAll(none)Reject all marks

Navigation Commands

CommandKeybindingDescription
scimax.editmarks.nextC-c e ]Jump to next mark
scimax.editmarks.prevC-c e [Jump to previous mark

Utility Commands

CommandKeybindingDescription
scimax.editmarks.summaryC-c e sShow all marks summary

Keybinding Pattern

All editmarks keybindings follow the pattern C-c e <letter>:

  • `C-c e' → Editmarks prefix

  • `i' → Insertion

  • `d' → Deletion

  • `c' → Comment

  • `t' → Typo

  • `a' → Accept

  • `r' → Reject

  • `s' → Summary

  • [ → Previous

  • ] → Next

This consistent pattern makes the commands easy to remember and discover.

Typical Workflows

Workflow 1: Peer Review

  1. Open the document in VS Code

  2. Read through and identify areas needing changes

  3. Mark suggestions:

  4. Add typo corrections:

  5. Save the document and send back to colleague

  6. Colleague reviews using C-c e ] to navigate between marks

  7. Colleague processes each mark:

  8. Save final version with all changes resolved

Workflow 2: Self-Editing

  1. Enable editmarks mode (always on - no toggle needed)

  2. As you edit, use editmarks instead of direct changes:

  3. Take a break - changes are preserved in plain text

  4. Review later:

  5. Process systematically:

  6. Commit to version control with clear change history

Workflow 3: Collaborative Writing

  1. Author A makes initial draft

  2. Author B checks out the branch and adds suggestions:

  3. Author C adds more changes:

  4. Authors meet to review:

  5. Accept/reject collaboratively

  6. Commit final version to Git with all changes incorporated

Workflow 4: Student Feedback

  1. Open student's submission

  2. Read through once without marking

  3. Second pass - mark issues:

  4. Add pedagogical comments:

  5. Generate summary report:

  6. Student processes feedback:

Workflow 5: Document Review Cycle

The project will @@+likely+@@ be completed @@-on time-@@ @@+ahead of schedule+@@.
@@>Reviewer: Source for this claim?<@@
The project will @@+likely+@@ be completed @@+ahead of schedule+@@.
@@>Author: Added reference below. See Smith et al. 2025<@@
[ref added here]
  1. Reviewer opens document

  2. Presses `C-c e s' to see all outstanding marks

  3. Navigates with C-c e ] through each change

  4. Presses `C-c e a' to accept all approved changes

  5. Final document is clean and ready for publication

✅ Best Practices

✅ Do's

  1. Use descriptive comments: Instead of @@>fix this<@@, write @@>fix grammar: subject-verb agreement<@@

  2. Be specific with insertions: Show exactly what you're suggesting

  3. One change per mark: Don't combine multiple edits in one mark

  4. Review systematically: Use navigation commands to ensure you don't miss any marks

  5. Preserve marks in Git: Commit documents with editmarks to track review history

  6. Use hover tooltips: Quick way to remind yourself what each mark does

✅ Don'ts

  1. Don't nest editmarks: Avoid @@+text @@-with-@@ nesting+@@ - it's confusing

  2. Don't mix formats randomly: Pick either universal or CriticMarkup and stick with it

  3. Don't leave marks indefinitely: Process them regularly to keep documents clean

  4. Don't delete marks manually: Use accept/reject commands to ensure proper processing

  5. Don't use for version control: Editmarks complement Git but don't replace it

✅ Tips

  • Quick review: Use C-c e s at the start of each editing session to see pending changes

  • Batch processing: For documents with many trivial changes, use "Accept All" after review

  • Comments as TODO: Use comment marks as inline TODO items during writing

  • Color awareness: Learn to recognize mark types by color for faster visual scanning

  • Git integration: Create commits after processing editmarks with descriptive messages

  • Keyboard efficiency: The navigation keys ([ and ]) combined with a/r enable fast review

✅ Integration with Other Features

✅ Source Blocks

Editmarks work inside source blocks (although they likely break the code unless you use them in comments.):

def calculate(x):
    return x * @@+2+@@ @@-3-@@  @@>why change the multiplier?<@@

This is useful when reviewing code snippets in documentation or educational materials.

✅ Tables

Use editmarks in table cells:

ItemOriginalRevisedNotes
Budget$100K@@$120K@@approved by CFO
Time6 months@@8 months@@realistic estimate

✅ Export Compatibility

Editmarks are fully supported in HTML, LaTeX, and PDF exports. The export behavior is controlled by the scimax.export.editmarkMode setting.

Export Modes

ModeDescription
showRender with visual markup (colored insertions/deletions)
acceptApply all changes (keep insertions, remove deletions)
rejectRevert all changes (remove insertions, keep deletions)
hideRemove all editmarks without any replacement

HTML Export

In HTML, editmarks are rendered using semantic HTML elements with CSS styling:

  • Insertions: <ins class"editmark-ins">text= (green background)

  • Deletions: <del class"editmark-del">text= (red background, strikethrough)

  • Comments: <mark class"editmark-comment">text= (yellow background, italic)

  • Typos: <span class"editmark-typo">oldnew=

LaTeX/PDF Export

In LaTeX, editmarks use custom commands defined in the preamble:

\editins{inserted text}           % Green underlined text
\editdel{deleted text}            % Red strikethrough text
\editcomment{comment text}        % Orange italic text in brackets
\edittypo{old text}{new text}     % Old crossed out, new inserted

The required packages (xcolor, ulem) and command definitions are automatically added to the preamble when editmarks are detected.

Configuration

Set the export mode in VS Code settings:

{
  "scimax.export.editmarkMode": "show"
}

Or use the Settings UI: Search for "editmark" and select the desired mode.

Workflow Recommendations

  • Draft review: Use show mode to see all changes visually in the export

  • Final publication: Use accept or reject mode, or process marks manually before export

  • Clean copy: Use hide to remove all editmarks without deciding on them

✅ Version Control

Editmarks are perfect for version control workflows:

# Add document with editmarks
git add manuscript.org

# Commit with descriptive message
git commit -m "Add reviewer feedback as editmarks"

# Later, after processing
git add manuscript.org
git commit -m "Incorporate reviewer suggestions"

The diff shows both the markup and the final changes, providing complete review history.

✅ Troubleshooting

✅ Editmarks Not Showing

  1. Check that you're in a supported file (any text file works)

  2. Reload window: C-S-P → "Developer: Reload Window"

  3. Verify syntax: Ensure markup is exactly correct (e.g., @@+text+@@ not @@+ text +@@)

✅ Navigation Not Working

  1. Verify editmarks exist: Press C-c e s to see summary

  2. Ensure cursor is in the editor window

  3. Check keybinding conflicts: File → Preferences → Keyboard Shortcuts

Accept/Reject Not Working

  1. Position cursor inside the editmark (between the markup symbols)

  2. Hover over the mark to see the tooltip - if visible, cursor is positioned correctly

  3. Check that the editmark syntax is valid

✅ Nested Marks Issue

✅ Performance with Many Marks

  1. Process marks in batches (accept/reject groups of related changes)

  2. Use "Accept All" or "Reject All" for bulk processing

  3. Split large documents into smaller files

✅ FAQ

Q: Can I customize the colors?

A: Currently, colors are fixed (green for insertion, red for deletion, yellow for comments, orange for typos). Custom theme support may be added in future versions.

Q: Do editmarks work in any file type?

A: Yes! Editmarks work in any text file: .org, .md, .tex, .txt, .py, etc. The markup is plain text.

Q: Can I export documents with editmarks?

A: Yes! Editmarks are fully supported in HTML, LaTeX, and PDF exports. Use the scimax.export.editmarkMode setting to control how they appear:

  • show: Visual markup with colors (default)

  • accept: Apply all changes automatically

  • reject: Revert all changes

  • hide: Remove editmarks silently

Q: How do I see who made which mark?

A: Editmarks don't automatically track authors. Add author names manually in comments:

@@>(Author: John Doe) This needs clarification<@@

Q: Can I use editmarks with Word documents?

A: No, editmarks require plain text files. Convert Word documents to Markdown or use Word's built-in track changes.

Q: Do editmarks interfere with syntax highlighting?

A: No, they're implemented as decorations that overlay the text without modifying syntax highlighting.

Q: Can I undo an accept/reject action?

A: Yes, use VS Code's regular undo (C-z) immediately after accepting or rejecting a mark.

Q: Are editmarks saved with the file?

A: Yes! Editmarks are plain text markup, so they're saved as part of the document content.

Q: Can I search for editmarks?

A: Yes, use regular search (C-f) for @@+ or {++ to find all insertions, etc. Or use C-c e s for the summary view.

✅ Conclusion

Editmarks provide a powerful, plain-text approach to track changes that integrates seamlessly with modern developer workflows. By using simple markup instead of complex binary formats, editmarks offer:

  • Transparency: Changes are always visible and readable

  • Portability: Works across editors and platforms

  • Version control: Perfect for Git-based collaboration

  • Flexibility: Use as much or as little as you need

Whether you're reviewing papers, collaborating on documentation, or tracking your own revisions, editmarks offer a lightweight yet powerful solution for managing document changes.

Start using editmarks today:

  1. Open any document

  2. Press `C-c e i' to insert your first mark

  3. Press `C-c e s' to see the summary

  4. Navigate with C-c e ] and C-c e [

  5. Accept or reject with `C-c e a' and `C-c e r'

Happy editing!

Navigation