 
 (defun evil-collection-define-key (state map-sym &rest bindings)
   "Wrapper for `evil-define-key*' with additional features.
-Filter keys on the basis of `evil-collection-key-whitelist' and
-`evil-collection-key-blacklist'. Store bindings in
+Unlike `evil-define-key*' MAP-SYM should be a quoted keymap other
+than the unquoted keymap required for `evil-define-key*'.  This
+function adds the ability to filter keys on the basis of
+`evil-collection-key-whitelist' and
+`evil-collection-key-blacklist'. It also stores bindings in
 `evil-collection--bindings-record'."
   (declare (indent defun))
   (let* ((whitelist (mapcar 'kbd evil-collection-key-whitelist))
          (blacklist (mapcar 'kbd evil-collection-key-blacklist))
-         (record (gethash map-sym evil-collection--bindings-record
-                          (make-hash-table :test 'equal)))
+         (record (gethash map-sym evil-collection--bindings-record))
          filtered-bindings)
     (while bindings
       (let ((key (pop bindings))
             (def (pop bindings)))
         (when (or (and whitelist (member key whitelist))
                   (not (member key blacklist)))
-          (puthash key def record)
+          (if (consp state)
+              (dolist (st state)
+                (push (list (if st st 'all) (key-description key) def)
+                      record))
+            (push (list (if state state 'all) (key-description key) def)
+                  record))
           (push key filtered-bindings)
           (push def filtered-bindings))))
+    (puthash map-sym record evil-collection--bindings-record)
     (setq filtered-bindings (nreverse filtered-bindings))
     (cond ((and (boundp map-sym) (keymapp (symbol-value map-sym)))
            (apply #'evil-define-key*

    (with-current-buffer buf
      (erase-buffer)
      (org-mode)
      (maphash
       (lambda (package bindings)
         (insert "\n\n* " (symbol-name package) )
         (insert "
| Key | Definition |
|-----|------------|
")
         (maphash
          (lambda (key def)
            ;; Don't print nil definitions
            (when def
              (insert (format "| %s | %S |\n"
                              (replace-regexp-in-string
                               "|" "¦" (key-description key))
                              def))))
          bindings)
         (org-table-align))
       evil-collection--bindings-record))))

(defun evil-collection--translate-key (state keymap-symbol
                                             translations

(defvar evil-collection--bindings-record (make-hash-table :test 'eq)
  "Record of bindings currently made by Evil Collection. This is
a hash-table with the package symbol as a key.  The associated
values are the package's bindings which are stored as a list of
the form ((STATE KEY BINDING)).")

(defvar evil-collection-setup-hook nil
  "Hook run by `evil-collection-init' for each mode that is evilified.
