Ein Mail.app-Plugin für Sublime Text 3

Ich habe mein erstes Plugin für Sublime Text geschrieben. Es ist recht einfach und unkompliziert. Es nimmt den Text des aktiven Dokuments und verwandelt ihn in eine neue Mail.app-Nachricht. Die erste Textzeile wird als Betreff verwendet.

Ursprünglich wollte ich, dass das Plugin die Mail aus konvertiertem Markdown erstellt, aber leider hat Mails AppleScript-Interface keine API für HTML-Nachrichten1

Um im Plugin AppleScript einzubinden habe ich Dr. Drangs Code zum Kombinieren von Python und AppleScript verwendet:

#!/usr/bin/python

import subprocess

def asrun(ascript):
"Run the given AppleScript and return the standard output and error."
osa = subprocess.Popen(['osascript', '-'],
stdin=subprocess.PIPE,
stdout=subprocess.PIPE)
return osa.communicate(ascript)[0]

def asquote(astr):
"Return the AppleScript equivalent of the given string."
astr = astr.replace('"', '" & quote & "')
return '"{}"'.format(astr)

Der Code hat so unter Sublime Text 3 aber nicht funktioniert. Sublime Text 3 verwendet Python Version 3.3. Seit Python 3 hat sich einiges geändert, besonders im Umgang mit Unicode-Text.

Nach etwas suchen kam ich auf die kleine Änderung, die ich vornehmen musste, damit der Code funktioniert:

Die Zeile

return osa.communicate(ascript)[0]

muss geändert werden in

return osa.communicate(ascript.encode())[0]

Das liegt daran, dass Python 3 intern Text zu data umwandelt. Wenn man wieder Unicode ausgeben will, muss man ihn erst mit .encode() wieder umwandeln.

Vielleicht hilft das ja mal irgendjemandem weiter.

  1. Nun, es gibt eine undokumentierte API dafür, aber die scheint nicht richtig zu funktionieren.