Emacs - 如何为次要模式合并 :lighter(s)?

5

当存在特定组合的活动小模式时,是否可以在模式行上合并:lighters? 如果可以,那么请问如何实现?

例如:

  • 第一个小模式的 :lighter" -"

  • 第二个小模式的 :lighter" +"

如果两个小模式在缓冲区中同时激活,则合并 lighters:" ±"

1个回答

7
您可以通过修改minor-mode-alist来动态改变任何次要模式的亮度值:
(setcar (cdr (assq 'MODE minor-mode-alist)) VALUE)

当任一模式被激活或停用时,请检查另一个的状态,并相应地设置较轻的文本。当两者都处于激活状态时,您可以将其中一个设置为空字符串,将另一个设置为“组合”较轻的文本。
或者更好的方法是利用任何模式行构造都是有效的这一事实,并使其自动化。使用 delight.el 作为上述操作的包装器,并假设两种模式均由 mylibrary.el 定义,您可以这样说:
(delight '((mode+ (mode- " ±" " +") "mylibrary")
           (mode- (mode+ "" " -") "mylibrary")))

这并不完美——如果你想让关联的弹出菜单也结合两种模式的细节,还需要做更多的工作;但如果不需要,我建议你不要担心这个。在这里,模式行的外观是低成本而高效的。


这是一个非常棒的小库!!!非常感谢您提供的链接和使用示例--非常感激。 :) - lawlist
1
我赞同delight.el的实用性。但是我想引起注意的是'Commentary'中提到的一些模式会动态更新轻量级提示信息。在这种情况下,如果你想修改轻量级提示文本而不丢失功能,则需要查阅源代码。例如:Isearch+(显示区分大小写和换行)以及Icicles(显示当前完成行为)。 - Drew
WideN库是另一个动态更改轻量级(文本和键位映射/帮助)的库。 - Drew

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接