This version of Edwin requires microcode 11.125 or later. It should
be compiled with compiler version 4.97 or later, because its
performance depends on several new compiler optimizations.
* Major redesign of low-level insert and delete operations, the
primary aim of which is to greatly improve performance:
* Insert, delete, and move-point daemons flushed.
* Limits that track the extent of the changes to a buffer between
display updates are now per-buffer rather than per-window. The
windows are notified of these changes at display update rather
than while the changes are occurring.
* Calls to the primitives STRING-ALLOCATE, SUBSTRING-MOVE-RIGHT!,
and SUBSTRING-MOVE-LEFT! have been replaced with calls to Scheme
procedures that perform the same functions. These new procedures
avoid the cost of calling C code, which can be very high. The
latter two procedures use heuristics to decide whether it is
better to call the C primitive or to do the operation in line.
* The undo subsystem has been reimplemented. The new implementation
is a near-exact translation of the new undo code from Emacs 18.56.
The major features of this implementation are: unlimited undo memory
for one undo step; significantly better performance; and much
clearer implementation, reducing probability of bugs (the previous
implementation is known to be buggy).
* The new implementation of STRING-ALLOCATE fixes the bug that caused
the editor to go into an infinite loop when reading in a file that
was too large to fit in memory.
* The MOVE-TO-COLUMN procedure had a problem because it was searching
for the end of line in order to pass it as a limit argument to
GROUP-COLUMN->INDEX. In some cases, particularly paragraph fill,
this changed a linear algorithm to quadratic. This has been fixed
by changing GROUP-COLUMN->INDEX to stop at end of line even if that
is not the given limit.
* The DEFINE-NAMED-STRUCTURE macro has been changed to create an
object like those created by DEFINE-STRUCTURE, so that the printer
and pretty-printer will treat them in the usual way.
* The LINE-START and LINE-END procedures have been rewritten to make
them faster. These procedures are used in many places in the editor
and must be fast. The associated MOVE-VERTICALLY has been
eliminated as it's no longer used.
* TRANSPOSE-THINGS has been rewritten so that it doesn't leave
permanent marks attached to the buffer.
* HORIZONTAL-SPACE-START and HORIZONTAL-SPACE-END no longer look for
the nearest line limit, since that was completely unnecessary. The
procedures that they call automatically stop at the line edge.
* BOCHSER code, which was not being loaded, is now also not compiled
since it depended on the move-point daemons.
19 files changed: