           (eval `(defun ,wrapper-name ()
                    "Auto-generated function"
                    (interactive)
+                   ,@binding-pre
                    (when ',wrapped
                      (call-interactively ',wrapped))
+                   ,@binding-post
                    (let ((bdoc ,@binding-doc)
                          (defdoc ,@default-doc))
                      (if bdoc

  (let* ((key (car binding))
         (wrapped (cadr binding))
         (binding-doc (spacemacs/mplist-get binding :doc))
         (wrapper-name (intern (format "spacemacs//%s-%s-%s"
                                       (symbol-name name)
                                       (symbol-name wrapped)


`:bindings EXPRESSIONS'
    One or several EXPRESSIONS with the form
    (STRING1 SYMBOL1 :doc STRING
                     :pre SEXP
                     :post SEXP
                     :exit SYMBOL)
    where:
    - STRING1 is a key to bound to the function SYMBOL1.
    - :doc STRING or SEXP is a STRING or an SEXP that evalutes
      to a string
    - :pre is an SEXP evaluated before the bound action
    - :post is an SEXP evaluated after the bound action
    - :exit SYMBOL is either `:exit t' or `:exit nil', if non nil then
      pressing this key will leave the micro-state (default is nil)."
  (declare (indent 1))
