anchor.diff:              :initform nil
               :type list
               :documentation "List of parent keymaps.
  -Parents are ordered by priority, the first parent has highest priority.")))
  -
  -(declaim (ftype (function (&rest keymap) keymap) make-keymap))
  -(defun make-keymap (&rest parents)
  +Parents are ordered by priority, the first parent has highest priority.")
  +   (default :accessor default
  +            :initarg :default
  +            :initform nil
  +            :type symbol
  +            :documentation "Default symbol when no binding is found.")))
  +
  +(declaim (ftype (function (&key (:default symbol) (:parents (types:proper-list keymap))) keymap) make-keymap))
  +(defun make-keymap (&key default parents)
     ;; We coerce to 'keymap because otherwise SBCL complains "type assertion too
     ;; complex to check: (VALUES KEYMAP::KEYMAP &REST T)."
     (coerce
      (make-instance 'keymap
                     :parents parents
  +                  :default default
                     ;; We cannot use the standard (make-hash-table :test #'equalp)
                     ;; because then (set "a") and (set "A") would be the same thing.
  -                  :entries (fset:map))
  +                  :entries (fset:empty-map default))
      'keymap))
   
   (defun keymap-p (object)
  
positive.code:   (if (= (length keys) 1)
        (progn
          (when (fset:@ (entries keymap) (first keys))
            ;; TODO: Notify caller properly.
            (warn "Key was bound to ~a" (fset:@ (entries keymap) (first keys))))
          (setf (fset:@ (entries keymap) (first keys)) sym))
        (let ((submap (fset:@ (entries keymap) (first keys))))
  
negative.code: (defparameter modifier-list
    (list +control+ +meta+ +shift+ +super+ +hyper+)
    "List of known modifiers.
  `make-key' and `define-key' raise an error when setting a modifier that is not
  in this list.")
  
  (deftype key-status-type ()
    `(or (eql :pressed) (eql :released)))
  