Repository navigation
Releases: sxinyuhoo/pickme
Releases · sxinyuhoo/pickme
Release list
1.0.10
Added
- Continued highlighting merges. Start a stroke on an existing highlight (or on the line right above/below it) and that stroke is appended to it instead of creating a second annotation — so reading down a paragraph and swiping line by line builds one multi-line highlight. No panel opens for a continuation, because it is not a new annotation.
- A mostly vertical stroke highlights the whole line. Dragging straight down across a few lines used to leave a 4pt sliver on each; now each of those lines is highlighted end to end. Short horizontal swipes are unaffected and still cover exactly what you painted.
Changed
- Finishing a highlighter stroke opens nothing. The default result of a stroke is a plain highlight; the note box appears when you click the highlight. (1.0.9 opened it automatically — that was one step too eager.)
Escaperight after a stroke undoes it: a new highlight is removed, while a merged stroke is rolled back out of the existing highlight without touching the rest of it.
1.0.9
Added
- Highlights take a note. Finishing a highlighter stroke opens a small note box instead of the AI composer: type a line, then ⌘/Ctrl + Enter to save. The note lives with the highlight (
- 备注:…in the annotation file), shows up in the annotation index and the sidebar, and comes back when you click the highlight. Ask AI instead switches that same panel into the question composer, so nothing is lost.
Changed
- The highlighter covers exactly what you painted. The band spans the left and right end of your stroke (clamped to the text it touched) instead of snapping to the whole line — swiping across the middle of a sentence highlights just that stretch.
- While you drag, you see your own stroke: a translucent marker line at the text's height, which only turns into the clean band when you release.
- The page status line no longer promises “Esc to undo” on a fresh highlight: with the note box open, Esc means cancel (untouched highlights are still removed by it).
Fixed
- The note box's save confirmation had nowhere to appear — the status element only existed in the question composer.
1.0.8
Changed
- The pointer tells you which mode you are in. Region mode keeps the crosshair; highlighter mode uses a marker cursor (with a text-cursor fallback where custom cursors are unavailable), so you can see which tool is live before you press the button.
- The active annotation mode is now clearly marked on the toolbar: the selected button gets an accent background and outline, instead of relying on a slightly different icon shade. Screen readers get
aria-pressedas well.
1.0.7
Changed
- The highlighter only highlights. Finishing a stroke no longer opens the ask panel or jumps to the sidebar - the stroke snaps to the line and stops there, because the point of a highlighter is the mark itself. To ask about a passage you highlighted, click it: the panel opens the same way it does for any existing annotation.
- Pressing
Escapewithin a few seconds of a stroke undoes that highlight, which keeps a mis-aimed stroke from having to be deleted through the panel. - Region mode is unchanged: drag a box and the panel opens right away.
1.0.6
Added
- Highlighter annotations in PDFs. Drag a free-hand stroke across text and it snaps to the lines underneath: the wobble is thrown away and you get a clean band hugging each line, spanning from the first character the stroke touched to the last. A stroke across several lines yields one band per line, and the text of every covered line is stored with the annotation, so the model reads what you meant.
- The PDF toolbar now has two mutually exclusive annotation modes - Highlighter and Region - and the choice is remembered between sessions. Both can be used on the same content: a box plus strokes on one annotation render as a band for the text and a thin outline for the area, so they never fight visually.
- Where you are in the document is now drawn on the page: the annotation you are reading keeps its full strength and gets a "Page N - Highlighter" (or "Region") tag, while the other annotations on that page fade to 15%.
- PDFs remember where you stopped reading. The page you are on is recorded as you scroll (per file, and only written to disk when it settles), so closing the tab or the app and coming back resumes at that page instead of page 1. The list is capped at the 200 most recently read files.
Fixed
- An annotation could be deleted by the act of reading it. Closing a panel because a new one was taking over was treated as a cancel, so clicking a highlight you had just drawn removed it. Only an explicit cancel (the x button or Esc) undoes an annotation that was never asked about.
- The active-annotation state vanished as soon as it was set: the outgoing panel's callback cleared the view's current annotation id after the new panel had already claimed it.
- Rotated PDF pages are converted through the page's rotation instead of assuming it is upright, which had put annotations in the wrong place.
- Multi-line hit text was truncated to its first line when written to disk. The full text is kept in its own section, with the one-line bullet kept as a preview.
- A stroke drawn over an image or blank space no longer creates an empty annotation: it says so and leaves the page alone.
Changed
- On the last page of a document the page counter now reads the last page when you scroll to the end. Before, the final page could never reach the top of the viewport (there is nothing below it to scroll), so scrolling to the end reported the second-to-last page — and that wrong number was what a remembered reading position was based on.
- The browser
fetchcall now lives in a single documented helper. It cannot be removed: Obsidian'srequestUrlis issued from the main process and cannot see a streaming response body, so real streaming (and the "endpoint rejects the thinking parameter, so retry without it" logic) needsfetch; the/modelsprobe also keeps afetchfallback for relay endpoints that only answer browser-origin requests. Every request that does not need streaming still goes throughrequestUrlfirst. - Highlighter annotations do not store a region screenshot - the text is enough, and it keeps the vault small. Region annotations still do.
- The annotation index, the sidebar and the anchor autocomplete now say which shape an annotation is ("Page 12 - Highlighter", "Page 12 - Region", "Page 12 - Region + strokes") instead of always saying "Region".
1.0.5
Fixed
- The empty-folder cleanup shipped in 1.0.4 never actually ran. Obsidian's
adapter.rmdirfollowsfs.rmsemantics: passingrecursive: falsefor a directory throwsEISDIR (is a directory)even when the folder is empty, and the cleanup swallowed that error. Deleting or cancelling an annotation now really does remove the leftover_assets/<document>.md/folder.
Changed
- The smoke-test stub for
adapter.rmdirnow mirrors the real behaviour (it throws unlessrecursiveis set), so this class of stub-vs-reality mismatch fails the build instead of shipping.
1.0.4
Fixed
- Deleting or cancelling a PDF annotation no longer leaves an empty
_assets/<document>.md/folder behind. When the last region screenshot of a document goes away, the empty folder is removed with it; a folder that still holds screenshots is left untouched.
Changed
- The generated
src/generated/pdfAssets.tsis now committed to the repository. The automated plugin review runs its static analysis before any build step, and an import it cannot resolve degrades toany— which surfaced as ten spuriousunsafe-*findings against the pdf.js resource lookups. Regeneration is deterministic and CI fails if it drifts frompdfjs-dist. - The gzip header written by the asset packer no longer carries the platform byte, so the same source produces the same
main.json macOS and on Linux. Release artifacts are now byte-identical to a local build.
1.0.3
Changed
- The inlined pdf.js resources (CMap tables and standard fonts) are now packed as one gzip stream per group instead of one base64 blob per file.
main.jsdrops from 4.5 MB to 3.8 MB (-16%), so installing and updating from the community plugin browser downloads less and is less likely to be cut off on a slow or unstable connection. Nothing about PDF rendering changes: the same 168 CMap tables and 16 standard fonts ship inside the file, and they are decompressed once, lazily, the first time a PDF actually needs them.
Added
- A test that decompresses the packed resources and compares the result byte for byte with the original
pdfjs-distfiles, so a packing mistake cannot slip through silently.
1.0.2
Fixed
- The ask panel no longer preselects the first template in the list. Opening it and typing your own question used to run that question through the translation template, and the annotation was recorded as
template: 翻译even though no template was chosen. "Ask directly" is now the default, as the dropdown implies. - The template dropdown is still there and still remembers your pick for the current panel; nothing else about templates changed.
1.0.1
Addresses the automatic review report. The review's own linter now reports 0 errors for this plugin.
Compatibility
minAppVersionraised from1.6.0to1.7.2. The plugin callsWorkspace.revealLeaf, which returns a promise from Obsidian 1.7.2 onward, so the declared minimum now matches what the code actually uses. Nothing changes for anyone on 1.7.2 or newer.
Consistency with the plugin guidelines
- Closed the in-page ask panel's own component instead of borrowing the plugin instance as a component, so rendered answers are released when the panel closes.
- Replaced a direct
element.stylewrite with a CSS class. - Use
Vault#configDirinstead of a hardcoded.obsidianpath. - Use
FileManager.trashFile()so deleting an annotation respects your own "deleted files" preference. - Use Obsidian's
createEl/createSpanhelpers instead ofdocument.createElement. - Use
window.setTimeout/window.clearTimeoutso timers keep working in popout windows. - Declared
@codemirror/stateand@codemirror/viewas direct dependencies. - Removed a full-width space, an unnecessary regex escape, two unnecessary type assertions and two deprecated slider calls.
- Fixed two placeholders/labels to sentence case.
Known, deliberate deviations
- The chat request still uses the browser
fetchwhen streaming is on: Obsidian'srequestUrlcannot stream a response body, and streaming is what keeps long answers from appearing all at once at the end.requestUrlremains the fallback channel, and the model list tries it first. - The settings tab still uses the classic (
display()) API instead of the declarative one:getSettingDefinitions()requires Obsidian 1.13, and adopting it would raiseminAppVersionto 1.13.0 and cut off everyone on older versions.