Tap to Play!

Back

DevonThink, mein macOS-Dokumenten Management System, bietet eine native Unterstützung von “Sheets” an. Dabei handelt es sich um TSV-Dateien mit konfigurierbaren Spalten, Inline-Bearbeitung direkt im DMS und eine Sortierbarkeit der gesamten Tabelle mit Klick auf die Spalte.

Devonthink-Spaltenkonfiguration

Die Spaltenkonfiguration wird in der ersten Zeile der Datei abgespeichert, befindet sich somit in der TSV-Datei:

"Geschäft#string"	"Produkt#string"	"Preis#real{format:currency,currency:€}"	"Wertung#set{values:★|★★|★★★|★★★★|★★★★★}"	"Kommentar#string"	"URL#url"
plaintext

Unter Linux habe ich keine Applikation finden können, die damit umgehen kann. Ich habe somit Claude gebeten, mir eine zu schreiben. Anhand von Beispieldateien konnte Claude das Dateiformat erkennen und eine Python-GTK-Applikation für den Gnome-Desktop schreiben. Bereits nach wenigen Iterationen war sie funktional und konnte anschließend erweitert werden um speziellere Funktionen.

Sie erlaubt:

  • Öffnen von Dateien, sowie Unterstützung von Gnomes Recent Files
  • Automatisches Öffnen der zuletzt geöffneten Datei
  • Einbindung als Desktop-Icon und in den Nautilus-Dateimanager
  • Erstellung neuer Dateien
  • Editor für die Spaltenkonfiguration
  • Hinzufügen von Spalten zu bestehenden Dateien
  • Umsortieren von Spalten
  • Editor für die Inhalte von Zeilen
  • Löschen einzelner Zeilen
  • Anklicken von URLs in URL-Spalten
  • Sortieren der gesamten Tabelle per Klick auf den Spaltenkopf
  • Speichern und Speichern unter
  • Eingabe gemäß der in Gnome konfigurierten Lokalisierungsregeln
  • Applikation in Deutsch und Englisch

Assistent für neue Dateien#

Beim Erstellen einer neuer Datei wird zunächst die Spaltenkonfiguration festgelegt, anschließend wird die leere Datei geöffnet und kann mit Inhalt befüllt werden.

Erstellung einer neuen Datei mit Assistent für die Konfiguration von Spalten

Geöffnete Tabelle#

Eine meiner vegane-Produkte-Bewertungstabellen mit sechs Spalten. Der Preis befindet sich in einer Spalte für Dezimalnummern mit Euro-Symbol, das Symbol wird also automatisch ergänzt. Die Sterne-Bewertung ist ein Set, sodass aus den Sternen ausgewählt werden kann. Die letzte Spalte ist eine URL-Spalte, die beim Anklicken den Standardbrowser öffnet.

Geöffnete Tabelle mit mehreren Spalten, sortiert nach der Spalte der Wertung

Bearbeitung der Spalten-Konfiguration#

Spalten-Editor

Bearbeitung einer Zeile#

Ein Doppelklick in einer Zeile öffnen den Bearbeitungsdialog.

Dialog zur Bearbeitung einer Zeile

Tastenkombinationen#

TastenkombinationAktion
Strg+NNeues Fenster mit neuer Datei
Strg+OÖffnen-Popover anzeigen
Strg+SDatei speichern
Strg+Umschalt+SSpeichern unter…
Strg+Umschalt+NZeile hinzufügen
Strg+WFenster schließen
Strg+QApplikation beenden
F10Hamburger-Menü öffnen
Alt+EingabeBearbeitungsdialog der ausgewählten Zeile
Strg+,Spalten verwalten
Strg+XAusgewählte Zeile löschen
Strg+UAusgewählte Zeile duplizieren
Strg+?Tastenkombinationen anzeigen
DoppelklickZeile bearbeiten

Download#

Download

Anschließend auspacken und ./install.sh ausführen.

Der Installer möchte einige Abhängigkeiten installieren, kopiert die Python-Datei und legt die Desktop-Konfiguration an.

Abhängigkeiten, die der Installer per apt auflösen möchte:

  • python3-gi
  • python3-gi-cairo
  • gir1.2-gtk-4.0
  • gir1.2-adw-1

Warnung: Alpha-Software. Komplett von Claude per Chat-Diskussion erstellt. Absolut keine Qualitätssicherung. Ausgeführt und getestet nur in meiner Umgebung. Installer erwartet apt und (vermutlich) Gnome. Applikation zudem nur getestet unter Gnome. Kein Support durch mich. Wenn bei euch etwas kaputt geht oder gelöscht wird seid ihr selbst Schuld.

Aufruf#

Die Applikation folgt dem Standard-GTK/GIO-Verhalten bei Dateiargumenten:

Kein Argument

tabelleneditor
plaintext

Öffnet ein neues Fenster und lädt automatisch die zuletzt geöffnete CSV/TSV-Datei.

Eine oder mehrere Dateien

tabelleneditor datei.csv
tabelleneditor datei1.csv datei2.tsv
plaintext

Für jede übergebene Datei wird ein eigenes Fenster geöffnet. Ist die Datei bereits in einem laufenden Fenster geöffnet, wird dieses in den Vordergrund gebracht statt ein neues Fenster zu öffnen.

Wird die Applikation ein zweites Mal aufgerufen während sie bereits läuft, wird die Anfrage an die laufende Instanz weitergeleitet — es wird kein zweiter Prozess gestartet. Das Verhalten entspricht dann den obigen Fällen.

Unterstützte Dateiformate sind CSV (.csv) und TSV (.tsv).

Spaltenkonfiguration – Referenz#

Spaltentypen und Optionen#

TypBezeichnungOptionenEingabe-WidgetDarstellung
textText (mehrzeilig)Mehrzeiliges TextfeldRohtext, gekürzt
boolJa / NeinSchalter (Ein/Aus)„Ja” / „Nein”
intGanzzahlformatZahlenfeldZahl, ggf. mit Suffix
realDezimalzahlformatZahlenfeldLokalisierte Zahl, ggf. mit Suffix
stringEinzelzeilevaluesFreitextfeld oder DropdownRohtext
setWertemengevalues (Pflicht)DropdownGewählter Wert
dateDatumformat (Pflicht)DatumsfeldLokalisiertes Datum
urlURLURL-Feld mit Browser-ButtonKlickbarer Link

Option: format bei int und real#

WertBedeutungBeispiel-Darstellung
(leer)Keine Formatierung1234 / 1234,56
percentProzentwert42 %
currencyWährungsbetrag19,99 €

Bei format:currency kann zusätzlich currency gesetzt werden:

OptionBedeutungBeispiel
currency:€Währungssymbol19,99 €
currency:$Anderes Symbol19.99 $

Option: format bei date#

WertBedeutungGespeichertes FormatDarstellung (DE)
dateNur DatumYYYY-MM-DD28.03.1977
dateandtimeDatum mit UhrzeitYYYY-MM-DD HH:MM:SS28.03.1977 14:30:00

Option: values bei string und set#

Pipe-getrennte Liste erlaubter Werte. Bei set verpflichtend, bei string optional (erzeugt Dropdown statt Freitextfeld).

BeispielErgebnis
Gut|Mittel|SchlechtDropdown mit drei Einträgen
Ja|Nein|VielleichtDropdown mit drei Einträgen

Dateiformat-Syntax (Kopfzeile)#

Spaltenname#typ{option1:wert1,option2:wert2}
plaintext

Beispiele#

KopfzeileneintragBedeutung
Name#stringEinfaches Textfeld
Aktiv#boolJa/Nein-Schalter
Preis#real{format:currency,currency:€}Dezimalzahl in Euro
Rabatt#int{format:percent}Ganzzahl als Prozentsatz
Geburtsdatum#date{format:date}Datumsfeld (nur Datum)
Erstellt#date{format:dateandtime}Datum mit Uhrzeit
Webseite#urlKlickbare URL
Kategorie#set{values:A|B|C}Pflicht-Dropdown
Notiz#textMehrzeiliges Freitextfeld
Status#string{values:Offen|Erledigt}Optionales Dropdown

Hinweise#

  • Speicherformat ist immer kanonisch: Dezimalzahl mit Punkt (1.39), Datum als ISO 8601 (1977-03-28).
  • Darstellung folgt den Locale-Einstellungen des Systems (Komma als Dezimaltrennzeichen, lokales Datumsformat).
  • Eingabe akzeptiert sowohl lokales als auch ISO-Format; beim Speichern wird normalisiert.

Zusammenfassung von Claude#

Session 1 — Grundgerüst Erste lauffähige Version: GTK4/Libadwaita-App mit Gtk.ColumnView, CSV/TSV-Import, einem Format-Deskriptor-System in der Kopfzeile (Name#typ{optionen}), editierbarer Tabelle mit Doppelklick-Dialog und Installations-Skript für Desktop-Integration.

Session 2 — Typsystem und Validierung Vollständiges Typsystem mit 8 Typen (text, bool, int, real, string, set, date, url), Anzeigeformatierung für Währung und Prozent, Datumsfeldbehandlung, Eingabevalidierung, Fehlermeldungen und Dialog für ungespeicherte Änderungen.

Session 3 — Locale und Spaltenmanagement Locale-bewusste Formatierung (Dezimaltrennzeichen, Datumsformat) über eine LocaleConfig-Klasse, Spalten-Manager-Dialog mit Reihenfolge ändern und neue Spalten hinzufügen, Fix des Install-Skripts für $HOME-Variable.

Session 4 — GNOME-UI-Verfeinerungen GNOME-konformer Öffnen-Popover mit Gtk.RecentManager, Suchfeld und ×-Button. Kopfleisten-Umbau: fetter Öffnen-Button, Hamburger-Menü rechts mit Trennlinie. Beim Start automatisch die zuletzt geöffnete Datei laden. Fenstertitel zeigt Dateinamen. App-ID auf de.tabelleneditor.app geändert. URL-Zellen klickbar. Zeilen löschen aus dem Bearbeitungsdialog. Vollständige DE/EN-Internationalisierung. Referenzdokument für Spaltenkonfigurationen erstellt.

Session 5 — Erweiterungen und Korrekturen

  • Spalten löschen im Spalten-Manager: roter Papierkorb-Button pro Spaltenzeile, deaktiviert bei letzter verbleibender Spalte
  • Tastenkombinationen vollständig implementiert: Strg+N/O/S/Umschalt+S/W/Q, F10, Alt+Eingabe, Strg+,/X/U/?, Strg+Umschalt+N
  • Mehrfenster-Unterstützung: Strg+N öffnet neues Fenster, Dateiargumente beim erneuten Aufruf öffnen eigene Fenster, Duplikat-Erkennung verhindert doppeltes Öffnen derselben Datei
  • Tastenkombinationen-Dialog (Adw.ShortcutsDialog) mit drei Sektionen (Datei, Zeilen, Ansicht), aufrufbar per Strg+? und Hamburger-Menü
  • Zeilen duplizieren und löschen per Tastatur (Strg+U / Strg+X) mit korrekter Behandlung des SortModels
  • Zeile hinzufügen per Tastatur (Strg+Umschalt+N), Tooltip des +-Buttons zeigt Kürzel
  • Hamburger-Menü mit Tastenkombinationen: set_accels_for_action() sorgt für automatische GNOME-konforme Darstellung der Kürzel rechtsbündig in gedimmter Schrift
  • Verschiedene i18n-Korrekturen: Statusleiste, Unsaved-Changes-Dialog, Spalten-Manager-Button, neu hinzugefügte Strings
  • Kontextmenü (Rechtsklick) implementiert und wieder entfernt, da GTK4-Positionierungsprobleme nicht lösbar waren