[Top][All Lists]

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

Re: [Orgmode] Re: contact management in org-mode?

From: Russell Adams
Subject: Re: [Orgmode] Re: contact management in org-mode?
Date: Fri, 20 Nov 2009 08:32:35 -0600
User-agent: Mutt/1.5.18 (2008-05-17)

On Fri, Oct 30, 2009 at 10:26:07PM -0500, Russell Adams wrote:
> Looking into this some more, export is really easy. I can just use a
> dynamic block to store column view in whatever format I choose, and
> export then search & replace ',' for '|'. That is minimal effort!
> Sparse searches in column view, hierarchy organization, etc. I'm
> trying to find a problem here.

I've just converted all my contacts into an Org file, and will
document below how it is organized.

First is Contacts.org:

#+COLUMNS:  %20ITEM %15Company %10Title %WorkEmail %WorkPhone %WorkMobile 
%WorkFax %10WorkStreet %WorkCity %WorkState %WorkPostal %HomeEmail %HomePhone 
%HomeMobile %10HomeStreet %HomeCity %HomeState %HomePostal

* Contacts

** Adams, Russell
   :Company:      Adams Information Services LLC
   :Title:        Principal Consultant
   :WorkEmail:    address@hidden

What a super guy!

I could have multiple top level headings for organization. Making a
contact a subheading also lets me use C-c / (spare tree searchs) to
limit the list of contacts.

With the column view modeline, I can edit contacts in long format, or
change fields in column view.

Next I needed a way to lookup addresses for Mutt. Lbdb is very
effective, but given I don't use BBDB anymore I required an

I still like lbdb's inmail filter, so I continue to use that. I wrote
a quick lbdb module to find contacts in Contacts.org.

MODULES_PATH="/usr/lib/lbdb /home/rladams/.lbdb/modules"
METHODS="m_inmail m_gpg m_orgcontact"

#! /bin/sh


    /home/rladams/.lbdb/modules/orgcontact.pl $1


~/.lbdb/modules/orgcontact.pl: (note the hardcoded Contacts.org file)

use strict;
use warnings;

# Read org headers are records


my @rawcontacts = <MYFILE>;


foreach (@rawcontacts) {
  if ( $_ =~ m/$ARGV[0]/i ){

    my $name;

    foreach (split("\n",$_)) {

      # The first line is the name
      unless (defined $name) {
        $name = $_;
        $name =~ s/^\s*\**\s*//;
        $name =~ s/\s*$//;

      if (m/^\s+:.*email.*:/i) {
        my $email = $_;
        $email =~ s/^\s+:\S+:\s+(\S+)/$1/g;
        $email =~ s/\s*$//;

        printf("%s\t%s\t((Org))\n", $email, $name);





Given I still use lbdbq in Mutt for address lookups, now it returns
one row per email property using the name from the headline.

Next, to make data entry faster, I've defined a yasnippet which
contains all the properties in a tab list.

#contact : Add a contact w/ PROPERTY drawer
# --
** $1
   :Company:      $2
   :Title:        $3
   :WorkEmail:    $4
   :WorkPhone:    $5
   :WorkMobile:   $7
   :WorkFax:      $8
   :WorkStreet:   $9
   :WorkCity:     $10
   :WorkState:    $11
   :WorkPostal:   $12
   :HomeEmail:    $13
   :HomePhone:    $14
   :HomeMobile:   $15
   :HomeStreet:   $16
   :HomeCity:     $17
   :HomeState:    $18
   :HomePostal:   $19



This also helps keep the property list consistent. 

I hope this helps someone else.


Russell Adams                            address@hidden

PGP Key ID:     0x1160DCB3           http://www.adamsinfoserv.com/

Fingerprint:    1723 D8CA 4280 1EC9 557F  66E8 1154 E018 1160 DCB3

reply via email to

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