【问题标题】:Writing kill-or-bury-other-buffer in emacs lisp在 emacs lisp 中编写 kill-or-bury-other-buffer
【发布时间】:2014-01-31 01:07:03
【问题描述】:

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

它有时似乎可以工作,并且并不总是在另一个窗口中选择要杀死的缓冲区。 是我用错了函数还是函数错了?

(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))))

【问题讨论】:

    标签: emacs elisp


    【解决方案1】:

    除了@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))))
    

    【讨论】:

    • 我看到这里的缓冲区文件名既是一个变量也是一个函数——这在 elisp 中很常见吗?例如(我知道命名空间是分开的)
    • 这并不罕见,例如许多次要模式具有切换它们的功能和一个同名的变量来存储切换状态。
    【解决方案2】:

    函数other-window切换到另一个窗口并返回nil。由于巧合,调用(window-buffer (other-window 1 nil)) 更多或更少返回另一个窗口的缓冲区,因为(window-buffer nil) 返回当前窗口的缓冲区。您可能想改用next-window。 (不过,我不确定这是否解释了为什么该函数会杀死错误的缓冲区。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-21
      • 1970-01-01
      • 2011-05-27
      • 1970-01-01
      • 1970-01-01
      • 2010-09-06
      • 2022-01-12
      • 1970-01-01
      相关资源
      最近更新 更多