emacs-orgmode
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [O] org-contacts email completion by tags


From: Daimrod
Subject: Re: [O] org-contacts email completion by tags
Date: Tue, 17 Jun 2014 16:45:27 +0900
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/24.3.91 (gnu/linux)

John Kitchin <address@hidden> writes:

Hi,

First, sorry for the late reply.

> Here is what I finally ended up with to allow completion with tag
> expressions. I did not figure out how to avoid overwriting an
> org-contacts function. I thought I could find the right hooks to use,
> but I could not figure it out. It is only a one line modification to the
> org-contacts function.

I've added a new hook `org-contacts-complete-functions' that you can use
to plug your function.

> This works for tag expressions, but I have not
> gotten it to work with properties.
>
> (defun org-contacts-complete-tags (start end tag-expression)
>   "insert emails from org-contacts that match the tags expression. For 
> example:
> group-phd will match entries tagged with group but not with phd."
>   (let* ((completion-ignore-case org-contacts-completion-ignore-case)
>        (group-completion-p t))
>     (let ((result (mapconcat 'identity
>                    (loop for contact in (org-contacts-db)
>                          for contact-name = (car contact)
>                          for email = (org-contacts-strip-link (car 
> (org-contacts-split-property
>                                                                     (or
>                                                                      (cdr 
> (assoc-string org-contacts-email-property
>                                                                               
>           (caddr contact)))
>                                                                      ""))))
>                          for tags = (cdr (assoc "TAGS" (nth 2 contact)))
>                          for tags-list = (if tags
>                                              (split-string (substring (cdr 
> (assoc "TAGS" (nth 2 contact))) 1 -1) ":")
>                                            '())
>                          if (let ((todo-only nil))
>                               (eval (cdr (org-make-tags-matcher 
> tag-expression))))
>                          
>                          collect (org-contacts-format-email contact-name 
> email))
>                    ",")))
>       (when (not (string= "" result))
>       ;; return (start end function)
>       (lexical-let* ((to-return result))
>         (list start end
>               (lambda (string pred &optional to-ignore) to-return)))))))
>

Thanks, but I'm refactoring org-contacts a bit, and I think I have found
a slightly better way to do that, but in the meantime you can use the
aforementioned hook for your function.

Best,

-- 
Daimrod/Greg



reply via email to

[Prev in Thread] Current Thread [Next in Thread]