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

2014-07-13 Thread Daimrod
Daimrod daim...@gmail.com writes:

 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.

It turns out that my idea was wrong, so I have used a version very
similar to yours.

The function is triggered by the prefix '#' (customizable) and can be
used to match tags and properties.
e.g. the following expression:
#work-phdBIRTHDAY
will look for contacts with the tag 'work' but not the tag 'phd' and for
which there is a BIRTHDAY properties.

Best,

-- 
Daimrod/Greg



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

2014-06-17 Thread Daimrod
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



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

2014-06-06 Thread John Kitchin
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. 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)))
  
this is the function I overwrote in my init files:
  
(defun org-contacts-message-complete-function (optional start)
  Function used in `completion-at-point-functions' in `message-mode'.
  ;; Avoid to complete in `post-command-hook'.
  (when completion-in-region-mode
(remove-hook 'post-command-hook #'completion-in-region--postch))
  (let ((mail-abbrev-mode-regexp
 
^\\(Resent-To\\|To\\|B?Cc\\|Reply-To\\|From\\|Mail-Followup-To\\|Mail-Copies-To\\|Disposition-Notification-To\\|Return-Receipt-To\\):))
(when (mail-abbrev-in-expansion-header-p)
  (lexical-let*
  ((end (point))
   (start (or start
  (save-excursion
(re-search-backward \\(\\`\\|[\n:,]\\)[ \t]*)
(goto-char (match-end 0))
(point
   (string (buffer-substring start end)))
(or
 ;; I added the next line
 (org-contacts-complete-tags start end string)
 (org-contacts-complete-group start end string)
 (org-contacts-complete-name start end string))

-- 
---
John Kitchin
Professor
Doherty Hall A207F
Department of Chemical Engineering
Carnegie Mellon University
Pittsburgh, PA 15213
412-268-7803
http://kitchingroup.cheme.cmu.edu



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

2014-06-05 Thread John Kitchin
On Thu, Jun 5, 2014 at 7:50 AM, Daimrod daim...@gmail.com wrote:

 org-contacts-complete-group


Here is a better function I think. It uses the builtin org-contacts
database:

(defun insert-emails-from-tags (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.
  (interactive sTags: )
  (insert
   (mapconcat 'identity
  (loop for contact in (org-contacts-filter)
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))
  ,)))


John

---
John Kitchin
Associate Professor
Doherty Hall A207F
Department of Chemical Engineering
Carnegie Mellon University
Pittsburgh, PA 15213
412-268-7803
http://kitchingroup.cheme.cmu.edu