Browse Source

contrib/lisp/org-contacts.el: Fix a bug when contacts don't have an email address

* contrib/lisp/org-contacts.el (org-contacts-complete-tags-props,
org-contacts-complete-group): Fix a bug when contacts don't have an
email address.
Grégoire Jadi 10 years ago
parent
commit
9cf3c4e971
1 changed files with 16 additions and 12 deletions
  1. 16 12
      contrib/lisp/org-contacts.el

+ 16 - 12
contrib/lisp/org-contacts.el

@@ -516,11 +516,12 @@ A group FOO is composed of contacts with the tag FOO."
 				       ;; returned by `org-contacts-filter'.
 				       for contact-name = (car contact)
 				       ;; Grab the first email of the contact
-				       for email = (org-contacts-strip-link (car (org-contacts-split-property
-							 (or
-							  (cdr (assoc-string org-contacts-email-property
-									     (caddr contact)))
-							  ""))))
+				       for email = (org-contacts-strip-link
+						    (or (car (org-contacts-split-property
+							      (or
+							       (cdr (assoc-string org-contacts-email-property
+										  (caddr contact)))
+							       ""))) ""))
 				       ;; If the user has an email address, append USER <EMAIL>.
 				       if email collect (org-contacts-format-email contact-name email))
 				 ", ")))
@@ -528,7 +529,7 @@ A group FOO is composed of contacts with the tag FOO."
 		(completion-table-case-fold completion-list
 					    (not org-contacts-completion-ignore-case))))))))
 
-(defun org-contacts-complete-tags-props (start end matcher)
+(defun org-contacts-complete-tags-props (start end string)
   "Insert emails that match the tags expression.
 
 For example: FOO-BAR will match entries tagged with FOO but not
@@ -538,25 +539,28 @@ See (org) Matching tags and properties for a complete
 description."
   (let* ((completion-ignore-case org-contacts-completion-ignore-case)
 	 (completion-p (org-string-match-p
-			      (concat "^" org-contacts-tags-props-prefix) string)))
+			(concat "^" org-contacts-tags-props-prefix) string)))
     (when completion-p
       (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
+		    for email = (org-contacts-strip-link (or (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 matcher))))
-		    
+		    for marker = (second contact)
+		    if (with-current-buffer (marker-buffer marker)
+			 (save-excursion
+			   (goto-char marker)
+			   (let (todo-only)
+			     (eval (cdr (org-make-tags-matcher (subseq string 1)))))))
 		    collect (org-contacts-format-email contact-name email))
 	      ",")))
 	(when (not (string= "" result))