次要模式模式 - 行菜单

时间:2014-03-24 09:50:20

标签: emacs menu elisp modeline

单击时,如何在模式行弹出窗口中输入次要模式菜单?

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

2 个答案:

答案 0 :(得分:2)

单击模式mode-line条目时显示的菜单似乎与单击菜单栏中的模式条目时显示的菜单相同,提供< / em>该模式定义了顶级菜单条目。最简单的方法是定义一个顶级菜单,如此

(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]开头的键绑定来获取模式行菜单,这对您来说也很有趣。

答案 1 :(得分:2)

请注意,您可以为STRING中的给定模式VARIABLE提供任何有效模式行构造作为minor-mode-alist /更轻的值。

因此,尽管此值通常只是模式的名称(或其某些适当的缩写),但您可以执行更复杂的操作,例如包括设置文本属性 - 可以包含local-map属性来指定鼠标点击的键盘映射(参见 Ch i g (elisp) Properties in Mode RET )。

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

有关完整文档,请参阅 C-h i g (elisp) Mode Line Format RET