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: Feng Shu
Subject: Re: [O] [PATCH] org-contacts.el: add expire feature
Date: Thu, 30 May 2013 19:32:17 +0800
User-agent: Gnus/5.130008 (Ma Gnus v0.8) Emacs/24.2 (gnu/linux)

Daimrod <address@hidden> writes:

> Feng Shu <address@hidden> writes:
>
>> Daimrod <address@hidden> writes:
>>
>>>
>>> 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
>>
>> Thanks!
>>
>> Is this possible?
>>
>>  address@hidden  =  address@hidden
>
> Yes, you could do it like this:
> #+BEGIN_SRC emacs-lisp
>   (remove-if (lambda (el)
>                (find-if (lambda (x)
>                           (string-match-p x el))
>                         expire-list))
>              list)
> #+END_SRC
>
> This way you can use regular expressions in the ignore list.

Hi Daimrod!
This is the 3 updated patch, if possible, please include it to master.

Thanks for your help!

>From 362bf0657a0a270416d5e9b51aaba868ad963439 Mon Sep 17 00:00:00 2001
From: Feng Shu <address@hidden>
Date: Wed, 29 May 2013 20:30:43 +0800
Subject: [PATCH] Add a feature, which can ignore emails or phones with
 property

* contrib/lisp/org-contacts.el (org-contacts-ignore-property): New variable.
(org-contacts-remove-ignored-property-values): New function, which
remove all ignore-list's elements from list.
(org-contacts-complete-name): When completing, ignore the
values which has been included into the ignore property.
(org-contacts-vcard-format): Don't export the values which has
been included into the ignore property.

If emails or phones is included into the ignore property, they will
not show in complete buffer. When the contact is exported to vcard,
they will be ignored too.
---
 contrib/lisp/org-contacts.el |   34 +++++++++++++++++++++++++++++-----
 1 个文件被修改,插入 29 行(+),删除 5 行(-)

diff --git a/contrib/lisp/org-contacts.el b/contrib/lisp/org-contacts.el
index 7b0b603..2aee0f6 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-ignore-property "IGNORE"
+  "Name of the property,  which values will be ignored when complete or export 
to vcard."
+  :type 'string
+  :group 'org-contacts)
+
 
 (defcustom org-contacts-birthday-format "Birthday: %l (%Y)"
   "Format of the anniversary agenda entry.
@@ -476,6 +481,16 @@ 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-ignored-property-values (ignore-list list)
+  "Remove all ignore-list's elements from list and you can use
+   regular expressions in the ignore list."
+    (remove-if (lambda (el)
+               (find-if (lambda (x)
+                          (string-match-p x el))
+                        ignore-list))
+             list))
+
 (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 +499,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 ignore-list = (org-contacts-split-property (or
+                                                               (cdr 
(assoc-string org-contacts-ignore-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-ignored-property-values 
ignore-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 +891,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)))
+        (ignore  (cdr (assoc-string org-contacts-ignore-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))
+        (ignore-list (when ignore (setq ignore-list 
(org-contacts-split-property ignore))))
         emails-list result phones-list)
     (concat head
            (when email (progn
-                         (setq emails-list (org-contacts-split-property email))
+                         (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"))
@@ -886,7 +910,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-ignored-property-values ignore-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




-- 

reply via email to

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