Markdownhund 2

Word-Anhänge sind entgegen der zwischenzeitlichen Abgesänge

Nowadays, I get the same feeling of dread when I open an email to see a Microsoft Word document attached. Time and effort are about to be wasted cleaning up someone’s archaic habits. A Word file is the story-fax of the early 21st century: cumbersome, inefficient, and a relic of obsolete assumptions about technology. It’s time to give up on Word.

– und verfrühter Hoffnungen weiterhin eine außerordentlich raumgreifende Geißel der Menschheit. Trotz des Gegenwinds halte ich aber an den textbezogenen Rules for Computing Happiness fest –

– und auch hier erweist sich Pandoc als hilfreich. Mit dem Einsatz von w3m für das inline rendering von HTML-Nachrichten gibt es bereits eine Vorlage für die feindliche Umarmung ungeliebter Anhänge (in diesem Fall Office Open XML Document und Open Document Text):

# .muttrc auto_view application/vnd.openxmlformats-officedocument.wordprocessingml.document application/vnd.oasis.opendocument.text # .mailcap application/vnd.openxmlformats-officedocument.wordprocessingml.document; ~/scripts/view_attachment %s "-" application/vnd.openxmlformats-officedocument.wordprocessingml.document; pandoc --from docx --to markdown; copiousoutput application/vnd.oasis.opendocument.text; ~/scripts/view_attachment %s "-" application/vnd.oasis.opendocument.text; pandoc --from odt --to markdown %s; copiousoutput

Mit dieser Konfiguration erzeugt Pandoc für jedes OOXML- und ODT-Dokument eine Textversion (mit Markdown-Auszeichnungen), die automatisch in der Pager-Ansicht von mutt dargestellt wird. Die Konversion ist allerdings nicht perfekt: Aufzählungen innerhalb einer OOXML-Tabellenzelle werden von Pandoc manchmal ignoriert, und die Kombination unterschiedlicher Pandoc-Versionen sorgt für überraschende Effekte. Eine unter Ubuntu verfügbare Pandoc-Version von 2020 (2.9.2.1) generiert zum Beispiel OOXML-Dokumente, deren Tabellen von LibreOffice und neueren Pandoc-Versionen (2.19+) nicht verstanden werden. Das macht sich bemerkbar, wenn ein aktuelles Pandoc einen OOXML-Anhang rendert, der mit dem älteren Pandoc erstellt wurde – statt wohlgeformter Markdown-Tabellen enthält die Textfassung nichts. Außerdem unterscheidet sich die Darstellung von Überschriften zwischen den Pandoc-Versionen (Setext-style vs. ATX-style). Beide Phänomene sind nur für Menschen relevant, die unterschiedliche Pandoc-Versionen als OOXML-Generator und -Parser einsetzen, und es wäre übertrieben, von einer Breitenwirkung der fehlenden Abwärtskompatibilität zu sprechen.

Bei dieser Gelegenheit fällt mir auf, dass ich bislang auf den Hail Mary-Ansatz zur Identifikation von MIME-Types durch mutt gesetzt habe:

If Mutt can not determine the MIME type by the extension of the file you attach, it will run the command specified in $mime_type_query_command. If that command is not specified, Mutt will look at the file. If the file is free of binary information, Mutt will assume that the file is plain text, and mark it as text/plain. If the file contains binary information, then Mutt will mark it as application/octet-stream.

Ursache der undifferenzierten Typisierung fast aller Anhänge ist die unter macOS fehlende Referenzdatei mime.types. Um dieses Defizit zu beheben, kann man die Datei von einem anderen System kopieren (nach ~/.mime.types oder /etc/mime.types) oder sich das file-Kommando zu Nutze machen:

# .muttrc set mime_type_query_first = yes set mime_type_query_command = "file -b --mime-type"

Der erste Parameter stellt die Präzedenz von file gegenüber mime.types sicher.