[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Several new features in 86.56



*) Default filetype is LISP.

If you specify a name but no type in a pathname, the default (when not
specified explicitly by the program) is now LISP rather than
:UNSPECIFIC.  This change is in the functions FS:MERGE-PATHNAME-DEFAULTS
and FS:MERGE-AND-SET-PATHNAME-DEFAULTS.

Actually, the default is the value of the variable
FS:*NAME-SPECIFIED-TYPE-DEFAULT*, whose value is initially "LISP".
The old behavior is obtained by setting this variable to :UNSPECIFIC.

This change is usually not visible if FS:*ALWAYS-MERGE-TYPE-AND-VERSION*
is non-nil, since then the type defaults from the previously used
pathname even if the name is specified.  However, this new default
may eliminate your motivation for setting that variable.

*) Twenex pathname handling is improved.

The device name DSK is now canonicalized to PS in all Twenex pathnames.
This avoids problems of duplicate pathnames that are different but completely
synonymous.

You can now specify a filetype of :UNSPECIFIC (that is, a null type)
by ending the filename with a period.  This is different from omitting the
type entirely: a specified null type overrides all defaults; an omitted
type is defaulted (to "LISP" or something else).

In other words, "FOO" means "FOO.LISP.0" or some other default, but "FOO."
means "FOO..0".

*) Unix pathname handling is improved.

Case is now completely significant in Unix pathnames, as it ought to be.
You can now rename FOO to Foo and it should work.

*) Compiled functions record macros.

The macros found in a function being compiled are recorded in the debugging
info alist of the compiled function, under the key :MACROS-EXPANDED.
Thus, WHO-CALLS will work on macros if the places they were used were
compiled in 86.56 or later.

*) If you get an error in a background process, and a notification cannot be printed,
you can now type Terminal Call to cause the error handler to be run using the
cold load stream (which is what it would have done in any case before system 86).

Terminal Call's normal meaning is to enter a break loop using the cold load stream.
If there are pending background errors, it asks you about each one, one by one,
whether you want to handle that error.  If you say "N" to all of them,
you get the break loop.

Another useful strategy for handling this circumstance is to type
Terminal Control-Clear-Input, which unlocks the window system locks.
After that, the notification may print; or you may be able to select a window
or do Terminal 0 S.

You can tell there is an error in a background process which cannot
print its notification because stars at the ends of the mouse
documentation line flash.  The text of the line will tell you to try
Terminal Call.

*) SXHASH now accepts a second argument which, if T, says that SXHASH should use
the address of an object as its hash code if there is no other way to handle it.
This applies to everything but numbers, symbols, strings and lists.

In addition, flavor instances and named structures can now define the :SXHASH
operation.  This operation takes one argument, the new flag, and should return
the SXHASH value for the object.  This overrides use of the object's address.

If the second argument is NIL, the SXHASH of an array will now be the array's
active length, rather than zero.

Use a second argument of T if you are not going to save the SXHASH
values in files, and you are prepared to deal with the possibility that
GC will move an object (or you don't intend to use GC).  If you want to
be completely safe, omit the second argument.