Ruby 我是否可以禁用";(键入e以重复宏)“;emacs中的消息?

Ruby 我是否可以禁用";(键入e以重复宏)“;emacs中的消息?,ruby,emacs,elisp,dot-emacs,Ruby,Emacs,Elisp,Dot Emacs,所以,我终于成功了,我很高兴能从vi和vim切换到emacs。。。我一直在把东西放在我的.emacs文件中,学习如何评估东西(更不用说熟悉移动命令),等等 现在,我的.emacs文件(require语句*)中的require行出现了问题,当我启动emacs时,它会爆炸(通常无法工作) 因此,这导致了以下情况: 在尝试调试上述情况的过程中,我所做的一个步骤是打开我试图需要的文件,并使用C-M-f和C-x C-e(以及后来的M-x eval buffer)逐位计算它,这一切都很好。但在一节一节地进行

所以,我终于成功了,我很高兴能从vi和vim切换到emacs。。。我一直在把东西放在我的.emacs文件中,学习如何评估东西(更不用说熟悉移动命令),等等

现在,我的.emacs文件(require语句*)中的require行出现了问题,当我启动emacs时,它会爆炸(通常无法工作)

因此,这导致了以下情况:

在尝试调试上述情况的过程中,我所做的一个步骤是打开我试图需要的文件,并使用
C-M-f
C-x C-e
(以及后来的
M-x eval buffer
)逐位计算它,这一切都很好。但在一节一节地进行的过程中,我厌倦了输入所有这些内容,所以我录制了一个键盘宏<代码>C-x(C-M-f C-x C-e C-x)然后
C-x e
。。。这在微型缓冲区中给了我一条消息(我想我使用的是正确的名称),说
(键入e以重复宏)
。这意味着我再也看不到每段代码的计算结果了。。。在这种情况下,虽然不是很关键,但我还是喜欢这样

这就引出了一个实际的问题:

有没有办法禁用该消息和/或使微型缓冲区同时显示多行

我知道
*Messages*
缓冲区,这可能会有所帮助,我只是想知道是否有办法禁用该消息,或者使其与其他消息共存。有什么建议吗

谢谢

  • 林德斯
*-手头的问题(这不是我真正的问题)是
(要求“ruby模式/ruby模式)
失败,即使emacs确实成功地(根据系统调用跟踪)打开并读取了ruby-mode.el文件。我想这是因为
provide
行只显示了
'ruby-mode
。我已经找到了解决方案,但如果有人能给我指出任何“最佳实践”,我将不胜感激。

我不知道你的“隐藏消息”问题

关于特性和require/provide函数,通常的做法是将.el文件命名为与它“提供”的特性相同的名称,尽管我不会称之为“最佳”

并非所有模块都这样做。在这些情况下,您需要查看EL文件,以确定.EL文件提供的功能的名称。或者检查文档,在那些罕见的情况下。然后只需在
require
调用中使用可选参数

(require 'feature-name  "name-of-el-file-that-provides-feature.el")
.el文件必须位于加载路径上

我不知道你的“隐藏消息”问题

关于特性和require/provide函数,通常的做法是将.el文件命名为与它“提供”的特性相同的名称,尽管我不会称之为“最佳”

并非所有模块都这样做。在这些情况下,您需要查看EL文件,以确定.EL文件提供的功能的名称。或者检查文档,在那些罕见的情况下。然后只需在
require
调用中使用可选参数

(require 'feature-name  "name-of-el-file-that-provides-feature.el")
.el文件必须位于加载路径上

(请允许我首先说:这是我很久以来在这里读到的最清楚的问题!干得好)

您可以点击F4来运行宏。这与C-Xe的功能大致相同,只是它不包含该消息

(请允许我首先说:这是我很久以来在这里读到的最清楚的问题!干得好)


您可以点击F4来运行宏。这与C-Xe的功能大致相同,只是它不包含该消息

要完全禁用该功能,可以将其添加到.emacs中:

(setq kmacro-call-repeat-key nil)

(当前)无法在没有消息的情况下保持功能的启用状态。

要完全禁用该功能,可以将其添加到.emacs中:

(setq kmacro-call-repeat-key nil)

(目前)没有办法在没有信息的情况下保持功能启用。

好吧,面对“没有办法做到”答案的挑战(我对此表示感谢),我开始尝试并找到一种方法来做到这一点

我曾想过,它会很好地有一些东西显示在模式行,而不是作为一个消息,所以

我阅读了的(一些可通过网络访问的版本),和,以及各种其他网页。我试过一些东西。我做了一些调试。最后,我提出了一点elisp(不完美——下面还有更多内容):

;;;;; change kmacro-call-macro (C-x e) to not generate any messages,
;;;;; and instead add a minor mode to the modeline
(defadvice kmacro-call-macro (around kmacro-call-macro-without-message activate)
  "run kmacro-call-macro without any messages"
  (fset 'saved-message (symbol-function 'message))
  (unless (assq 'kmacro-repeat-mode minor-mode-alist)
    (setq minor-mode-alist
          (cons '(kmacro-repeat-mode " MACRO-REPEAT!") minor-mode-alist)))
  (setq kmacro-repeat-mode t)
  (defun message (format-string &rest args))
  ad-do-it
  (fset 'message (symbol-function 'saved-message))
  (setq kmacro-repeat-mode nil))
我很确定这不是最干净的方式——事实上,它实际上似乎有点问题——不总是在应该的时候打开和关闭模式行消息。但它主要起作用,这让我很高兴

如果有人对如何进一步改进有任何建议,我将不胜感激

我认为另一个解决方案是重新编写kmacro call宏以基本上包含此功能,可能还有另一个自定义变量来控制它。我想,这样做也会允许消息中出现的附加信息(重复的键;重复计数信息)。也许使用defadvice就可以了?可能通过重新定义的消息函数或其他方式影响ad返回值的值

无论如何,上面的代码已经添加到我的
.emacs
文件中,希望在我更好地了解elisp及其最佳实践之后,能够在某个时候得到改进

我希望其他人会觉得这很有用

同样,对此的改进是最受欢迎的

编辑:

我最初有:

  (defun message (s &optional rest stuff))
应该是(现在是,如上所述):


希望这能解决问题!我断言,现在太早了,说……/ P> > P:好吧,接受“无能为力”的挑战。