人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

emacsで開いているすべてのバッファを
・revert-bufferする
・kill-bufferする

方法を教えてください。
.emacsに貼るelispまたは、コマンドを教えてください。

●質問者: anom
●カテゴリ:コンピュータ
✍キーワード:.emacs elisp Emacs ill-b コマンド
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● s34itl
●50ポイント

http://www.hatena.ne.jp/1134532052#dummy

人力検索はてな - emacsで開いているすべてのバッファを ・revert-bufferする ・kill-bufferする 方法を教えてください。 .emacsに貼るelispまたは、コマンドを教えてください。 ..

あまりきれいなコードではありませんが、どうでしょう。GNU Emacs 20.7.1では動きます。


・revert-bufferする

(dolist (buf (buffer-list))

(if (not (buffer-file-name buf));visitしているfileに限定

nil

(switch-to-buffer buf)

(revert-buffer t t)))


・kill-bufferする

(dolist (buf (buffer-list))

(kill-buffer buf))


すべてはkillできません。*scratch*と*Messages*が残ります。(いったん削除されますが、自動的に生成されます。)

◎質問者からの返答

ありがとうございます。

これをコマンドとして使いたいのですがどのように.emacsに書けばよいでしょうか


2 ● s34itl
●50ポイント

http://www.namazu.org/~tsuchiya/elisp/

Emacs Lisp Tips

ごめんなさい、.emacsで立上げ時に実行すると勘違いしました。再回答をお許しください。


単にコマンドにするだけなら次のような関数宣言をします。(先ほどの回答はBODY部分に相当します。)


(defun FUNCTION-NAME ()

(interactive)

BODY)


以下、関数名は適当に変えてください。


(defun my-revert-buffer ()

(interactive)

(dolist (buf (buffer-list))

(if (not (buffer-file-name buf)) ;visitしているfileに限定

nil

(switch-to-buffer buf)

(revert-buffer t t))))


(defun my-kill-buffer (all)

(interactive ”P”) ;”P”はprefix argumentを受け取る宣言のひとつ

(dolist (buf (buffer-list))

(if (or all ;prefix argumentがあれば全バッファを削除

(buffer-file-name buf)) ;通常はvisitしているfileを削除

(kill-buffer buf))))


kill-bufferの方は少し変えてみました。

1. 単純に M-x my-kill-buffer だとvisited fileのバッファのみを削除します。通常はこちらがよいでしょう。

2. ctrl-U M-x my-kill-buffer のようにprefix argumentを付けると全バッファを削除しに行きます。(*scratch*と*Messages*は再生成されます。)一時的なバッファを削除したい場合は便利な場合があるかも知れません。


なお、dolistはcl(common lisp)パッケージの組込み関数です。エラーになるようなら、.emacsに (require ’cl) を追加してください。


それでもだめなら(clパッケージがインストールされていない)、dolistをやめ、例えば次のように変えてください。


(defun FUNCTION-NAME ()

(interactive)

(let ((bufs (buffer-list)))

(while bufs

(if (not (buffer-file-name (car bufs))) ;visitしているfileに限定

nil

(switch-to-buffer (car bufs))

(revert-buffer t t))

(setq bufs (cdr bufs)))))


(defun my-kill-buffer (all)

(interactive ”P”) ;”P”はprefix argumentを受け取る宣言のひとつ

(let ((bufs (buffer-list)))

(while bufs

(if (or all ;prefix argumentがあれば全バッファを削除

(buffer-file-name (car bufs))) ;通常はvisitしているfileを削除

(kill-buffer (car bufs)))

(setq bufs (cdr bufs)))))


記述例はindentionしているのですが、回答入力するとindentionがなくなりますね。コードを貼ったemacsのバッファにて、M-x emacs-lisp-mode の後、各行で <tab> または ctrl-Iを押して、indentionを復活させてください。多少見やすくなります。


私程度のemacsの知識でよろしければ、この後はいわしにて回答しますので、ご遠慮なく。

◎質問者からの返答

丁寧にありがとうございます。

my-kill-bufferを実行したところ

execute-extended-command: Symbol’s value as variable is void: ”P”

とエラーが出ました。

環境は Windows XP Pro + Meadow 2.00です。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ