NEWS for EDB, the Emacs Database

Copyright (C) 2004,2005,2006,2007,2008 Thien-Thi Nguyen
See the end for copying conditions.


- 1.31 | 2008-05-26

  - Install fix: install edb.info, too!


- 1.30 | 2008-05-26

  - Build fix: "gmake all" now works under Windoze

	No pipes there, how peculiar (BUGS #15).

  - Bugfix: Deleting a record no longer signals `args-out-of-range'

	Previously, for non-inherent databases, 9% of the deletions
	(1/11) would result in a `args-out-of-range' error, and possibly
	corrupt the database (BUGS #16).

  - Changes to Database Edit commands

    - `C-a' twice goes to beginning of field
    - `C-e' twice goes to end of field

	That is, on the first invocation, the commands behave normally,
	going to beginning or end of line, respectively.  A successive
	invocation goes "further".  This is useful for multi-line
	fields, since `M-<' and `M->' are by default coopted for
	`db-first-record' and `db-last-record', respectively.

    - `C-k' respects `kill-whole-line'

  - New handling for file-not-writable on interactive save

	On save, where `noninteractive' is nil, if file is not writable,
	offer to make it writable and continue.  This uses `y-or-n-p' to
	query and does a simple `set-file-modes' (no vc integration).


- 1.29 | 2008-01-17

  - License now GPLv3+ (see COPYING)

  - Bugfix: Single-field records no longer trigger warning on read

	Previously, a database with only a single field per record would
	trigger some warning messages and eventually query the user:
	"Bad file format; try reading anyway?".  Answering "yes" would
	successfully read in the data (anyway).

	Now, such databases are read normally (w/o incident).

  - Bugfix: Pre- and post- regexp-specified cruft no longer discarded

	Previously, if a database's pre-first-regexp was specified, the
	text matching that regexp (on read) was discarded (on write).
	Likewise for post-last-regexp.  This text is now saved and later
	used on write.

	With this bugfix, BUGS.edb is finally able to both read and
	write the BUGS file (bug #1 resolved).  Good-bye ostrich dayz!

  - Emacs no longer asks about some hooks as file local variable

	Specifying `db-before-read-hooks' and `db-after-read-hooks' in a
	format file's Local Variables block makes some versions of Emacs
	ask about whether or not the value is "safe".  EDB now arranges
	for Emacs to consider values that satisfy `edb-hookp' to be safe
	(thus avoiding this particular interruption).

  - Command edb-1int-to-single autoloaded

	This command -- see (info "(edb) edb-1int-to-single") --
	can now be invoked with M-x, once EDB is loaded.

  - Control files can specify a "schema basis"

	This is a variable that holds a plist of control properties,
	useful for sharing common properties among many databases.
	The values therein undergo elaboration just like normal
	control props prior to the normal control props.

	For example, in ~/.emacs:
	(defvar foo (list :fields [a b c]
	                  :record-defaults 'foo-new-record-plist))

	In x.edb:
	:EDB (single foo)
	:name "x foo!"

	In y.edb:
	:EDB (single foo)
	:name "y foo!"

	In z.edb:
	:EDB (single foo)
	:name "z foo!"
	:record-defaults 'foo-z-new-record-plist ;; override

	See (info "(edb) Specifying control") for details.

  - Command extended: db-add-record can now append

	This command now accepts an optional arg APPEND.  If non-nil,
	add the new record after the last record in the database and
	display "Appended" instead of "Inserted".


- 1.28 | 2007-05-29

  - Bugfix: C-h m (describe-mode) no longer throws error

	Previously, `C-h m' in either Database View or Database Edit
	mode would throw a "Symbol's function definition is void" error.
	This bug was introduced in EDB 1.26.

  - Bugfix: displayspec can handle multiple options

	Previously, the displayspec `\id,width=5,right-justify' would
	render the field `id' without any padding whatsoever.  This was
	due to a bug in `right-justify' handling as well as a more
	general (regexp-related -- surprise, surprise) problem handling
	multiple options.  These are now fixed.

  - Dropped items announced in EDB 1.27 NEWS (see below)

    - Support for FOO-separator variables in edb-t-timedate1.el

    - Six functions

	(internal)	database-recordfieldspec
	(internal)	database-recordfieldspec-type
	(internal)	database-set-recordfieldspec
	(spurious)	db-tagged-rrfr-hooks
	(spurious)	db-tagged-wrfr-before-hooks
	(spurious)	db-tagged-wrfr-after-hooks

  - Control file can start w/ comments and blank lines

	The text ":EDB " used to be expected at the very beginning of
	the buffer; now, any preceding comment and blank lines are
	skipped w/o error.  See examples/null.edb for an example.

  - New Database Summary mode keybinding: `S' now runs `db-sort'

  - New documentation: refcard

	Erich Wälde contributed refcard.tex (source for refcard.ps),
	in the doc/ subdir.

  - New command: edb-interact

	Actually, this is just `edb-EXPERIMENTAL-interact' renamed; the
	old name is a now an alias, to be removed for EDB 1.29.

  - Maintenance uses GNU Autoconf 2.60


- 1.27 | 2006-07-13

  - Configuration bugfix: Emacs executable specification made consistent

	Configuration and build have different methods for specifying
	the Emacs executable -- these used to be not easily overridden.
	Now you can override them in both contexts similarly, by
	specifying the environment variable `EMACS'.  See README.

  - Installation bugfix: Remember to install all relevant files!

	Some files (db-lemacs.el, db-nosetf.el and db-oldnames.el)
	are now installed (and not just distributed).  This error was
	due to a regression in the makefile introduced in EDB 1.26.

  - Bugfix: Substitutions use literal text for replacement

	Some i/o operations temporarily replace difficult-to-manage text
	(like backslashes) w/ an easier-to-manage string.  These used to
	use `replace-match' without specifying that the replacement be
	literal, which caused an "Invalid use of `\\' in replacement
	text" error in some cases.  These have been fixed.

  - Bugfixes for edb-t-timedate.el

    - `edb-t-timedate1:format-date' renders "%yy" correctly

	This used to render years as modulo 1900, resulting in more than
	two characters, for year 2000 and later.  For example:

	(defun (demo Y M D)
	  (let ((date (edb-t-timedate1:make-date Y M D)))
	    (edb-t-timedate1:format-date "%yy" date)))

	before: (demo 2006 5 31) => "106"
	   now: (demo 2006 5 31) => "06"

    - Specialized formatting functions use format consistent w/ name

	Certain functions edb-t-timedate1:format-date-FOO used to use
	formatting codes inconsistent w/ their names.  Here is a table
	showing the change and an example for each FOO, using SPC as a
	separator between components (actual default separators vary):

	FOO       before (example)        now (example)
	ddmmyy    %d %m %yy "3 5 06"      %dd %mm %yy "03 05 06"
	ddmmmyy   %d %mon %yy "3 May 06"  %dd %mon %yy "03 May 06"
	yyyymmdd  %year %m %d "2006 5 3"  %year %mm %dd "2006 05 03"

  - Bugfix: Last record no longer ignored for "inherent data"

	For controls with inherent data (specified with the `:data'
	control property), EDB used to silently ignore the last record
	(off-by-one error in the implementation).  Now, all records are
	read properly.  Also, the order of the records in memory is now
	maintained to be the same as the order in the control.

  - Bugfix: Emacs no longer queries about "safe" local variables

	Previously, `edb-EXPERIMENTAL-interact' used to cause Emacs 22
	to query about whether or not certain file-local variables are
	"safe".  Now, these internal details are properly hidden.

  - Bugfix: Database w/ inherent data can coexist w/ other databases

	Previously, a control file w/ inherent data could not be read in
	the presence of other databases due to a bug in the accounting
	internals; EDB would throw an error (wrong-type-arg: stringp).
	Now, these databases can coexist w/o this particular problem.

	For example:
	(require 'database)
	(dired "examples")
	(edb-EXPERIMENTAL-interact "arb-demo.edb" "arb-demo")
	(edb-EXPERIMENTAL-interact "forms-demo2-inherent.edb" nil)

  - Emacs 21.x compatibility fixes

    - No longer use three args with `defalias'

    - Define `insert-buffer-substring-no-properties' if necessary

  - Dropped items

    - Command: db-convert

	This was once documented in the info page as "rudimentary", but
	was otherwise unreferenced and unused both in EDB and elsewhere.
	Similar functionality may return in the future, after some of
	EDB 1.x's (excessive) dynamicism is properly reigned in.

    - Macro: deflocalvar
    - Function: define-displaytype-from-optstring
    - Function: define-one-char-enum-displaytype
    - Function: define-type-alias

	These were either unused, unimplemented (and throwing error if
	called), or made obsolete by internal changes.

    - Coordination with crypt++.el

	EDB no longer calls `crypt-insert-file-contents' from external
	package crypt++.el (if loaded).  Instead, you can enable Auto
	Compression mode, which is included with Emacs.

    - Items listed in advance notice from EDB 1.26 NEWS (see below)

  - Backward-incompatible change: format of :locals control more concise

	Previously, the :locals vector elements could be either a symbol
	or a pair (SYMBOL . INIT-VAL).  Now, the format for the latter
	variant is (SYMBOL INIT-FORM).  Also, INIT-FORM is now evaluated
	so you don't need to do that yourself.  For example:

	before:  :locals `[foo (ht . ,(make-hash-table)) bar]
	now:     :locals  [foo (ht (make-hash-table)) bar]

	In other words, the syntax resembles that of a `let' bindings
	block with square braces instead of parentheses on the outside.

  - Example databases writable

	The sooner you play with EDB (once it is built and loaded), the
	sooner you can report any bugs you find.  (Thanks!)

  - Mode lines say "Database" as part of the mode name

	before:
	-***-Database: machine-dbase   (Edit Abbrev 42/431)---All-

	now:
	-***- machine-dbase   (Database Edit Abbrev 42/431)---All-

	This is more informative (and looks nicer) in buffer listings.

  - Changes to edb-t-timedate.el

    - Some date formatting funcs now take optional arg SEPARATOR

	These funcs (w/ default separator):
	  edb-t-timedate1:format-date-mmddyy   "/"
	  edb-t-timedate1:format-date-yymmdd   "" (empty string)
	  edb-t-timedate1:format-date-ddmmyy   "."
	  edb-t-timedate1:format-date-ddmmmyy  " " (space)
	  edb-t-timedate1:format-date-yyyymmdd "/"

	now take an optional second arg SEPARATOR which can be used to
	override the default listed above.  There is presently support
	for the (previously, and probably always to be, undocumented)
	vars named by appending "-separator" to the functions' names,
	but that support will be dropped for EDB 1.28.

	To convert code that uses the obsoleted vars, find fragments:
	  (let ((FF-separator "*")) (FF date))

	and change them to look like:
	  (FF date "*")

    - New formatting func: edb-t-timedate1:format-date-iso
    - New builtin displaytype: date-iso

	For example:
	(edb-t-timedate1:format-date-iso
	 (edb-t-timedate1:make-date 2006 7 3))
	=> "2006-07-03"

	See examples/eicsw.edb for an example usage.

  - New func: db-set-field-help
  - New support for field-specific help in `db-field-help'

	You can now specify a field's help info (string or form that
	produces a string when evaluated) separately from that of the
	field's record type; it is no longer necessary to merge the help
	information in the record type.  Field-specific help is displayed
	first, followed by two newlines, followed by the record type's
	help.

  - New attribute :index-function for tagged file layout setup

	You can now specify `:index-function FUNC' as an attribute
	override for tagged file layout setup.  FUNC is called with one
	arg, the database object.  Relatedly, the manual now documents
	the restriction on using `db-after-read-hooks' (you can use
	:index-function, instead).

  - New support for writing data in a control with inherent data

	See (info "(./edb.info) Control properties reference")
	specifically entry `:data TEXT-BLOCK-SPEC'.  See also
	examples/forms-demo2-inherent.edb (a control file).

  - New configure option: --disable-badnames (see README)

  - New command: edb-1int-to-single

	This command helps you to migrate away from "internal file
	layout", support for which will be dropped in EDB 2.x, by
	translating that file into a functionally equivalent (more or
	less) "control with inherent data".  See info node by the same
	name in the EDB manual.

  - New command: edb-meta

	This command summarizes EDB state in a new buffer.  Since it
	exposes some internals, it is useful for debugging EDB and/or
	client programs, but probably not suited for casual users.  To
	try it out in place, build EDB and evaluate the forms:

	  (load-file "lisp/edb-meta.elc")
	  (edb-meta)

	Once installed, `edb-meta' can be invoked automatically after
	EDB is loaded (i.e., it is autoloaded).

  - Advance notice for to-be-dropped items in EDB 1.28

	(internal)	database-recordfieldspec
	(internal)	database-recordfieldspec-type
	(internal)	database-set-recordfieldspec
	(spurious)	db-tagged-rrfr-hooks
	(spurious)	db-tagged-wrfr-before-hooks
	(spurious)	db-tagged-wrfr-after-hooks

	Actually "spurious" is kind of a pun: Similar facilities exist
	for customizing the reading/writing of tagged-format data, when
	you use control properties, so you SHOULD use them (ha ha).
	See examples/{eicsw,geneal}.edb.

  - Maintenance uses files from GNU Automake 1.9.6


- 1.26 | 2005-12-31

  - Bugfixes

    - In View mode, `M-TAB' no longer says "I was confused"

	This key runs either `db-last-field' or `db-previous-field',
	depending on whether or Edit minor mode is in effect.  EDB used
	to spuriously display "I was confused" in the echo area, which
	was probably strictly correct (since it was indeed confused
	about its state of confusion), but not correct from a user POV,
	since behavior was as expected in all other respects (point
	would move to the right place anyway).

    - In Summary mode, `o' runs command `db-output-record-to-db'

	It used to be bound to a non-existent command.  Also,
	`db-output-record-to-db' now works from the summary buffer.

    - Emacs Lisp mode hooks disabled for "Internal Format" read

	Reading data files in this format uses Emacs Lisp mode, by
	calling `emacs-lisp-mode', which at some point runs the normal
	hook `emacs-lisp-mode-hook'.  This value is now arranged to be
	nil for the duration of the read, to avoid potential problems.

    - Local Variables block no longer limited

	EDB looks on the last page (area beginning with form-feed, ^L)
	of the format buffer for the Local Variables block.  It used to
	expect the last page within 3000 characters of point-max.  Now,
	EDB searches the entire buffer (from the end) for the ^L, using
	point-min if that char is not found.

  - Dropped buffer-local variable: dbf-hidden-to-end-p

	Setting/toggling of this sort option is still possible through
	the interactive (sort) interface.  The setting can no longer be
	saved from one session to the next.

  - Dropped hook: db-load-hooks

	To continue to use `db-load-hooks', you must arrange to run the
	functions in `db-load-hooks' yourself, with the form:

	(eval-after-load "database" '(run-hooks 'db-load-hooks))

	Note that the `run-hooks' form is quoted.

  - Better support for read-record-from-region function

    - Point pre-set to beginning of accessible region

	This basically means that read-record-from-region functions no
	longer need to begin with `(goto-char (point-min))'.

    - Return value may be a plist or an alist

	Previously, read-record-from-region functions had to return a
	record object, thus requiring allocation and population of a new
	record using funcs `make-record' and `record-set-field'.

	While this is still supported (for EDB 1.x), these functions can
	now opt to return either a property list, with alternating field
	names and values; or a form `(:alist ALIST)', where ALIST is an
	association list.  In such cases, EDB handles the allocation and
	population of the record.  Also, new function `db-make-record'
	combines functionality of `make-record' and `record-set-field'.
	For example:

	;; Returning a record the bad old way:
	(defun my-rrfr ()
	  (let ((record (make-record database)))
	    (record-set-field record 'coolsw "SWIG" database)
	    (record-set-field record 'guilty "D.Beazley" database)
	    record))

	;; Returning a record the not-so-bad new way:
	(defun my-rrfr ()
	  (db-make-record database 'coolsw "SWIG" 'guilty "D.Beazley"))

	;; Returning a plist:
	(defun my-rrfr ()
	  (list 'coolsw "SWIG" 'guilty "D.Beazley"))

	;; Returning an alist:
	(defun my-rrfr ()
	  (cons :alist (list (cons 'coolsw "SWIG")
	                     (cons 'guilty "D.Beazley"))))

	Note that these examples do not actually parse the region.

  - Changes to the sort interface

    - All fields visible

	There is no longer a separate "killed field" stack.  Instead,
	when you type `C-k' on a field, it is moved to the top of the
	list of nonsignificant fields (whether or not it was itself
	significant to begin with).  Reciprocally, typing `C-y' moves
	the field at the top of the list of nonsignificant fields to the
	location under point.  `C-u C-y' does the same, but repositions
	point to be in front of the just-inserted field.  `C-y' can only
	be invoked within the list of significant fields.

	In this way, all fields are always visible.

    - You can "drag" a field

	The default bindings of `M-n' and `M-p' are now to a pair of
	keyboard macros that essentially arrange to move the field
	under point "down" and "up", respectively.  These make use of
	`C-k' and `C-y' and inherit their behaviors and restrictions;
	in particular, dragging works for significant fields only.
	(Ordering of non-significant fields does not make sense --
	that's why they are non-significant!)

  - Changes to View mode

    - `+' runs command `db-additional-data-display-buffer'

    - `x' runs command `db-kill-buffer'
    - `X' runs command `db-kill-all-buffers'

	These give a more consistent feel than with `db-exit', which is
	still available for backwards compatability but not bound in any
	keymap.  Primarily, you no longer need to type `C-u x' to
	actually kill the buffer.  Be careful: A prefix arg now means
	"force", which discards unsaved changes no questions asked.

  - "Internal Format" version now 0.7

	Note, however, that "internal format" is really a misfeature --
	originally this performance hack was worth the maintenance
	trouble (always associated with exposing internals), but that
	point was passed about ten years ago.

  - New functions for managing mark and hide bits

	The function `edb-tag' returns a database's "tag object" given a
	name (which, for EDB 1.x, can be `:markedp' or `:hiddenp').  The
	tag object can be passed to `edb-tagp', `edb-tagx' or `edb-tag-'
	along with a record to be checked for the tag, set with the tag,
	or cleared of the tag, respectively.

	This particular interface (four functions, presently) is upward
	compatible with EDB 2.x.  See node "Setting the mark and hide
	bits" in the EDB manual for more info.

	This change is concomitant with the removal, as described in the
	EDB 1.25 manual, of the "link abstraction", where mark and hide
	bits lived previously.

  - Advance notice for to-be-dropped items in EDB 1.27

	(alias)		db-commit-record
	(internal)	dbc-set-hide-p
	(internal)	db-setup-data-display-buffer
	(redundant)	dbf-reset-on-edit-list
	(alias)		make-record
	(alias)		record-field
	(alias)		record-set-field

  - FSF street address updated in copyright notices


- 1.25 | 2005-01-24

  - Bugfix: Edited databases can be saved

	A severe bug was introduced in EDB 1.24 whereby edited databases
	could not be saved.  The command `db-save-database' would result
	in the error "Wrong type argument: arrayp, nil" on the first
	invocation.  A follow-on invocation was required to actually do
	the save.

  - Bugfix: Computed sort function handles (eq value1 value2)

	Previously, the somewhat-internal function `db-rs-sortfunc'
	would return a function that failed to implement "reversal"
	semantics in the cases where its args were `eq'.

  - Bugfix: Canoncalization of creation methods (db-convert.el)

	The function `db-canonicalize-creation-method' now returns a
	well-formed creation-method object.

  - Default value for `db-inform-interval' bumped to 100

  - In Database View and Summary modes, `t' runs `toggle-truncate-lines'

  - Encoding for the data file can now be specified

	You can specify the encoding of the data file by adding to the
	Local Variables section in the format file a line of the form:

	edb-data-coding: CODING

	There is one restriction: If CODING is not one that Emacs can
	automatically recognize (e.g., `utf-16le'), and the data file is
	in "internal layout", then both format and data file must be in
	the same encoding, and you need to do `C-x <RET> c CODING <RET>'
	immediately prior to `M-x db-find-file'.  `C-x <RET> c' normally
	runs the command `universal-coding-system-argument'.

	Unfortunately, this restriction is unlikely to be lifted due to
	limitations of the `db-find-file' design that cannot be removed
	for continuing EDB 1.x compatibility.  On the other hand, it is
	not difficult to arrange for Emacs to automatically recognize
	file encoding.  For more info, see file BUGS, bug #5.

  - More namespace cleaning

    - db-nosetf.el and db-oldnames.el

	Cleaning for EDB 1.x function / variable namespace continues.
	To provide backward (polluting) compatability for applications
	built on early EDB 1.x, the distribution includes db-nosetf.el
	and db-oldnames.el.  EDB and the examples do not use these
	files; they will be dropped in EDB 2.x.  They can be loaded
	"manually", like so:

	(require 'database)	;; Ideally this is sufficient,
	(require 'db-oldnames)	;; ... but sometimes reality
	(require 'db-nosetf)	;; ... is where we find ourselves.

	If you find yourself using a function or variable defined in
	db-oldnames.el, it's probably a good idea to replace it w/ the
	newer name so as to be able to avoid loading db-oldnames.el in
	the first place.  An alternative approach, recommended since
	db-oldnames.el is rather monolithic, is to grep out only the
	mappings you need into "my-edb-1-oldnames.el" and use that.

	FYI, the sk4 data file in subdir skram/ lists the interface
	elements disregarding db-oldnames.el and db-nosetf.el.  You can
	build it by doing "make sk4" in that directory.

    - new files: edb-t-GROUP.el

	Functions to support various "type groups" (for lack of a better
	term) have been moved to edb-t-GROUP.el, from db-time.el (which
	has been deleted) and db-types.el:

	GROUP                         FILE
	human names                   edb-t-human-names.el
	US/UK places                  edb-t-places-usuk.el
	EDB 1.x-compatible time/date  edb-t-timedate1.el (note the "1")

	These are all covered in db-oldnames.el, described immediately
	above, although it is probably better to load them yourself and
	use the new names if you need them.

	The naming convention is filename "edb-t-GROUP.el" and prefix
	(for function and variable names) "edb-t-GROUP:".

	This change fixes a name (and functionality) conflict between
	the defunct db-time.el function `parse-time-string' and that
	provided by some newer versions of Emacs.  The naming convention
	for type groups should sidestep future problems in this vein.

  - Makefile supports "make edb.dvi" again (disabled EDB 1.22 through 1.24)

  - GNU make required to build/install EDB

	Some of the makefiles are now renamed GNUmakefile, and thus
	require GNU make (perhaps installed as "gmake" or similar) to
	build and install EDB.  This is primarily to support "VPATH
	builds" w/o resorting to Automake.

  - Tested against GNU Emacs 21.2 and GNU Emacs from cvs (2005-01-10)


- 1.24 | 2004-10-13

  - Bugfix: Type registries now less wasteful
  - Function extended: define-displaytype-from-displayspec
  - Function extended: define-recordfieldtype-from-recordfieldspec

	Every invocation of `define-displaytype-from-displayspec' or
	`define-recordfieldtype-from-recordfieldspec' used to push a new
	name/object pair onto the respective vars `db-displaytypes' and
	`db-recordfieldtypes', disregarding the presence of a previously
	existing pair with the same name.  The result was that old
	definitions could never be found again even though they still
	took up memory.  These functions and the vars they modify have
	now been changed to ensure that for any name (in each var), only
	one associated definition is maintained.

	Additionally, these functions have been extended in two ways:

	(1) Each takes an optional &rest arg OVERRIDE, as an alternative
	method for specifying attributes of the type.  Using OVERRIDE is
	recommended for upward compatability and conciseness.

	(2) The second arg SOURCE can also be the (symbolic) name of a
	previously defined displayspec or recordfieldspec, respectively;
	or nil.  Together with (1), you can effect modification by
	specifying the same name for NAME (first arg) and SOURCE, or you
	can effect inheritence otherwise.  EDB does not remember a child
	type's parent; later changes to a parent type do not propagate
	to its currently-existing children.

  - Keybinding changes in Database View mode

	`F' now runs `dbf-set-summary-format'.
	`S'          `db-sort'.

  - Function extended: db-tagged-setup

	This func now takes additional arguments, ATTRS, which are
	alternating keywords and values specifying attributes of the
	"tagged database".  This method is an alternative to using
	`database-set-local' (which is to migrate internally within a
	release or two), and recommended for upward compatability and
	conciseness.

  - New distributed file: PLANS

	This is kind of like TODO but w/o the commitment, and more
	vague and verbose (PLANS:TODO::courtship:marriage ;-).

  - New distributed file: BUGS

  - ANONCVS instructions updated


- 1.23 | 2004-08-29

  - Bugfix: Functions no longer switched via `fset'

	EDB used to fset `save-some-buffers' to `db-save-some-buffers',
	storing the original version away to call later.  Even though
	this was documented, this kind of behavior is now considered a
	misfeature at best.  EDB no longer does this.  The command
	`db-save-some-buffers' is still available, but you have to
	invoke it as `M-x db-save-some-buffers', or bind a key to it.

	Likewise, `insert' was fset to `db-insert', an EDB-internal func.

	[Gratuitous Comment: This one blew my mind when I discovered it.
	Perhaps all the hand-wringing about speed in the source code
	comments would not have been necessary had such a fundamental
	function not been toyed with so capriciously in the first place.
	Che palle!]

  - Bugfix: local variable `enable-multibyte-characters' handled specially

	When writing the database to an external file format, one of
	the steps is to copy local variables from one buffer to another.
	Previously this did not call `set-buffer-multibyte', resulting in
	a "trying to set constant" error.

  - Command dropped: edb-update

	Changes in distribution and build practice have rendered this
	command obsolete.

  - Variable deprecated: db-default-field-type
  - Function takes optional third arg: database-set-fieldnames-to-list

	This pair of changes is explained in some detail in info node
	"(edb)The database structure".  Migration from the former to the
	latter is encouraged but not enforced (for EDB 1.x).

  - Command `dbf-set-summary-format' now allows editing of current value

  - Internal file format now uses `pp'

	This is still EDB "format 0.6" but now it is written using `pp'
	primarily for its escaping of newlines (i.e., written as "\n").
	Before, newlines in data fields were output verbatim.

	This should result in greater chance of identifying any data
	corruption occuring during transmission through varying
	eol-policy domains (email, through usloth machines, whatever).

  - Miscellaneous updates and bug fixes in `examples' subdir

  - New reflection/testing in `skram' subdir

	This is work-in-progress.  The idea is to use EDB to track
	changes to EDB.  Version control is one thing, design control is
	another...  Yes, EDB dares to venture into the dreaded land of
	Project Manglement!

	Actually, like all things to do w/ manglement, this demonstrates
	two aspects of EDB having to deal w/ trust: 1/ it is trustworthy
	enough to run scripts or participate in editing sessions where
	its current over-reaching of namespace is tolerable; and 2/ it
	requires manual verification, still, despite 1/.


- 1.22 | 2004-06-02

	This is a cleanup release (perhaps one of several) following
	maintainership transfer from Michael Ernst, the author of EDB,
	to Thien-Thi Nguyen, the slowly-searching student of EDB (and
	other works of codified thought).

	Cleanup means adding "./configure && make && make install"
	support (including commonly related things like "make dist",
	NEWS file, etc); minor upgrading of the elisp dialect and
	style; and bundling the examples.  A request for outstanding
	bugfixes posted to one of the newsgroups has gone unanswered
	to date, so this release includes no bugfixes.

	The programming interface has not changed.  Those elements
	mentioned in the info pages are guaranteed to NOT change for
	all 1.x versions of EDB.  If you have written an application
	based on EDB that uses undocumented elements, you can either
	contribute doc patches (which if accepted would result in
	those elements being guaranteed to NOT change), or prepare
	yourself for the necessity of rewriting that particular code
	if/when the undocumented elements change.


- 1.21 AND PRIOR

	Please refer to theory.lcs.mit.edu:/pub/emacs/edb/ for prior
	releases of EDB and related information.



Copyright information:

   Permission is granted to anyone to make or distribute verbatim copies
   of this document as received, in any medium, provided that the
   copyright notice and this permission notice are preserved,
   thus giving the recipient permission to redistribute in turn.

   Permission is granted to distribute modified versions
   of this document, or of portions of it,
   under the above conditions, provided also that they
   carry prominent notices stating who last changed them.



	Local Variables:
	mode: outline
	outline-regexp: "\\([ ][ ]\\)*- "
	coding: utf-8
	fill-column: 72
	fill-prefix: "\t"
	End:
