diff man/ph.texi @ 173:8eaf7971accc r20-3b13

Import from CVS: tag r20-3b13
author cvs
date Mon, 13 Aug 2007 09:49:09 +0200
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/man/ph.texi	Mon Aug 13 09:49:09 2007 +0200
@@ -0,0 +1,574 @@
+\input texinfo.tex
+@c %**start of header
+@setfilename ph.info
+@settitle ph.el Manual
+@iftex
+@afourpaper
+@end iftex
+@c %**end of header
+
+@footnotestyle end
+
+@ifinfo
+This file documents ph.el v2.6
+
+ph.el is part of GNU Emacs.
+
+ph.el is an E-Lisp client interface to the CCSO white pages directory system
+also known as PH/QI
+
+Copyright @copyright{} 1997 Free Software Foundation, Inc.
+
+Permission is granted to make and distribute verbatim
+copies of this manual provided the copyright notice and
+this permission notice are preserved on all copies.
+     
+@ignore
+Permission is granted to process this file through TeX
+and print the results, provided the printed document
+carries a copying permission notice identical to this
+one except for the removal of this paragraph (this
+paragraph not being relevant to the printed manual).
+@end ignore
+
+Permission is granted to copy and distribute modified
+versions of this manual under the conditions for
+verbatim copying and the terms of the ``GNU General
+Public License'', and provided that the entire
+resulting derived work is distributed under the terms
+of a permission notice identical to this one.
+     
+Permission is granted to copy and distribute
+translations of this manual into another language,
+under the above conditions for modified versions,
+except that this permission notice may be stated in a
+translation approved by the Free Software Foundation.
+@end ifinfo
+
+@titlepage
+@title{ph Manual}
+@subtitle{An Emacs client to the CCSO Nameserver}
+@author by Oscar Figueiredo
+@code{1.3}
+
+@page
+@vskip 0pt plus 1fill
+     Copyright @copyright{} 1997 Free Software Foundation, Inc.
+
+     Permission is granted to make and distribute verbatim
+     copies of this manual provided the copyright notice and
+     this permission notice are preserved on all copies.
+     
+     @ignore
+     Permission is granted to process this file through TeX
+     and print the results, provided the printed document
+     carries a copying permission notice identical to this
+     one except for the removal of this paragraph (this
+     paragraph not being relevant to the printed manual).
+     
+     @end ignore
+
+     Permission is granted to copy and distribute modified
+     versions of this manual under the conditions for
+     verbatim copying and the terms of the ``GNU General 
+     Public License'', and provided that the entire
+     resulting derived work is distributed under the terms
+     of a permission notice identical to this one.
+     
+     Permission is granted to copy and distribute
+     translations of this manual into another language,
+     under the above conditions for modified versions,
+     except that this permission notice may be stated in a
+     translation approved by the Free Software Foundation.
+@end titlepage
+
+@ifinfo
+@node     Top, Introduction, (dir), (dir)
+@comment  node-name,  next,         previous, up
+
+
+This manual documents ph.el v2.6, an E-lisp client interface to the CCSO
+PH/QI directory system.
+@end ifinfo
+
+@menu
+* Introduction::                General info about the PH/QI directory system
+* Installation::                How to install the package
+* Usage::                       The various usage possibilities explained
+* Credits::                     Who's done what
+* Variables Index::             
+@end menu
+
+
+
+
+
+@node     Introduction, Installation, Top, Top
+@comment  node-name,   next,  previous,  up
+@chapter Introduction
+
+The Central Computing Services Office (CCSO) of the University of
+Illinois at Urbana Champaign (UIUC) created and freely distributes a
+directory system that is currently in use in more than 300 organizations
+around the world. The system records information about people such as
+their address, phone number, e-mail, academic information or any other
+details it was configured to.
+
+The system consists of two parts: a database server traditionally called
+@code{qi} and a command-line client called
+@code{ph}. @file{ftp://uiarchive.cso.uiuc.edu/pub/packages/ph} is the
+main distribution site.
+@file{http://www.uiuc.edu/cgi-bin/ph/lookup?Query=.} provides a listing
+of the QI servers in activity.
+
+@code{ph.el} provides a client interface to this directory system
+letting you:
+
+@itemize @bullet
+@item 
+query the server through a customizable form
+@item
+expand inline queries in buffers (for instance you can expand a name
+to a mailing address in a mail message buffer)
+@item
+insert server records into your own BBDB database
+(@pxref{Top,,BBDB,bbdb,BBDB Manual})
+@end itemize
+
+The original command-line @code{ph} client that comes with the
+@code{ph/qi} distribution provides additional features like the
+possibility to communicate with the server in login mode which makes it
+possible to change records in the database. This is not implemented in
+this e-lisp client.
+
+@node Installation, Usage, Introduction, Top
+@comment  node-name,  next,  previous,  up
+@chapter Installation
+
+If you are using @code{ph} from your GNU Emacs or XEmacs distribution
+you can skip this section.
+
+@code{ph} should work right out of the box with XEmacs 19.15 and above. 
+It will not work with versions of XEmacs below.
+
+@code{ph} will work with Emacs 19.34 provided you have the @code{custom}
+and @code{widget} libraries by Per Abrahmsen installed. You can get them 
+from @file{http://www.dina.kvl.dk/~abraham/custom/}
+
+When installing @code{ph} yourself you should move @code{ph.el} to a
+proper directory in your @code{load-path} and byte-compile it (see the
+section on byte-compilation in your users manual if you do not know what 
+that means). Install @code{ph.info} into a directory where the info
+system can find it or update your @code{Info-default-directory-list}
+variable. 
+
+Then you can add the following into your @file{.emacs} startup file:
+@lisp
+(require 'ph)
+(eval-after-load 
+ "message"
+ '(define-key message-mode-map [(control ?c) (tab)] 'ph-expand-inline))
+(eval-after-load 
+ "mail"
+ '(define-key mail-mode-map [(control ?c) (tab)] 'ph-expand-inline))
+@end lisp
+
+Upon starting a new session you will find a new @code{Ph} sub-menu in the 
+@code{Tools} menu that will let you access all the interesting @code{ph} 
+functions.
+
+
+
+
+
+
+
+@node Usage, Credits, Installation, Top
+@comment  node-name,  next,  previous,  up
+@chapter Usage
+
+This chapter describes the usage of @code{ph.el}. Most functions are
+available through the @code{Ph} sub-menu of the @code{Tools} sub-menu.
+
+@menu
+* Querying QI Servers::         How queries are performed and handled 
+* Query Form::                  How to use and customize the query form
+* Inline Query Expansion::      How to use and customize inline queries
+* Creating BBDB Records::       How to insert query results into your BBDB
+* The Server Hotlist::          How to use and manage the server hotlist
+@end menu
+
+
+@node Querying QI Servers, Query Form, Usage, Usage
+@comment  node-name,  next,  previous,  up
+@section Querying Servers
+
+@code{ph} basic functionality is to let you query a QI 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 Fields::               How to configure query results
+* Handling Duplicate Fields::   What to do when records have duplicate fields
+@end menu
+
+@node Selecting a Server, Return Fields, Querying QI Servers, Querying QI Servers
+@subsection Selecting a Server
+
+Before doing any query you will need to set the query server, this is
+the name of the host machine running the @code{qi} software. If you do
+not set it in any fashion, @code{ph} will ask you for one when you
+make your first query.
+
+@defvar ph-server
+The name or IP address of the CCSO (PH/QI) server. A 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 different port 
+than the usual 105.
+@end defvar
+
+@node Return Fields, Handling Duplicate Fields, Selecting a Server, Querying QI Servers
+@subsection Return Fields
+
+@code{qi} servers are configured to return a default set of fields for
+each record matching a query if the query specifies none. The variable
+@code{ph-default-return-fields} controls the return fields you want for
+your queries.
+
+@defvar ph-default-return-fields
+A list of the default fields to extract from CCSO entries.  If it
+contains @code{all} then all available fields are returned. @code{nil}
+means return the default fields as configured in the server. Default is
+@code{nil}
+@end defvar
+
+The server may return several matching records to a query. Some of the
+records may however not contain all the fields you requested. You can
+chose to discard those records.
+
+@defopt ph-strict-return-matches
+If non-@code{nil}, entries that do not contain all the requested return
+fields are ignored.  Default is @code{t}.
+@end defopt
+
+@node Handling Duplicate Fields,  , Return Fields, Querying QI Servers
+@subsection Handling Duplicate Fields
+
+@code{qi} authorizes records to have different instances of the same
+field. For instance the record of a person may contain several e-mail
+fields containing different e-mail addresses. This is difficult to
+distinguish from fields having multi-line values such as the postal
+address that may contain a line for the street and another one for the
+zip code and city name. In both cases, @code{ph} considers the field be
+duplicated. 
+
+@code{ph} has several methods to deal with duplicate fields. The
+available methods are:
+
+@table @code
+@item list
+Makes a list with the different values of the duplicate field. The
+record keeps only one instance of the field the value of which is a list
+of all the different values. 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 @code{\n} 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 e-mail field. Thus a
+record containing 3 different e-mail addresses is duplicated into three
+different records each having a single e-mail 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{ph-duplicate-fields-handling-method} lets you specify either a
+default method for all fields or a method for each individual field.
+
+@defvar ph-duplicate-fields-handling-method
+A method to handle entries containing duplicate fields.  This is either
+an alist (@var{field} . @var{method}) or a symbol @var{method}.  The
+alist form of the variable associates a method to an individual field,
+the second form specifies a method applicable to all fields. Available
+methods are: @code{list}, @code{first}, @code{concat}, @code{duplicate}
+duplicates the entire entry into as many instances as different values.
+Defaults to @code{list}.
+@end defvar
+
+
+
+@node Query Form, Inline Query Expansion, Querying QI Servers, Usage
+@comment  node-name,  next,  previous,  up
+@section Query Form
+
+The simplest way to query your directory server is to use the query
+form. You display the query form with the @code{Query Form} menu item or
+by typing @kbd{M-x ph-query-form}. The fields presented in this form are
+defined by the @code{ph-form-fields} variable (unless a non-@code{nil}
+argument is supplied to @code{ph-query-form}).
+
+@defvar ph-form-fields
+A list of fields presented in the query form. You can get a list of
+valid field names with the @code{List Valid Field Names} menu item or
+@kbd{M-x ph-get-field-list}. Defaults to @code{name}, @code{email} and
+@code{phone}.
+@end defvar
+
+@deffn Command ph-query-form get-fields-from-server
+Display a form to query the CCSO PH/QI Nameserver.
+If given a non-nil argument the function first queries the  server 
+for the existing fields and displays a corresponding form.
+@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{ph-fieldname-formstring-alist} lets you define prompt strings for
+the various fields.
+
+@defvar ph-fieldname-formstring-alist
+This is an alist mapping CCSO database field names onto prompt strings
+used in query/response forms. Prompt strings for fields that are not in
+this alist are derived by replacing underscores with spaces and
+capitalizing the individual words.
+@end defvar
+
+Upon successful completion the command will display a buffer containing
+the results of the query. The fields that are returned for each record
+are controlled by @code{ph-default-return-fields} (@pxref{Return
+Fields}) 
+
+@node Inline Query Expansion, Creating BBDB Records, Query Form, Usage
+@comment  node-name,  next,  previous,  up
+@section Inline Query Expansion
+
+Instead of using a query form, you may prefer inline expansion. This is
+a powerful method to get completion from your directory server. The most
+common usage is for expanding names to e-mail addresses in mail message
+buffers. The expansion is performed by the command
+@code{ph-expand-inline}. The operation is controlled by the variables
+@code{ph-inline-expansion-format}, @code{ph-inline-query-format-list},
+@code{ph-expanding-overwrites-query} and
+@code{ph-multiple-match-handling-method}
+
+@deffn Command ph-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. If it consists of more than
+one word the variable @code{ph-inline-query-format-list} controls how
+these are mapped onto CCSO database field names.  After querying the
+server for the given string, the expansion specified by
+@code{ph-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{ph-expanding-overwrites-query} is
+non-@code{nil} then the meaning of @var{replace-p} is negated.
+@end deffn
+
+@defvar ph-inline-query-format-list
+Format of an inline expansion query.  If the inline query string
+consists of several words, this list specifies how these individual
+words are associated to CCSO database field names.  If @code{nil} all
+the words will be mapped onto the default CCSO database key (generally
+@code{name}). Default is @code{nil}.
+@end defvar
+
+@defvar ph-inline-expansion-format
+This variable lets you control what is exactly 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 CCSO database field names, corresponding field values
+are passed as additional arguments to format. Default is @code{("%s"
+email)} but you may want to consider a value like @code{("%s <%s>" name
+email)}
+@end defvar
+
+@defvar ph-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
+
+
+Defaults to @code{select}
+@end defvar
+
+
+
+@node Creating BBDB Records, The Server Hotlist, Inline Query Expansion, Usage
+@comment  node-name,  next,  previous,  up
+@section Creating BBDB Records
+
+With @code{ph}, you can automatically create BBDB records
+(@pxref{Top,,BBDB,bbdb,BBDB Manual}) from records you get from a PH/QI
+server. You do this by moving the point to the appropriate record in a
+query result display buffer and invoking the command
+@code{ph-insert-record-at-point-into-bbdb} with the corresponding
+keyboard binding, @kbd{b} @footnote{This keybinding does not actually
+call @code{ph-insert-record-at-point-into-bbdb} but uses
+@code{ph-try-bbdb-insert} instead.} or with the menu. @code{ph} cannot
+update an existing BBDB record and will signal an error if you try to
+insert a record matching an existing one.
+
+Because the CCSO directory system does not enforce a strict record
+format, local installations of the QI server use different names for the
+record fields and have different ways to organize the
+information. Furthermore BBDB has its own record structure that has
+little to do with what is commonly found on QI servers. For these
+reasons the process of converting a record from its QI format to the
+BBDB format is highly customizable.
+
+@defvar ph-bbdb-conversion-alist
+This is the variable that lets you customize how BBDB fields map to
+PH/QI records. Its value is an alist of cells of the form
+@code{(}@var{bbdb-field} . @var{spec-or-list}@code{)}. @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 PH/QI fields
+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 PH/QI field
+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{ph-bbdbify-phone} and @code{ph-bbdbify-address} are provided as
+convenience functions to parse phones and addresses.
+@end table
+@end defvar
+
+The default value of @code{ph-bbdb-conversion-alist} is:
+
+@lisp
+((name . name)
+ (net . email)
+ (address . (ph-bbdbify-address address "Address"))
+ (phone . ((ph-bbdbify-phone phone "Phone")
+           (ph-bbdbify-phone office_phone "Office Phone"))))
+@end lisp
+
+This means that:
+
+@itemize @bullet
+@item 
+the @code{name} field of the BBDB record gets its value
+from the @code{name} field of the PH/QI record
+@item
+the @code{net} field of the BBDB record gets its value
+from the @code{email} field of the PH/QI record
+@item
+the @code{address} field of the BBDB record is obtained by parsing the
+@code{address} field of the PH/QI record with the function
+@code{ph-bbdbify-address}
+@item
+two @code{phone} fields are created (when possible) in the BBDB record.
+The first one has "Phone" for location and its value is obtained by
+parsing the @code{phone} field of the PH/QI record with the function
+@code{ph-bbdbify-phone}. The second one has "Office Phone" for location
+its value is obtained by parsing the @code{office_phone} field of the
+PH/QI record with the function @code{ph-bbdbify-phone}.
+@end itemize
+
+@defun ph-bbdbify-phone @var{phone} @var{location}
+This is a convenience function provided for use in
+@code{ph-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 ph-bbdbify-address @var{addr} @var{location}
+This is a convenience function provided for use in
+@code{ph-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 fields you selected with
+@code{ph-default-return-fields} and that are actually displayed may
+actually be inserted as part of the newly created BBDB record.
+
+
+@node The Server Hotlist,  , Creating BBDB Records, Usage
+@comment  node-name,  next,  previous,  up
+@section The Server Hotlist
+
+@code{ph} lets you maintain a list of frequently used servers so that you 
+can easily switch from one to another. This hotlist appears in the
+@code{Server} sub-menu. You select a server in this list by clicking on
+its name. You can add the current server to the list with the command
+@code{ph-bookmark-current-server}. The list is contained in the variable
+@code{ph-server-hotlist} which is stored in and retrieved from the file
+designated by @code{ph-options-file}.
+
+@deffn Command ph-bookmark-server server
+Add @var{server} to the hotlist of servers
+@end deffn
+
+@deffn Command ph-bookmark-current-server
+Add the current server to the hotlist of servers
+@end deffn
+
+@defvar ph-options-file
+The name of a file where @code{ph} stores its internal variables
+(currently only the hotlist is stored there). @code{ph} will try to load 
+that file upon initialization so, if you choose a file name
+different from the defaults @file{~/.ph-options}, be sure to set this
+variable to the appropriate value @emph{before} @code{ph} is itself
+loaded.
+@end defvar
+
+There is currently no way to remove a server from the list other than
+editing directly the @code{ph-options-file}.
+
+
+
+@node Credits, Variables Index, Usage, Top
+@comment  node-name,  next,  previous,  up
+@chapter Credits
+
+The original CCSO Nameserver software (@code{ph} & @code{qi}) was
+written at the University of Illinois at Urbana Champaign.
+
+The Emacs client @code{ph.el} was written and is maintained by Oscar
+Figueiredo.
+
+Thanks to Soren Dayton for his suggestions, his enthusiasm and his help
+in testing and proofreading the code and docs.
+
+@node Variables Index,  , Credits, Top
+@comment  node-name,  next,  previous,  up
+@unnumbered Variables Index
+
+@printindex vr
+
+@contents
+@bye