emacs-orgmode
[Top][All Lists]
Advanced

[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.

-- 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]