anchor.diff:  (define-condition simple-editor-error (simple-error) ())
   (define-condition minibuffer-complete () ())
   
  +(defvar *editor-window* nil)
  +(defvar *frame* nil)
   (defvar *minibuffer* nil)
   (defvar *delayed-minibuffer-clear* nil)
   (defvar *dispatch-table* (make-hash-table))
   (defvar *last-key-pressed* nil)
   (defvar *last-command* nil)
  -(defvar *input-stream* nil)
  -(defvar *main-screen* nil)
   (defvar *main-screen-buffer* nil)
   
   (defun global-key (character)
  
positive.code:            (funcall fn))
           (setf *last-command* fn)))))
  
  (defun ed (&optional thing)
    (unless *buffer*
      (set-buffer (get-buffer-create "*scratch*"))
      (setf *main-screen-buffer* (get-buffer-create "*scratch*"))
      (setf *minibuffer* (get-buffer-create " *minibuffer*")
            (buffer-key *minibuffer* #\Newline) 'exit-minibuffer))
    ;; Avoid the echo behaviour of framebuffer streams.
    (let ((*input-stream* (make-instance 'sys.int::ps/2-keyboard-stream)))
      (sys.int::with-saved-screen (fb) ; binding special variables using lambda seems to be astonishingly broken.
        (let ((*main-screen* fb))
          (handler-case
              (editor-loop)
            (exit-editor ()))))))
  
negative.code:       (setf line next))))
  
  (defun redraw-screen ()
    (sys.graphics::window-redraw *frame*))
  
  (defun read-from-minibuffer (prompt-string &key read)
    (let ((*buffer* *minibuffer*)
  