anchor.diff:    (coerce (str:join " " (mapcar #'key->keyspec keys)) 'keyspecs-type))
   
   ;; TODO: Do we need a keymap->list function?
  +;; Probably yes if we want to describe a mode or have the equivalent of Emacs' "C-h b".
  +
  +;; TODO: (command-keys keymap sym) function to return list of keys known for SYM.
  +;; Support multiple keymaps?
  +
  +;; TODO: Remap binding, e.g.
  +;; (define-key *foo-map* (remap 'bar-sym) 'new-sym)
  +
  +;; TODO: We need a "lookup-key" that goes through a list of keymaps.
  +
  +;; TODO: Function that composes keymaps.
  +;; (compose-keymaps ...) => KEYMAP
  +
  +;; TODO: Add timeout support, e.g. "jk" in less than 0.1s could be ESC in VI-style.
  
positive.code: ;; #'equalp tests.
  (defstruct (key (:constructor %make-key (code value modifiers status))
                  (:copier %copy-key))
    (code 0 :type integer)
    (value "" :type string)
    (modifiers (fset:set) :type fset:wb-set)
    (status :pressed :type key-status-type))
  
negative.code: (defvar *default-translator* #'translate-shift-control-combinations
    "Default key translator to use in `keymap' objects.")
  
  ;; TODO: Enable override of default and translator in lookup?
  (defclass keymap ()
    ((entries :accessor entries
              :initarg :entries
  