diff --git a/org-contacts.el b/org-contacts.el index ac43f9d..a7559f7 100644 --- a/org-contacts.el +++ b/org-contacts.el @@ -250,7 +250,7 @@ to dead or no buffer." (let* (todo-only (contacts-matcher (cdr (org-make-tags-matcher org-contacts-matcher))) - markers result) + result) (when (org-contacts-db-need-update-p) (let ((progress-reporter (make-progress-reporter "Updating Org Contacts Database..." 0 (length org-contacts-files))) @@ -259,21 +259,26 @@ to dead or no buffer." (org-check-agenda-file file) (with-current-buffer (org-get-agenda-file-buffer file) (unless (eq major-mode 'org-mode) - (error "File %s is no in `org-mode'" file)) - (org-scan-tags - '(add-to-list 'markers (set-marker (make-marker) (point))) - contacts-matcher - todo-only)) + (error "File %s is not in `org-mode'" file)) + (setf result + (append result + (org-scan-tags + 'org-contacts-at-point + contacts-matcher + todo-only)))) (progress-reporter-update progress-reporter (setq i (1+ i)))) - (dolist (marker markers result) - (org-with-point-at marker - (add-to-list 'result - (list (org-get-heading t) marker (org-entry-properties marker 'all))))) (setf org-contacts-db result org-contacts-last-update (current-time)) - (progress-reporter-done progress-reporter))) + (progress-reporter-done progress-reporter))) org-contacts-db)) +(defun org-contacts-at-point (&optional pom) + "Return the contacts at point-or-marker POM or current position +if nil." + (setq pom (or pom (point))) + (org-with-point-at pom + (list (org-get-heading t) (set-marker (make-marker) pom) (org-entry-properties pom 'all)))) + (defun org-contacts-filter (&optional name-match tags-match prop-match) "Search for a contact matching any of NAME-MATCH, TAGS-MATCH, PROP-MATCH. If all match values are nil, return all contacts.