feat: Strg+Klick auf :#id springt zur Zeile der referenzierten ID (D67)
Strg/Cmd+Klick auf eine Abhängigkeits-ID im Textfeld — auch jede ID der Liste und die Kopf-Form #auth:#db — markiert die Zeile, die die ID vergibt; Tastatur-Pendant Strg+Enter. Erste Vergabe gewinnt (D36/D39), unbekannte IDs tun still nichts. Headless als depIdAt/idLine in autocomplete.js, 16 Tests; Legenden-Zeile hint_jump in allen neun Sprachen erweitert. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Fable 5
parent
54e27091ce
commit
549c12191e
@@ -17,6 +17,10 @@ the git history of `docs/examples/werkbaum.werkbaum`. A day can therefore carry
|
||||
a link without having a note (someone forgot to write one) — but never the
|
||||
reverse.
|
||||
|
||||
## 2026-08-25
|
||||
|
||||
- Ctrl+click a dependency `:#id` in the text jumps to the line that defines the ID — Ctrl+Enter does the same at the caret
|
||||
|
||||
## 2026-08-24
|
||||
|
||||
- A missing size is now estimated from the sub-packages — at least the largest child size, one step more from three children of that size
|
||||
|
||||
@@ -4990,3 +4990,69 @@ stehen. 424 Tests, davon 19 neue in `tests/assumed.test.js`. Gegenprobe per
|
||||
Mutation: Stufe-ab-drei entfernt → genau die drei danach benannten
|
||||
Zusicherungen fallen; disjunktiv Maximum statt Minimum → genau eine; alte
|
||||
M-Pauschale in `ownCost` zurückgebaut → genau die zwei Kosten-Tests.
|
||||
|
||||
## D67 — Strg+Klick folgt einer Abhängigkeit zur Zeile ihrer ID
|
||||
Gewünscht vom Nutzer: Strg+Klick auf eine ID-Referenz wie `:#ziel` im Textfeld
|
||||
soll zur referenzierten ID springen; Alt+Klick bleibt wie gehabt und
|
||||
fokussiert den Knoten im Diagramm. Die Lücke ist real: Abhängigkeiten zeigen
|
||||
bewusst quer durch den Baum (D34), und im mitgelieferten Plan liegt das Ziel
|
||||
oft hunderte Zeilen entfernt. Die ID-Vorschläge (D63) helfen beim
|
||||
**Schreiben** einer Abhängigkeit — beim **Lesen** blieb nur die Textsuche.
|
||||
|
||||
**Die Schreibmarke ist der Treffer, kein eigenes Hit-Testing.** Ein Klick ins
|
||||
Textfeld setzt die Schreibmarke, bevor das `click`-Ereignis läuft —
|
||||
`depIdAt(text, caret)` liest also einfach an `selectionStart`, welche ID dort
|
||||
steht. Kein Pixel-Rechnen, kein Spiegel-`div`; dieselbe Sparsamkeit wie beim
|
||||
Alt+Klick im Textfeld (D25-Nachtrag), der auch nur die Cursor-Zeile nimmt.
|
||||
|
||||
**Erkannt wird dieselbe Form wie bei den ID-Vorschlägen (D63):** das Token
|
||||
alleinstehend angesetzt oder in der Kopf-Form `#auth:#db`; kein Treffer im
|
||||
Kommentar, im Beschreibungsteil hinter `---` und innerhalb einer URL, und
|
||||
`(:#a,#b)` bleibt Zitat (§1/D37). Jede ID der Liste ist einzeln ansteuerbar —
|
||||
die Schreibmarke wählt das Segment. **Benannte Grenze:** Der Parser erkennt
|
||||
nach der Extraktion auch Randformen wie `(M):#b` als Abhängigkeit (die
|
||||
Größen-Entfernung macht das Token alleinstehend); die Klick-Erkennung auf der
|
||||
rohen Zeile tut das nicht. Dort geschieht schlicht nichts — der harmlose
|
||||
Fehlermodus, und dieselbe Vereinfachung, die D63 bereits gewählt hat.
|
||||
|
||||
**Aufgelöst wird zur ersten Vergabe** (`idLine`, Dokumentreihenfolge) — die
|
||||
Regel aus D36/D39, nach der überall aufgelöst wird. Eine unbekannte ID tut
|
||||
still nichts: `unknownDep` warnt bereits, ein zweiter Kanal wäre Lärm.
|
||||
Vorwärts-Referenzen springen nach unten, Zyklen sind schlicht zwei Sprünge.
|
||||
|
||||
**Das Ziel bekommt denselben Sprung wie aus dem Diagramm:** `jumpToLine()` —
|
||||
ganze Zeile markiert, in Sicht gescrollt, waagerecht auf Anfang (D49), und
|
||||
über `caretLine` hebt sich der Zielknoten im Diagramm mit hervor. Kein neues
|
||||
Idiom für dieselbe Aussage „hier ist es".
|
||||
|
||||
**Strg, mit Cmd als macOS-Zwilling.** Alt ist vergeben (Text → Diagramm,
|
||||
D25); Strg+Klick ist in Editoren und IDEs die etablierte
|
||||
„zur Definition"-Geste. Auf macOS ist Strg+Klick das Kontextmenü — dort
|
||||
übernimmt Cmd+Klick (`metaKey`). Tastatur-Pendant ist **Strg+Enter** an der
|
||||
Schreibmarke im Token — dasselbe Muster wie Alt+Enter (D25); `preventDefault`
|
||||
nur bei erfolgtem Sprung, sonst bleibt der Browser-Default unberührt. Auf
|
||||
Touch gibt es kein Strg und **kein Pendant** — bewusst nicht gebaut; der
|
||||
lange Druck ist vergeben (D25), und ein Knopf im Knoten-Fenster wäre eine
|
||||
eigene Entscheidung.
|
||||
|
||||
**Headless nach Hausregel** (D54-Nachtrag 3): `depIdAt` und `idLine` liegen
|
||||
in `autocomplete.js` neben den D63-Regeln, mit denen sie sich Zeichenmenge
|
||||
und Kontext-Ausschlüsse teilen; app.js verdrahtet nur zwei Handler.
|
||||
Auffindbarkeit über die vorhandene Legenden-Zeile `hint_jump` (erweitert in
|
||||
allen neun Sprachen, statt eines neuen Schlüssels — das D25-Idiom) und
|
||||
SPEC §9.
|
||||
|
||||
**Nachgemessen** im Browser mit einem **echten** Strg+Klick auf das `#ui` in
|
||||
`:#api,#ui`: Zeile `- #ui: Oberflaeche (S)` vollständig markiert, Fokus im
|
||||
Textfeld, `scrollLeft` 0, Diagramm hebt „Oberflaeche" hervor. Strg+Enter im
|
||||
Token springt ebenso (preventDefault gesetzt, kein Umbruch eingefügt); im
|
||||
Kommentar, im Label und neben dem Token geschieht nichts. 440 Tests, davon 16
|
||||
neue in `tests/deplink.test.js`; Gegenprobe per Mutation: Alleinstehend-
|
||||
Prüfung entfernt → genau die zwei danach benannten Zusicherungen fallen.
|
||||
|
||||
**Werkzeuggrenze, wieder dieselbe Sorte wie D53:** Der synthetische
|
||||
Strg+Enter der Browser-Automatisierung kommt mit **`e.key === ""`** an und
|
||||
kann den Handler prinzipiell nicht treffen — der erste Prüflauf sah deshalb
|
||||
wie ein Fehler aus, der keiner war. Geprüft wird das Tastatur-Pendant mit
|
||||
einem korrekt gebauten `KeyboardEvent`; der Klick-Weg ließ sich dagegen echt
|
||||
auslösen.
|
||||
|
||||
@@ -845,6 +845,16 @@ verknüpft (siehe D25):
|
||||
nötig und nur beim Zeilenwechsel (sonst ruckelte das Diagramm beim Tippen).
|
||||
Wer einen Knoten wirklich **sehen** will, sagt es mit Alt. Auf einer Zeile ohne
|
||||
Knoten geschieht nichts.
|
||||
- **Text → Text, entlang einer Abhängigkeit:** **Strg+Klick** (macOS auch
|
||||
Cmd+Klick) auf eine ID in einem Abhängigkeits-Token — `:#ziel`, jede ID der
|
||||
Liste `:#a,#b`, auch die Kopf-Form `#auth:#ziel` — markiert die **Zeile, die
|
||||
diese ID vergibt**: derselbe Sprung wie aus dem Diagramm (ganze Zeile
|
||||
ausgewählt, in Sicht gescrollt), nur innerhalb des Textes. Tastatur:
|
||||
**Strg+Enter**, wenn die Schreibmarke im Token steht. Bei doppelter ID
|
||||
gewinnt die erste Vergabe (§1/§4); eine unbekannte ID tut still nichts (sie
|
||||
ist schon als `unknownDep` gewarnt). Kein Sprung im Kommentar, im
|
||||
Beschreibungsteil hinter `---` und innerhalb einer URL; Alt+Klick behält
|
||||
daneben unverändert seine Richtung ins Diagramm. Siehe D67.
|
||||
- Der **einfache** Klick bleibt unverändert der Link (§6): Ein Knoten mit URL
|
||||
öffnet sie weiterhin im neuen Tab. Deshalb Alt und nicht der einfache Klick.
|
||||
- **Auffindbarkeit:** Solange **Alt gedrückt** ist, zeigen alle Knoten den
|
||||
|
||||
@@ -72,6 +72,7 @@
|
||||
- [^] #ed.docs.url: Load a document from ?sourceUrl= (S)
|
||||
- [^] #ed.docs.restore: Restore a shipped document from the menu (XS)
|
||||
- [^] #ed.jump: Jump between diagram and text (S)
|
||||
- [x] #ed.jump.dep: Ctrl+click follows a dependency to its id (XS)
|
||||
- [^] #ed.lineno: Line numbers in the text editor (XS) %% the warnings name them
|
||||
- [^] #ed.shortid: Type #.kc under #prod-stage, get #prod-stage.kc (XS) %% an input aid, not notation
|
||||
- [^] #ed.depcomplete: Typing :# suggests the known ids (S) %% arrows choose, Enter inserts
|
||||
@@ -523,6 +524,11 @@
|
||||
centres the node. One gesture, both directions — and descriptions count as
|
||||
part of the node they describe.
|
||||
|
||||
#ed.jump.dep
|
||||
Ctrl+click (Cmd on macOS) on an id inside a dependency token like (:#target)
|
||||
selects the line that defines the id; Ctrl+Enter at the caret does the same.
|
||||
The first assignment wins for duplicate ids, an unknown id does nothing.
|
||||
|
||||
#ed.lineno
|
||||
A narrow strip beside the text field showing the logical line numbers, the
|
||||
same ones the warnings name. Measured rather than calculated: a wrapped line
|
||||
|
||||
Reference in New Issue
Block a user