列出与文件关联的缓冲区?

时间:2017-07-15 01:30:56

标签: list emacs lisp elisp list-comprehension

我对使用lisp非常陌生,所以如果这是一个微不足道的问题,我很抱歉。经过一段时间的谷歌搜索后,我还没能找到解决方案,但我确信这是我的错。

因此。我试图编写一个命令,它将恢复所有打开的缓冲区。简单。我只是做

(setq revert-without-query (buffer-list))
(mapc 'revert-buffer (buffer-list))` 

不幸的是,如果有任何与文件无关的缓冲区,也就是说,总是会失败。

对列表缓冲区执行C-x C-b打印类似

的内容
CRM   Buffer        Size  Mode            File
      init.el       300   Emacs-lisp      ~/.spacemacs.d/init.el
      %scratch%      30   Test            

确定。很容易。如果我被允许混合使用lisp和python,我会做类似

的事情
(setq revert-without-query [b for b in buffer-list if b.File != ""])
;; Or would I test for nil? Decisions, decisions...

经过一番挖掘,我发现存在remove-if。不幸的是,作为lisp的新手,我不知道如何访问列表,他们的属性,或者......好吧......什么。介意帮助我?

2 个答案:

答案 0 :(得分:4)

一种可能性是检查1.6.0,如果缓冲区没有访问文件,则返回nil,例如

buffer-file-name

(cl-loop for buf in (buffer-list)
   if (buffer-file-name buf)
   collect buf)

答案 1 :(得分:1)

您可能还希望还原dired目录。任何类型的缓冲区都可以有自己的专用恢复(参见revert-buffer-function)。因此,您可能希望检查buffer-file-namedired-directory是否为非零。

(dolist (b (buffer-list))
  (when (buffer-live-p b)
    (with-current-buffer b
      (when (or buffer-file-name dired-directory)
        (revert-buffer 'ignore-auto 'noconfirm)))))

你也可以使用ignore-errors锤子,但是在你遇到角落的情况下,你可能会更好地修复角落的情况。