12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058 |
- \input texinfo.tex
- @c %**start of header
- @setfilename ../../info/eudc.info
- @settitle Emacs Unified Directory Client (EUDC) Manual
- @include docstyle.texi
- @afourpaper
- @syncodeindex fn cp
- @syncodeindex vr cp
- @c %**end of header
- @copying
- This file documents EUDC version 1.40.0.
- EUDC is the Emacs Unified Directory Client, a common interface to
- directory servers and contact information.
- Copyright @copyright{} 1998, 2000--2016 Free Software Foundation, Inc.
- @quotation
- Permission is granted to copy, distribute and/or modify this document
- under the terms of the GNU Free Documentation License, Version 1.3 or
- any later version published by the Free Software Foundation; with no
- Invariant Sections, with the Front-Cover Texts being ``A GNU Manual'',
- and with the Back-Cover Texts as in (a) below. A copy of the license
- is included in the section entitled ``GNU Free Documentation License''.
- (a) The FSF's Back-Cover Text is: ``You have the freedom to copy and
- modify this GNU manual.''
- @end quotation
- @end copying
- @dircategory Emacs network features
- @direntry
- * EUDC: (eudc). Emacs client for directory servers (LDAP, BBDB).
- @end direntry
- @footnotestyle end
- @titlepage
- @title EUDC Manual
- @subtitle The Emacs Unified Directory Client
- @author by Oscar Figueiredo
- @code{1.40.0}
- @page
- @vskip 0pt plus 1fill
- @insertcopying
- @end titlepage
- @contents
- @ifnottex
- @node Top
- @top Emacs Unified Directory Client
- @insertcopying
- @end ifnottex
- @menu
- * Overview:: Summary of EUDC features
- * Installation:: How to install EUDC
- * Usage:: The various usage possibilities explained
- * Credits:: Who's done what
- * GNU Free Documentation License:: The license for this documentation.
- * Index::
- @end menu
- @node Overview
- @chapter Overview
- EUDC, the @dfn{Emacs Unified Directory Client}, provides a common user
- interface to access directory servers using different directory
- protocols.
- Currently supported back-ends are:
- @itemize @bullet
- @item
- LDAP, Lightweight Directory Access Protocol
- @item
- BBDB, Big Brother's Insidious Database
- @end itemize
- The main features of the EUDC interface are:
- @itemize @bullet
- @item
- Queries using a customizable form
- @item
- Inline query expansion (for instance you can expand a name
- to an email address in a mail message buffer using a server as an
- address book)
- @item
- Multiple servers can be tried in turn until a match is found for an
- inline query
- @item
- Fast minibuffer queries for email addresses and phone numbers
- @item
- Interface to BBDB to let you insert server records into your own BBDB database
- (@pxref{Top,,BBDB,bbdb,BBDB Manual})
- @end itemize
- @menu
- * LDAP:: What is LDAP ?
- * BBDB:: What is BBDB ?
- @end menu
- @node LDAP
- @section LDAP
- LDAP, @dfn{the Lightweight Directory Access Protocol}, is a communication
- protocol for directory applications defined in RFC 1777.
- Quoted from RFC 1777:
- @quotation
- [LDAP] is designed to provide access to the X.500 Directory while not
- incurring the resource requirements of the Directory Access Protocol
- (DAP). This protocol is specifically targeted at simple management
- applications and browser applications that provide simple read/write
- interactive access to the X.500 Directory, and is intended to be a
- complement to the DAP itself.
- @end quotation
- LDAP servers usually store (but are not limited to) information about
- people such as their name, phone number, email address, office
- location, etc@enddots{} More information about LDAP can be found at
- @url{http://www.openldap.org/}.
- EUDC requires external support to access LDAP directory servers
- (@pxref{LDAP Configuration})
- @node BBDB
- @section BBDB
- BBDB is the @dfn{Big Brother's Insidious Database}, a package for Emacs
- originally written by Jamie Zawinski which provides rolodex-like
- database functionality featuring tight integration with the Emacs mail
- and news readers.
- It is often used as an enhanced email address book.
- EUDC considers BBDB as a directory server back end just like LDAP,
- though BBDB has no client/server protocol and thus always resides
- locally on your machine. The point in this is not to offer an
- alternate way to query your BBDB database (BBDB itself provides much
- more flexible ways to do that), but rather to offer an interface to
- your local directory that is consistent with the interface to external
- LDAP directories. This is particularly interesting when performing
- queries on multiple servers.
- EUDC also offers a means to insert results from directory queries into
- your own local BBDB (@pxref{Creating BBDB Records})
- @node Installation
- @chapter Installation
- Add the following to your @file{.emacs} init file:
- @lisp
- (require 'eudc)
- @end lisp
- This will install EUDC at startup.
- After installing EUDC you will find (the next time you launch Emacs) a
- new @code{Directory Search} submenu in the @samp{Tools} menu that will
- give you access to EUDC.
- You may also find it useful to add the following to your @file{.emacs}
- initialization file to add a shortcut for email address expansion in
- email composition buffers (@pxref{Inline Query Expansion})
- @lisp
- (eval-after-load
- "message"
- '(define-key message-mode-map [(control ?c) (tab)] 'eudc-expand-inline))
- (eval-after-load
- "sendmail"
- '(define-key mail-mode-map [(control ?c) (tab)] 'eudc-expand-inline))
- @end lisp
- @menu
- * LDAP Configuration:: EUDC needs external support for LDAP
- @end menu
- @node LDAP Configuration
- @section LDAP Configuration
- LDAP support is added by means of @file{ldap.el}, which is part of
- Emacs. @file{ldap.el} needs an external program called
- @command{ldapsearch}, available as part of OpenLDAP
- (@url{http://www.openldap.org/}). The configurations in this section
- were tested with OpenLDAP 2.4.23.
- Most servers use LDAP-over-SSL these days; the examples here reflect
- that. The other possibilities are:
- @vindex ldap-host-parameters-alist
- @vindex ldap-ldapsearch-args
- @itemize @bullet
- @item
- Servers that do not require authentication or that do not encrypt
- authentication traffic.
- Include @code{auth simple} in @code{ldap-host-parameters-alist}, which
- causes the @code{-x} option to be passed to @command{ldapsearch}.
- @item
- Servers that require SASL authentication.
- Pass any required extra options to @command{ldapsearch} using
- @code{ldap-ldapsearch-args}.
- @end itemize
- The following examples use a base of
- @code{ou=people,dc=gnu,dc=org} and the host name
- @code{ldap.gnu.org}, a server that supports LDAP-over-SSL (the
- @code{ldaps} protocol, with default port @code{636}) and which
- requires authentication by the user @code{emacsuser} with password
- @code{s3cr3t}.
- These configurations are meant to be self-contained; that is, each
- provides everything required for sensible TAB-completion of email
- fields. BBDB lookups are attempted first; if a matching BBDB entry is
- found then EUDC will not attempt any LDAP lookups.
- Wildcard LDAP lookups are supported using the @code{*} character. For
- example, attempting to TAB-complete the following:
- @example
- To: * Smith
- @end example
- @noindent
- will return all LDAP entries with surnames that begin with
- @code{Smith}. In every LDAP query it makes, EUDC implicitly appends
- the wildcard character to the end of the last word.
- @menu
- * Emacs-only Configuration:: Configure with @file{.emacs}
- * External Configuration:: Configure with @file{/etc/openldap/ldap.conf}
- * Troubleshooting:: Debug @command{ldapsearch} failures
- @end menu
- @node Emacs-only Configuration
- @subsection Emacs-only Configuration
- Emacs can pass most required configuration options via the
- @command{ldapsearch} command-line. One exception is certificate
- configuration for LDAP-over-SSL, which must be specified in
- @file{/etc/openldap/ldap.conf}. On systems that provide such
- certificates as part of the @code{OpenLDAP} installation, this can be
- as simple as one line:
- @example
- TLS_CACERTDIR /etc/openldap/certs
- @end example
- In @file{.emacs}, these expressions suffice to configure EUDC for
- LDAP:
- @vindex message-mode-map
- @findex eudc-expand-inline
- @vindex eudc-server-hotlist
- @vindex ldap-host-parameters-alist
- @lisp
- (eval-after-load "message"
- '(define-key message-mode-map (kbd "TAB") 'eudc-expand-inline))
- (customize-set-variable 'eudc-server-hotlist
- '(("" . bbdb)
- ("ldaps://ldap.gnu.org" . ldap)))
- (customize-set-variable 'ldap-host-parameters-alist
- '(("ldaps://ldap.gnu.org"
- base "ou=people,dc=gnu,dc=org"
- binddn "gnu\\emacsuser"
- passwd ldap-password-read)))
- @end lisp
- @findex ldap-password-read
- @vindex passwd
- @vindex password-cache
- @vindex password-cache-expiry
- @findex password-reset
- Specifying the function @code{ldap-password-read} for @code{passwd}
- will cause Emacs to prompt interactively for the password. The
- password will then be validated and cached, unless
- @code{password-cache} is nil. You can customize
- @code{password-cache-expiry} to control the duration for which the
- password is cached. If you want to clear the cache, call
- @code{password-reset}.
- @node External Configuration
- @subsection External Configuration
- Your system may already be configured for a default LDAP server. For
- example, @file{/etc/openldap/ldap.conf} might contain:
- @example
- BASE ou=people,dc=gnu,dc=org
- URI ldaps://ldap.gnu.org
- TLS_CACERTDIR /etc/openldap/certs
- @end example
- @cindex bind distinguished name
- @cindex binddn
- Authentication requires a password, and a @dfn{bind distinguished name
- (binddn)} representing the user, in this case,
- @code{gnu\emacsuser}. These can be specified in
- @file{~/.authinfo.gpg} with the following line:
- @example
- machine ldaps://ldap.gnu.org binddn gnu\emacsuser password s3cr3t
- @end example
- Then in the @file{.emacs} init file, these expressions suffice to
- configure EUDC for LDAP:
- @vindex message-mode-map
- @findex eudc-expand-inline
- @vindex eudc-server-hotlist
- @vindex ldap-host-parameters-alist
- @lisp
- (eval-after-load "message"
- '(define-key message-mode-map (kbd "TAB") 'eudc-expand-inline))
- (customize-set-variable 'eudc-server-hotlist
- '(("" . bbdb)
- ("ldaps://ldap.gnu.org" . ldap)))
- (customize-set-variable 'ldap-host-parameters-alist
- '(("ldaps://ldap.gnu.org"
- auth-source t)))
- @end lisp
- For this example where we only care about one server, the server name
- can be omitted in @file{~/.authinfo.gpg} and @file{.emacs}, in which
- case @command{ldapsearch} defaults to the host name in
- @file{/etc/openldap/ldap.conf}.
- The @file{~/.authinfo.gpg} line becomes:
- @example
- binddn gnu\emacsuser password s3cr3t
- @end example
- @noindent
- and the @file{.emacs} expressions become:
- @vindex message-mode-map
- @findex eudc-expand-inline
- @vindex eudc-server-hotlist
- @vindex ldap-host-parameters-alist
- @lisp
- (eval-after-load "message"
- '(define-key message-mode-map (kbd "TAB") 'eudc-expand-inline))
- (customize-set-variable 'eudc-server-hotlist
- '(("" . bbdb) ("" . ldap)))
- (customize-set-variable 'ldap-host-parameters-alist
- '(("" auth-source t)))
- @end lisp
- @node Troubleshooting
- @subsection Troubleshooting
- If @command{ldapsearch} exits with an error, you'll see a message like
- this in the @code{*Messages*} buffer (all on one line):
- @example
- ldap-search-internal: Failed ldapsearch invocation:
- ldapsearch "-Hldaps://ldap.gnu.org" "-bou=people,dc=gnu,dc=org"
- "-Dgnu\emacsuser" "-W" "-LL" "-tt" "(&(mail=name*))"
- "givenname" "sn" "mail"
- @end example
- The @command{ldapsearch} command is formatted such that it can be
- copied and pasted into a terminal. Set the @command{ldapsearch} debug
- level to 5 by appending @code{-d 5} to the command line.
- @node Usage
- @chapter Usage
- This chapter describes the usage of EUDC@. Most functions and
- customization options are available through the @samp{Directory Search}
- submenu of the @samp{Tools} submenu.
- @menu
- * Querying Servers:: How queries are performed and handled
- * Query Form:: How to use and customize the query form
- * Display of Query Results:: Controlling how query results are presented
- * Inline Query Expansion:: How to use and customize inline queries
- * The Server Hotlist:: How to use and manage the server hotlist
- * Multi-server Queries:: How to query multiple servers successively
- * Creating BBDB Records:: How to insert query results into your BBDB
- * Server/Protocol Locals:: Customizing on a per server/protocol basis
- @end menu
- @node Querying Servers
- @section Querying Servers
- EUDC's basic functionality is to let you query a directory server and
- return the results back to you. There are several things you may want
- to customize in this process.
- @menu
- * Selecting a Server:: The first thing to do
- * Return Attributes:: Configuring what the server should return
- * Duplicate Attributes:: What to do when records have duplicate attributes
- @end menu
- @node Selecting a Server
- @subsection Selecting a Server
- Before doing any query you will need to set the directory server. You
- need to specify the name of the host machine running the server software
- and the protocol to use. If you do not set the server in any fashion,
- EUDC will ask you for one when you make your first query.
- You can set the server by selecting one from your hotlist of servers
- (@pxref{The Server Hotlist}) available in the @samp{Server} submenu or
- by selecting @samp{New Server} in that same menu.
- LDAP servers generally require some configuration before you can perform
- queries on them. In particular, the @dfn{search base} must be
- configured. If the server you select has no configured search base then
- EUDC will propose you to configure it at this point. A customization
- buffer will be displayed where you can edit the search base and other
- parameters for the server.
- @defvar eudc-server
- The name or IP address of the remote directory server. A TCP port number
- may be specified by appending a colon and a number to the name of the
- server. You will not need this unless your server runs on a port other
- than the default (which depends on the protocol).
- If the directory server resides on your own computer (which is the case
- if you use the BBDB back end) then @samp{localhost} is a reasonable value but
- it will be ignored anyway.
- @end defvar
- @defvar eudc-protocol
- The directory protocol to use to query the server. Currently supported
- protocols in this version of EUDC are @code{ldap} and @code{bbdb}.
- @end defvar
- @deffn Command eudc-set-server
- This command accessible from @samp{New Server} submenu lets you specify a
- new directory server and protocol.
- @end deffn
- @node Return Attributes
- @subsection Return Attributes
- Directory servers may be configured to return a default set of
- attributes for each record matching a query if the query specifies none.
- The variable @code{eudc-default-return-attributes} controls the return
- attributes you want to see, if different from the server defaults.
- @defvar eudc-default-return-attributes
- A list of the default attributes to extract from directory entries. If
- set to the symbol @code{all} then all available attributes are
- returned. A value of @code{nil}, the default, means to return the
- default attributes as configured in the server.
- @end defvar
- The server may return several matching records to a query. Some of the
- records may however not contain all the attributes you requested. You can
- discard those records.
- @defopt eudc-strict-return-matches
- If non-@code{nil}, entries that do not contain all the requested return
- attributes are ignored. Default is @code{t}.
- @end defopt
- @node Duplicate Attributes
- @subsection Duplicate Attributes
- Directory standards may authorize different instances of the same
- attribute in a record. For instance the record of a person may contain
- several email fields containing different email addresses, in which
- case EUDC will consider the attribute duplicated.
- EUDC has several methods to deal with duplicated attributes. The
- available methods are:
- @table @code
- @item list
- Makes a list with the different values of the duplicate attribute. The
- record is returned with only one instance of the attribute with a list
- of all the different values as a value. This is the default method that
- is used to handle duplicate fields for which no other method has been
- specified.
- @item first
- Discards all the duplicate values of the field keeping only the first
- one.
- @item concat
- Concatenates the different values using a newline as a separator. The
- record keeps only one instance of the field the value of which is a
- single multi-line string.
- @item duplicate
- Duplicates the whole record into as many instances as there are different
- values for the field. This is the default for the email field. Thus a
- record containing 3 different email addresses is duplicated into three
- different records each having a single email address. This is
- particularly useful in combination with @code{select} as the method to
- handle multiple matches in inline expansion queries (@pxref{Inline Query
- Expansion}) because you are presented with the 3 addresses in a
- selection buffer
- @end table
- Because a method may not be applicable to all fields, the variable
- @code{eudc-duplicate-attribute-handling-method} lets you specify either a
- default method for all fields or a method for each individual field.
- @defvar eudc-duplicate-attribute-handling-method
- A method to handle entries containing duplicate attributes. This is
- either an alist of elements @code{(@var{attr} . @var{method})}, or a symbol
- @var{method}. The alist form of the variable associates a method to an
- individual attribute name; the second form specifies a method applicable
- to all attribute names. Available methods are: @code{list},
- @code{first}, @code{concat}, and @code{duplicate} (see above). The default is
- @code{list}.
- @end defvar
- @node Query Form
- @section Query Form
- The simplest way to query your directory server is to use the query
- form. You display the query form with the @samp{Query with Form} menu
- item or by invoking the command @kbd{M-x eudc-query-form}. The attribute
- names presented in this form are defined by the
- @code{eudc-query-form-attributes} variable (unless a non-@code{nil}
- argument is supplied to @code{eudc-query-form}).
- Since the different directory protocols to which EUDC interfaces may
- use different names for equivalent attributes, EUDC defines its own set
- of attribute names and a mapping between these names and their
- protocol-specific equivalent through the variable
- @code{eudc-protocol-attributes-translation-alist}. Names currently
- defined by EUDC are @code{name}, @code{firstname}, @code{email} and
- @code{phone}.
- @defvar eudc-query-form-attributes
- @findex eudc-get-attribute-list
- A list of attributes presented in the query form. Attribute names in
- this list should be either EUDC attribute names or valid attribute
- names. You can get a list of valid attribute names for the current
- protocol with the @samp{List Valid Attribute Names} menu item or the
- @kbd{M-x eudc-get-attribute-list} command. Defaults to @code{name},
- @code{email} and @code{phone}.
- @end defvar
- @deffn Command eudc-query-form get-fields-from-server
- Display a form to query the directory server. If given a non-@code{nil}
- argument the function first queries the server for the existing fields
- and displays a corresponding form. Not all protocols may support a
- non-@code{nil} argument here.
- @end deffn
- Since the names of the fields may not be explicit enough or adapted to
- be directly displayed as prompt strings in the form, the variable
- @code{eudc-user-attribute-names-alist} lets you define more explicit
- names for directory attribute names. This variable is ignored if
- @code{eudc-use-raw-directory-names} is non-@code{nil}.
- @defvar eudc-user-attribute-names-alist
- This is an alist of user-defined names for the directory attributes used in
- query/response forms. Prompt strings for attributes that are not in this
- alist are derived by splitting the attribute name at underscores and
- capitalizing the individual words.
- @end defvar
- @defvar eudc-use-raw-directory-names
- If non-@code{nil}, use attributes names as defined in the directory.
- Otherwise, directory query/response forms display the user attribute
- names defined in @code{eudc-user-attribute-names-alist}.
- @end defvar
- @node Display of Query Results
- @section Display of Query Results
- Upon successful completion of a form query, EUDC will display a buffer
- containing the results of the query.
- The fields that are returned for each record
- are controlled by @code{eudc-default-return-attributes} (@pxref{Return
- Attributes}).
- The display of each individual field can be performed by an arbitrary
- function which allows specific processing for binary values, such as
- images or audio samples, as well as values with semantics, such as
- URLs.
- @defvar eudc-attribute-display-method-alist
- An alist specifying methods to display attribute values. Each member of
- the list is of the form @code{(@var{name} . @var{func})} where
- @var{name} is a lowercased string naming a directory attribute
- (translated according to @code{eudc-user-attribute-names-alist} if
- @code{eudc-use-raw-directory-names} is non-@code{nil}) and @var{func} a
- function that will be passed the corresponding attribute values for
- display.
- @end defvar
- This variable has protocol-local definitions (see @pxref{Server/Protocol
- Locals}). For instance, it is defined as follows for LDAP:
- @lisp
- (eudc-protocol-set 'eudc-attribute-display-method-alist
- '(("jpegphoto" . eudc-display-jpeg-inline)
- ("labeledurl" . eudc-display-url)
- ("audio" . eudc-display-sound)
- ("labeledurl" . eudc-display-url)
- ("url" . eudc-display-url))
- 'ldap)
- @end lisp
- EUDC provides a set of built-in functions to display binary value types:
- @defun eudc-display-generic-binary data
- Display a button for unidentified binary @var{data}.
- @end defun
- @defun eudc-display-url url
- Display URL and make it clickable.
- @end defun
- @defun eudc-display-sound data
- Display a button to play the sound @var{data}.
- @end defun
- @defun eudc-display-jpeg-inline data
- Display the JPEG @var{data} inline at point if possible.
- @end defun
- @defun eudc-display-jpeg-as-button data
- Display a button for the JPEG @var{data}.
- @end defun
- Right-clicking on a binary value button pops up a contextual menu with
- options to process the value. Among these are saving the attribute
- value to a file or sending it to an external viewer command. External
- viewers should expect the value on their standard input and should
- display it or perform arbitrary processing on it. Messages sent to
- standard output are discarded. External viewers are listed in the
- variable @code{eudc-external-viewers} which you can customize.
- @defvar eudc-external-viewers
- This is a list of viewer program specifications. Each specification is
- a list whose first element is a string naming the viewer for unique
- identification, the second element is the executable program which
- should be invoked and the following elements are arguments that should
- be passed to the program.
- @end defvar
- @node Inline Query Expansion
- @section Inline Query Expansion
- Inline query expansion is a powerful method to get completion from your
- directory server. The most common usage is for expanding names to email
- addresses in mail message buffers. The expansion is performed by the
- command @kbd{M-x eudc-expand-inline} which is available from the
- @samp{Expand Inline Query} menu item but can also be conveniently
- bound to a key shortcut (@pxref{Installation}). The operation is
- controlled by the variables @code{eudc-inline-expansion-format},
- @code{eudc-inline-query-format},
- @code{eudc-expanding-overwrites-query} and
- @code{eudc-multiple-match-handling-method}.
- If the query fails for a server, other servers may be tried successively
- until one of them finds a match (@pxref{Multi-server Queries}).
- @deffn Command eudc-expand-inline replace-p
- Query the server and expand the query string before point. The query
- string consists of the buffer substring from the point back to the
- preceding comma, colon or beginning of
- line. @code{eudc-inline-query-format} controls how individual words
- are mapped onto directory attribute names. After querying the server
- for the given string, the expansion specified by
- @code{eudc-inline-expansion-format} is inserted in the buffer at
- point. If @var{replace-p} is @code{t} then this expansion replaces the
- query string in the buffer. If @code{eudc-expanding-overwrites-query}
- is non-@code{nil} then the meaning of @var{replace-p} is negated.
- @end deffn
- @defvar eudc-inline-query-format
- Format of an inline expansion query.
- This is actually a list of @var{format}s. A @var{format} is a list of
- one or more EUDC attribute names. A @var{format} applies if it contains
- as many attributes as individual words in the inline query string. If
- several @var{format}s apply then they are tried in order until a match
- is found. If @code{nil} all the words will be mapped onto the default
- server/protocol attribute name (generally @code{name}).
- For instance, use the following
- @lisp
- (setq eudc-inline-query-format '((name)
- (firstname)
- (firstname name)))
- @end lisp
- @noindent
- to indicate that single word expansion queries are to be considered as
- surnames and if no match is found then they should be tried as first
- names. Inline queries consisting of two words are considered as
- consisting of a first name followed by a surname. If the query consists
- of more than two words, then the first one is considered as the first
- name and the remaining words are all considered as surname constituents.
- @var{format}s are in fact not limited to EUDC attribute names, you can
- use server or protocol specific names in them. It may be safer if you
- do so, to set the variable @code{eudc-inline-query-format} in a protocol
- or server local fashion (see @pxref{Server/Protocol Locals}).
- For instance you could use the following to match up to three words
- against the @code{cn} attribute of LDAP servers:
- @lisp
- (eudc-protocol-set 'eudc-inline-query-format
- '((cn)
- (cn cn)
- (cn cn cn))
- 'ldap)
- @end lisp
- @end defvar
- @defvar eudc-inline-expansion-format
- This variable lets you control exactly what is inserted into the buffer
- upon an inline expansion request. It is a list whose first element is a
- string passed to @code{format}. Remaining elements are symbols
- corresponding to directory attribute names. The corresponding attribute
- values are passed as additional arguments to @code{format}. Default is
- @code{("%s" email)} but you may want to consider a value like @code{("%s
- <%s>" name email)}
- @end defvar
- @defvar eudc-multiple-match-handling-method
- This variable controls what to do when multiple entries match a query
- for an inline expansion. Possible values are:
- @table @code
- @item first
- The first match is considered as being the only one, the others are
- discarded.
- @item select
- A selection buffer pops up where you can choose a particular match. This
- is the default value of the variable.
- @item all
- The expansion uses all records successively
- @item abort
- An error is signaled. The expansion aborts.
- @end table
- Default is @code{select}
- @end defvar
- @node The Server Hotlist
- @section The Server Hotlist
- EUDC lets you maintain a list of frequently used servers so that you
- can easily switch from one to another. This hotlist appears in the
- @samp{Server} submenu. You select a server in this list by clicking on
- its name. You can add the current server to the list with the command
- @kbd{M-x eudc-bookmark-current-server}. The list is contained in the variable
- @code{eudc-server-hotlist} which is stored in and retrieved from the file
- designated by @code{eudc-options-file}. EUDC also provides a facility to
- edit the hotlist interactively (@pxref{The Hotlist Edit Buffer}).
- The hotlist is also used to make queries on multiple servers
- successively (@pxref{Multi-server Queries}). The order in which the
- servers are tried is the order they appear in the hotlist, therefore it
- is important to sort the hotlist appropriately.
- @deffn Command eudc-bookmark-server server
- Add @var{server} to the hotlist of servers
- @end deffn
- @deffn Command eudc-bookmark-current-server
- Add the current server to the hotlist of servers
- @end deffn
- @defvar eudc-options-file
- The name of a file where EUDC stores its internal variables
- (the hotlist and the current server). EUDC will try to load
- that file upon initialization so, if you choose a file name
- different from the defaults @file{~/.eudc-options}, be sure to set this
- variable to the appropriate value @emph{before} EUDC is itself
- loaded.
- @end defvar
- @menu
- * The Hotlist Edit Buffer:: An interactive hotlist editing facility
- @end menu
- @node The Hotlist Edit Buffer
- @subsection The Hotlist Edit Buffer
- The hotlist edit buffer offers a means to manage a list of frequently
- used servers. Commands are available in the context pop-up menu
- generally bound to the right mouse button. Those commands also have
- equivalent key bindings.
- @deffn Command eudc-hotlist-add-server
- Bound to @kbd{a}.
- Add a new server to the hotlist on the line after point
- @end deffn
- @deffn Command eudc-hotlist-delete-server
- Bound to @kbd{d}.
- Delete the server on the line point is on
- @end deffn
- @deffn Command eudc-hotlist-select-server
- Bound to @kbd{s}.
- Select the server the point is on as the current directory server for
- the next queries
- @end deffn
- @deffn Command eudc-hotlist-transpose-servers
- Bound to @kbd{t}.
- Bubble up the server the point is on to the top of the list
- @end deffn
- @deffn Command eudc-hotlist-quit-edit
- Bound to @kbd{q}.
- Save the changes and quit the hotlist edit buffer. Use @kbd{x} or
- @kbd{M-x kill-buffer} to exit without saving.
- @end deffn
- @node Multi-server Queries
- @section Multi-server Queries
- When using inline query expansion (@pxref{Inline Query Expansion}), EUDC
- can try to query successively a sequence of directory servers until one
- of them successfully finds a match for the query.
- @defvar eudc-inline-expansion-servers
- This variable controls which servers are tried and in which order when
- trying to perform an inline query. Possible values are:
- @table @code
- @item current-server
- Only the current directory server is tried
- @item hotlist
- The servers in the hotlist are tried in order until one finds a match
- for the query or @code{eudc-max-servers-to-query} is reached
- @item server-then-hotlist
- The current server then the servers in the hotlist are tried in the
- order they appear in the hotlist until one of them finds a match or
- @code{eudc-max-servers-to-query} is reached. This is the default.
- @end table
- @end defvar
- @defvar eudc-max-servers-to-query
- This variable indicates the maximum number of servers to query when
- performing a multi-server query. The default, @code{nil}, indicates
- that all available servers should be tried.
- @end defvar
- @node Creating BBDB Records
- @section Creating BBDB Records
- @findex eudc-insert-record-at-point-into-bbdb
- @findex eudc-try-bbdb-insert
- With EUDC, you can automatically create BBDB records
- (@pxref{Top,,BBDB,bbdb,BBDB Manual}) from records you get from a
- directory server. You do this by moving point to the appropriate
- record in a query result display buffer and invoking the command
- @kbd{M-x eudc-insert-record-at-point-into-bbdb} with the
- keyboard binding @kbd{b}@footnote{This key binding does not actually
- call @code{eudc-insert-record-at-point-into-bbdb} but uses
- @code{eudc-try-bbdb-insert} instead.}, or with the menu. EUDC
- cannot update an existing BBDB record and will signal an error if you
- try to insert a record matching an existing one.
- @findex eudc-batch-export-records-to-bbdb
- It is also possible to export to BBDB the whole batch of records
- contained in the directory query result with the command
- @kbd{M-x eudc-batch-export-records-to-bbdb}.
- Because directory systems may not enforce a strict record format, local
- server installations may use different attribute names and have
- different ways to organize the information. Furthermore BBDB has its own
- record structure. For these reasons converting a record from its
- external directory format to the BBDB format is a highly customizable
- process.
- @defvar eudc-bbdb-conversion-alist
- The value of this variable should be a symbol naming an alist defining a
- mapping between BBDB field names onto directory attribute names records.
- This is a protocol-local variable and is initialized upon protocol
- switch (@pxref{Server/Protocol Locals}). The alist is made of cells of the
- form @code{(@var{bbdb-field} . @var{spec-or-list})}.
- @var{bbdb-field} is the name of a field
- that must be defined in your BBDB environment (standard field names are
- @code{name}, @code{company}, @code{net}, @code{phone}, @code{address}
- and @code{notes}).
- @var{spec-or-list} is either a single mapping specification or a list of
- mapping specifications. Lists of mapping specifications are valid for
- the @code{phone} and @code{address} BBDB fields only. @var{spec}s are
- actually s-expressions which are evaluated as follows:
- @table @asis
- @item a string
- evaluates to itself
- @item a symbol
- evaluates to the symbol value. Symbols corresponding to directory
- attribute names present in the record evaluate to the value of the field
- in the record
- @item a form
- is evaluated as a function. The argument list may contain attribute
- names which evaluate to the corresponding values in the record. The form
- evaluation should return something appropriate for the particular
- @var{bbdb-field} (see @code{bbdb-create-internal}).
- @code{eudc-bbdbify-phone} and @code{eudc-bbdbify-address} are provided as
- convenience functions to parse phones and addresses.
- @end table
- @end defvar
- @defun eudc-bbdbify-phone phone location
- This is a convenience function provided for use in
- @code{eudc-bbdb-conversion-alist}. It parses @var{phone} into a vector
- compatible with @code{bbdb-create-internal}. @var{phone} is either a string
- supposedly containing a phone number or a list of such strings which are
- concatenated. @var{location} is used as the phone location for BBDB.
- @end defun
- @defun eudc-bbdbify-address addr location
- This is a convenience function provided for use in
- @code{eudc-bbdb-conversion-alist}. It parses @var{addr} into a vector
- compatible with @code{bbdb-create-internal}. @var{addr} should be an
- address string of no more than four lines or a list of lines. The last
- line is searched for the zip code, city and state name. @var{location}
- is used as the phone location for BBDB.
- @end defun
- Note that only a subset of the attributes you selected with
- @code{eudc-default-return-attributes} and that are actually displayed may
- actually be inserted as part of the newly created BBDB record.
- @node Server/Protocol Locals
- @section Server/Protocol Locals
- EUDC can be customized independently for each server or directory
- protocol. All variables can be given local bindings that are activated
- when a particular server and/or protocol becomes active. This is much
- like buffer-local bindings but on a per server or per protocol basis.
- @menu
- * Manipulating local bindings:: Functions to set and query local bindings
- @end menu
- @node Manipulating local bindings
- @subsection Manipulating local bindings
- EUDC offers functions that let you set and query variables on a per
- server or per protocol basis.
- The following predicates allow you to test the existence of
- server/protocol local bindings for a particular variable.
- @defun eudc-server-local-variable-p var
- Return non-@code{nil} if @var{var} has server-local bindings
- @end defun
- @defun eudc-protocol-local-variable-p var
- Return non-@code{nil} if @var{var} has protocol-local bindings
- @end defun
- The following functions allow you to set the value of a variable with
- various degrees of locality.
- @defun eudc-default-set var val
- Set the EUDC default value of @var{var} to @var{val}.
- The current binding of @var{var} (if local to the current server or
- protocol) is not changed.
- @end defun
- @defun eudc-protocol-set var val &optional protocol
- Set the binding of @var{var} local to @var{protocol} to @var{val}. If
- omitted, @var{protocol} defaults to the current value of
- @code{eudc-protocol}. The current binding of @var{var} is changed only
- if @var{protocol} is omitted.
- @end defun
- @defun eudc-server-set var val &optional server
- Set the binding of @var{var} local to @var{server} to @var{val}. If
- omitted, @var{server} defaults to the current value of
- @code{eudc-server}. The current binding of @var{var} is changed only if
- @var{server} is omitted.
- @end defun
- @defun eudc-set var val
- Set the most local (server, protocol or default) binding of @var{var} to
- @var{val}. The current binding of @var{var} is also set to @var{val}.
- @end defun
- The following variables allow you to query the various bindings of a
- variable (local or non-local).
- @defun eudc-variable-default-value var
- Return the default binding of @var{var} (outside of a particular server
- or protocol local binding).
- Return @code{unbound} if @var{var} has no EUDC default value.
- @end defun
- @defun eudc-variable-protocol-value var &optional protocol
- Return the value of @var{var} local to @var{protocol}. Return
- @code{unbound} if @var{var} has no value local to @var{protocol}.
- @var{protocol} defaults to @code{eudc-protocol}.
- @end defun
- @defun eudc-variable-server-value var [server]
- Return the value of @var{var} local to @var{server}.
- Return @code{unbound} if @var{var} has no value local to @var{server}.
- @var{server} defaults to @code{eudc-server}.
- @end defun
- Changing a protocol-local or server-local value of a variable has no
- effect on its current value. The following command is used to
- synchronize the current values of variables with their local values
- given the current @code{eudc-server} and @code{eudc-protocol}:
- @defun eudc-update-local-variables
- Update all EUDC variables according to their local settings.
- @end defun
- @node Credits
- @chapter Credits
- EUDC was written by Oscar Figueiredo based on @file{ph.el} by the
- same author.
- Thanks to Soren Dayton for his suggestions, his enthusiasm and his help
- in testing and proofreading the code and docs of @file{ph.el}.
- @node GNU Free Documentation License
- @appendix GNU Free Documentation License
- @include doclicense.texi
- @node Index
- @unnumbered Index
- @printindex cp
- @bye
|