YASnippet - 如何创建一个右键单击上下文菜单 - 弹出式菜单
问题描述:
我正在寻找一种方法来复制YASnippet简单的菜单栏条目为我的库中的片段(自动出现在菜单中无论使用何种模式),并将它们合并到我自己的自定义菜单中。 yas--minor-mode-menu
的输入不起作用。我正在寻找的代码将基本上是相同的一个与普通简单的菜单栏的定制作品:YASnippet - 如何创建一个右键单击上下文菜单 - 弹出式菜单
(easy-menu-define my-custom-menu LaTeX-mode-map "My own custom menu"
'("My Stuff"
["YASnippet" yas--minor-menu-mode t]
("Sub Menu"
["My subentry" my-obscure-function t])))
在截图的右键单击快捷菜单下面使用几乎同样的事情:
(define-key map [mymenu] (cons "MyMenu" (make-sparse-keymap "hello world")))
(define-key map [mymenu 01] (cons "latexmk" 'run-latexmk))
(define-key map [mymenu 02] (cons "jump-to-pdf" 'TeX-view))
我不愿意放弃,只是定义了每个片断,然后创建一个菜单项的每个定义:
(defun bold()
(interactive)
(yas--expand-or-visit-from-menu (quote latex-mode) "bold"))
screenshot1 http://www.lawlist.com/images/YASnippet.png screenshot2 http://www.lawlist.com/images/YASnippet2.png
答
(defvar lawlist-context-menu-map
(let ((map (make-sparse-keymap "Context Menu")))
(define-key map [help-for-help] (cons "Help" 'help-for-help))
(define-key map [seperator-two] '(menu-item "--"))
(define-key map [my-menu] (cons "LAWLIST" (make-sparse-keymap "My Menu")))
(define-key map [my-menu 01] (cons "Next Line" 'next-line))
(define-key map [my-menu 02] (cons "Previous Line" 'previous-line))
(define-key map [seperator-one] '(menu-item "--"))
map) "Keymap for the LAWLIST context menu.")
(defun lawlist-popup-context-menu (event &optional prefix)
"Popup a context menu."
(interactive "@e \nP")
(define-key lawlist-context-menu-map [lawlist-major-mode-menu]
`(menu-item ,(symbol-name major-mode)
,(mouse-menu-major-mode-map) :visible t))
(define-key lawlist-context-menu-map (vector major-mode)
`(menu-item ,(concat "YAS " (symbol-name major-mode))
,(gethash major-mode yas--menu-table)
:visible (yas--show-menu-p ',major-mode)))
(popup-menu lawlist-context-menu-map event prefix))
(global-set-key [mouse-3] 'lawlist-popup-context-menu)