2014-02-28 37 views
0

我希望此功能不會返回窗口中可見的緩衝區。如何過濾緩衝區列表以僅顯示在窗口中不可見的緩衝區

即我想從結果中消除當前幀中的任何緩衝區。

我知道函數'window-list'返回窗口中可見的緩衝區,但我不確定如何使窗口列表的謂詞變爲-filter函數。

(defun projectile-project-buffers-non-visible() 
    "Get a list of non visible project buffers." 
    (let ((project-root (projectile-project-root))) 
    (-filter (lambda (buffer) 
       (projectile-project-buffer-p buffer project-root)) 
(buffer-list)))) 

回答

1

這個怎麼樣?對於每個緩衝區,查看它是否由窗口顯示。如果沒有,請將其退回。

(defun not-visible-buffers (buffers) 
    "given a list of buffers, return buffers which are not currently visible" 
    (remove nil 
     (mapcar 
     '(lambda (buf) 
     (unless (get-buffer-window-list buf) buf)) 
     buffers) 
     )) 

如下你可以把它叫做:

(not-visible-buffers (buffer-list)) 
0

看起來像這樣的作品,但我會離開這個開放的情況下,任何人有一個更好的解決方案。

(defun projectile-project-buffers-non-visible() 
    "Get a list of non visible project buffers." 
    (let ((project-root (projectile-project-root))) 
     (-filter (lambda (buffer) 
       (and 
        (projectile-project-buffer-p buffer project-root) 
        (not (get-buffer-window buffer 'visible)))) 
       (buffer-list) 
       ))) 
相關問題