anchor.diff:  (in-package :next)
   (annot:enable-annot-syntax)
   
  -(defclass gtk-interface (interface) ())
  +(defclass gtk-interface (interface)
  +  ((modifiers :accessor modifiers :initform ())))
   
   (defmethod initialize ((interface gtk-interface))
     (log:debug "Initializing GTK Interface")
  
positive.code:         ((eq character #\Tab) "TAB")
          (t (string character))))
  
  (defmethod process-key-press-event ((sender gtk-window) event)
    (let* ((modifier-state (gdk:gdk-event-key-state event))
           (modifiers ())
           (character (gdk:gdk-keyval-to-unicode (gdk:gdk-event-key-keyval event)))
           (character-code (char-code character))
           (key-string (character->string character)))
      (when (member :control-mask modifier-state)
        (push "C" modifiers))
      (when (member :mod1-mask modifier-state)
        (push "M" modifiers))
      (when (or (member :super-mask modifier-state)
                (and (member :mod2-mask modifier-state)
                     (member :meta-mask modifier-state)))
        (push "S" modifiers))
      (unless (eq character #\Nul)
        (push-input-event character-code key-string modifiers -1 -1 nil sender))))
  
  (defclass gtk-buffer (buffer)
    ((gtk-object :accessor gtk-object)))
  
negative.code:     (gobject:g-signal-connect
       gtk-object "key_press_event"
       (lambda (widget event) (declare (ignore widget))
         (push-modifier *interface* event)
         (process-key-press-event window event)))
      (gobject:g-signal-connect
       gtk-object "key_release_event"
       (lambda (widget event) (declare (ignore widget))
         (pop-modifier *interface* event)))
      (gobject:g-signal-connect
       gtk-object "destroy"
       (lambda (widget) (declare (ignore widget))
  