commit-womb
[Top][All Lists]
Advanced

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

[Commit-womb] addressbook ChangeLog addressbook.el


From: Jose E. Marchesi
Subject: [Commit-womb] addressbook ChangeLog addressbook.el
Date: Mon, 07 May 2007 22:54:19 +0000

CVSROOT:        /cvsroot/womb
Module name:    addressbook
Changes by:     Jose E. Marchesi <jemarch>      07/05/07 22:54:19

Modified files:
        .              : ChangeLog addressbook.el 

Log message:
        Fixed `addrbook-quit'
        Sort function.

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/addressbook/ChangeLog?cvsroot=womb&r1=1.12&r2=1.13
http://cvs.savannah.gnu.org/viewcvs/addressbook/addressbook.el?cvsroot=womb&r1=1.12&r2=1.13

Patches:
Index: ChangeLog
===================================================================
RCS file: /cvsroot/womb/addressbook/ChangeLog,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -b -r1.12 -r1.13
--- ChangeLog   7 May 2007 19:28:25 -0000       1.12
+++ ChangeLog   7 May 2007 22:54:19 -0000       1.13
@@ -5,6 +5,7 @@
        Sources reestructured.
        (addrbook-summary-display): renamed from `addrbook-summary-redisplay'
        (addrbook-quit): Fixed.
+       (addrbook-get-prop-index): New function.
 
 2007-05-06  Jose E. Marchesi  <address@hidden>
 

Index: addressbook.el
===================================================================
RCS file: /cvsroot/womb/addressbook/addressbook.el,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -b -r1.12 -r1.13
--- addressbook.el      7 May 2007 19:28:25 -0000       1.12
+++ addressbook.el      7 May 2007 22:54:19 -0000       1.13
@@ -5,7 +5,7 @@
 ;; Maintainer: Jose E. Marchesi
 ;; Keywords: contacts, applications
 
-;; $Id: addressbook.el,v 1.12 2007/05/07 19:28:25 jemarch Exp $
+;; $Id: addressbook.el,v 1.13 2007/05/07 22:54:19 jemarch Exp $
 
 ;; This file is NOT part of GNU Emacs.
 
@@ -85,8 +85,6 @@
 
 ;;;; Customization
 
-;;; General settings
-
 (defgroup addrbook nil
   "Addressbook subsytem"
   :group 'applications)
@@ -136,6 +134,14 @@
   :type 'boolean
   :group 'addrbook)
 
+(defcustom addrbook-field-for-sort
+  "First name"
+  "Field to use when sorting contacts. 
+
+It may be \"Surname\", \"First Name\", \"AKA\", \"Name prefix\" or \"Name 
suffix\"."
+  :type 'string
+  :group 'addrbook)
+
 (defface addrbook-summary-card-number
   '((((min-colors 88) (class color) (background light))
      :foreground "red1")
@@ -509,6 +515,12 @@
 (defun addrbook-get-prop-field-letter (field)
   (nth 1 field))
 
+(defun addrbook-get-prop-index (prop-fields field-name)
+  (let ((index 0) result)
+    (dotimes (index (length prop-fields) result)
+      (if (equal (nth index prop-fields) field-name)
+          (setq result index)))))
+
 (defun addrbook-get-prop-field-description (fields field-name)
   (cadr (assoc field-name fields)))
 
@@ -1799,7 +1811,8 @@
 (defun addrbook-open ()
   "Open the addressbook"
   (or (addrbook-read-cards)
-      (addrbook-create-card-2)))
+      (addrbook-create-card-2))
+  (addrbook-sort-cards))
 
 (defun addrbook-get-text-property-line (prop)
   "Return the value of text property PROP in the nearest position on current 
line
@@ -1835,6 +1848,28 @@
           ((and (not begin-pos) end-pos)
            (delete-region (point-min) end-pos)))))
 
+(defun addrbook-sort-cards ()
+  "Sort `addrbook-cards' using the `addrbook-field-for-sort' field"
+  (setq addrbook-cards
+        (sort addrbook-cards
+              (lambda (card1 card2)
+                (let* ((card1-n (vcard-get-named-attribute card1 "n"))
+                       (card2-n (vcard-get-named-attribute card2 "n"))
+                       (n-prop (addrbook-get-property "n"))
+                       (n-fields (addrbook-get-prop-fields n-prop))
+                       (field-index (addrbook-get-prop-index n-fields 
addrbook-field-for-sort))
+                       (card1-n-field (nth field-index (vcard-attr-get-values 
card1-n)))
+                       (card2-n-field (nth field-index (vcard-attr-get-values 
card2-n))))
+                  (cond
+                   ((and (null card1-n-field) (not (null card2-n-field)))
+                    t)
+                   ((and (not (null card1-n-field)) (null card2-n-field))
+                    nil)
+                   ((and (null card1-n-field) (null card2-n-field))
+                    t)
+                   (t
+                    (string-lessp card1-n-field card2-n-field))))))))
+
 ;;; Fast selection
 
 (defun addrbook-fast-selection (names prompt)




reply via email to

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