Mercurial > emacs
view lisp/net/eudcb-mab.el @ 86265:22dc0bc9daf8
* frame.el (msdos-mouse-p):
* generic-x.el (w32-shell-name):
* files.el (msdos-long-file-names, w32-long-file-name)
(msdos-long-file-names, dired-get-filename, dired-unmark)
(dired-do-flagged-delete, dos-8+3-filename, vms-read-directory)
(view-mode-disable):
* term/mac-win.el (mac-code-convert-string, mac-coerce-ae-data)
(mac-resume-apple-event, mac-font-panel-mode)
(mac-atsu-font-face-attributes, mac-ae-set-reply-parameter)
(mac-clear-font-name-table):
* term/pc-win.el (msdos-remember-default-colors)
(w16-set-clipboard-data, w16-get-clipboard-data):
* term/w32-win.el (w32-send-sys-command, w32-select-font)
(set-message-beep):
* w32-fns.el (set-message-beep, w32-get-clipboard-data)
(w32-get-locale-info, w32-get-valid-locale-ids)
(w32-set-clipboard-data):
* help-fns.el (ad-get-advice-info):
* font-lock.el (fast-lock-after-fontify-buffer)
(fast-lock-after-unfontify-buffer, fast-lock-mode)
(lazy-lock-after-fontify-buffer)
(lazy-lock-after-unfontify-buffer, lazy-lock-mode):
* net/browse-url.el (w32-shell-execute):
* dos-fns.el (int86, msdos-long-file-names):
* dos-w32.el (default-printer-name): Declare as functions.
author | Dan Nicolaescu <dann@ics.uci.edu> |
---|---|
date | Wed, 21 Nov 2007 03:06:01 +0000 |
parents | 84cf1e2214c5 |
children | 6888fd3398e8 |
line wrap: on
line source
;;; eudcb-mab.el --- Emacs Unified Directory Client - AddressBook backend ;; Copyright (C) 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: John Wiegley <johnw@newartisans.com> ;; Maintainer: FSF ;; Keywords: comm ;; This file is part of GNU Emacs. ;; This program is free software; you can redistribute it and/or ;; modify it under the terms of the GNU General Public License as ;; published by the Free Software Foundation; either version 3, or (at ;; your option) any later version. ;; This program is distributed in the hope that it will be useful, but ;; WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ;; General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with GNU Emacs; see the file COPYING. If not, write to the ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ;; Boston, MA 02110-1301, USA. ;;; Commentary: ;; This library provides an interface to use the Mac's AddressBook, ;; by way of the "contacts" command-line utility which can be found ;; by searching on the Net. ;;; Code: (require 'eudc) (require 'executable) ;;{{{ Internal cooking (defvar eudc-mab-conversion-alist nil) (defvar eudc-buffer-time nil) (defvar eudc-contacts-file "~/Library/Application Support/AddressBook/AddressBook.data") (eudc-protocol-set 'eudc-query-function 'eudc-mab-query-internal 'mab) (eudc-protocol-set 'eudc-list-attributes-function nil 'mab) (eudc-protocol-set 'eudc-mab-conversion-alist nil 'mab) (eudc-protocol-set 'eudc-protocol-has-default-query-attributes nil 'mab) (defun eudc-mab-query-internal (query &optional return-attrs) "Query MAB with QUERY. QUERY is a list of cons cells (ATTR . VALUE) where ATTRs should be valid MAB attribute names. RETURN-ATTRS is a list of attributes to return, defaulting to `eudc-default-return-attributes'." (let ((fmt-string "%ln:%fn:%p:%e") (mab-buffer (get-buffer-create " *mab contacts*")) (modified (nth 5 (file-attributes eudc-contacts-file))) result) (with-current-buffer mab-buffer (make-local-variable 'eudc-buffer-time) (goto-char (point-min)) (when (or (eobp) (time-less-p eudc-buffer-time modified)) (erase-buffer) (call-process (executable-find "contacts") nil t nil "-H" "-l" "-f" fmt-string) (setq eudc-buffer-time modified)) (goto-char (point-min)) (while (not (eobp)) (let* ((args (split-string (buffer-substring (point) (line-end-position)) "\\s-*:\\s-*")) (lastname (nth 0 args)) (firstname (nth 1 args)) (phone (nth 2 args)) (mail (nth 3 args)) (matched t)) (if (string-match "\\s-+\\'" mail) (setq mail (replace-match "" nil nil mail))) (dolist (term query) (cond ((eq (car term) 'name) (unless (string-match (cdr term) (concat firstname " " lastname)) (setq matched nil))) ((eq (car term) 'email) (unless (string= (cdr term) mail) (setq matched nil))) ((eq (car term) 'phone)))) (when matched (setq result (cons `((firstname . ,firstname) (lastname . ,lastname) (name . ,(concat firstname " " lastname)) (phone . ,phone) (email . ,mail)) result)))) (forward-line))) (if (null return-attrs) result (let (eudc-result) (dolist (entry result) (let (entry-attrs abort) (dolist (attr entry) (when (memq (car attr) return-attrs) (if (= (length (cdr attr)) 0) (setq abort t) (setq entry-attrs (cons attr entry-attrs))))) (if (and entry-attrs (not abort)) (setq eudc-result (cons entry-attrs eudc-result))))) eudc-result)))) ;;}}} ;;{{{ High-level interfaces (interactive functions) (defun eudc-mab-set-server (dummy) "Set the EUDC server to MAB." (interactive) (eudc-set-server dummy 'mab) (message "MAB server selected")) ;;}}} (eudc-register-protocol 'mab) (provide 'eudcb-mab) ;; arch-tag: 4bef8e65-f109-47c7-91b9-8a6ea3ed7bb1 ;;; eudcb-mab.el ends here