[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [O] Converting org-mode/org-contacts to VCard (importing to Android)
From: |
Feng Shu |
Subject: |
Re: [O] Converting org-mode/org-contacts to VCard (importing to Android) |
Date: |
Sat, 23 Nov 2013 16:29:07 +0800 |
User-agent: |
Gnus/5.130008 (Ma Gnus v0.8) Emacs/24.3.50 (gnu/linux) |
Karl Voit <address@hidden> writes:
> Hi!
>
> I wrote a Python script that parses an Org-mode file in order to
> generate a VCard 2.1 compatible output file I am using to import to
> my Android 4.4 device:
>
> https://github.com/novoid/org-contacts2vcard
>
> The reason I wrote it in Python is that I don't know ELISP well
> enough. The reason I wrote the script instead of using existing
> export methods: I only want to export a small sub-set (names, phone
> numbers, email addresses, contact image) due to privacy reasons.
the below function will only export name, phones and email
#+begin_src
(defun org-contacts-vcard-format (contact)
"Formats CONTACT in VCard 3.0 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)))
(tel (cdr (assoc-string org-contacts-tel-property properties)))
(ignore-list (cdr (assoc-string org-contacts-ignore-property
properties)))
(ignore-list (when ignore-list
(org-contacts-split-property ignore-list)))
(head (format "BEGIN:VCARD\nVERSION:3.0\nN:%s\nFN:%s\n" n name))
emails-list result phones-list)
(concat head
(when email (progn
(setq emails-list
(org-contacts-remove-ignored-property-values ignore-list
(org-contacts-split-property email)))
(setq result "")
(while emails-list
(setq result (concat result "EMAIL:"
(org-contacts-strip-link (car emails-list)) "\n"))
(setq emails-list (cdr emails-list)))
result))
(when tel (progn
(setq phones-list
(org-contacts-remove-ignored-property-values ignore-list
(org-contacts-split-property tel)))
(setq result "")
(while phones-list
(setq result (concat result "TEL:"
(org-link-unescape (org-contacts-strip-link (car phones-list))) "\n"))
(setq phones-list (cdr phones-list)))
result))
"END:VCARD\n\n")))
#+end_src
>
> So far, it is a one-direction approach and no synchronization
> solution.
>
>
>
> By the way: does somebody know of any somewhat intelligent tool that
> is able to compare two different VCard files? The main issue here is
> the fact that VCard order and property order within a single VCard
> can be different but the VCard file could still contain the same
> information. So line-by-line comparisons like diff do not work here.
This may be difficult, I use org-contacts and use a elisp function to
merge all the contacs which have same name. then export contacts to a
vcard file.
--