Chris Hanson [Fri, 2 Nov 1990 03:25:13 +0000 (03:25 +0000)]
Requires microcode 11.50 and runtime 14.100.
* Implementation of update optimizer, and direct use of termcap rather
than the buggy curses.
* Extensive rewrite of display update code. New display update
scrolls lines in some cases, and is tuned to offset the added cost
of running the update optimizer.
* New display update event-tracing facility for debugging.
* If the last line of the buffer is empty, and the previous line is
completely visible, the modeline says that the bottom of the buffer
is visible.
* Editor variables can have value validity tests, which are applied
whenever the variable's value is altered. If the test fails, an
error is signalled, so that user code can depend on the variable's
contents satisfying the validity test.
* `(buffer-point (current-buffer))' now equivalent to
`(current-point)'.
* `window-redraw!' no longer takes a second argument. It's new
meaning is to force the window to be redrawn from scratch, without
affecting the window starting point or cursor position.
* Changed `window-start-index' to `window-start-mark'.
* Change terminal state control to use new I/O port operations that
extract channels, and perform the terminal controls directly on
those channels.
* Internal flag `debug-internal-errors?' facilitates debugging Edwin
if set true. Normally this is false.
* When first starting the editor, the default behavior is to try to
use Scheme's controlling terminal, and if that isn't available, to
use X. If Scheme is started under Emacs, it has no controlling
terminal, and therefore it will use X.
Chris Hanson [Fri, 2 Nov 1990 02:07:08 +0000 (02:07 +0000)]
Requires microcode version 11.50 or later.
Many changes to provide for smooth control of terminal state:
* Procedures `make-cmdl' and `push-cmdl' each take additional argument
that specifies how to spawn a child CMDL object -- a good default
for this argument is `make-cmdl'. `make-cmdl' should not be used
except by this "spawning" operation -- always use `(cmdl/spawn-child
cmdl)' to do that. Command loops should be extended to have generic
operations for reading input, evaluating, writing results,
prompting, etc. This would simplify switching between the editor
and user code.
* Command loops now temporarily switch input and output modes of
terminals to appropriate values when doing input or output. Thus
REP loops and the debugger need not worry about what state the
terminal is in -- the user can change it arbitrarily.
* New procedures `input-port/channel' and `output-port/channel' return
a port's underlying channel if known, else #F. This is not yet
completely implemented, but since it is only used for terminals it
is OK for now.
* New procedures `terminal-get-state' and `terminal-set-state' can be
used to save and restore a terminal's state.
Chris Hanson [Thu, 1 Nov 1990 04:33:46 +0000 (04:33 +0000)]
* New primitives `terminal-get-state' and `terminal-set-state' allow
Scheme programs to get an object representing a terminal's state
structure, and to restore the terminal's state from such an object.
* When Scheme is terminated, restore the control terminal state.
Previously this was done only when suspending Scheme.
* On machines that have it, disable `t_dsuspc' (the delayed suspend
character). Save this and any other TIOCGLTC state in the terminal
state structure. Previously POSIX machines ignored this state even
if it was present.
* Change X line scrolling so that it does not clear the region that
the lines are being scrolled out of. The update optimizer will take
care of this if it needs to.
Chris Hanson [Tue, 9 Oct 1990 16:24:53 +0000 (16:24 +0000)]
* The "-in-new-screen" commands have been replaced with
"-other-screen" commands. This is more analogous to the
"-other-window" commands.
* New editor variable `use-multiple-screens', if set true, causes
various window commands to use multiple screens instead of multiple
windows. Affected commands include C-x o, C-M-v, C-x 4, and
commands that pop-up buffers. This needs more work but is an
interesting first cut.
* With multiple X screens, the selected screen is distinguished by
having a cursor -- a screen's cursor is erased when it is
deselected. This is desirable because it is no longer the case that
the selected screen and the focus screen are always the same.
* Modeline formats have been extended to allow procedures as elements.
Such a procedure is called with the modeline's window as an
argument, and is expected to produce another modeline-format element
which is used in its place.
* Selecting a window in a screen other than the selected screen will
also select that screen.
* New procedure `other-screen' will choose a different screen if one
is available.
* New screen operations `screen-scroll-lines-down!' and
`screen-scroll-lines-up!' return a flag saying whether they
performed the scrolling. Redisplay code tries to use them when it
scrolls, and repaints if they don't work. Currently these
operations are implemented for X screens but not for curses.
* The `screen-write-substrings!' operation is now written in terms of
the `screen-write-substring!' operation, so that it need not be
implemented separately for each screen abstraction.
* The display-type abstraction has been redesigned so that it has no
internal state -- the current display type is now part of the editor
structure. Most of the operations have been renamed. The procedure
`editor-display-type' has been eliminated, the procedure
`editor-display-types' now returns display-type objects rather than
their names.
* Each display-type now indicates whether it supports multiple
screens. This information is returned by procedure
`multiple-screens?'.
* The buffer that appears in the typein window when no typein is
occurring is now different than the level-0 typein buffer. This
means that, under normal circumstances, only one typein window shows
the typein buffer when typein is occurring. The previous method of
obscuring the typein buffer with an override message on non-selected
screens is no longer used.
* The file "winmis" has been eliminated.
* The procedure `using-screen' has been eliminated.
Chris Hanson [Tue, 9 Oct 1990 16:23:40 +0000 (16:23 +0000)]
* The "-in-new-screen" commands have been replaced with
"-other-screen" commands. This is more analogous to the
"-other-window" commands.
* New editor variable `use-multiple-screens', if set true, causes
various window commands to use multiple screens instead of multiple
windows. Affected commands include C-x o, C-M-v, C-x 4, and
commands that pop-up buffers. This needs more work but is an
interesting first cut.
* With multiple X screens, the selected screen is distinguished by
having a cursor -- a screen's cursor is erased when it is
deselected. This is desirable because it is no longer the case that
the selected screen and the focus screen are always the same.
* Modeline formats have been extended to allow procedures as elements.
Such a procedure is called with the modeline's window as an
argument, and is expected to produce another modeline-format element
which is used in its place.
* Selecting a window in a screen other than the selected screen will
also select that screen.
* New procedure `other-screen' will choose a different screen if one
is available.
* New screen operations `screen-scroll-lines-down!' and
`screen-scroll-lines-up!' return a flag saying whether they
performed the scrolling. Redisplay code tries to use them when it
scrolls, and repaints if they don't work. Currently these
operations are implemented for X screens but not for curses.
* The `screen-write-substrings!' operation is now written in terms of
the `screen-write-substring!' operation, so that it need not be
implemented separately for each screen abstraction.
* The display-type abstraction has been redesigned so that it has no
internal state -- the current display type is now part of the editor
structure. Most of the operations have been renamed. The procedure
`editor-display-type' has been eliminated, the procedure
`editor-display-types' now returns display-type objects rather than
their names.
* Each display-type now indicates whether it supports multiple
screens. This information is returned by procedure
`multiple-screens?'.
* The buffer that appears in the typein window when no typein is
occurring is now different than the level-0 typein buffer. This
means that, under normal circumstances, only one typein window shows
the typein buffer when typein is occurring. The previous method of
obscuring the typein buffer with an override message on non-selected
screens is no longer used.
* The file "winmis" has been eliminated.
* The procedure `using-screen' has been eliminated.
Chris Hanson [Sun, 7 Oct 1990 13:34:49 +0000 (13:34 +0000)]
Change `xterm-erase-cursor' and `xterm-draw-cursor' primitives to be
direct calls to do exactly that. Add new primitive
`xterm-enable-cursor' which enables or disables the drawing of the
cursor.
Chris Hanson [Sat, 6 Oct 1990 00:16:37 +0000 (00:16 +0000)]
* Add new procedure `window-override-message' that returns the
override message, or #F if none. This is used to implement
`current-message', which operates on the current typein window.
`clear-message!' renamed to `clear-current-message!'.
`set-message!', renamed to `set-current-message!', now accepts #F as
an argument, in which case it acts like `clear-current-message!'.
* Split `select-buffer-in-new-screen' into two parts: a procedure
`make-screen' that generates a new screen, and a call to
`select-screen'. The new procedure `make-screen' replaces the
procedure of the same name which is now considered internal to the
screen abstraction.
* Change `select-screen' not to abort to top level, to run the
`select-buffer-hook', and to transfer the typein override message
from the previously-selected screen to the newly-selected one. The
X screen event handler now does the abort to top level, since it is
still needed in that case.
* Eliminate the typein bufferset -- typein buffers are shared by all
screens. Display of the typein buffers is suppressed in
non-selected screens by a blank override message. This has the
drawback that direct update of the typein window does not work if
there are multiple screens, which makes typein feel sluggish.
* Implement procedures `screen0', `screen1+', `screen-1+', and
`screen+' for moving around the screen list.
* `buffer-list' no longer copies its result -- don't clobber it!
* New procedure `change-selected-buffer' makes the handling of buffer
selection more uniform.
* Eliminate cacheing of `editor-input-port' from "input.scm". Just
extract the input port from `current-editor' every time. Change the
keyboard reader to use `input-port/read-char' instead of
`read-char', since the former is faster.
* Redesign the `button' abstraction to make it cleaner and more
general. Rename the `buttonN-down' and `buttonN-up' variables to
`x-buttonN-down' and `x-buttonN-up'. Change button-handling code so
that up buttons don't beep if they aren't bound to commands.
* Updating of an X screen is now terminated if a non-keypress event
arrives while checking for update preemption. This is done by
throwing out of the update. I believe this test only happens in
places where it is safe to do this.
* Make screen highlight control independent of the screen type.
Change screen abstractions so that screens support two operations,
one to turn on highlighting, and the other to turn it off.
Add checksumming code. Binary files dumped by Psbtobin or fasdump
have checksums in the header. If the checksum field is SHARP_F, the
checksum is ignored on the way in.
Currently bchscheme's fasdump does not dump files with checksums.
This should be fixed.
Chris Hanson [Fri, 5 Oct 1990 12:58:18 +0000 (12:58 +0000)]
Use one ".free" file to cache data for entire package model. Compress
the data stored in this file by eliminating duplicates and using
vectors instead of lists.
Chris Hanson [Fri, 5 Oct 1990 11:36:32 +0000 (11:36 +0000)]
Use one ".free" file to cache data for entire package model. Compress
the data stored in this file by eliminating duplicates and using
vectors instead of lists.
Chris Hanson [Thu, 4 Oct 1990 10:21:24 +0000 (10:21 +0000)]
Use one ".free" file to cache data for entire package model. Compress
the data stored in this file by eliminating duplicates and using
vectors instead of lists.
Chris Hanson [Wed, 3 Oct 1990 04:56:28 +0000 (04:56 +0000)]
* X terminal interface extensively changed to use new event-handling
model -- this requires microcode 11.45 or later.
* `delete-screen' command now works. `create-new-screen' command
removed.
* `save-buffers-kill-scheme' command now prompts for confirmation.
* Changed all "event" hook variables to have event distributors as
their values. Users get access to an event by adding themselves to
the event distributor.
* X screens now update their window and icon names under the control
of the new variables `x-screen-name-format' and
`x-screen-icon-name-format'.
* `typein-window?' is now true if the window is a typein window of any
screen. Previously it was only true of the typein window of the
selected screen.
* `select-window' and `select-cursor' now work for windows in any
screen, rather than just for the selected screen.
* Changed `make-buffer' to use `editor-default-mode' for new buffers,
rather than `fundamental-mode'.
* New procedure `typein-edit-other-window' returns the non-typein
window that was active immediately before the current typein edit
began.
* New procedure `format-modeline-string' permits more general use of
the formatting language used for `mode-line-format'.
* Implemented `command-reader/reset-and-execute', which aborts to the
top-level command reader and executes a thunk there before reading
the next command. This mechanism replaces the
`set-reader-do-before-next-read!' procedure.
Internal changes:
* Modeline events for each window are now passed to the window's
screen, in case the screen needs them.
* Guaranteed that `buffer-modified' modeline event is only signalled
when the "modified" bit of the buffer changes.
* Eliminated `cursor-moved' modeline event.
* Screens now cache their dimensions. X screens use this cached
information to determine when a screen's size has changed.
* Removed `reader-continuation' stuff, which was commented out anyway.
Current assumption is that, no matter how many screens there are,
there is only one input port. For X, this means that all screens
are on the same display.
* Editor-frame operations are now subsumed by screen operations.
There are no editor-frame operations in the (edwin) package.
* Many references to `update-screens!' changed to be calls to
`update-selected-screen!'.
* Incremental search bullet-proofed to remove its message when it is
aborted by any means.
* `standard-editor-initialization' bullet-proofed against aborts.
* Typein edits must consistenly use `current-typein-bufferset' for
typein buffers.
* Eliminated "rescrn" by moving `toggle-screen-width' into "wincom".
Add nbits = 0 case to copy_bits to compensate for division bug in gcc.
The bug arises when dividing by OBJECT_LENGTH inside
BIT_STRING_INDEX_TO_WORD. The division is optimized into an unsigned
left shift that works for non-negative values, but not for -1, used
when the number of bits is 0!
Fix recaching bug in extend_frame when the root of the chain is not
the global environment and there is no cell being shadowed.
Compiler_uncache was not called so shadowing_recache called from
higher levels was called on the wrong shadowed cell. There is no
shadowed cell in this case so we use the cell containing the
unbound_trap_object. This makes compiler_uncache and compiler_recache
punt the caching operation.
Chris Hanson [Tue, 11 Sep 1990 20:46:01 +0000 (20:46 +0000)]
* Advice package now signals error if the user attempts to advise
anything but an compound procedure.
* Continuation parser keeps track of the type of the previous stack
frame. This information is used as context in some situations.
This mechanism replaces special-purpose flag `allow-next-extended?'.
* Continuation parser slightly reorganized and commented to make it
easier to understand.
* Debugger modified to provide more flexible control over use of
history information, to provide more detailed information about
stack frames, and to make it more self-explanatory. Also knows
about "simulated" compiled-code environment frames, and ignores
them.
* The environment inspector has been modified to make it more
self-explanatory. The N command has been replaced by an O command
like that of the debugger.
* `pretty-print' now has additional optional argument that specifies
an indentation for the printed expression. If given, the output is
indented by that many columns.
* The emacs interface now has a hook for evaluating arbitrary
emacs-lisp expressions. This is used to provide a better debugger
interface.
**** This requires "xscheme.el" version 1.26 or later. ****
* `stack-frame/debugging-info' now returns a third value,
"subexpression", which indicates the subexpression of the expression
that the next later subproblem is evaluating.
* The lambda abstraction now forces the use of internal lambda
expressions for auxiliary variables. This is required for correct
semantics of `letrec'.
* `make-lambda' now does error-checking on its parameter-list
arguments, which disallows duplicates in the parameter lists.
* The `procedure' abstraction has been split off into a separate file.
`procedure-arity' has been modified to handle entities correctly.
A new datatype, `apply-hook', is like entities except that it
doesn't pass itself to the handler. `compound-procedure' operations
have been removed from the global environment; use generic
operations instead.
* The unsyntaxer has a new entry point, `unsyntax-with-substitutions',
which allows subexpressions of an expression to be replaced in the
output with arbitrary objects.
* Removed `dynamic-state-let' from `system-global-syntax-table'.
* The syntaxer now disallows the use of syntactic keywords as
variables. This applies to references, bindings, and definitions.
* The syntaxer signals an error if the name of a named `let' is also
one of its bound variables.
* The syntaxer signals an error if there are duplicates in the
parameters of a lambda expression.
* Compiled-code environments that do not have interpreter-compatible
ancestors now simulate such ancestors for debugging convenience.
The simulated ancestor is the closing environment of the compiled
code, if known, otherwise it is the system global environment.