>From 938c2d0e3eb04faf2fd9708a382da9bac43d0bf9 Mon Sep 17 00:00:00 2001
From: Feng Shu <tuma...@gmail.com>
Date: Mon, 3 Jun 2013 23:17:57 +0800
Subject: [PATCH] Quickly insert (a) template(s) in current buffer

* contrib/lisp/org-contacts.el (org-contacts-build-template-with-exist-contact):Build
a contact template with exist contact, It is useful when you want to update exist contact(s).
(org-contacts-build-template-with-string): Build contact template with
a string, It is useful when you want to add a new contact.
(org-contacts-insert-template): Insert contact template(s) at point,
the template(s) will be built with the input string and exist contacts
informations.

Add a new function, which can quickly insert (a) contact templete(s),
the templete(s) are built using user's input and the exist contacts information.
---
 contrib/lisp/org-contacts.el |   48 ++++++++++++++++++++++++++++++++++++++++++
 1 个文件被修改,插入 48 行(+)

diff --git a/contrib/lisp/org-contacts.el b/contrib/lisp/org-contacts.el
index ffd17a1..78e7fef 100644
--- a/contrib/lisp/org-contacts.el
+++ b/contrib/lisp/org-contacts.el
@@ -951,6 +951,54 @@ is created and the VCard is written into that buffer."
 	(current-buffer)
       (progn (save-buffer) (kill-buffer)))))
 
+(defun org-contacts-build-template-with-exist-contact (contact)
+  "Build a contact template with exist contact, It is useful
+when you want to update exist contact(s)."
+  (let* ((properties (caddr contact))
+	 (name (org-contacts-vcard-escape (car contact)))
+	 (n (org-contacts-vcard-encode-name name))
+	 (alias (cdr (assoc-string org-contacts-alias-property properties))))
+    (concat "** " name "\n"
+	    ":PROPERTIES:\n"
+	    ":" org-contacts-alias-property ": " alias "\n"
+	    ":" org-contacts-note-property ":\n"
+	    ":" org-contacts-email-property ":\n"
+	    ":" org-contacts-tel-property ":\n"
+	    ":" org-contacts-ignore-property ":\n"
+	    ":END:\n\n")))
+
+(defun org-contacts-build-template-with-string (string)
+  "Build contact template with a string, It is useful
+when you want to add a new contact."
+  (concat "** " string "\n"
+	  ":PROPERTIES:\n"
+	  ":" org-contacts-alias-property ": " string "\n"
+	  ":" org-contacts-note-property ":\n"
+	  ":" org-contacts-email-property ":\n"
+	  ":" org-contacts-tel-property ":\n"
+	  ":" org-contacts-ignore-property ":\n"
+	  ":END:\n\n"))
+
+(defun org-contacts-insert-template (string)
+  "Insert contact template(s) at point, the template(s) will be built
+with the input string and exist contacts informations."
+  (interactive (list (read-string "Name or Alias: ")))
+  (let ((point (point))
+        (contact-list
+	 (delete-dups (nconc
+		       (org-contacts-filter
+			nil nil
+			(cons org-contacts-alias-property string))
+		       (org-contacts-filter string)))))
+    (current-buffer)
+    (let ((inhibit-read-only t)))
+    (when (fboundp 'set-buffer-file-coding-system)
+      (set-buffer-file-coding-system coding-system-for-write))
+    (loop for contact in contact-list
+	  do (insert (org-contacts-build-template-with-exist-contact contact)))
+    (if contact-list nil (insert (org-contacts-build-template-with-string string)))
+    (goto-char point)))
+
 (defun org-contacts-show-map (&optional name)
   "Show contacts on a map.
 Requires google-maps-el."
-- 
1.7.10.4

-- 

Reply via email to