From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daimrod Subject: Re: org-contacts email completion by tags Date: Tue, 17 Jun 2014 16:45:27 +0900 Message-ID: <87ha3kugh4.fsf@tanger.home> References: <87oay8ez6c.fsf@tanger.home> <87bnu7fucv.fsf@tanger.home> <8761kd7b1k.fsf@andrew.cmu.edu> Mime-Version: 1.0 Content-Type: text/plain Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:53478) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Wwo5R-0000Hs-IU for emacs-orgmode@gnu.org; Tue, 17 Jun 2014 03:45:51 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Wwo5H-0007XA-TT for emacs-orgmode@gnu.org; Tue, 17 Jun 2014 03:45:45 -0400 Received: from mail-pd0-x22f.google.com ([2607:f8b0:400e:c02::22f]:52828) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Wwo5H-0007Wq-N3 for emacs-orgmode@gnu.org; Tue, 17 Jun 2014 03:45:35 -0400 Received: by mail-pd0-f175.google.com with SMTP id v10so4411644pde.6 for ; Tue, 17 Jun 2014 00:45:34 -0700 (PDT) In-Reply-To: <8761kd7b1k.fsf@andrew.cmu.edu> (John Kitchin's message of "Fri, 06 Jun 2014 21:39:35 -0400") List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Sender: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org To: John Kitchin Cc: "emacs-orgmode@gnu.org" John Kitchin 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