Workflow - Zathura und Recoll

Während eines Studiums häufen sich die PDF-Dateien regelrecht: aktuell habe ich 578 pdfs auf meinem Rechner die mit meinem Studium zu tun haben. Nicht leicht da den Überblick zu behalten - ich nutze dafür das Desktop-Wiki ZIM: Dort kann ich die einzelnen Studienmodule in Seiten hierarchisch ordnen, verschiedenste Dateien anhängen, Verlinkungen zwischen den Seiten einfügen und vieles mehr.

Aber manchmal reicht hierarchisch einfach nicht aus: um schnell zu finden was man sucht, ist eine Volltextsuche, die auch den Inhalt der PDF-Dateien indiziert, geradezu perfekt. Hier kommt Recoll ins Spiel: es ist das Google für lokale Dokumente.

Screenshot von Recoll mit der Suchanfrage 'Halteproblem'
Beispiel-Suche nach „Halteproblem“ in Recoll

Man kann in Recoll konfigurieren, welche Anwendung benutzt werden soll, um bestimmte Dateitypen zu öffnen. Mein bevorzugter PDF-Viewer ist Zathura, weil er recht praktische, VIM-ähnliche Tastenkürzel hat. Allerdings konnte man Zathura keine Suchanfrage mitteilen, die beim Start des Programms ausgeführt werden, um die Ergebnisse zu highlighten, weshalb ich mich an einem Nachmittag mit der Implementierung dieser Aufgabe beschäftigt habe.

Ein Patch für Zathura

Das Ziel der Modifikation ist, dass es einen Suchparameter gibt, den man zathura beim Start mitgeben kann: zathura --find=something meindokument.pdf. Evince, der GNOME document viewer unterstützt das bereits:

-l, –find=string
You can pass a word or phrase here. If it exists, evince will display the document and the first match.

Das Code-Repository von zathura liegt auf der Gitlab-Instanz git.pwmt.org – circa 13k Zeilen Code hat das Ganze!

Es hat eine Weile gedauert, bis ich mich in der Codebase halbwegs zurecht gefunden habe: für meine Aufgabe wichtig war unter anderem die commands.h. Hier wird die Methode cmd_search definiert, die eine Suche auf dem aktuell geöffneten Dokument ausführt und die Ergebnisse highlighted.

Die meiste Zeit hat das Finden des richtigen Code-Abschnitts, in dem die Suche ausgeführt werden soll, ausgemacht: passiert das zu früh, ist das Dokument noch nicht geladen und das Hauptfenster nicht sichtbar, aber wenn das Programm erstmal die GUI-Mainloop betreten hat, ist es auch schwierig ein Kommando, was eigentlich mit der Initialisierung zu tun hat, unterzubringen. Letztlich konnte ich mich am bereits existierenden Parameter --page orientieren, und das sieht man dem endgültigen Commit auch an.

Der Code funktioniert soweit, nachdem in den GUI-Einstellungen von Recoll unter den Standardanwendungen für PDFs zathura --page=%p -f %s %f hinterlegt wurde, werden die gefundenen Suchbegriffe jetzt beim Klick auf Öffnen in zathura angezeigt:

Screenshot von Zathura mit einem geöffnetem Dokument, in dem das Wort Halteproblem gelb hinterlegt ist
Zathura öffnet die richtige Seite und markiert die Fundstellen

Fazit

Es war definitiv eine interessante Erfahrung, mit einer fremden Code-Basis zu arbeiten um ein eigenes Wunsch-Feature einzubauen. Ob die Maintainer von Zathura meine Änderung in den offiziellen develop-Branch übernehmen werden, bleibt abzuwarten.

UPDATE: Am 23. Juli wurde der Patch in den develop Branch von zathura aufgenommen.

UPDATE 2: Seit dem 27. Juli ist die Änderung in zathura Version 0.4.6 enthalten.

Kommentare

Um einen Kommentar hinzuzufügen, schreibe eine E-Mail mittels dieses Links.