2013-06-22 15 views
5

Ich versuche eine Vorlage mit Hilfe von Org-Capture-Vorlagen zu erstellen, wenn Sie mu4e verwenden. Wenn ich eine Nachricht im mu4e: view-Modus anschaue, kann ich Org-Capture-Templates mit einem Tastendruck aufrufen und dann eine Erinnerung in eine Datei mit einem Link zu der Nachricht einfügen. Etwas wie folgt aus:Verwendung von org-capture-templates mit mu4e

* NEXT Respond to Person A on Message Subject 
SCHEDULED: <2013-06-22 Sat> 
[2013-06-22 Sat 22:05] 
Email subject linked to mu4e message 

Hier ist die Schablone in meinem .emacs:

(setq org-capture-templates 
(quote (("r" "respond" entry (file "~/refile.org") 
"* NEXT Respond to %:from on %:subject\nSCHEDULED: %t\n%U\n%a\n\n" 
:clock-in t :clock-resume t :immediate-finish t)))) 

Aber die Variablen in Abschnitt 9.1.3.2 des Org-Mode offiziellen Handbuch sind nicht in mu4e gesetzt. Meine Vermutung ist, dass es in der folgenden Funktion in org-mu4e.el eingestellt werden sollte. Siehe die 3 Zeilen, die durch einen Kommentar markiert sind, den ich hinzugefügt habe, aber das löst das Problem nicht. Der Link (% a) wird initialisiert, aber nicht: to,: from und: subject.

Wenn ich debuggen, kann ich den Funktionsaufruf sehen org-store-link-Requisiten wie folgt aussieht:

org-store-link-props(:type "mu4e" :from (("Person Name" . "[email protected]")) 
:to (("Me Surname" . "[email protected]")) :subject "Re: Subject of Email" 
:message-id "message-id") 

jedoch die Vorlage ausgewertet:

* NEXT Respond to %:from on %:subject 
SCHEDULED: <2013-06-23 Sun> 
[2013-06-23 Sun 21:08] 

Vielen Dank für die Hilfe - das ist die letzte Funktion, die für mich funktioniert:

(defun org-mu4e-store-link() 
"Store a link to a mu4e query or message." 
(cond 
;; storing links to queries 
((eq major-mode 'mu4e-headers-mode) 
    (let* ((query (mu4e-last-query)) 
     desc link) 
(org-store-link-props :type "mu4e" :query query) 
(setq 
    desc (concat "mu4e:query:" query) 
    link desc) 
(org-add-link-props :link link :description desc) 
link)) 
    ;; storing links to messages 
((eq major-mode 'mu4e-view-mode) 
    (let* ((msg (mu4e-message-at-point)) 
    (msgid (or (plist-get msg :message-id) "<none>")) 
    (from (car (car (mu4e-message-field msg :from)))) 
    (to (car (car (mu4e-message-field msg :to)))) 
    (subject (mu4e-message-field msg :subject)) 
    link) 
    (setq link (concat "mu4e:msgid:" msgid)) 
    (org-store-link-props :type "mu4e" :link link 
      :message-id msgid) 
    (setq link (concat "mu4e:msgid:" msgid)) 
    (org-store-link-props 
    :type "mu4e" :from from :to to :subject subject 
      :message-id msgid) 

    (org-add-link-props :link link 
      :description (funcall org-mu4e-link-desc-func msg)) 
    link)))) 

(org-add-link-type "mu4e" 'org-mu4e-open) 
(add-hook 'org-store-link-functions 'org-mu4e-store-link) 
+0

Okay, machte ein paar Fortschritte. Scheint wie mu4e-message-field gibt die Emails als (("Name Nachname". "[email protected]")) zurück. Also, wenn ich das zu einer Schnur mit etwas wie zwei Anrufen des Autos ändere, funktioniert es irgendwie, es sei denn, das Feld from in der Post hat keinen Namen und eine E-Mail, wie "Name Nachname <[email protected]>". Keine elegante Lösung, aber funktioniert jetzt. – cheese

+0

Eine andere Möglichkeit, von einer Liste von Listen zu einer Zeichenfolge zu wechseln, würde besser funktionieren? – cheese

+0

Wenn Sie Abschnitt "Nachrichtenfunktionen" in der Anleitung (es scheint so lässt mich nicht formatiert dies als etwas sehr lesbar aussehen): Die Kontaktfelder (To, From, Cc, Bcc) sind Listen von cons-pairs '(Name. E-Mail)'; 'name' kann 'nil' sein. Also zum Beispiel: (mu4e-message-field some-msg: to) ;; => (("Jack". "[email protected]") (nil. "[email protected]")) – djcb

Antwort

3

So etwas wie dies funktionieren soll:

(setq from 
    (let ((first (car (mu4e-message-field-at-point :from)))) 
    (if (car first) 
     (format "%s <%s>" (car first) (cdr first)) 
     (cdr first))))