From mboxrd@z Thu Jan 1 00:00:00 1970 From: Michael Strey Subject: Re: org-contacts development Date: Tue, 03 Jun 2014 12:23:37 +0200 Message-ID: <87sinm1ec6.fsf@strey.biz> References: <8761kxnno5.fsf@gmail.com> <87egzg36u5.fsf@strey.biz> <877g57372x.fsf@strey.biz> <87zji1b7av.fsf@tanger.home> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:45048) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Wrlt2-0001V3-E9 for emacs-orgmode@gnu.org; Tue, 03 Jun 2014 06:24:14 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Wrlsw-0007Ij-4j for emacs-orgmode@gnu.org; Tue, 03 Jun 2014 06:24:08 -0400 Received: from mx2.supremebox.com ([198.23.53.42]:52054 helo=mx1.supremebox.com) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Wrlsv-0007HE-VP for emacs-orgmode@gnu.org; Tue, 03 Jun 2014 06:24:02 -0400 In-reply-to: <87zji1b7av.fsf@tanger.home> List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Sender: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org To: Daimrod Cc: emacs-orgmode@gnu.org --=-=-= Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Hi Daimrod, On 2014-05-29, Daimrod wrote: > Hmm, I kinda like this. It seems a bit verbose but it's better than > having multiple values per properties (IMHO). > > Though, if we adopt this scheme, we would need to add some helper > bindings/functions so that we don't have to fill this by hands. I'm using yasnippets and have snippets for organizations, job-related contacts and private contacts. I have attached them. C-c C-x p helps to fill in optional properties. I have all my contacts in one buffer with the following settings #+BEGIN_SRC org * Buffer settings #+STARTUP: overview #+STARTUP: hidestars #+STARTUP: indent #+TAGS: ADMIN(i) CHEF(f) EINKAUF(k) PRIVAT(t) SEKRETARIAT(s) #+TAGS: AUTO(u) BROADCASTER(b) DAB(d) DVB(v) EMPFÄNGER(m) HOCHSCHULE(h) NETZBETREIBER(n) SYSTEM(y) B2B B2C REG #+TAGS: MAIL(l) PRESSE(e) KUNDE COMPETITOR #+TAGS: ABI CI FAMILIE FREUNDE SCHULE TAICHI TURNEN #+SEQ_TODO: TODO(t) NEXT(n) WAITING(w) | DONE(d) CANCELLED(c) #+PROPERTY: Contact_Type_ALL individual organization #+PROPERTY: Language_ALL de en ru #+PROPERTY: Phone_1_Type_ALL Work Home Fax Mobile #+PROPERTY: Phone_2_Type_ALL Work Home Fax Mobile #+PROPERTY: Phone_3_Type_ALL Work Home Fax Mobile #+PROPERTY: Phone_4_Type_ALL Work Home Fax Mobile #+PROPERTY: Address_1_Type_ALL Work Home Post #+PROPERTY: Address_2_Type_ALL Work Home Post #+PROPERTY: Address_3_Type_ALL Work Home Post #+PROPERTY: Website_1_Type_ALL Work Home #+PROPERTY: Website_2_Type_ALL Work Home #+END_SRC >> Other user defined properties can be added and mapped to the appropriate >> user defined keys during export. > > I'm not sure to understand what you mean. Could you give more details > and maybe an example? Actually, my statement was trivial. Orgmode allows to define and add every kind of additional properties. What I wanted to say was that it is possible to export those additional properties to Google Contacts as well. I have for instance the property :Language: that is not part of the Google API. I use it to store the preferred language of correspondence for my job-related contacts for mailing actions. Google Contacts accepts such fields in the CSV file to import and creates user defined fields from them. >> Please note that org-collector tries to convert property values from >> strings into numbers if possible. For postal codes with leading Zeros >> this can lead to unexpected results. I did not find any other way to >> solve this problem than to add a national code like in the following >> example >> >> :Address_1_Code: 01169 >> would lead to "1169" in the propview table. >> >> so I replaced it with >> :Address_1_Code: DE-01169 > > What is `org-collector' and when does it happen? >From the Orgmode manual: "An alternative way to capture and process property values into a table is provided by Eric Schulte's org-collector.el which is a contributed package. It provides a general API to collect properties from entries in a certain scope, and arbitrary Lisp expressions to process these values before inserting them into a table or a dynamic block." I'm using org-collector to create a table that can be exported to CSV for import into Google Contacts (and maybe other contact managers). > I've done a quick test and the 0 appears in `org-contacts-db'. Yes, everything is fine with org-contacts. The problem comes only from org-collector. The reason is org-collector's feature to allow Lisp expressions to process property values. Therefore it uses the function `org-babel-read' that detects Lisp expressions and converts strings into numbers. So this remark is only relevant for those who want to follow my track with the org-collector export. -- Michael Strey www.strey.biz --=-=-= Content-Type: text/plain Content-Disposition: attachment; filename=contact Content-Description: Job-related contact #name : Contact Individual #key : contact #contributor : Michael Strey <[EMAIL PROTECTED]> #expand-env: ((yas/indent-line 'fixed) (yas/wrap-around-region 'nil)) # -- **** ${1:surname}, ${2:name} :LOGBOOK: - Contact added: [`(org-read-date nil nil "+0d")`] :END: :PROPERTIES: :Contact_Type: individual :Organization_1_Type: company :Organization_1_Value: ${3:organisation} :Organization_1_Department: ${4:devision} :Organization_1_Title: ${5:title} :FN: $2 $1 :Given_Name: $2 :Family_Name: $1 :Nickname: $19 $1 :Address_1_Type: Work :Address_1_Street: ${6:adr1} :Address_1_Box: ${7:adr2} :Address_1_Extension: ${8:adr3} :Address_1_City: ${9:city} :Address_1_Region: ${10:state} :Address_1_Code: ${11:zip_code} :Address_1_Country: ${12:country} :Email_1_Type: Work :Email_1_Value: ${13:company_email} :Phone_1_Type: Work :Phone_1_Value: ${14:tel} :Phone_2_Type: Mobile :Phone_2_Value: ${15:mobile} :Phone_3_Type: Fax :Phone_3_Value: ${16:fax} :Website_1_Type: Work :Website_1_Value: http://$17 :Language: $18 :END: $0 --=-=-= Content-Type: text/plain Content-Disposition: attachment; filename=privat Content-Description: Private contact #name : Contact Individual (private) #key : privat #contributor : Michael Strey <[EMAIL PROTECTED]> #expand-env: ((yas/indent-line 'fixed) (yas/wrap-around-region 'nil)) # -- **** ${1:surname}, ${2:name} :NEW: :LOGBOOK: - Contact added: [`(org-read-date nil nil "+0d")`] :END: :PROPERTIES: :Contact_Type: individual :FN: $2 $1 :Family_Name: $1 :Given_Name: $2 :Name_Prefix: :Name_Suffix: :Nickname: ${3:salutation} :Address_1_Type: Home :Address_1_Street: ${4:street} :Address_1_Box: :Address_1_Extension: :Address_1_City: ${5:Dresden} :Address_1_Region: ${6:Sachsen} :Address_1_Code: DE-${7:zip_code} :Address_1_Country: ${8:Deutschland} :Email_1_Type: Home :Email_1_Value: ${9:email} :Phone_1_Type: Home :Phone_1_Value: ${10:tel} :Phone_2_Type: Mobile :Phone_2_Value: ${11:tel} :Language: ${12:de} :END: $0 --=-=-= Content-Type: text/plain Content-Disposition: attachment; filename=org Content-Description: Organization #name : Contact Organisation #key : org #contributor : Michael Strey <[EMAIL PROTECTED]> #expand-env: ((yas/indent-line 'fixed) (yas/wrap-around-region 'nil)) # -- *** ${1:organisation} :NEW: :LOGBOOK: - Organization added: [`(org-read-date nil nil "+0d")`] :END: :PROPERTIES: :Contact_Type: organization :Organization_1_Name: $1 :Organization_1_Department: ${2:devision} :Address_1_Type: Work :Address_1_Street: ${3:adr1} :Address_1_Box: ${4:adr2} :Address_1_Extension: ${5:adr3} :Address_1_City: ${6:city} :Address_1_Region: ${7:state} :Address_1_Code: ${8:zip_code} :Address_1_Country: ${9:country} :Email_1_Type: Work :Email_1_Value: ${10:company_email} :Phone_1_Type: Work :Phone_1_Value: ${11:tel} :Phone_2_Type: Fax :Phone_2_Value: ${12:tel} :Website_1_Type: Work :Website_1_Value: http://$13 :Language: $14 :END: $0 --=-=-=--