Added
- Markdown Preview: Live side-by-side preview for
.mdfiles with async image resizing. Toggle via View menu or settings. - Tab Groups: Colored tab groups (Red, Orange, Yellow, Green, Blue, Purple, Grey) with group labels, collapse/expand into compact chips, right-click context menu for group management (create, rename, recolor, ungroup, close).
- Drag-to-Group: Drag a tab onto the center of another tab to group them. Drag to the edges to reorder. Visual feedback: 50% blended highlight for grouping, vertical insertion line for reordering.
- Draggable Collapsed Groups: Collapsed group chips can be dragged to reorder entire groups. Click-without-drag still toggles expand/collapse.
- Group Reorder Protection: Ungrouped tabs cannot be inserted between tabs of the same group; insertion point snaps to group boundary.
- Crash-Safe Session Auto-Save: Session auto-saves every 30 seconds so tabs survive task manager kills, crashes, and power loss.
- "+" New Tab Button: Quick new tab creation button in the tab bar.
- Syntax Highlighting: 50+ languages via syntect with oniguruma regex backend. Chunked non-blocking processing for large files with sparse checkpoints every 128 lines.
- Tabbed Editing: Custom-drawn tab bar with rounded top corners, shrink-to-fit sizing, per-tab close buttons, hover highlighting, middle-click close, and dark/light theme support.
- Session Restore: Three modes (Off, Saved Files Only, Full including unsaved content) with multi-instance session merging and schema versioning.
- Select All (Ctrl+A), Find Previous (Ctrl+Shift+G), Go To Line (Ctrl+G).
- Dynamic Line Number Gutter: Auto-sizes based on document line count.
- macOS Dark Mode Detection via
AppleInterfaceStyledefaults key. - Windows Executable Metadata: Version, description, and copyright via embedded resource manifest.
Fixed
- FLTK Widget Lifecycle Leaks: Fixed modify callback, tile widget, and shared image cache leaks via direct FFI.
- glibc Memory Not Returned: Added targeted
malloc_trim(0)calls after tab close and preview hide. - TextBuffer::text() Memory Leak: Plugged 3.8MB/call leak via
buffer_text_no_leak()helper. - Find No Longer Marks Document as Dirty: Dirty flag only sets on actual text changes, not selection changes.
- Memory Leaks in Syntax Highlighting: Reduced highlighting memory from 290MB to 63MB on large files.
- Native File Dialogs Restored: Fixed regression that broke native file chooser on Linux.
- Allow Closing App While Dialog is Open:
run_dialogchecksapp::should_program_quit().
Changed
- Major Architecture Refactoring: Decomposed monolithic
main.rsintosrc/app/(business logic) andsrc/ui/(presentation) with message-passing event-driven architecture. ~5,200 lines across 28 files. - Extracted
HighlightController,UpdateController,PreviewController,EditorContainer, andTabManagerfrom AppState. - Added
thiserror-basedAppErrorenum for consistent error handling. - Configured jemalloc dirty/muzzy decay to 0ms at startup for immediate page return.
- Updated README and website to reflect v0.9.0 feature set.