gpt4 book ai didi

emacs - 从 emacsclient 静默调用 defun

转载 作者:行者123 更新时间:2023-12-01 09:47:59 27 4
gpt4 key购买 nike

在编译源代码的过程中,我希望 GNU Make 调用一个 emacs defun。为此,我有 2 个选择:

  • 启动一个新的 emacs 实例,加载所需的函数并调用它。
  • 像这样从 emacsclient 调用 defun:

    emacsclient --eval "(my-emacs-defun)"

后者有优势,它更快,因为 emacs 服务器已经在运行并加载了所需的 defun。

但这也有一个缺点,如果 (message ...)(my-emacs-defun) 调用,它会中断我的事件 emacs session 。我可以尝试修改 (my-emacs-defun) 所以 (message ...) 不会被调用,但是在使用 emacs 内置函数时真的很难。

因此我想知道如何抑制 (my-emacs-defun) 中的 (message ...)。是否可以在调用 (my-emacs-defun) 时更改 (message ...) 行为?我可以为此使用(defadvice)`吗?

编辑真正的问题是,消息显示在迷你缓冲区中。那时使用迷你缓冲区时很烦人(例如在 (find-file) 期间)。

最佳答案

只需为您的调用重新定义消息函数(暂时):

(flet ((message (msg) ))
(my-emacs-defun)))

由于全局函数的动态作用域,名称message 将在flet 表达式内执行时被重新定义,并在执行后返回其原始含义退出舰队

示例:

(defun verbose ()
(message "hi"))

(let ()
(message "one")
(flet ((message (msg) ))
(verbose))
(message "two"))
; ->
; one
; two

您也可以暂时重新绑定(bind) Messages 缓冲区,但我不知道它存储在哪里。

关于emacs - 从 emacsclient 静默调用 defun,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14831334/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com