Releases: dfallman/dan
Releases · dfallman/dan
0.2.129
dan 0.2.129
Reliability & data-loss hardening
A defensive audit pass closing realistic paths to lost work, panics, and deadlocks:
- Crash recovery now covers every buffer. Untitled buffers,
dan newfile, and post–Save-As / reload buffers previously had no swap file, so a crash lost everything in them. They now autosave, and a new panic hook flushes unsaved buffers to their swap files before the process exits. - Fixed input-reachable panics:
tab_width = 0divide-by-zero in the renderer; typing non-ASCII text in the Save-As / Replace prompts; and wrapping a non-ASCII selection (auto-close) then copying it. - Formatter no longer risks a pipe deadlock on large files — stdin is written on a dedicated thread — and a vanished formatter worker no longer pins the editor to a busy-poll.
- Bounded resources: undo history and the project-file index are now capped, and a file-size limit on load avoids OOM-aborting (which would have taken down every open buffer).
- Safer saves & files: unique temp-file names (no concurrent-write collisions), swap files cleaned up on discard / force-quit, and BOM'd UTF-16 files now open and round-trip on save instead of being rejected as binary.
Command palette (Ctrl-P)
- Navigation now accounts for divider lines — moving up/down keeps the selected item correctly in view regardless of section dividers, and the visible-row count now matches the rendered modal height on every terminal size.
- Added a divider between recent files and commands, so the palette groups results as buffers │ recent files │ commands.
Other
- Fixed a panic when an async formatter returns a shorter document than the buffer had.
Full changelog: 0.2.125...0.2.129
0.2.125
Bug fixes
- Fix tab-character rendering corruption (#raster). A tab in the buffer used to land in the grid as a literal '\t' when
show_whitespace=false, andPrint('\t')to the terminal was interpreted as the C0 TAB control character — moving the cursor to the next tab stop and bypassing our cell-by-cell positioning. The result was ghosted/shifted cells, missing line numbers, and parts of previous rows leaking into new rows on every tab-indented file. Tabs now substitute to a plain space in the grid; the existing tab-expansion path still fills the fulltab_widthrun. - Atomic frame writes.
ScreenBuffer::diffassembles the entire frame in a local buffer and emits it with a singlewrite_all. Previously a large repaint (e.g. 100x30 with RGB syntax colours, ~190 KB) overflowed the 64 KBBufWritermid-frame and auto-flushed, sending partial frames to the terminal between renders.
Diagnostics
DAN_RENDER_LOG=/path/to/fileenv var dumps each frame's grid and raw ANSI bytes to a file for repro/debugging.
0.2.123
Bug fixes and other improvements to rendering speed and reliability, especially when viewing large documents with color syntax.
Added support for multiple buffers open at the same time.
Added a ctrl+p menu for controlling (almost) all aspects of the editor, including creating and switching buffers.
Release v0.2.57
Bug fixes, updates, and improvements.
Quick install
Install/update to latest version of Rust
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
Clone, build, and install Dan
git clone https://github.com/dfallman/dan.git
cd dan
cargo build --release
cargo install --path .