Commit Graph
1660 Commits
Author SHA1 Message Date
moppeeer f21c6994e5 Merge remote-tracking branch 'origin/main' into list-buttons-hanging-indent
# Conflicts:
#	ROADMAP.md
2026-10-22 11:20:13 +02:00
moppeeer 3a677828e5 Merge remote-tracking branch 'origin/main' into paragraph-style-general
# Conflicts:
#	ROADMAP.md
2026-10-22 11:19:26 +02:00
moppeeer 77ad8db632 Merge remote-tracking branch 'origin/main' into text-frame-options-layout
# Conflicts:
#	ROADMAP.md
2026-10-22 11:18:29 +02:00
moppeeer e093947ab1 Merge remote-tracking branch 'origin/main' into effect-blend-modes
# Conflicts:
#	ROADMAP.md
2026-10-22 11:15:52 +02:00
moppeeer 8721b293cb Merge remote-tracking branch 'origin/main' into clear-fitting-options
# Conflicts:
#	ROADMAP.md
2026-10-22 11:13:44 +02:00
moppeeerandClaude Opus 5.5 88020e0914 Properties › Text Wrap: one side edits that side on each object; the link follows the selection
`object.textWrap`'s `offset` takes null for a side to keep each object's own
offset there. Unlinked, Properties sends only the edited side, so with
several objects selected each keeps its other three offsets. The link's
state is kept per selection: another selection whose four offsets are the
same starts linked.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 11:03:03 +02:00
moppeeer 94f701f796 Merge remote-tracking branch 'origin/main' into codex/direct-select-unselected-anchor
# Conflicts:
#	ROADMAP.md
2026-10-22 10:55:41 +02:00
moppeeer 5f623e0cba Merge remote-tracking branch 'origin/main' into properties-anchor-points
# Conflicts:
#	ROADMAP.md
#	crates/tools/src/select.rs
#	crates/ui-egui/src/panels/properties.rs
2026-10-22 10:46:35 +02:00
moppeeer d2001f2597 Merge remote-tracking branch 'origin/main' into direct-select-anchor-points
# Conflicts:
#	ROADMAP.md
#	crates/tools/src/select.rs
2026-10-22 10:41:07 +02:00
NetterSilverandClaude Opus 5.5 35e5b39874 Clamp text frame column count before narrowing to u32
Found while testing crates/engine/src/cmd/object.rs:2519

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-22 08:40:18 +00:00
moppeeerandClaude Opus 5.5 a74ea0d3c9 Styles: a non-string Based On or Next Style is refused on creation too
`style.paragraph.create` and `style.character.create` refuse a `basedOn` or
`nextStyle` that is neither a style name nor null, instead of dropping it and
creating the style without the reference, as `style.paragraph.edit` does.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 09:44:13 +02:00
moppeeer 6c253bf89d Merge remote-tracking branch 'origin/main' into character-style-from-selection
# Conflicts:
#	ROADMAP.md
2026-10-22 09:38:05 +02:00
moppeeer 07a4981d02 Merge remote-tracking branch 'origin/main' into loaded-cursor-thumbnail
# Conflicts:
#	ROADMAP.md
2026-10-22 09:27:40 +02:00
moppeeer 9036034707 Merge remote-tracking branch 'origin/main' into codex/toc-right-indent-separator
# Conflicts:
#	ROADMAP.md
2026-10-22 09:25:37 +02:00
moppeeer a1a7742b0c Merge remote-tracking branch 'origin/main' into direct-select-delete-image
# Conflicts:
#	ROADMAP.md
2026-10-22 09:24:58 +02:00
moppeeer 41dfff176d Merge remote-tracking branch 'origin/main' into package-pdf-preset
# Conflicts:
#	ROADMAP.md
2026-10-22 09:19:49 +02:00
moppeeer 8d09c3ab82 Merge remote-tracking branch 'origin/main' into spelling-common-words
# Conflicts:
#	ROADMAP.md
2026-10-22 09:17:12 +02:00
moppeeer f820b8a56d Merge remote-tracking branch 'origin/main' into insert-pages-dialog
# Conflicts:
#	ROADMAP.md
2026-10-22 09:16:33 +02:00
moppeeer 8b4ca5f76c Merge remote-tracking branch 'origin/main' into find-change-format
# Conflicts:
#	ROADMAP.md
2026-10-22 09:11:53 +02:00
moppeeer 6467e0b30a Merge remote-tracking branch 'origin/main' into character-style-from-selection
# Conflicts:
#	ROADMAP.md
2026-10-22 09:11:12 +02:00
moppeeer fc04020f0b Merge remote-tracking branch 'origin/main' into list-buttons-hanging-indent
# Conflicts:
#	ROADMAP.md
2026-10-22 09:07:49 +02:00
moppeeer 19914b43be Merge remote-tracking branch 'origin/main' into paragraph-style-general
# Conflicts:
#	ROADMAP.md
2026-10-22 09:07:08 +02:00
moppeeer 9b8ba34341 Merge remote-tracking branch 'origin/main' into text-frame-options-layout
# Conflicts:
#	ROADMAP.md
2026-10-22 09:05:46 +02:00
moppeeer 5d2db6f958 Merge remote-tracking branch 'origin/main' into effect-blend-modes
# Conflicts:
#	ROADMAP.md
2026-10-22 08:59:41 +02:00
moppeeer 12c00b9095 Merge remote-tracking branch 'origin/main' into clear-fitting-options
# Conflicts:
#	ROADMAP.md
2026-10-22 08:53:42 +02:00
aionggandHamza 333f2a04e3 Selection: drag a column guide to move its gutter (#1096) (#1176)
* IDML: keep column guides that were dragged off centre (#1096)

InDesign records dragged column guides in `MarginPreference ColumnsPositions`,
as pairs of offsets from the margin box's left edge. The importer discarded them
and divided the columns evenly, so a page whose gutter the designer had moved
came back with it in the middle: on a 450 pt margin box, `0 150 170 450` was
read as columns at 215 and 235.

`Columns::positions` already existed, documented as "Custom column positions
(after dragging column guides)", but nothing set it and nothing read it. Now
`Page::column_rects` returns the custom rects when they are set — that one
method is what the canvas guides, snapping, threading and the first frame of a
placed story all go through, so they follow the dragged gutter — the importer
fills it, and the exporter writes the page's real positions instead of
recomputing an even split, so the round trip keeps them.

`layout.marginsAndColumns` clears them when a count or gutter is set, which is
what InDesign's Margins and Columns does. Without that the stale positions would
outrank the new value and the dialog would look broken.

Verified against InDesign-authored IDML rather than assumed, which settled two
things. The attribute is written whether or not anything was dragged — a real
page's values are exactly its even split — so an even set is dropped rather than
marking every imported page custom and freezing its columns; the tolerance for
that comparison only absorbs float noise, about 1e-14 pt on that page. And
`<Guide>` is a `<Page>` child, not a `<Spread>` one, which is where this
importer already looks: the reporter's missing ruler guide was 099fbd2, landed
the day the ticket was filed, not a second bug.

That commit left `lib.rs` still listing guides as ignored on import; corrected.

* IDML: test a ruler guide in a column gutter without facing pages (#1096)

* View: Lock Guides and Lock Column Guides are commands (#1096)

view.lockGuides {on?} (Cmd+Alt+;) sets the Lock Guides UI state the Properties panel and ruler-guide drags use. view.lockColumnGuides {on?} is a document setting, on by default, saved with the document, not an undo step, and read from and written to IDML ColumnGuideLocked. Both are in View > Grids & Guides with checkmarks.

* IDML: custom column positions are validated and round-trip (#1096)

Columns::positions are used only when they are 2 x count finite edges,
ascending from 0 to the margin box width (within 0.01 pt); anything else
is the even split, in Page::column_rects, on IDML import (bounded parse,
checked against the page's margin box) and on IDML export.
Columns::with_gutter_moved moves one gutter's pair of guides between its
neighbours for the coming column-guide command.

ROADMAP: drop four progress-log lines the #1121 merge duplicated and move
its line to the top.

* Layout: Margins and Columns keeps dragged columns unless the count or gutter changes (#1096)

* Layout: autoflow, inserted pages and new parents follow dragged columns (#1096)

* Integration: close #1121's round-trip test beside the ruler-guide test

* View: Lock Column Guides is translated wherever Lock Guides is (#1096)

* View: Lock Column Guides is translated wherever Lock Guides is (#1096)

* Layout: a new margin or page width resets dragged columns (#1096)

* IDML: a page without its own margins checks the default's column positions against its width (#1096)

* Layout: #1121's margin case follows the new-width rule (#1096)

* View: Lock Column Guides is undoable (#1096)

* Layout: dragged columns scale with a new margin or page width (#1096)

* Layout: dragged columns mirror when a page changes side (#1096)

* Layout: the page-width test drags a page whose columns are its own (#1096)

* Selection: drag a column guide to move its gutter (#1096)

* Layout: pages that follow a one-page parent take its dragged columns mirrored (#1096)

* Selection: column-guide drag review fixes (#1096)

* ROADMAP: the progress line lands in one commit after the guide PRs

---------

Co-authored-by: Hamza <mail.hamzanaveed@gmail.com>
2026-10-22 02:52:17 -04:00
moppeeer 48303d7d46 Merge remote-tracking branch 'origin/main' into codex/direct-select-unselected-anchor
# Conflicts:
#	ROADMAP.md
2026-10-22 08:39:27 +02:00
aionggandHamza a912438ab8 Layout: autoflow, inserted pages and new parents follow dragged columns, mirrored across sides (#1096) (#1173)
* IDML: keep column guides that were dragged off centre (#1096)

InDesign records dragged column guides in `MarginPreference ColumnsPositions`,
as pairs of offsets from the margin box's left edge. The importer discarded them
and divided the columns evenly, so a page whose gutter the designer had moved
came back with it in the middle: on a 450 pt margin box, `0 150 170 450` was
read as columns at 215 and 235.

`Columns::positions` already existed, documented as "Custom column positions
(after dragging column guides)", but nothing set it and nothing read it. Now
`Page::column_rects` returns the custom rects when they are set — that one
method is what the canvas guides, snapping, threading and the first frame of a
placed story all go through, so they follow the dragged gutter — the importer
fills it, and the exporter writes the page's real positions instead of
recomputing an even split, so the round trip keeps them.

`layout.marginsAndColumns` clears them when a count or gutter is set, which is
what InDesign's Margins and Columns does. Without that the stale positions would
outrank the new value and the dialog would look broken.

Verified against InDesign-authored IDML rather than assumed, which settled two
things. The attribute is written whether or not anything was dragged — a real
page's values are exactly its even split — so an even set is dropped rather than
marking every imported page custom and freezing its columns; the tolerance for
that comparison only absorbs float noise, about 1e-14 pt on that page. And
`<Guide>` is a `<Page>` child, not a `<Spread>` one, which is where this
importer already looks: the reporter's missing ruler guide was 099fbd2, landed
the day the ticket was filed, not a second bug.

That commit left `lib.rs` still listing guides as ignored on import; corrected.

* IDML: custom column positions are validated and round-trip (#1096)

Columns::positions are used only when they are 2 x count finite edges,
ascending from 0 to the margin box width (within 0.01 pt); anything else
is the even split, in Page::column_rects, on IDML import (bounded parse,
checked against the page's margin box) and on IDML export.
Columns::with_gutter_moved moves one gutter's pair of guides between its
neighbours for the coming column-guide command.

ROADMAP: drop four progress-log lines the #1121 merge duplicated and move
its line to the top.

* Layout: autoflow, inserted pages and new parents follow dragged columns (#1096)

* IDML: a page without its own margins checks the default's column positions against its width (#1096)

* Layout: dragged columns mirror when a page changes side (#1096)

* Layout: pages that follow a one-page parent take its dragged columns mirrored (#1096)

* ROADMAP: the progress line lands in one commit after the guide PRs

---------

Co-authored-by: Hamza <mail.hamzanaveed@gmail.com>
2026-10-22 02:26:38 -04:00
aionggandHamza 1ba06027ac Layout: Margins and Columns keeps dragged columns, which scale with the margin box (#1096) (#1172)
* IDML: keep column guides that were dragged off centre (#1096)

InDesign records dragged column guides in `MarginPreference ColumnsPositions`,
as pairs of offsets from the margin box's left edge. The importer discarded them
and divided the columns evenly, so a page whose gutter the designer had moved
came back with it in the middle: on a 450 pt margin box, `0 150 170 450` was
read as columns at 215 and 235.

`Columns::positions` already existed, documented as "Custom column positions
(after dragging column guides)", but nothing set it and nothing read it. Now
`Page::column_rects` returns the custom rects when they are set — that one
method is what the canvas guides, snapping, threading and the first frame of a
placed story all go through, so they follow the dragged gutter — the importer
fills it, and the exporter writes the page's real positions instead of
recomputing an even split, so the round trip keeps them.

`layout.marginsAndColumns` clears them when a count or gutter is set, which is
what InDesign's Margins and Columns does. Without that the stale positions would
outrank the new value and the dialog would look broken.

Verified against InDesign-authored IDML rather than assumed, which settled two
things. The attribute is written whether or not anything was dragged — a real
page's values are exactly its even split — so an even set is dropped rather than
marking every imported page custom and freezing its columns; the tolerance for
that comparison only absorbs float noise, about 1e-14 pt on that page. And
`<Guide>` is a `<Page>` child, not a `<Spread>` one, which is where this
importer already looks: the reporter's missing ruler guide was 099fbd2, landed
the day the ticket was filed, not a second bug.

That commit left `lib.rs` still listing guides as ignored on import; corrected.

* IDML: custom column positions are validated and round-trip (#1096)

Columns::positions are used only when they are 2 x count finite edges,
ascending from 0 to the margin box width (within 0.01 pt); anything else
is the even split, in Page::column_rects, on IDML import (bounded parse,
checked against the page's margin box) and on IDML export.
Columns::with_gutter_moved moves one gutter's pair of guides between its
neighbours for the coming column-guide command.

ROADMAP: drop four progress-log lines the #1121 merge duplicated and move
its line to the top.

* Layout: Margins and Columns keeps dragged columns unless the count or gutter changes (#1096)

* Layout: a new margin or page width resets dragged columns (#1096)

* Layout: #1121's margin case follows the new-width rule (#1096)

* Layout: dragged columns scale with a new margin or page width (#1096)

* Layout: the page-width test drags a page whose columns are its own (#1096)

* ROADMAP: the progress line lands in one commit after the guide PRs

---------

Co-authored-by: Hamza <mail.hamzanaveed@gmail.com>
2026-10-22 02:23:32 -04:00
aiongg d7b9f716f1 View: Lock Guides and Lock Column Guides are commands (#1096) (#1174)
* View: Lock Guides and Lock Column Guides are commands (#1096)

view.lockGuides {on?} (Cmd+Alt+;) sets the Lock Guides UI state the Properties panel and ruler-guide drags use. view.lockColumnGuides {on?} is a document setting, on by default, saved with the document, not an undo step, and read from and written to IDML ColumnGuideLocked. Both are in View > Grids & Guides with checkmarks.

* View: Lock Column Guides is translated wherever Lock Guides is (#1096)

* View: Lock Column Guides is undoable (#1096)

* ROADMAP: the progress line lands in one commit after the guide PRs
2026-10-22 02:12:42 -04:00
aionggandHamza 6f7fc7134a IDML: dragged column guides import, validated, and round-trip (#1096) (#1171)
* IDML: keep column guides that were dragged off centre (#1096)

InDesign records dragged column guides in `MarginPreference ColumnsPositions`,
as pairs of offsets from the margin box's left edge. The importer discarded them
and divided the columns evenly, so a page whose gutter the designer had moved
came back with it in the middle: on a 450 pt margin box, `0 150 170 450` was
read as columns at 215 and 235.

`Columns::positions` already existed, documented as "Custom column positions
(after dragging column guides)", but nothing set it and nothing read it. Now
`Page::column_rects` returns the custom rects when they are set — that one
method is what the canvas guides, snapping, threading and the first frame of a
placed story all go through, so they follow the dragged gutter — the importer
fills it, and the exporter writes the page's real positions instead of
recomputing an even split, so the round trip keeps them.

`layout.marginsAndColumns` clears them when a count or gutter is set, which is
what InDesign's Margins and Columns does. Without that the stale positions would
outrank the new value and the dialog would look broken.

Verified against InDesign-authored IDML rather than assumed, which settled two
things. The attribute is written whether or not anything was dragged — a real
page's values are exactly its even split — so an even set is dropped rather than
marking every imported page custom and freezing its columns; the tolerance for
that comparison only absorbs float noise, about 1e-14 pt on that page. And
`<Guide>` is a `<Page>` child, not a `<Spread>` one, which is where this
importer already looks: the reporter's missing ruler guide was 099fbd2, landed
the day the ticket was filed, not a second bug.

That commit left `lib.rs` still listing guides as ignored on import; corrected.

* IDML: custom column positions are validated and round-trip (#1096)

Columns::positions are used only when they are 2 x count finite edges,
ascending from 0 to the margin box width (within 0.01 pt); anything else
is the even split, in Page::column_rects, on IDML import (bounded parse,
checked against the page's margin box) and on IDML export.
Columns::with_gutter_moved moves one gutter's pair of guides between its
neighbours for the coming column-guide command.

ROADMAP: drop four progress-log lines the #1121 merge duplicated and move
its line to the top.

* IDML: a page without its own margins checks the default's column positions against its width (#1096)

* ROADMAP: the progress line lands in one commit after the guide PRs

---------

Co-authored-by: Hamza <mail.hamzanaveed@gmail.com>
2026-10-22 01:59:10 -04:00
aionggandSBaksa 3be2736d0a Guides: select ruler guides and set their position (#1282) (#1445)
* Guides: a dragged guide shows where it is (#1282)

While a guide is dragged out of a ruler or moved, a label beside the
pointer reads X: or Y: and the guide's place, in the ruler units and
measured the way the rulers measure (from the zero point, and from the
page origin when rulers restart per page).

* Guides: keep the drag readout inside the canvas

Near the canvas's right or bottom edge the readout flips to the other
side of the pointer, and it is kept inside the canvas in every case
(readout_at).

* Guides: the drag readout measures the spread under the pointer

The readout measured from the spread in the middle of the view (where the
rulers measure), but a guide is dropped on the spread under the pointer,
so with spreads above one another the number shown could differ from the
guide's place. It now measures that spread (ruler_pieces_of).

* Guides: no readout for an existing guide over another spread

An existing guide moves only on its own spread (guide_drag), so dropped
over another it stays where it was: the readout no longer shows a place
there it won't go.

* #1282: guide selection commands (guide.select, guide.selectAll, guide.deselect, guide.moveBy)

* #1282: select ruler guides on the canvas, X/Y in the Control bar and Properties

* #1282: guides take clicks over objects, a new guide is selected, group drag preview

* ROADMAP: the progress line lands in one commit after the guide PRs

---------

Co-authored-by: SBaksa <sabaksa11@gmail.com>
2026-10-22 01:47:49 -04:00
storybored379andClaude Opus 5.5 ecb2fc1676 MCP: complete tool hints and check nested argument keys
Extend the existing MCP tools instead of adding a second set (#259):

- every tool states destructiveHint and idempotentHint next to
  readOnlyHint/openWorldHint; input schemas are closed
- the #776 unknown-key check walks the schema, so a misspelt key in a
  batch step, a pointer event or mods is -32602 with its path instead
  of being ignored
- script::parse refuses JSON step keys other than command/params
- a panic outside a command (rendering, inspection, the app connection)
  is a tool error and the server keeps running

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-21 21:26:50 -07:00
moppeeer a11053d646 Merge remote-tracking branch 'origin/main' into loaded-cursor-thumbnail
# Conflicts:
#	ROADMAP.md
2026-10-22 02:46:37 +02:00
moppeeer a4641fe022 Merge remote-tracking branch 'origin/main' into codex/toc-right-indent-separator
# Conflicts:
#	ROADMAP.md
2026-10-22 02:46:33 +02:00
moppeeer cc799c4f08 Merge remote-tracking branch 'origin/main' into direct-select-delete-image
# Conflicts:
#	ROADMAP.md
2026-10-22 02:46:32 +02:00
moppeeerandClaude Opus 5.5 9ab1122688 Package: check the PDF's view options before writing anything
`export::check_pdf_options` refuses what `pdf_report` would: the export
options, the flattener, and now `pageLayout` and `view`, which `pdf_report`
reads up front too. `file.package` checks with it before the output folder
is made, so an unknown page layout or view leaves no partial package.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 01:28:37 +02:00
moppeeerandClaude Opus 5.5 c71bf1a32c List buttons: pressed when every targeted paragraph has the list; off takes only its own
`Session::selection_has_list` checks every paragraph the list commands apply
to (selected text, cells or text frames). Type › Apply Bullets / Numbers and
Properties' Bulleted and Numbered List buttons both use it, so a selection
reaching an unbulleted paragraph isn't shown pressed. An explicit `on: false`
leaves paragraphs with the other list type, and their hanging indent, alone.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 01:12:32 +02:00
moppeeerandClaude Opus 5.5 63d3f5a19d Package the PDF as file.exportPdf makes it; refuse a bad pdf
file.package now writes its PDF through export's `pdf_report`, so a preset's
transparency flattening, the effects and hidden-layer rasterising, the blend
space, the view options and the transitions all reach the packaged PDF.
A `pdf` that is neither a switch nor export options is refused, as is a bad
flattener, before anything is written. Georgian: the printing term for spot
inks.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 00:59:00 +02:00
moppeeerandClaude Opus 5.5 e108408c31 Insert Pages: a placement given must be a page index; the dialog's page is clamped
`layout.pages.insert` refuses `after` and `before` given together (null
counts as given) and a placement that isn't a page index, instead of
inserting at the default position; the default applies only when
neither is given. The dialog sends the page its menu shows (a page past
the end is the last). The dialog title is in the shared table, and
Georgian "Before Page" reads "გვერდის წინ".

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 23:58:07 +02:00
Claude 6a56272b32 Merge remote-tracking branch 'upstream/main' into xref-edited-text 2026-10-21 21:43:20 +00:00
Claude c95880f75d Merge remote-tracking branch 'upstream/main' into running-header-order 2026-10-21 21:42:56 +00:00
paaspaas00andClaude Opus 5.5 4c3f24e43d Package: the packaged PDF uses a chosen PDF preset
The Package dialog's Include PDF (Print) gets a PDF Preset, as InDesign's
Select PDF Preset: the Export PDF presets, the last one used first. The
packaged PDF always had the default settings.

`file.package` takes `pdf: {…file.exportPdf options}` besides true/false,
read with the same `export::options` before anything is written, so bad
options leave no partial package. The Export PDF dialog's field-to-params
code is shared (`pdf_export_params`, `pdf_preset_params`).

Found in the Learn Skills Daily course, chapter 27.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 21:39:43 +02:00
paaspaas00andClaude Opus 5.5 c0e38160d6 Spelling: "we", "if", "email" and curly-apostrophe contractions are known
The spell checker uses the Moby Hyphenator II word list, which lacks some
very common short words (we, us, if, Mr, pm, vs) and most computer and web
vocabulary (email, online, website, database, desktop, download...).
Contractions typed with a typographer's apostrophe (don’t, we’re), which
Use Typographer's Quotes produces by default, were looked up with the
curly apostrophe and flagged too. Dynamic Spelling underlined most words
of an ordinary sentence.

`known` now reads U+2019 as a straight apostrophe (also in the user
dictionary) and accepts a short sorted list of such common words, with
the existing inflection rules applied to them.

Found in the Learn Skills Daily course, chapter 26.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 20:50:19 +02:00
paaspaas00andClaude Opus 5.5 e91f748350 Insert Pages dialog as InDesign's; pages can go before a page or first
Insert Pages… opened the generic command form (Count, a 0-based After
index, a parent id). It now opens InDesign's dialog: Pages; Insert After
Page, Before Page, At Start of Document or At End of Document, with the
page by name; and Parent ([None] or a parent). It is set to the page in
view (or the page right-clicked) and that page's parent.

`layout.pages.insert` takes `before` (0: at the start of the document);
`after` and `before` together are refused.

Found in the Learn Skills Daily course, chapter 25.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 20:17:21 +02:00
paaspaas00andClaude Opus 5.5 d0e90e71ca Place cursor: the crosshair throughout when no graphic is loaded
With nothing in the place cursor there's no thumbnail to show, so the
cursor is the crosshair before a press too, as it already was while
dragging. (Review.)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 19:01:26 +02:00
paaspaas00andClaude Opus 5.5 95006e9e9e Find/Change: Change Format, with a character or paragraph style
find.change takes a Change Format: charStyle and paraStyle as well as
the character attributes (attrs) it took. With a Change Format and an
empty change, the found text stays and is only formatted, as InDesign
does; without one an empty change still deletes. The style-apply code of
style.paragraph.apply / style.character.apply moves into helpers that
find.change shares.

The Find/Change dialog has InDesign's Change Format box, with Specify
Attributes (opening Change Format Settings over Find/Change: Style
Options, then the character sections of Character Style Options) and
Clear. An info icon beside Change to says an empty Change to keeps the
text. Found in the Learn Skills Daily course, chapter 22.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 17:44:12 +02:00
paaspaas00andClaude Opus 5.5 9d46967f16 Character styles: a new style from the selected text, applied to it
New Character Style with text selected starts from what the text has of
its own over its paragraph style (its character style's attributes and
its overrides), as InDesign's "[None] + Bold + color", and Apply Style to
Selection (on) gives the text the new style with no override left. A new
style's dialog is titled New Paragraph Style / New Character Style.
type.selectionAttrs reports the text's own character attributes as
ownChars. Found in the Learn Skills Daily course, chapter 22.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 17:15:28 +02:00
paaspaas00andClaude Opus 5.5 189cccd2fc Bulleted and Numbered List buttons give InDesign's default hanging indent
The Properties buttons and Type > Bulleted & Numbered Lists > Apply Bullets /
Apply Numbers (list.bullets, list.numbers) apply the list with Left Indent
0.25 in / First Line Indent -0.25 in when the paragraph has no indents, so the
text lines up after the bullet; pressed again, the list and that indent go.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 16:04:31 +02:00
paaspaas00andClaude Opus 5.5 ff5b065faf Place cursor: the thumbnail stays until a drag starts drawing the frame
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 15:33:11 +02:00