【发布时间】:2013-12-15 09:37:00
【问题描述】:
我正在尝试使用我自己的图像和命令自定义 Emacs 工具栏。每个按钮我有两个图像,一个“禁用”和一个“启用”图像。不幸的是,elisp 只提供tool-bar-add-item,它允许您指定单个图像。但是,工具栏的扩展菜单项语法具有:image 属性,对于启用/禁用和选择/取消选择的所有组合,可以将其设置为单个图像或四个图像的矢量。我将我的两个图像存储在“filename.xpm”和“filename-disabled.xpm”中,并且我定义了一个帮助函数,让我可以轻松地以这种格式定义新的工具栏项:
(defun wk-add-toolbar-button (display-name icon definition &rest properties)
"Add an item to the toolbar
Automatically look for ICON.xpm and ICON-disabled.xpm"
(let ((images
`((,(concat icon ".xpm") xpm nil)
(,(concat icon ".xpm") xpm nil)
(,(concat icon "-disabled.xpm") xpm nil)
(,(concat icon "-disabled.xpm") xpm nil))))
(define-key
global-map
(vector 'tool-bar (make-symbol display-name))
`(menu-item
,display-name
,(make-symbol display-name)
,definition
:image ,(vconcat (mapcar (lambda (xs) (apply 'create-image xs)) images))
,@properties))))
但是当我调用这个函数时,比如:
(setq tool-bar-map (make-sparse-keymap))
(wk-add-toolbar-button "Build" "c:/Users/William/Desktop/emacs-icons/build" 'smart-compile)
我的工具栏仍然是空的。
手动添加图片,如下所示:
(define-key global-map [tool-bar build]
`(menu-item ,(symbol-name 'build) ,'smart-compile :image [
,(create-image "c:/Users/William/Desktop/emacs-icons/build.xpm" 'xpm nil)
,(create-image "c:/Users/William/Desktop/emacs-icons/build.xpm" 'xpm nil)
,(create-image "c:/Users/William/Desktop/emacs-icons/build-disabled.xpm" 'xpm nil)
,(create-image "c:/Users/William/Desktop/emacs-icons/build-disabled.xpm" 'xpm nil)]))
导致菜单项出现,但随后很快消失,没有明显的触发。
如何纠正这种行为?
【问题讨论】: