5 votes

Est-il possible de composer un courrier Mac OS dans un éditeur externe ?

Pour Thunderbird, il existe l'extension External Editor, un logiciel très classique qui, lorsqu'il est appelé via un raccourci, fait apparaître votre éditeur externe (emacs dans mon cas) et vous permet de modifier votre courrier. Pendant l'édition, la fenêtre de composition de Thunderbird est bloquée. Lorsque l'éditeur externe se ferme, la fenêtre de composition est remplie avec le texte mis à jour du courrier. C'est très pratique d'avoir son courrier comme un tampon dans son emacs, par exemple pour éditer des tableaux, copier des résultats de calcul, utiliser des fonctions d'édition puissantes comme regexp-search-and-replace, etc.

Ma question : Est-il possible de réaliser la même chose en utilisant Mac OS Mail + AppleScript ou d'autres astuces ?

2 votes

Bien qu'il s'agisse d'une solution plus généralisée, cette réponse à une question similaire répond certainement à vos critères. Note complémentaire : c'est simple pour configurer un .authinfo si vous vous consacrez à l'utilisation de Emacs .

0 votes

La question est vraiment d'avoir le meilleur des deux mondes : éditer dans emacs, mais rechercher via spotlight, synchronisation IMAP raisonnable, etc. J'ai utilisé mutt + offlineimap pendant un certain temps, mais je suis devenu trop vieux pour cela.

0 votes

Je ne connais pas l'automatisation d'emacs, je ne peux donc pas vous répondre directement. Vous devriez être capable d'utiliser "Keyboard Maestro". Voici un exemple de travail avec un autre éditeur GUI : rocketink.net/2013/05/quickcursor-keyboard-maestro.html Si vous faites en sorte que cela fonctionne avec emacs, je serais ravi de voir votre réponse.

1voto

MMM Points 11

J'ai récemment obtenu mon premier Mac et j'étais confronté à la même situation concernant mes habitudes d'écriture de courrier (j'utilise Thunderbird avec un éditeur externe et vi sous Linux). Jusqu'à présent, je n'ai pas pu trouver de réponse appropriée. J'ai donc commencé à me pencher sur Applescript.

Je voudrais saisir des adresses de courrier ou ajouter des pièces jointes dans la fenêtre de composition d'Apple Mail, tout en modifiant le corps du message dans vi. Je commence donc par une fenêtre de composition (soit pour un nouveau courrier, soit pour une réponse à un autre courrier) et, une fois les adresses saisies, je ferme la fenêtre de composition et enregistre le message comme brouillon.

Avec l'Applescript script suivant, je peux alors extraire les adresses, le sujet et le corps du message dans un fichier texte et l'ouvrir avec vi :

tell application "Mail"
        # Set global variables.
        set msgfilename to "/Users/me/Documents/message"
        set msgheaderdelimiter to linefeed & "#+#+#+#+#+#This line serves as delimiter for applescript.#+#+#+#+#+#" & linefeed
        set msgdraft to first item of messages of drafts mailbox

        # Open file to edit message.
        try
                set msgfile to open for access msgfilename with write permission
        on error number -49
                say "Error, file already open."
                close access msgfilename
                set msgfile to open for access msgfilename with write permission
        end try
        set eof msgfile to 0

        # Extract information from the message and write it to the file
        set msgrecipients to to recipients of msgdraft
        write "To: " to msgfile as «class utf8»
        repeat with rcp in msgrecipients
                set addr to address of rcp
                write addr to msgfile as «class utf8»
                write "," to msgfile as «class utf8»
        end repeat
        write linefeed & "CC: " to msgfile starting at -1 as «class utf8»
        set msgrecipients to cc recipients of msgdraft
        repeat with rcp in msgrecipients
                set addr to address of rcp
                write addr to msgfile as «class utf8»
                write "," to msgfile as «class utf8»
        end repeat
        write linefeed & "Subject: " to msgfile starting at -1 as «class utf8»
        set msgsubject to subject of msgdraft
        write msgsubject to msgfile starting at eof as «class utf8»
        set msgcontent to content of msgdraft
        write msgheaderdelimiter to msgfile as «class utf8»
        write msgcontent to msgfile starting at eof as «class utf8»
        close access msgfile
        delete msgdraft
end tell

# Start gvim with the prepared message file
do shell script "/usr/local/bin/gvim /Users/me/Documents/message"

Après avoir modifié le corps du message, j'enregistre le fichier texte et je ferme vi. Avec le script suivant, je peux alors ouvrir une nouvelle fenêtre de composition de message avec les informations du fichier texte :

tell application "Mail"
        # Set global variables.
        set fillinToAddresses to false
        set fillinCCAddresses to false
        set defaultDelimiters to AppleScript's text item delimiters
        set msgfilename to "/Users/me/Documents/message"
        set msgheaderdelimiter to linefeed & "#+#+#+#+#+#This line serves as delimiter for applescript.#+#+#+#+#+#" & linefeed

        # Open file to create outgoing message.
        set msgfile to open for access msgfilename
        set fields to read msgfile from 1 for 10000 using delimiter linefeed as «class utf8»
        # Extract To addresses
        set AppleScript's text item delimiters to " "
        set bufferarray to every text item of item 1 of fields
        if (count of bufferarray) = 2 then
                set AppleScript's text item delimiters to ","
                set msgtoaddresses to every text item of item 2 of bufferarray
                set fillinToAddresses to true
        end if
        # Extract CC addresses
        set AppleScript's text item delimiters to " "
        set bufferarray to every text item of item 2 of fields
        if (count of bufferarray) = 2 then
                set AppleScript's text item delimiters to ","
                set msgccaddresses to every text item of item 2 of bufferarray
                set fillinCCAddresses to true
        end if
        # Extract subject
        set AppleScript's text item delimiters to "Subject: "
        set bufferarray to every text item of item 3 of fields
        set msgsubject to item 2 of bufferarray as «class utf8»
        # Extract mail body
        set buffer1 to read msgfile from 1 for 10000 as «class utf8»
        set AppleScript's text item delimiters to msgheaderdelimiter
        set buffer2 to every text item of buffer1
        set msgbody to item 2 of buffer2

        # Create outgoing message object
        set newmsg to make new outgoing message
        tell newmsg
                if fillinToAddresses then
                        repeat with addr in msgtoaddresses
                                make new to recipient at end of to recipients with properties {address:addr}
                        end repeat
                end if
                if fillinCCAddresses then
                        repeat with addr in msgccaddresses
                                make new cc recipient at end of cc recipients with properties {address:addr}
                        end repeat
                end if
                set the subject to msgsubject
                set the content to msgbody
        end tell

        # Close file
        close access msgfile
end tell

Maintenant, j'ajoute des pièces jointes et j'envoie le courrier.

Il y a évidemment encore quelques faiblesses : Les champs BCC et reply-to sont toujours absents, mais peuvent facilement être ajoutés. Un peu plus grave, les pièces jointes sont perdues lorsque l'on passe du compositeur de messages à vi et inversement. Il serait souhaitable, que la nouvelle fenêtre du compositeur de messages soit ouverte automatiquement lorsque vi est fermé, sans un démarrage manuel script comme ci-dessus. Donc, je ne suis pas encore complètement satisfait, mais peut-être que c'est un point de départ où certains utilisateurs plus avancés peuvent ajouter des améliorations.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X