3

单击时如何使模式行弹出菜单中的条目成为次要模式菜单?

有关参考,请参阅此讨论https://github.com/flycheck/flycheck/issues/365#issuecomment-38386558

4

2 回答 2

2

似乎在单击mode-line模式条目时显示的菜单与单击菜单栏中的模式条目时显示的菜单相同,前提是该模式定义了顶级菜单条目。最简单的方法是定义一个像这样的顶级菜单

(easy-menu-define flycheck-menu flycheck-mode-map "Flycheck menu"
  '("Flycheck"
    ["Check current buffer" flycheck-buffer t]
    ["Clear errors in buffer" flycheck-clear t]
    ["Compile current buffer" flycheck-compile t]
    "---"
    ["Go to next error" flycheck-next-error t]
    ["Go to previous error" flycheck-previous-error t]
    ["Show all errors" flycheck-list-errors t]
    ["Google messages at point" flycheck-google-messages t]
    "---"
    ["Select syntax checker" flycheck-select-checker t]
    "---"
    ["Describe syntax checker" flycheck-describe-checker t]
    ["Read the Flycheck manual" flycheck-info t]))

如果您不想引入另一个菜单栏项,这可能不是解决方案。查看其中的功能minor-mode-menu-from-indicator似乎mouse.el它会查找从[menu-bar]获取模式行菜单开始的键绑定,这对您来说可能也很有趣。

于 2014-03-24T18:40:07.300 回答
2

请注意,您可以提供任何有效的模式行构造作为给定模式in的STRING/lighter 值。VARIABLEminor-mode-alist

因此,虽然这个值通常只是模式的名称(或一些适当的缩写),但您可以做更复杂的事情,例如包括设置文本属性——它可以包括一个local-map属性来指定鼠标单击的键映射(请参阅 参考资料C-hig (elisp) Properties in Mode RET)。

您可能会看M-x find-variable RET mode-line-modes RET一个示例(nb IIRC,此变量仅在 Emacs 24 中,其中mode-line-format变量的复杂性被分解为独立的子变量,以使整体结构更易于理解/修改)。

请参阅C-hig (elisp) Mode Line Format RET完整文档。

于 2014-03-24T21:18:44.973 回答