• (v0.7.4) Tidy

    Editor & Layout

    • Slimmer AI Assistant header. The provider and model dropdowns, attach toggle, and clear button in the AI panel header now use smaller controls with tighter spacing, matching the compact headers elsewhere and giving the conversation more room.
    • Consistent terminal & log font. The built-in terminal now uses the same fixed monospaced size as the raw build log, so switching between the Terminal and Log tabs no longer jumps font size.

  • (v0.7.3) Connected

    AI Assistant

    • Live model lists. The model dropdown for each provider (Claude, ChatGPT, Gemini) is now fetched from your account instead of a hardcoded list — new models appear automatically the moment your key can use them. It refreshes when you open Preferences and after a key is verified, and falls back to a built-in list when you’re offline or haven’t added a key.

    Terminal

    • Run a custom command. Set your own command in Settings → Compile → Custom command and run it in the built-in terminal from the ▶ button in the Terminal header or with ⌃⌘B. It runs from the build target’s folder and supports the same {file} / {filename} placeholders as the build command — handy for bibtex, makeindex, latexmk, or any project script.
    • Matching font size. The terminal now tracks the editor’s font size, so the two stay visually consistent and resize together.

    Finder Integration

    • Open LaTeX files directly. texspark now registers as an editor for LaTeX and BibTeX files (.tex, .ltx, .latex, .sty, .cls, .dtx, .ins, .def, .clo, .bib, .bst), so you can double-click them in Finder or use “Open With” to jump straight into the editor.

    Editor & Layout

    • Smaller Issues filter. The All / Errors / Warnings switch in the Issues panel now matches the slimmer segmented controls used elsewhere.

  • Editor & Layout

    • Folding no longer jumps the scroll. Collapsing or expanding a section above where you were reading used to shove the view up by the folded height, landing you somewhere else in the document. The editor now captures the line at the top of the viewport before the fold changes the layout and pins it back afterward, so your place holds steady no matter where the fold is.
    • More compact panel headers. The Outline/Labels, PDF/AI Assistant, and Terminal/Issues/Log switchers now use smaller segmented controls, and the header row and editor tabs are slimmer — reclaiming vertical space for your document while keeping every column’s headers aligned.

  • Editor & Layout

    • Correct scrolling when the editor width changes. Re-wrapping the document after a width change no longer cuts the scroll extent short — content near the bottom used to be unreachable until an edit forced a relayout. Per-tab scroll position is now restored by a text anchor instead of a raw pixel offset, so your place holds even when the wrapping changes.
    • No more false scroll bottom. After collapsing/expanding a fold or editing near the end of a document, the view could bottom out with content still below it until the next edit. The editor now self-heals a short frame as you scroll toward the bottom, and re-measures after unfolding a large section.
    • Fixed a stale minimap after resizing. The minimap could draw short or misaligned right after a window/editor width change, then jump the scroll as it caught up. It now reads final geometry on the first render and keeps the viewport steady.
    • Correct numbering for the final empty line. When a document ends with a trailing newline, that empty last line is now numbered — the caret no longer lands on an unnumbered row — and it’s no longer clipped from the scrollable area.
    • Find indicator only on real matches. The indicator no longer flashes on manual selections (mouse drags, Shift+arrow) while the find bar is open — it fires only when navigating to an actual search match.

    Tabs & Files

    • No more duplicate tabs for the same file. Opening a file that’s already open now always reuses its tab, even when reached by a different path — through a symlink, across two mounts of the same volume, or via SyncTeX reverse search versus the outline — by matching files on their filesystem identity rather than the path string.

    Settings

    • Cleaner settings screen. The always-visible explanation captions now live behind a small (i) button — click for a popover, hover for a tooltip — keeping the form compact. The two safety warnings stay inline whenever their risky state is active (auto-save on, or overwrite confirmation off).

  • New Text Engine & Folding

    • Rebuilt the editor on TextKit 2. Layout and drawing now share the same geometry, eliminating the code-folding overlap bug where collapsing a large or deeply-nested section painted garbled text over the folded header.
    • Reworked code folding. Folds collapse cleanly to the last line — no leftover blank line, no stray fold chip through nested collapses.
    • Consistent line height for mixed Korean/Latin text, adaptive gutter width, and the minimap, all reimplemented on the new engine.
    • Leaner internals — the old TextKit 1 code paths were removed.

    Faster Typing

    • Noticeably snappier typing. Per-keystroke work in the editor was profiled and trimmed across the board — even short documents used to accumulate small stalls on every key press.
    • Instant autocompletion popup. The command palette is pre-built at launch and stays resident between uses, so typing \ no longer pays a window round-trip to reopen it. While you narrow a command, it updates only what actually changed instead of rebuilding on every letter.
    • No more hitch when you resume typing. The outline and label lists are now parsed in the background — they used to rescan on the main thread right after each typing pause, exactly when you were about to type again — and the sidebar skips redrawing when nothing changed.
    • Smoother Korean input. Fixed an intermittent lag while composing Hangul (the delay mid-syllable as a character formed).
    • Internal caret diagnostics were removed from the keystroke path (still available behind a hidden preference for debugging).

    AI Assistant

    • Renamed “AI Agent” → “AI Assistant” across the panel, tab, menus, and settings.
    • Refined look. The panel shares the editor’s background so the two feel like one workspace; replies sit in clean cards, and the input field has a rounded border.
    • File attachments. A new attach button adds files: text files (.tex, .bib, .cls, …) are inserted inline into your prompt, while images and PDFs are sent as real attachments to Claude, ChatGPT, and Gemini. Staged files show as removable chips.
    • Smoother streaming. Responses render in steady batches instead of stuttering as the message grows.
    • Auto-follow & “Jump to latest.” New content keeps the view pinned to the bottom while you’re there; a bottom-center button brings you back when you’ve scrolled up.
    • Errors as chat bubbles. API/network failures now appear inline as a distinct error bubble with a readable message, instead of a banner that scrolls away.
    • Faster to open with a long chat history — the transcript now renders lazily instead of building every past message up front.
    • Larger send/stop button.

    Editor & Files

    • Fixed a scroll jump while typing in long documents — the viewport no longer lurches and snaps back on each keystroke.
    • Large pastes stay in sync. Pasting a big block now highlights the whole thing right away, and the scrollbar and minimap match the real document length — no more bottoming out while text remains below, blank regions in the lower minimap, or a one-time scroll jump after the paste settles.
    • Stable editor width across monitors. Moving the mouse to another display could flip the scrollbar between overlay and classic styles, changing the editor’s width and re-wrapping the whole document. The scrollbar now always overlays the text, so line wrapping stays put.
    • Find & Replace persists across tabs — mode (Find vs Replace) and search string carry over on tab switches, and each match flashes a find indicator (even when off-screen).
    • Redesigned minimap. The overview strip now draws a syntax-colored silhouette of your document — commands, comments, and math show in their editor colors. While typing it repaints only what changed, and full re-renders happen in the background, so the minimap never delays a keystroke even in very long files.
    • Comment toggle keeps the caret aligned with the inserted/removed %.
    • Save All (⌥⌘S) writes every open document at once.
    • Steadier terminal text. The built-in terminal now uses a fixed font size (matching the AI Assistant) instead of scaling with the editor’s font-size setting.
    • Tighter spacing between the sidebar / bottom-panel toggle icons.

    Sessions

    • Your tabs survive a crash. The open-tab set is now saved as you work — on tab changes and whenever the app leaves the foreground — not just on quit, so an unexpected shutdown no longer loses your session.
    • Clear Session. A new File ▸ Clear Session command closes every tab and wipes the saved session, so the next launch starts fresh.

  • New

    • Choose whether to restore your last session — a new Editor → Behavior toggle, Restore last session on launch (on by default), lets texspark start empty instead of reopening your previous tabs. Your tabs are still saved on quit either way, so flipping it back on brings them right back.
    • Open the PDF in your default app — a new button in the PDF header hands the current PDF to Preview, Skim, or whatever you’ve set as the default, for full-window reading, printing, annotating, or presenting.
    • Jump to any open tab — a new ⌄ menu at the right of the tab strip lists every open document, with a checkmark on the current one and a ● on unsaved tabs. Pick one to switch straight to it — handy when you have more tabs than fit and some are scrolled off. It appears once you have more than one tab open.

    Fixed

    • Click to move the caret while typing Korean — clicking elsewhere mid-composition now moves the cursor on the first click instead of taking two, while still committing the syllable you were typing.
    • Highlighting survives a line break inside inline math — wrapping a long $…$ across a line no longer drops its syntax colors. Inline math now highlights across line breaks (stopping only at a blank line), and editing one line of a multi-line formula re-colors the whole span instead of just the line you touched.

    Improved

    • Unnumbered headings in the outline — starred sectioning commands (\chapter*, \section*, \subsection*) now appear in the outline without a number, and no longer bump the counter — so a starred preface no longer pushes your first real chapter to “2”.
    • Smarter bracket auto-close — typing an opening (, [, or { in front of text that already has a matching closer no longer inserts a stray extra one. Type ( before something) and you get (something), not ()something). When the line is balanced, the pair is still auto-inserted as before.
    • Smarter $ auto-close — when a line already has an open math delimiter, typing $ closes it with a single character instead of dropping in a new $$ pair. So finishing $x with a $ gives you $x$, not $x$$.
    • Lettered appendices in the outline — headings after \appendix are now numbered with letters (A, B, C…) instead of digits, matching LaTeX. Appendix chapters read A, B… with their sections as A.1, A.2, and the counter restarts at A so a numbered chapter before the appendix no longer throws it off. In article-class documents, where the appendix letters sections instead, that’s handled too.
    • Outline reopens where you left off — on relaunch, the outline now scrolls to the section holding your restored cursor instead of starting at the top, so you land right back in context in a long document.
    • Smarter “expand to level” in the outline — expanding to Chapters / Sections / Subsections now only opens nodes that actually contain a heading at that level. A chapter whose only children are deeper items (e.g. paragraphs directly under it) stays collapsed instead of dumping those too-deep entries into view.
    • Smoother typing in long documents — the code-folding scan is dramatically faster (it no longer recounts line numbers from the top of the file for every match), so editing a long file no longer pins a CPU core. The minimap also skips redrawing while its window is hidden.

  • Fixed

    • Rock-steady Hangul typing — typing Korean no longer flickers, drifts, or bobs. Previously a Korean line could shimmer (along with the line above it) the moment it soft-wrapped, nudge the lines below it downward, or make the composing syllable jitter up and down. Line height and baseline are now fixed during typesetting itself, so wrapping, fast typing, and IME composition all stay put.
    • No more sideways drift — at fit-width the page no longer scrolls or drags horizontally; horizontal panning kicks in only once you’ve zoomed in past the page width.

    Improved

    • Line numbers never clip — the gutter now sizes itself to the document. It always fits at least four digits and grows automatically for five- and six-digit files (and for larger editor fonts), so deep line numbers are never cut off — while shorter files reclaim the extra space.
    • Softer minimap text — the minimap renders its text a touch lighter so it reads as a calm overview instead of competing with the editor.

    Added

    • Hand tool for panning — right-click the PDF and pick Hand Tool to grab and drag the page around (the cursor turns into a hand); Select Tool switches back to text selection. ⌘-click inverse search keeps working in either mode.
    • Terminal font tracks editor font size — the terminal now automatically matches the editor’s font size, so both stay in sync when you adjust text size in settings.
    • Scroll to zoom — hold ⌥ or ⌘ and scroll to zoom in and out toward the cursor. (⌃+scroll is left to macOS’s own screen zoom.) Use the built-in Automatically Resize in the right-click menu to snap back to fit-width.
    • Hide the sidebar — a new toggle in the editor’s status bar (next to the bottom-panel toggle) collapses the left Outline / Labels sidebar so the editor gets the full width, and brings it back with one click. Both toggles keep a direction-specific icon whether open or closed — a filled left column vs. a filled bottom strip — so you can always tell which is which, and it dims when its panel is hidden. The state is remembered across relaunches, and collapsing the sidebar keeps your editor and tabs exactly as they were.

  • Minimap

    texspark now has a code minimap: a slim overview of the whole document down the right edge of the editor. It renders your actual text — syntax colours and all — scaled way down, so you can see the shape of a file at a glance and jump anywhere in it. On long documents the minimap keeps a fixed zoom and slides to follow your position rather than squashing the entire file into the strip, and clicking or dragging on it scrolls the editor straight to that spot. It stays out of your way otherwise, and you can turn it off entirely in Preferences.

    Fixed

    • Hangul line drift, for good — typing a Korean line no longer nudges the lines below it downward. Line height is now hard-pinned in layout, so the taller CJK-composition font can’t inflate a line.

  • Improved

    • Faster tab switching — switching tabs no longer waits on the tab strip’s scroll animation, so the editor updates right away. Switches that used to take about a fifth of a second are now near-instant.
    • Instant first switch to reopened tabs — after a relaunch, texspark now warms up your restored tabs in the background, laying each one out up to your saved cursor. The first time you switch to a tab is immediate instead of stalling to render — even in long files. A slim progress bar in the status bar shows the warm-up and fades away once every tab is ready.
    • Smoother newlines in large files — pressing Return in a big document no longer stalls; the editor only lays out the visible region instead of the whole file.
    • Fold arrows keep up — the fold triangles in the gutter now track the text more closely as you type and add lines.

    Fixed

    • Line numbers in the gutter — after opening a tab scrolled partway down (including a session-restored tab), the line numbers could restart from 1 at the top of the screen instead of showing the real line numbers. The gutter now reads the visible region in the right coordinate space, so the numbering always matches the document.
    • Line numbers no longer drift while typing Hangul — composing a Korean syllable briefly grew its line taller than the rest, nudging every line (and its number) below it down. Lines now hold a fixed height across Latin and CJK text, composing or committed, so nothing shifts.

    Changed

    • Switching tabs now returns you to your cursor — instead of trying to restore a remembered scroll position, the editor jumps to where your caret last was in that tab and brings it into view. It’s more predictable across tab switches and app relaunches: you land exactly where you were typing.

  • This release is all about how the editor feels in a large, multi-file project — faster tab switching, smoother typing, and a caret that stays exactly where you left it.

    Instant tab switching

    Every open tab now keeps its own editor, so switching between them is immediate — no re-highlighting or re-layout on each switch. Your cursor position, scroll offset, and collapsed sections are all preserved per tab, so returning to a file lands you exactly where you were. Restored tabs are warmed up in the background after launch, so even the first switch to a tab is instant. A single click on a tab selects it right away (double-click still sets/clears the build target).

    Smoother typing in large files

    Typing in large documents (tens of thousands of characters) no longer stutters — most noticeably when completing a Hangul syllable. Keystrokes stay smooth no matter how big the file is; the outline and fold markers simply catch up a moment after you pause.

    Refinements

    • The caret is now saved on every way of switching tabs — mouse, keyboard cycling, and jump-to-issue — so it’s never lost.
    • Switching tabs scrolls the active tab into view and centers it in the tab bar.
    • Outline entries open on any click, single or double.