2013-06-22 10 views
5

Sto provando a creare un modello utilizzando i modelli di acquisizione org quando si utilizza mu4e. Quando si visualizza un messaggio in mu4e: view mode, posso chiamare org-capture-templates con una sequenza di tasti e quindi aggiungere un promemoria in un file con un collegamento al messaggio. Qualcosa di simile a questo:Utilizzo di modelli di acquisizione org con 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 

Ecco il modello in mio .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)))) 

Ma le variabili nella sezione 9.1.3.2 del manuale ufficiale orgmode non sono impostate in mu4e. La mia ipotesi è che dovrebbe essere impostato nella seguente funzione in org-mu4e.el. Vedi le 3 linee contrassegnate da un commento che ho aggiunto, ma questo non risolve il problema. Il link (% a) viene inizializzato, ma non: to,: from e: subject.

Se metto a punto, posso vedere la chiamata di funzione per org-store-link-oggetti di scena si presenta così:

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") 

Tuttavia, il modello viene valutato come:

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

Grazie per il aiuto - questa è la funzione finale che funziona per me:

(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

Ok, ho fatto dei progressi. Sembra che il campo dei messaggi mu4e restituisca le e-mail come (("Nome Cognome". "[email protected]")). Quindi, se lo cambio in una stringa con qualcosa come due chiamate di macchina, funziona in qualche modo, a meno che il campo da nella mail non abbia un nome e una e-mail, come "Nome Cognome <[email protected]>". Non è affatto una soluzione elegante, ma funziona per ora. – cheese

+0

Un altro modo per passare da un elenco di elenchi a una stringa funzionerebbe meglio? – cheese

+0

Se si guarda la sezione "Funzioni dei messaggi" nel manuale (sembra COSÌ non mi permette di formattare questo come qualcosa di molto leggibile ...): I campi di contatto (A, Da, Cc, Ccn) sono elenchi di cons-pair '(nome e-mail)'; 'nome' può essere 'nil'. Quindi, ad esempio: (mu4e-message-field some-msg: a) ;; => (("Jack". "[email protected]") (nullo. "[email protected]")) – djcb

risposta

3

Qualcosa del genere dovrebbe funzionare:

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