Feng Shu <tuma...@gmail.com> writes: I will change this patch again, hard coding a templates in functions is not a good way , maybe it is a complex method to solve a simpe things.
> 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 --