From e684ac73d3f79ddaa1b0cce4a088e0a9cb42e7f4 Mon Sep 17 00:00:00 2001 From: mhoennig Date: Thu, 27 Aug 2026 13:36:01 +0200 Subject: [PATCH] =?UTF-8?q?feat(tools):=20pull-doc=20--open=20=C3=B6ffnet?= =?UTF-8?q?=20die=20Datei=20danach=20in=20IntelliJ=20IDEA=20(D88-Nachtrag?= =?UTF-8?q?=202)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Fable 5 --- README.de.md | 4 ++-- README.md | 3 ++- docs/CHANGELOG.md | 1 + docs/DECISIONS.md | 13 +++++++++++++ tools/pull-doc | 36 ++++++++++++++++++++++++++++-------- 5 files changed, 46 insertions(+), 11 deletions(-) diff --git a/README.de.md b/README.de.md index 5dec317..ab06fd9 100644 --- a/README.de.md +++ b/README.de.md @@ -131,8 +131,8 @@ gewöhnliches Label. Die Marke bleibt stehen, bis jemand sie löscht. ` holt das Dokument (auch ein `?live=`-Link funktioniert) und schreibt es in die Datei; mit `--git-commit` wird es zusätzlich in das git-Worktree der Datei committet — Datum, Titel und Version in der Nachricht, kein Commit ohne -Änderung. Per Cron aufgerufen archiviert sich der Plan von selbst; siehe -`docs/DECISIONS.md` D88. +Änderung. Per Cron aufgerufen archiviert sich der Plan von selbst; `--open` +öffnet die Datei danach in IntelliJ IDEA. Siehe `docs/DECISIONS.md` D88. Das Backend einrichten: siehe [backend/README.md](backend/README.md) und `docs/DECISIONS.md` D76. diff --git a/README.md b/README.md index 09f415b..026c5b0 100644 --- a/README.md +++ b/README.md @@ -125,7 +125,8 @@ deletes it. fetches the document (a `?live=` link works too) and writes it to the file; with `--git-commit` it also commits it into the file's git worktree — date, title and version in the message, and no commit when nothing changed. Run it -from cron and the plan archives itself; see `docs/DECISIONS.md` D88. +from cron and the plan archives itself; `--open` opens the file in IntelliJ +IDEA afterwards. See `docs/DECISIONS.md` D88. Setting up the backend: see [backend/README.md](backend/README.md) and `docs/DECISIONS.md` D76. diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index 888ea4c..8801f7b 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -19,6 +19,7 @@ reverse. ## 2026-08-27 +- `pull-doc --open` opens the fetched document in IntelliJ IDEA afterwards — also when nothing changed - A dead live session now reconnects by itself — unsent text stays in the editor and goes out as a diff once the server answers again - The connection state stands next to the document name: disconnected or unsent changes turn the kind label amber, instead of only a warning below the diagram - The document kind now stands in grey behind the name chip — Included, Local or Shared with the server's host, the same words as the menu groups diff --git a/docs/DECISIONS.md b/docs/DECISIONS.md index 698192b..de88222 100644 --- a/docs/DECISIONS.md +++ b/docs/DECISIONS.md @@ -7793,3 +7793,16 @@ getippt; Backend gestartet, **nichts geklickt** → nach ≤ 20 s Chip wieder leer — die Netze räumen sich selbst weg. Der Ungesendet-Zustand (Sitzung lebt, Patches scheitern) färbt den Chip ebenso; gemessen mit dem Fehler-Anker gegen die Timer-Drosselung. + +**Nachtrag 2 — `--open` öffnet die Datei danach in IntelliJ IDEA.** +Nutzerwunsch; als eigener Schalter neben `--git-commit` (beide in beliebiger +Reihenfolge vor den Argumenten, unbekannte Schalter sind ein lauter Fehler). +Geöffnet wird **auch Unverändertes** — wer `--open` sagt, will die Datei +sehen, nicht nur ihren Wandel. Der Aufruf läuft als `(idea … &)` in einer +Subshell, damit der Lauf nicht am Editor hängt; fehlt `idea` im PATH, gibt es +einen Hinweis auf stderr, aber Exit 0 — der eigentliche Auftrag (holen, +committen) ist gelungen, und ein gedruckter Hinweis ist kein stiller Fehler. +Nachgemessen mit einem Log-Stub im PATH: `--git-commit --open` committet und +öffnet, `--open` allein öffnet auch den unveränderten Stand, ohne Schalter +kein Aufruf, ohne `idea` im PATH der Hinweis, `--commit` (Tippfehler) bricht +mit Meldung ab. diff --git a/tools/pull-doc b/tools/pull-doc index 3c55312..feeab92 100755 --- a/tools/pull-doc +++ b/tools/pull-doc @@ -5,12 +5,14 @@ # Notationstext eines geteilten Plans (D76) bekommt so eine Git-Historie. # # Verwendung: -# pull-doc [--git-commit] +# pull-doc [--git-commit] [--open] # # --git-commit Die Zieldatei zusätzlich committen. Sie muss dann in einem # git-Worktree liegen; committet wird nur diese eine Datei, # die Commit-Nachricht nennt Datum, Titel und Version des # Server-Stands. Ohne den Schalter wird nur geschrieben. +# --open Die Zieldatei danach mit `idea` (IntelliJ IDEA) öffnen — +# auch wenn sie unverändert war. # Die Dokument-Adresse des Backends # (https://…/api/v1/documents/) — oder gleich der # geteilte Editor-Link (…?live=); der Parameter @@ -26,14 +28,19 @@ set -euo pipefail -usage(){ sed -n '2,24p' "$0" | sed 's/^# \{0,1\}//'; } +usage(){ sed -n '2,26p' "$0" | sed 's/^# \{0,1\}//'; } -do_commit=0 -case "${1:-}" in - -h|--help) usage; exit 0;; - --git-commit) do_commit=1; shift;; -esac -[ $# -eq 2 ] || { echo "Fehler: erwartet [--git-commit] URL und Zieldatei." >&2; echo >&2; usage >&2; exit 2; } +do_commit=0; do_open=0 +while [ $# -gt 0 ]; do + case "$1" in + -h|--help) usage; exit 0;; + --git-commit) do_commit=1; shift;; + --open) do_open=1; shift;; + --*) echo "Fehler: unbekannter Schalter $1" >&2; echo >&2; usage >&2; exit 2;; + *) break;; + esac +done +[ $# -eq 2 ] || { echo "Fehler: erwartet [--git-commit] [--open] URL und Zieldatei." >&2; echo >&2; usage >&2; exit 2; } url="$1"; target="$2" @@ -87,12 +94,24 @@ PY )" title="${meta%$'\t'*}"; version="${meta##*$'\t'}" +# Geoeffnet wird auch Unveraendertes — wer --open sagt, will die Datei sehen. +# `idea` forkt sich selbst; das Subshell-& haelt den Lauf trotzdem frei davon. +open_target(){ + [ "$do_open" = 1 ] || return 0 + if command -v idea >/dev/null; then + (idea "$target" >/dev/null 2>&1 &) + else + echo "Hinweis: 'idea' nicht im PATH — Datei nicht geöffnet." >&2 + fi +} + # Unveraendert heisst: Datei gleich dem Server-Stand — und im Commit-Modus # zusaetzlich in git sauber, sonst bliebe eine liegende Aenderung (etwa aus # einem Lauf ohne --git-commit) fuer immer uncommittet. if [ -f "$target" ] && cmp -s "$tmp_doc" "$target"; then if [ "$do_commit" != 1 ] || [ -z "$(git -C "$dir" status --porcelain -- "$base")" ]; then echo "Unverändert: „$title“ (Version $version) — nichts zu tun." + open_target exit 0 fi fi @@ -106,3 +125,4 @@ if [ "$do_commit" = 1 ]; then else echo "Geschrieben: $target — „$title“ (Version $version)" fi +open_target