2017-07-15 18 views
2

私はlispを使用するのがとても新しいので、これは簡単な質問であればごめんなさい。私はしばらくの間、解決策を見つけることができませんでしたが、私はこれが自分の責任であると確信しています。ファイルに関連付けられたリストバッファーはありますか?

So.私はすべての開いているバッファを元に戻すコマンドを書こうとしています。シンプル。私はただします

残念ながら、ファイルに関連付けられていないバッファがあると、残念ながら失敗します。 -バッファを一覧表示するC-x C-bを行う

は、[OK]を

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になっているので、どのようにしてリストやその属性にアクセスするのか分かりません。私を助ける心?

答えて

4

1つの可能性は、バッファがファイルにアクセスしていない場合はnilを返します。たとえば、buffer-file-nameです。

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

または

(cl-remove-if-not 'buffer-file-name (buffer-list)) 
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ハンマーを使用することができますが、あなたはおそらく、あなたがそれらが発生したとして、コーナーケースを固定方がいいでしょう。

関連する問題