利用空的回声区域显示信息


10

回声区域大部分时间都是空的,这使我认为可以使用它来显示一些信息。例如,org-clock在modeline上显示当前任务,剩余时间和总经过时间。这个信息是不是真的有读取(在模式行可以相当短),重复每个模式行(因为它适用于整个Emacs会话),而不是有用,我很愿意牺牲一些珍贵的模式行空间,它。另一方面,当此处没有其他显示时,它可能会出现在回声区域中。

是否有实现这一目标的规范方法?我曾想过要侵入一个插入函数minibuffer-inactive-mode-hook(但是不能可靠地工作,例如,一旦再次使用回显区域,该消息就会消失),或者向未记录的消息发送垃圾邮件(但这会与其他使用回声区和迷你缓冲区)。

这个版本的穷人版将使用空闲计时器,但是在没有emacs空闲的情况下,回显区域可以为空(例如,输入某些文本时)。


1
显示的回显区域是`* Echo Area 0 *`或`* * Echo Area 1 *`的内容,它们是“普通”缓冲区。修补Emacs应该是可能的,以便每当这些缓冲区“被冲掉”(或显示并清空)时提供钩子运行,以便可以有效且可靠地实现此功能。
Stefan

这并不是您要记住的,但是Bastien Guerry做了一些有趣的事情来节省屏幕空间,尤其是在框架标题中显示模式行:bzg.fr/emacs-strip-tease.html
Dieter.Wilhelm 2015年

Answers:


4

关于此问题的评论提到名为symon的软件包使用了此功能。

当微型缓冲区处于非活动状态时,通过向未记录的消息发送垃圾邮件,并在每次发出命令时停止重新显示,可以实现此目的。样板很短,使用了几分钟后,我没有注意到任何问题:消息和最小缓冲区的使用仍然优先于消息。

关键组件是:

  • 显示功能,在空闲计时器上运行(调用message-log-max设置为的消息,以nil使显示的字符串不会进入*Messages*缓冲区)
  • 重新显示功能,在计时器上运行
  • 停止显示的功能,运行 pre-command-hook

唯一的问题是,无论何时运行命令(包括键入时),显示都会停止。

对于那些感兴趣的人,我已经将相关代码提取到github上的样板包中。


1

答案,国际海事组织,是没有。回显区域用于临时消息。许多事情明确地抹去了那里可能已经回显的任何东西。因此,以任何合理的方式实现您的要求都是有问题的,IMO。

总之,请使用替代方法。这里有一些:

  1. 使用其他缓冲区(例如,为此目的而保持打开状态的小框架或窗口)。操作简单,您可以四处移动,编辑,删除它,或使用它进行其他任何操作。

  2. 使用部分或全部模式行(显然已经考虑过)。

  3. 使用标题行。

  4. 使用框架标题。

如果是我,我可能会选择第一名。(但是我真的不希望/不需要这样的状态信息的全时显示。我更可能定义一个命令,根据需要向我显示信息(甚至是历史/日志)。)


发表评论后更新:

您已经说过,在您的问题中,“ 一旦再次使用回显区域,消息就会消失 ”。因此,听起来像使用短暂的空间,因为回声区域无法满足您的需求。您的评论答复似乎与此矛盾。

如果您确实要使用回声区域,请使用minibuffer-inactive-mode-hook,如前所述,或使用计时器以message其他方式调用或在回声区域中插入时间消息。但是,您已经注意到了问题所在。这些问题(覆盖,擦除)是由回声区域的(预期的短暂性质引起的

总而言之,您想使用一个临时消息区域,但是您不希望消息在再次使用该区域后消失。

(顺便说一句,您提到模式行信息在每个模式行中都重复:不必这样。您可以使模式行特定于特定的缓冲区等。IOW,您可以选择一条模式行始终(或定期)显示您的时钟或其他内容。)


谢谢您的建议!首先,尽管我不太了解,为什么会有问题呢?我希望将回传区域atm的内容覆盖回传区域的任何其他用途,因此将其擦除是可以的。并且仅当回声区域为空时才显示额外的信息,因此没有要擦除的内容。这听起来不合理吗?关于#1,问题是我不想浪费屏幕空间。即使是空的,回声区域也总是存在。我列出了#2的一些问题,而#3和#4共享了许多这些问题。
T. Verron 2015年

为什么我想要的信息的专职显示,采取例如org-clock例如从问题:我想计时器滴答下来,提醒我的是我应该做的,而且我应该做的是,现在的权利,如经常。
T. Verron 2015年

“一旦再次使用回显区域,该消息就会消失”确定还不清楚。我的意思是,如果我使用minibuffer-inactive-mode-hook并退出迷你缓冲区,则会显示该消息。然后,如果其他命令将某些内容打印到回显区域,则会添加此新消息,并且短暂消息不会再出现(因为这次没有涉及小型缓冲区)。
T. Verron

关于Modeline,主要的问题是那里的可用空间很小(我经常有很多窗户,水平分开,所以模式线很短)。
T. Verron

再说一次-“ 总而言之,您想使用一个用于临时消息的区域,但是您不希望消息在该区域再次使用后立即消失。 ” 如果愿意,可以使用带有message或的计时器post-command-hook。但是,消失/覆盖的本质问题有时会抬起头来,因为您正试图将临时显示区域用于您不想成为临时的区域。
Drew
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.