     (with-current-buffer buf
       (erase-buffer)
       (org-mode)
-      (maphash
-       (lambda (package bindings)
-         (insert "\n\n* " (symbol-name package) )
-         (insert "
-| Key | Definition |
-|-----|------------|
+      (dolist (keymap
+               (sort (hash-table-keys evil-collection--bindings-record)
+                     (lambda (a b)
+                       (string-lessp (symbol-name a)
+                                     (symbol-name b)))))
+        (insert "\n\n* " (symbol-name keymap) "\n")
+        (insert "
+| State | 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))))
+        (cl-loop
+         for (state key def) in
+         (sort (gethash keymap evil-collection--bindings-record)
+               #'evil-collection--binding-lessp)
+         do
+         (when (and def (not (eq def 'ignore)))
+           (insert (format "| %s | %s | %S |\n"
+                           state
+                           (replace-regexp-in-string "|" "¦" key)
+                           def))))
+        (org-table-align))
+      (goto-char (point-min)))))
 
 (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
hash-table with key being the key to be bound and value as the
binding.")

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

                            (remove-hook 'after-load-functions #',fun)
                            (apply #'evil-define-key*
                                   ',state ,map-sym ',filtered-bindings))))
             (add-hook 'after-load-functions fun t))))))

(defun evil-collection--binding-lessp (a b)
  "Comparison function used to sort bindings of the form (state key def)."
  (let ((a-state (symbol-name (nth 0 a)))
        (b-state (symbol-name (nth 0 b)))
        (a-key (nth 1 a))
        (b-key (nth 1 b)))
    (if (not (string= a-state b-state))
        (string-lessp a-state b-state)
      (string-lessp a-key b-key))))

(defun evil-collection-describe-all-bindings ()
  "Print bindings made by Evil Collection to separate buffer."
