fix: review fixes for the merged command-line, plugin and font changes

Direct distance entry (#1429) turned every bare number at a point prompt
into a distance, so ROTATE's angle and the values automation types were
read as coordinates. The step reads the token first now — `feed_command`
reports whether it claimed it — and only an unclaimed one becomes a
distance. That also puts the token back on the unified step driver, which
owns the P / L selection keywords and the dimension-snap bookkeeping, and
stops `on_text_input` running twice for the same token. A tracking ray
carries its own base, so it no longer demands an anchor that the first
point of a command does not have yet.

Plugin command execution (#1425) re-implemented the command line inside
the plugin host: it dispatched families directly, skipping the teardown
that starts a command (grip edits, selection gestures, `last_point`, the
accepted snaps), and made every `CmdResult::Dispatch` in the application
skip plugin dispatch to avoid its own re-entrancy. A scripted line now
runs through `run_command_line`, with the trailing Enter left off while
the plugin streams the command, and the re-entrancy is handled by a flag
set for the length of the plugin's call. A pause parks the line's Enter
with the rest of its tokens instead of dropping it.

A font reference (#1432) tried the family lookup before the face-file
index, and that lookup ends in a prefix match a longer file name loses to
(`ISOCPEUI.TTF` would take `ISOCP`). The exact file answers first.

Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
Hakan SevenandClaude Opus 5 committed 2026-09-22 13:35:25 +03:00
1 parent 0cbaf18551
commit fcbab57627
6 files changed
+94 -100

No files matched your search

+4 -1
View File
@@ -179,7 +179,10 @@ pub fn family_for_reference(reference: &str) -> Option<String> {
if reference.is_empty() {
return None;
}
canonical_family_name(reference).or_else(|| family_for_file(reference))
// The file name is exact; the family lookup ends in a prefix/subset match
// that a longer file name loses to (`ISOCPEUI.TTF` would take `ISOCP`), so
// an installed face file answers first.
family_for_file(reference).or_else(|| canonical_family_name(reference))
}
/// Whether `family` matches an installed system font (case-insensitive via