更改Emacs Lisp中的工具栏

时间:2013-12-14 05:30:45

标签: emacs elisp

我正在尝试使用自己的图像和命令自定义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)]))

导致菜单项出现,但随后很快消失,没有明显的触发器。

如何更正此行为?

1 个答案:

答案 0 :(得分:1)

这部分有问题:

`(menu-item
    ,display-name
    ,(make-symbol display-name) ; <=========== GET RID OF THIS
    ,definition

删除make-symbol部分,即可获得手动使用的内容。并且工具栏中会出现一个图标。

如果打印调用wk-add-toolbar-button的结果,您可以看到错误:

(menu-item "Build" Build smart-compile :image
           [(image :type xpm :file "c:/Users/William/Desktop/emacs-icons/build.xpm")
            (image :type xpm :file "c:/Users/William/Desktop/emacs-icons/build.xpm")
            (image :type xpm :file "c:/Users/William/Desktop/emacs-icons/build-disabled.xpm")
            (image :type xpm :file "c:/Users/William/Desktop/emacs-icons/build-disabled.xpm")])

Build符号是非常的。您只需要"Build"字符串和smart-compile符号。