Repository navigation
feat(tui): attach local images to notes - #113
Merged
Merged
Conversation
backnotprop
force-pushed
the
feat/image-attachments
branch
2 times, most recently
from
October 27, 2026 18:39
a0fd115 to
0ced7f5
Compare
`I` (attach-image) opens a one-line path prompt for the selected note, or the selected block's note in the document. It accepts typed, pasted and dropped paths: quotes, `~`, `file://`, shell-escaped spaces, and paths relative to the document's folder. Missing files and non-image extensions are refused with the reason; a path already on the note is ignored. `D` (remove-image) drops the last image. Both are rebindable. Paths are stored under the annotation's `plannotator_tui.images`, omitted when empty, so older records load unchanged. Adding or removing an image makes a sent note pending again. Feedback and `--export` list each image as `Image: <absolute path>` under its note, the rail marks notes with images, and the feedback archive counts them. Files are referenced, never copied or uploaded. Rebuilt from #73. Co-authored-by: MaterAnime <272887717+MaterAnime@users.noreply.github.com>
backnotprop
force-pushed
the
feat/image-attachments
branch
from
October 27, 2026 18:46
0ced7f5 to
662b2d9
Compare
This was referenced Oct 27, 2026
Merged
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Rebuilds the image-attachment half of #73 (by @MaterAnime, credited as co-author) on current main. The multi-reply half of #73 already shipped, so it is not included.
What it does
I(attach-image) opens a one-line path prompt for the selected note in the notes rail, or the selected block's note in the document. Typed, pasted (bracketed paste) and dropped paths work: quotes,~,file://, shell-escaped spaces, and paths relative to the document's folder. Missing files and non-image extensions (png, jpg, jpeg, gif, webp, bmp, svg) are refused in the status line with the prompt left open; a path already on the note is ignored.D(remove-image) removes the last image added. Both keys are rebindable under[keys], unused elsewhere in the default keymap, and shown in the footer hints from the keymap.Paths are stored under the annotation's
plannotator_tui.images, omitted when empty, so older records load unchanged and Workspaces'attachments(https URLs only) is untouched.Adding or removing an image makes a sent note pending again.
Feedback and
--exportlist each image under its note:The rail bubble title shows
· 1 image/· N images; the feedback archive'scounts.imagesis filled.Images stay local references: nothing is copied or uploaded.
Decision 16 in
docs/decisions.mdrecords the storage and output choices; README key tables are updated.Tests: schema round trip and old-record compatibility, export line format, path parsing (quotes, relative,
file://, escaped spaces, missing, wrong extension, directories), and an app flow test (attach from document and rail, duplicate, send, archive count, reopen, remove).cargo fmt --check,cargo clippy --workspace --all-targets -D warnings, andcargo test --workspace --all-targetspass locally; also smoke-tested in tmux.Refs #73