Emacs:如何使特定的缓冲区在电流被终止后出现?

Emacs:如何使特定的缓冲区在电流被终止后出现?,emacs,Emacs,我们有buf-1,其他缓冲区,buf-2 I(kill buffer buf-1),如何可靠地使buf-2代替1出现。 我的意思是Emacs如何做到这一点,而不仅仅是让我的钩子 从源代码中,kill buffer调用: +replace_buffer_in_windows (buffer); | +-+(switch-to-prev-buffer window 'kill) | +-+(window-prev-buffers window) and other function

我们有
buf-1
,其他缓冲区,
buf-2

I
(kill buffer buf-1)
,如何可靠地使
buf-2
代替1出现。
我的意思是Emacs如何做到这一点,而不仅仅是让我的钩子

从源代码中,
kill buffer
调用:

+replace_buffer_in_windows (buffer);
|
+-+(switch-to-prev-buffer window 'kill)
  |
  +-+(window-prev-buffers window)      and other functions
我玩过
set window prev buffers
set window next buffers
,但运气不好。
至少“
这个代码对我有用”

编辑
从技术上讲,我想要的是:在调用
kill buffer
之后,“记住”Emacs打开缓冲区的顺序。然后能够重新创建相同的窗口(已经在新的Emacs会话中),这样,如果我在这个新窗口中调用
kill buffer
,我将得到相同的结果


现在,为了“记住”,我需要了解Emacs本身是如何做这个选择的(在kill之后显示什么)。正因为如此,我说定制钩子可能不会有帮助。

你不会喜欢我的答案,但是,好吧,这是我的答案:

首先切换到所需的缓冲区,然后执行
C-x k M-n M-n RET
删除以前的当前缓冲区。

挂钩是“Emacs方式”:

buf-1
中,执行以下操作:

(add-hook 'kill-buffer-hook
  (lambda ()
    (set-window-next-buffers nil (cons "buf-2" (window-next-buffers)))))
代码未经测试,因此您可能需要使用它才能使其正常工作(例如,您可能需要将
“buf-2”
替换为
(获取缓冲区“buf-2”)


请参阅以获取灵感。

请澄清您的帖子。“出现”是指“使buf-2出现在buf-2原来所在的窗口中”吗?您是试图在函数中执行此操作,还是作为交互式命令执行此操作?
buf-1
buf-2
是硬编码的名称,还是只是替身?你所说的“Emacs方式”是什么意思?钩子是非常emacsy的,所以如果这不是“Emacs方式”,那么你需要进一步解释一下你的意思。为什么你说钩子不是Emacs方式?我们如何知道什么是
buf-2
(add hook'kill buffer hook(lambda()(if(get buffer buf-2)(切换到buffer buf-2)))
换句话说,您将需要类似于
(let((buf-2…
)的东西,并且,可以通过在
的末尾添加一个额外的
t
(add hook…t)使钩子成为缓冲区本地的
或者,对我有效的方法是创建我自己的
lawlist kill buffer
函数,并将其链接到我最喜欢的键盘快捷键——它有
(if(get buffer…
)和
(let*((to kill(buffer name))(if(eq(带有当前buffer to kill主模式))wl draft模式)例如,
(当(获取缓冲区“*scratch*”)(查找文件(concat root.d“.scratch”))(杀死缓冲区“*scratch*”)
,以及类似
(如果(string=“尝试删除唯一可见或图标化的帧”)
我添加了一些说明,说明了我实际上在做什么,以及为什么两个特定缓冲区的挂钩没有帮助。我将查看window.el。是的,我知道挂钩是“Emacs方式”,这只是误解。我会将此标记为正确,因为问题在我代码的另一部分。我认为
设置窗口下一个缓冲区
(或prev)这就是我现在应该做的。