feat(tools): pull-doc --open öffnet die Datei danach in IntelliJ IDEA (D88-Nachtrag 2)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
mhoennig
2026-08-27 13:36:25 +02:00
co-authored by Claude Fable 5
parent 78e2eeb616
commit e684ac73d3
5 changed files with 46 additions and 11 deletions
+2 -2
View File
@@ -131,8 +131,8 @@ gewöhnliches Label. Die Marke bleibt stehen, bis jemand sie löscht.
<datei>` holt das Dokument (auch ein `?live=`-Link funktioniert) und schreibt <datei>` 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 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 Datei committet — Datum, Titel und Version in der Nachricht, kein Commit ohne
Änderung. Per Cron aufgerufen archiviert sich der Plan von selbst; siehe Änderung. Per Cron aufgerufen archiviert sich der Plan von selbst; `--open`
`docs/DECISIONS.md` D88. öffnet die Datei danach in IntelliJ IDEA. Siehe `docs/DECISIONS.md` D88.
Das Backend einrichten: siehe [backend/README.md](backend/README.md) und Das Backend einrichten: siehe [backend/README.md](backend/README.md) und
`docs/DECISIONS.md` D76. `docs/DECISIONS.md` D76.
+2 -1
View File
@@ -125,7 +125,8 @@ deletes it.
fetches the document (a `?live=` link works too) and writes it to the file; 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, 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 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 Setting up the backend: see [backend/README.md](backend/README.md) and
`docs/DECISIONS.md` D76. `docs/DECISIONS.md` D76.
+1
View File
@@ -19,6 +19,7 @@ reverse.
## 2026-08-27 ## 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 - 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 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 - 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
+13
View File
@@ -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 leer — die Netze räumen sich selbst weg. Der Ungesendet-Zustand
(Sitzung lebt, Patches scheitern) färbt den Chip ebenso; gemessen mit dem (Sitzung lebt, Patches scheitern) färbt den Chip ebenso; gemessen mit dem
Fehler-Anker gegen die Timer-Drosselung. 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.
+26 -6
View File
@@ -5,12 +5,14 @@
# Notationstext eines geteilten Plans (D76) bekommt so eine Git-Historie. # Notationstext eines geteilten Plans (D76) bekommt so eine Git-Historie.
# #
# Verwendung: # Verwendung:
# pull-doc [--git-commit] <dokument-url> <zieldatei> # pull-doc [--git-commit] [--open] <dokument-url> <zieldatei>
# #
# --git-commit Die Zieldatei zusätzlich committen. Sie muss dann in einem # --git-commit Die Zieldatei zusätzlich committen. Sie muss dann in einem
# git-Worktree liegen; committet wird nur diese eine Datei, # git-Worktree liegen; committet wird nur diese eine Datei,
# die Commit-Nachricht nennt Datum, Titel und Version des # die Commit-Nachricht nennt Datum, Titel und Version des
# Server-Stands. Ohne den Schalter wird nur geschrieben. # Server-Stands. Ohne den Schalter wird nur geschrieben.
# --open Die Zieldatei danach mit `idea` (IntelliJ IDEA) öffnen —
# auch wenn sie unverändert war.
# <dokument-url> Die Dokument-Adresse des Backends # <dokument-url> Die Dokument-Adresse des Backends
# (https://…/api/v1/documents/<uuid>) — oder gleich der # (https://…/api/v1/documents/<uuid>) — oder gleich der
# geteilte Editor-Link (…?live=<adresse>); der Parameter # geteilte Editor-Link (…?live=<adresse>); der Parameter
@@ -26,14 +28,19 @@
set -euo pipefail 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 do_commit=0; do_open=0
case "${1:-}" in while [ $# -gt 0 ]; do
case "$1" in
-h|--help) usage; exit 0;; -h|--help) usage; exit 0;;
--git-commit) do_commit=1; shift;; --git-commit) do_commit=1; shift;;
esac --open) do_open=1; shift;;
[ $# -eq 2 ] || { echo "Fehler: erwartet [--git-commit] URL und Zieldatei." >&2; echo >&2; usage >&2; exit 2; } --*) 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" url="$1"; target="$2"
@@ -87,12 +94,24 @@ PY
)" )"
title="${meta%$'\t'*}"; version="${meta##*$'\t'}" 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 # Unveraendert heisst: Datei gleich dem Server-Stand — und im Commit-Modus
# zusaetzlich in git sauber, sonst bliebe eine liegende Aenderung (etwa aus # zusaetzlich in git sauber, sonst bliebe eine liegende Aenderung (etwa aus
# einem Lauf ohne --git-commit) fuer immer uncommittet. # einem Lauf ohne --git-commit) fuer immer uncommittet.
if [ -f "$target" ] && cmp -s "$tmp_doc" "$target"; then if [ -f "$target" ] && cmp -s "$tmp_doc" "$target"; then
if [ "$do_commit" != 1 ] || [ -z "$(git -C "$dir" status --porcelain -- "$base")" ]; then if [ "$do_commit" != 1 ] || [ -z "$(git -C "$dir" status --porcelain -- "$base")" ]; then
echo "Unverändert: „$title“ (Version $version) — nichts zu tun." echo "Unverändert: „$title“ (Version $version) — nichts zu tun."
open_target
exit 0 exit 0
fi fi
fi fi
@@ -106,3 +125,4 @@ if [ "$do_commit" = 1 ]; then
else else
echo "Geschrieben: $target — „$title“ (Version $version)" echo "Geschrieben: $target — „$title“ (Version $version)"
fi fi
open_target