Using Common Lisp error system rather than Interlisp one
The Common Lisp condition framework can be viewed as an extension of the Interlisp one; Interlisp lets you catch all errors using NLSETQ and ERSETQ, RESETLST and RESETSAVE, but Common Lisp let's you catch more specific errors, define possible error returns while asking the user which they prefer.
I've been running with NLSETQGAG set to NIL so that (NLSETQ (some-expression-causing an IL:ERROR)) will still show a BREAK call. But in the case of SEDIT typein of #' (pound-sign single-quote) I get a BREAK window when the error (in SEdit) is expected.
The various NLSETQ's and ERROR!s in the Interlisp system code are a source of subtle bugs. RESETLST and RESETSAVE are dangerous because they should be per-process properties that are instead being delt with as GLOBALVARS. It is a performance hit to use special variables, but even worse to use them inconsistently.
IT might be possible to introduce the notion of a "process-local" variable which has the fixed cost of value-access but is stored in a process-vector block, where each Lisp process gets a block with default values.