Skip to content

feat: improve compose UX and simplify writing prompts#53

Merged
TimInTech merged 6 commits into
mainfrom
feat/compose-ux-prompt-simplification
Jul 20, 2026
Merged

feat: improve compose UX and simplify writing prompts#53
TimInTech merged 6 commits into
mainfrom
feat/compose-ux-prompt-simplification

Conversation

@TimInTech

Copy link
Copy Markdown
Owner

Ziel

Dieser PR bündelt vier zusammenhängende UX-Verbesserungen für das Fenster „Text verfassen“ sowie die Schreibstil-/Prompt-Auswahl.

Änderungen

Kompaktlayout für „Text verfassen“

  • Kopfbereich auf ein robustes zweizeiliges Grid-Layout umgestellt.
  • Überlappungen bei kleinen Fensterbreiten beseitigt.
  • Untere Aktionen bleiben vollständig sichtbar und getrennt.

Sprachaufnahmen in den Entwurf umleiten

  • Checkbox „Sprachaufnahme hierher umleiten“ vollständig bedienbar gemacht.
  • Maus-, Tastatur- und Fokusverhalten ergänzt.
  • Bei aktivierter Option landet das Rohtranskript direkt im Compose-Entwurf.
  • LLM-, Clipboard- und Auto-Paste-Pfad werden für diese Aufnahme bewusst übersprungen.
  • Bei deaktivierter Option bleibt das bisherige Verhalten unverändert.

„Text bearbeiten“ in der Hauptansicht

  • Sichtbare Aktion „Text bearbeiten“ mit Ctrl+E ergänzt.
  • Hauptfenster und Tray verwenden dieselbe ComposeWindow-Instanz über show_compose_window() / _ensure_compose_window().
  • Bestehende Entwürfe bleiben beim erneuten Öffnen erhalten.
  • Prompt-Zugang klarer als „Schreibstil / Prompt bearbeiten“ bzw. „Edit style / prompt“ beschriftet.

Schreibstile und Prompts vereinfachen

Die sichtbare Auswahl wurde auf fünf Kernaktionen reduziert:

  • Standard / Text verbessern
  • Kürzen
  • Ausformulieren
  • Tonfall ändern
  • Eigener Prompt

Weitere Punkte:

  • Alte gespeicherte IDs werden deterministisch und idempotent migriert.
  • Benutzerdefinierte Prompts bleiben vollständig erhalten.
  • custom wird zentral im LLMService aufgelöst.
  • Einstellungen, Compose, Hauptfenster und Tray verwenden denselben Katalog.
  • Der gespeicherte Standard-Tonfall bleibt kompatibel wirksam.
  • „Tonfall ändern“ verändert nur den Tonfall und fordert keine zusätzlichen Grammatik- oder Zeichensetzungskorrekturen an.

Migration alter Werte

  • email_formal, email_locker, du_form, sie_formchange_tone
  • stichpunkte, zusammenfassung, kurz_praeziseshorten
  • unbekannte Werte → sicherer Fallback auf standard
  • bestehende eigene Prompt-Texte bleiben unverändert gespeichert

Verifikation

  • Fokussierte Tests: 290 bestanden
  • Vollständige Testsuite: 547 bestanden
  • python -m compileall app tests: bestanden
  • bash -n scripts/install.sh: bestanden
  • bash -n scripts/verify.sh: bestanden
  • git diff --check: bestanden
  • Secret-Scan: keine getrackten Env-Dateien, keine hartcodierten echten Secrets, keine unerwarteten Secret-Dateien im Status
  • Manueller Funktionstest durch den Nutzer: bestanden

Commits

  • 72be6bc fix(compose): prevent controls overlapping in compact layout
  • 500bac2 feat(compose): route voice recordings to draft
  • 8b545c4 feat(ui): expose text editing in main window
  • 0639cb7 refactor(prompts): simplify writing styles and preserve compatibility
  • 083b231 fix(prompts): keep tone changes scoped to tone

Nicht enthalten

  • Kein Version-Bump
  • Kein Tag oder Release
  • Keine README-, Roadmap-, Packaging-, Installer-, Desktop-, Audio-, Hotkey-, Clipboard-, Voice- oder Secret-Modell-Änderungen

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 083b231e9e

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread app/blitztext_linux.py
Comment on lines +1097 to +1098
if route_to_compose:
self._ensure_compose_window().set_input_text(result_text)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Preserve the existing draft when routing voice input

When voice routing is enabled for a compose window that already contains a draft, the completed transcription is passed to set_input_text(), which replaces the entire draft and also clears its output and variant history. This makes dictating an addition into an existing draft cause irreversible text loss, despite the checkbox tooltip saying the recording will be inserted into the draft field; the routed text should be inserted or appended without discarding existing content.

Useful? React with 👍 / 👎.

Comment thread app/blitztext_linux.py
Comment on lines 994 to +996
try:
self.audio_recorder.start(device=self.config.audio_device)
self._recording_routes_to_compose = self._compose_voice_routing_enabled()

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Cancel routing when the compose window closes mid-recording

Routing is captured once when recording starts, so if the user closes the compose window before stopping the recording, closeEvent() unchecks the routing control but this saved flag remains true. The worker consequently skips both paste and clipboard delivery, and _on_worker_result() writes the transcription into the now-hidden window, contrary to the close handler's guarantee that a hidden window is not a routing target.

Useful? React with 👍 / 👎.

@TimInTech
TimInTech merged commit 3c6b4f6 into main Jul 20, 2026
7 checks passed
@TimInTech
TimInTech deleted the feat/compose-ux-prompt-simplification branch July 20, 2026 22:41
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant