+(defun lmc-tool-bar-to-string (&optional map)
+ (let ((res ""))
+ (map-keymap
+ (lambda (_k v)
+ (when (eq (car v) 'menu-item)
+ (let* ((label (nth 1 v))
+ (cmd (nth 2 v))
+ (plist (nthcdr (if (consp (nth 3 v)) 4 3) v))
+ (help-echo (plist-get plist :help))
+ (image (plist-get plist :image))
+ (enable-exp (if (plist-member plist :enable)
+ (plist-get plist :enable)
+ t))
+ (enable (eval enable-exp))
+ (map (let ((map (make-sparse-keymap)))
+ (define-key map [header-line mouse-1] cmd)
+ (define-key map [header-line mouse-2] cmd)
+ map))
+ (button
+ (propertize " " 'help-echo (or help-echo label)
+ 'keymap map
+ 'face 'header-line
+ 'mouse-face (if enable 'mode-line-highlight)
+ 'rear-nonsticky '(display keymap help-echo)
+ 'display (if (and (eq 'image (car image))
+ (not enable))
+ `(image :conversion disabled
+ ,@(cdr image))
+ image))))
+ (setq res (concat res (propertize " " 'display '(space :width 0.5)
+ 'face 'header-line
+ )
+ button)))))
+ (or (let ((tool-bar-map map)) (tool-bar-make-keymap))
+ (key-binding [tool-bar])))
+ res))
+