emacs-orgmode
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [O] [PATCH] org-contacts.el: add expire feature


From: Daimrod
Subject: Re: [O] [PATCH] org-contacts.el: add expire feature
Date: Wed, 29 May 2013 23:20:46 +0200
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/24.3.50 (gnu/linux)

Feng Shu <address@hidden> writes:

Hello Feng,

Thanks for this interesting feature, here are some remarks:

> From e974db131d88acf06bb6b250eac2fae8c7d0a96e Mon Sep 17 00:00:00 2001
> From: Feng Shu <address@hidden>
> Date: Wed, 29 May 2013 20:30:43 +0800
> Subject: [PATCH] * contrib/lisp/org-contacts.el:   Add a feature which can
>  expire   emails and phones

Could you use the org-mode convention for commit messages?[1]

It should be:

#+BEGIN_SRC change-log
  contrib/lisp/org-contacts.el: Add a feature which can expire emails and phones
  
  ,* contrib/lisp/org-contacts.el: Add a feature which can expire
  emails and phones.
  
  ...[rest of the commit message]...
#+END_SRC

> * test
>   :PROPERTIES:
>   :EMAIL: address@hidden  address@hidden  address@hidden
>   :PHONE:  123456  123457 123458
>   :EXPIRE:  address@hidden 123457
>   :END:
>
> when completing or exporting to vcard,  the emails and  phones in the
> expire property (address@hidden and 123457) will be ignore

Since the purpose of this property is to ignore some values when
exporting to vcard, don't you think it would be better to name it IGNORE
or VCARD_IGNORE? (and of course to rename all functions accordingly)

> ---
>  contrib/lisp/org-contacts.el |   32 +++++++++++++++++++++++++++-----
>  1 个文件被修改,插入 27 行(+),删除 5 行(-)
>
> diff --git a/contrib/lisp/org-contacts.el b/contrib/lisp/org-contacts.el
> index 7b0b603..ae6c6f1 100644
> --- a/contrib/lisp/org-contacts.el
> +++ b/contrib/lisp/org-contacts.el
> @@ -86,6 +86,11 @@ When set to nil, all your Org files will be used."
>    :type 'string
>    :group 'org-contacts)
>  
> +(defcustom org-contacts-expire-property "EXPIRE"
> +  "Name of the property for emails or phones which will be expired"
> +  :type 'string
> +  :group 'org-contacts)
> +
>  
>  (defcustom org-contacts-birthday-format "Birthday: %l (%Y)"
>    "Format of the anniversary agenda entry.
> @@ -476,6 +481,14 @@ 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-remove-expired-property (expire-list list)
> +  "Remove emails or phones in list-expired from list"

Don't forget the dot at the end of the sentence.

> +    (while expire-list
> +      (setq list (remove (car expire-list) list))
> +      (setq expire-list (cdr expire-list)))
> +    list)
> +

This is not very idiomatic elisp, I would write something more like:
#+BEGIN_SRC emacs-lisp
  (remove-if (lambda (el)
               (member el expire-list)) 
             list)
#+END_SRC

>  (defun org-contacts-complete-name (start end string)
>    "Complete text at START with a user name and email."
>    (let* ((completion-ignore-case org-contacts-completion-ignore-case)
> @@ -484,10 +497,17 @@ A group FOO is composed of contacts with the tag FOO."
>               ;; The contact name is always the car of the assoc-list
>               ;; returned by `org-contacts-filter'.
>               for contact-name = (car contact)
> +
> +             ;; Build the list of the email addresses which has
> +             ;; been expired
> +             for expire-list = (org-contacts-split-property (or
> +                                                             (cdr 
> (assoc-string org-contacts-expire-property
> +                                                                             
>    (caddr contact))) ""))
>               ;; Build the list of the user email addresses.
> -             for email-list = (org-contacts-split-property (or
> -                                             (cdr (assoc-string 
> org-contacts-email-property
> -                                                                (caddr 
> contact))) ""))
> +             for email-list = (org-contacts-remove-expired-property 
> expire-list
> +                                                                    
> (org-contacts-split-property (or
> +                                                                             
>                      (cdr (assoc-string org-contacts-email-property
> +                                                                             
>                                         (caddr contact))) "")))
>               ;; If the user has email addresses…
>               if email-list
>               ;; … append a list of USER <EMAIL>.
> @@ -869,15 +889,17 @@ to do our best."
>        (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)))
> +      (expire  (cdr (assoc-string org-contacts-expire-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 "BEGIN:VCARD\nVERSION:3.0\nN:%s\nFN:%s\n" n name))
> +      (expire-list (when expire (setq expire-list 
> (org-contacts-split-property expire))))
>        emails-list result phones-list)
>      (concat head
>           (when email (progn
> -                       (setq emails-list (org-contacts-split-property email))
> +                       (setq emails-list 
> (org-contacts-remove-expired-property expire-list 
> (org-contacts-split-property email))) ;

There is a leading semi-colon.                                                  
                                      ^^^^

>                         (setq result "")
>                         (while emails-list
>                           (setq result (concat result  "EMAIL:" 
> (org-contacts-strip-link (car emails-list)) "\n"))
> @@ -886,7 +908,7 @@ to do our best."
>           (when addr
>             (format "ADR:;;%s\n" (replace-regexp-in-string "\\, ?" ";" addr)))
>           (when tel (progn
> -                     (setq phones-list (org-contacts-split-property tel))
> +                     (setq phones-list (org-contacts-remove-expired-property 
> expire-list (org-contacts-split-property tel)))
>                       (setq result "")
>                       (while phones-list
>                         (setq result (concat result  "TEL:" 
> (org-contacts-strip-link (car phones-list)) "\n"))
> -- 
> 1.7.10.4

[1] http://orgmode.org/worg/org-contribute.html#sec-5

-- 
Daimrod/Greg

Attachment: signature.asc
Description: PGP signature


reply via email to

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