elisp easy-menu定位

问题描述 投票:0回答:2

这将在菜单栏中的某个位置定位emacs用户定义的菜单。 我使用的是我使用的不同选项。无最佳

[从第一原理]

;; Define a top level Menue item "Openflow" and position it after "Tools" (define-key-after global-map [menu-bar openflow] (cons "Openflow" (make-sparse-keymap "Openflow")) 'Tools) ;; CAUTION: Menus are defined in reverse order. END comes first!! (define-key global-map [menu-bar openflow openflow-download-mp] '("download openflow mp image to target" . openflow-download-mp-image-to-target)) (define-key global-map [menu-bar openflow telnet-to-target] '("Telnet to target" . (lambda () (interactive) (telnet target)))) (define-key global-map [menu-bar openflow separator4] '("---")) ;; Reading Upwards: All debugging etc starts here ;; But here we need to add the new subheading first (define-key global-map [menu-bar openflow cleanups] (cons "Cleanups" (make-sparse-keymap "Cleanups"))) (define-key global-map [menu-bar openflow cleanups lp-emake-clean] '("LP emake_wrapper clean" . (lambda () (interactive) (openflow-emake-wrapper my-openflow-lp-build-path "clean")))) ;; etc etc etc...

[弱点]

非常凌乱..非常混乱。反向顺序 +子菜单为正常顺序:-)

easy模式太自动了

如果我在轻松模式下做同样的事情。

(easy-menu-define openflow2 global-map "Openflow2" '("Openflow2" ["download openflow mp image to target" openflow-download-mp-image-to-target t] ["Telnet to target" (telnet target)] "-----" ("Cleanups" ["LP emake_wrapper clean" (openflow-emake-wrapper my-openflow-lp-build-path "clean")] )))

[弱点]

非常直观的,非常自动的,消除了LAMDA功能等。

,但是,它在“文件”之前添加了第一个位置 - 看起来很糟糕。没有办法“定义键”

[混合模型]

“混合模型”(定义键 - 稀疏 - keymap和Easy-menu-add-item)很复杂,但凌乱 (define-key-after global-map [menu-bar openflow3] (cons "Openflow3" (make-sparse-keymap "Openflow3")) 'Tools) (easy-menu-add-item nil '("Openflow3") ["download openflow mp image to target" openflow-download-mp-image-to-target]) (easy-menu-add-item nil '("Openflow3") ["Telnet to target" (telnet target)]) (easy-menu-add-item nil '("Openflow3") "-----") (define-key-after global-map [menu-bar openflow3 cleanups3] (cons "Cleanups3" (make-sparse-keymap "Cleanups3")) '("-----")) (easy-menu-add-item nil '("Cleanups3") ["LP emake_wrapper clean" (openflow-emake-wrapper my-openflow-lp-build-path "clean")])

我无法进行嵌套菜单

请告诉新手我在做什么错?

我正在使用类似的东西:

(easy-menu-define openflow2 nil "Openflow2"
  '("Openflow2"
    ["download openflow mp image to target" openflow-download-mp-image-to-target t]
    ["Telnet to target" (telnet target)]
    "-----"
    ("Cleanups"
     ["LP emake_wrapper clean" (openflow-emake-wrapper  my-openflow-lp-build-path "clean")]
(define-key-after (lookup-key global-map [menu-bar])
  [openflow]
  (cons "Openflow" openflow2) 'tools)

定义一个带有易于menu-define的菜单,但将其放在菜单栏中的正确位置。

您的意思是“嵌套菜单”?如果您的意思是submenu

,那么答案是要为顶级菜单做同样的事情:使用
emacs elisp
2个回答
2
投票
将键绑定到

cars的

car
car

car

0
投票
cdr

是菜单keymap. 这里是

dired+.el
的一个例子。它定义了Dired Menu-Bar菜单的子菜单,该子菜单上的菜单上是可变的。 子的菜单keymap是变量的值Mark diredp-menu-bar-mark-menu consult of ELISP手册,节点

diredp-mark-tags-menu

,以获取更多信息。

如果您真的想使用Easy-Menu来定义您的子菜单(如您在下面的评论中所说的那样),请查看库
diredp-menu-bar-mark-menu
。这样做(对于弹出菜单,而不是菜单键菜单,但这个想法是相同的)。

例如:

;; Menu-bar `Mark' Menu.
(defvar diredp-menu-bar-mark-menu (make-sparse-keymap "Mark"))
(define-key dired-mode-map [menu-bar mark] (cons "Mark" diredp-menu-bar-mark-menu))


;; `Mark' > `Tagged' submenu.
(defvar diredp-mark-tags-menu (make-sparse-keymap "Tagged")
  "`Tags' submenu for Dired menu-bar `Mark' menu.")
(define-key diredp-menu-bar-mark-menu [mark-tags] (cons "Tagged" diredp-mark-tags-menu))

(define-key diredp-mark-tags-menu [diredp-unmark-files-tagged-none]
  '(menu-item "Unmark Not Tagged with Any..." diredp-unmark-files-tagged-none
    :help "Unmark files that are not tagged with *any* of the tags you enter"))
为在现有菜单中的子菜单相对定位,使用

Defining Menus
(照常)。
    

可以做一些用简单的菜单来定义键,但以前。我将其添加到我的.emacs.el:

facemenu+.el

最后一行将新的
(easy-menu-add-item facemenu-menu () (easy-menu-create-menu ; (menu-name menu-items) "Syntax Highlighting (Font Lock)" '(["In All Buffers" global-font-lock-mode :style toggle :selected global-font-lock-mode :active t] ["In Current Buffer" font-lock-mode :style toggle :selected font-lock-mode :active t] "--" ["More In Current Buffer" font-lock-fontify-more (nth 2 (if (boundp 'flm-font-lock-fontify-level) flm-font-lock-fontify-level font-lock-fontify-level))] ["Less In Current Buffer" font-lock-fontify-less (nth 1 (if (boundp 'flm-font-lock-fontify-level) flm-font-lock-fontify-level font-lock-fontify-level))] "--" ["Cycle Keywords (Icicles)" icicle-next-font-lock-keywords-repeat :active (and (boundp 'icicle-mode) icicle-mode (fboundp 'icicle-next-font-lock-keywords-repeat))] ["+ Choose Keywords (Icicles)" icicle-font-lock-keyword :active (and (boundp 'icicle-mode) icicle-mode (fboundp 'icicle-font-lock-keyword))])) "Syntax Highlighting (Font Lock)")

添加到define-key-after

菜单项目之前的
;*** ;*** Edit Menu additions (easy-menu-define edit-occur-menu nil "Edit Occur menu" '("Occur" ["Occur..." occur] ["Flush Matching Lines..." flush-lines] ["Keep Matching Lines..." keep-lines] "---" ["How Many..." how-many] )) (easy-menu-add-item nil '("Edit") edit-occur-menu "Go To") 菜单中的全局菜单栏。

我只想添加菜单栏中的顶级项目:

edit-occur-menu
将在帮助之前添加菜单。
    

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.