在emacs lisp中编写kill-or-bury-other-buffer

时间:2014-01-30 14:54:47

标签: emacs elisp

我正在尝试根据另一个窗口中的缓冲区是否有绑定到它的文件来编写一个函数来杀死或埋葬其他窗口中的缓冲区。

它似乎有时工作,并不总是在另一个窗口中选择缓冲区来杀死。 我使用了错误的功能或错误的功能吗?

(defun kill-or-bury-other-buffer ()
  (interactive)
  (let* ((other-buf (window-buffer (other-window 1 nil)))
         (other-has-file (buffer-file-name other-buf))
         (buf-action (if other-has-file
                           'bury-buffer
                         'kill-buffer)))
    (funcall buf-action other-buf))))

2 个答案:

答案 0 :(得分:2)

函数other-window 切换到另一个窗口并返回nil。由于重合,调用(window-buffer (other-window 1 nil))返回另一个窗口的缓冲区,因为(window-buffer nil)返回当前窗口的缓冲区。您可能希望使用next-window代替。 (我不确定这解释了为什么函数会杀死错误的缓冲区。)

答案 1 :(得分:2)

除了@legoscia指出的内容之外,我认为使用save-selected-window代码会更简单:

(defun kill-or-bury-other-buffer ()
  (interactive)
  (save-selected-window
    (other-window 1)
    (if buffer-file-name
        (bury-buffer)
      (kill-buffer))))