               (interactive)
               (let ((doc ,@doc))
                 (when doc
-                  (lv-message (spacemacs//micro-state-propertize-doc
-                               (format "%S: %s" ',name doc)))))
+                  (apply ',msg-func (list (spacemacs//micro-state-propertize-doc
+                                      (format "%S: %s" ',name doc))))))
               ,(when exec-binding
                  (spacemacs//micro-state-auto-execute bindings))
               ,@on-enter

    Evaluate SEXP when leaving the micro-state.

`:doc STRING or SEXP'
    A STRING or a SEXP that evaluates to a string

`:persistent BOOLEAN'
    If BOOLEAN is non nil then the micro-state never exits. A binding
    with an explicitly set `exit t' property is required.

`:bindings EXPRESSIONS'
    One or several EXPRESSIONS with the form

     (when binding
       (call-interactively (cadr binding)))))

(defun spacemacs//micro-state-create-wrappers (name doc msg-func bindings)
  "Return an alist (key wrapper) for each binding in BINDINGS."
  (mapcar (lambda (x) (spacemacs//micro-state-create-wrapper
                       name doc msg-func x))
          (append bindings
                  ;; force SPC to quit the micro-state to avoid a edge case
                  ;; with evil-leader
                  (list '("SPC" nil :exit t)))))

(defun spacemacs//micro-state-create-wrapper (name default-doc msg-func binding)
  "Create a wrapper of FUNC and return a tuple (key wrapper BINDING)."
  (let* ((key (car binding))
         (wrapped (cadr binding))
