From 500694de70f14095acc765875182d65feab7ef85 Mon Sep 17 00:00:00 2001 From: Feng Shu Date: Sat, 13 Apr 2013 22:00:03 +0800 Subject: [PATCH] org-contacts.el, export contacts to outline-format * contrib/lisp/org-contacts.el (org-contacts-outline-file): new variable (org-contacts-outline-format): new function which formats a contact to outline-format (org-contacts-export-as-outline-format): new function, formats all contacts to outline-format * NAME :PROPERTIES: :EMAIL: n1@n.com n2@n.com :PHONE: 123456789 :END: export as: * NAME ** EMAIL: [[mailto:n1@n.com]] ** EMAIL: [[mailto:n2@n.com]] ** PHONE: [[tel:123456789]] ** PHONE: [[tel:123456789]] --- contrib/lisp/org-contacts.el | 72 ++++++++++++++++++++++++++++++++++++++++++ 1 个文件被修改,插入 72 行(+) diff --git a/contrib/lisp/org-contacts.el b/contrib/lisp/org-contacts.el index a3c4aed..c65ebf0 100644 --- a/contrib/lisp/org-contacts.el +++ b/contrib/lisp/org-contacts.el @@ -156,6 +156,12 @@ This overrides `org-email-link-description-format' if set." :group 'org-contacts :type 'file) +(defcustom org-contacts-outline-file "contacts-outline.org" + "Default file for outline-format export." + :group 'org-contacts + :type 'file) + + (defcustom org-contacts-enable-completion t "Enable or not the completion in `message-mode' with `org-contacts'." :group 'org-contacts @@ -896,6 +902,72 @@ is created and the VCard is written into that buffer." (current-buffer) (progn (save-buffer) (kill-buffer))))) +(defun org-contacts-outline-format (contact) + "Formats CONTACT in outline format." + (let* ((properties (caddr contact)) + (name (org-contacts-vcard-escape (car contact))) + (n (org-contacts-vcard-encode-name name)) + (email (cdr (assoc-string org-contacts-email-property properties))) + (alias (cdr (assoc-string org-contacts-alias-property properties))) + (tel (cdr (assoc-string org-contacts-tel-property properties))) + (note (cdr (assoc-string org-contacts-note-property properties))) + (bday (org-contacts-vcard-escape (cdr (assoc-string org-contacts-birthday-property properties)))) + (addr (cdr (assoc-string org-contacts-address-property properties))) + (nick (org-contacts-vcard-escape (cdr (assoc-string org-contacts-nickname-property properties)))) + (head (format "* %s\n" name))) + (concat head + (when alias + (format "** ALIAS: %s\n" alias)) + (when email (progn + (setq emails-list (split-string email "[,;: ]+")) + (setq result "") + (while emails-list + (setq result (concat result "** EMAIL: " (concat "[[mailto:" (car emails-list) "]]") "\n")) + (setq emails-list (cdr emails-list))) + result)) + (when addr + (format "** ADRESS: " (replace-regexp-in-string "\\, ?" ";" addr))) + (when tel (progn + (setq phones-list (split-string tel "[,;: ]+")) + (setq result "") + (while phones-list + (setq result (concat result "** TEL: " (concat "[[tel:" (car phones-list) "]]" ) "\n")) + (setq phones-list (cdr phones-list))) + result)) + (when bday + (let ((cal-bday (calendar-gregorian-from-absolute (org-time-string-to-absolute bday)))) + (format "** BDAY:%04d-%02d-%02d\n" + (calendar-extract-year cal-bday) + (calendar-extract-month cal-bday) + (calendar-extract-day cal-bday)))) + (when nick (format "** NICKNAME: %s\n" nick)) + (when note (format "** NOTE: %s\n" note))))) + + + +(defun org-contacts-export-as-outline-format (&optional name file to-buffer) + "Export all contacts matching NAME as outline format +If TO-BUFFER is nil, the content is written to FILE or +`org-contacts-outline-file'. If TO-BUFFER is non-nil, the buffer +is created and the outlines is written into that buffer." + (interactive) ; TODO ask for name? + (let* ((filename (or file org-contacts-outline-file)) + (buffer (if to-buffer + (get-buffer-create to-buffer) + (find-file-noselect filename)))) + (message "Exporting...") + (set-buffer buffer) + (let ((inhibit-read-only t)) (erase-buffer)) + (fundamental-mode) + (when (fboundp 'set-buffer-file-coding-system) + (set-buffer-file-coding-system coding-system-for-write)) + (loop for contact in (org-contacts-filter name) + do (insert (org-contacts-outline-format contact))) + (if to-buffer + (current-buffer) + (progn (save-buffer) (kill-buffer))))) + + (defun org-contacts-show-map (&optional name) "Show contacts on a map. Requires google-maps-el." -- 1.7.10.4