John Kitchin <jkitc...@andrew.cmu.edu> 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