anchor.diff:      (ltk:bind text "<Down>" (lambda (evt) (declare (ignore evt)) (next-command listener)) :exclusive t)
       (ltk:bind text "<BackSpace>" (lambda (evt) (declare (ignore evt)) (repl-delete-key-down listener)) :exclusive t)
       (ltk:bind text "<Escape>" (lambda (evt) (declare (ignore evt)) (clear listener)) :exclusive t)
  -    (add-key-binding text *key-code-complete* (lambda (evt) (on-code-complete listener evt)))
  -    (add-key-binding text *key-copy* (lambda (evt) (declare (ignore evt)) (on-copy text) t))
  -    (add-key-binding text *key-paste* (lambda (evt) (declare (ignore evt)) (on-paste text) t))
  -    (add-key-binding text *key-lookup* (lambda (evt) (declare (ignore evt)) (on-lookup-definition text)))
  +    (dolist (binding *text-keys*)
  +      (unless (third binding)
  +        ;;(format t "~%repl: binding ~A to ~A" (first binding) (second binding))
  +        (add-key-binding text (first binding)
  +                         (lambda (evt)
  +                           (declare (ignore evt))
  +                           ;;(format t "~%calling ~A" (second binding))
  +                           (funcall (second binding) text)))))
       (ltk:bind text "<Escape>" (lambda (evt) (declare (ignore evt)) (clear listener)) :exclusive t)
       (ltk:bind text "<Key-bracketleft>"
         (lambda (evt) (on-left-bracket-key text evt)) :exclusive t)
  
positive.code:                   (pathname-completions-to-string pathname-matches)))))))
        (error (ex) (ltk:do-msg ex)))))
  
  (defmethod on-code-complete ((listener listener) event)
    (case (complete-mode listener)
      (symbol
        (code-complete (inferior-win listener))
  
negative.code: (defmethod on-select-all ((txt ltk:text))
    (ltk::select-all txt))
  
  (defmethod on-code-complete ((text ltk:text))
    (code-complete text)
    (highlight text 'complete)
    (show-calltip text))
  