シェルバッファー内のすべての出力をフラッシュします(および*メッセージ*も)


8

shellバッファ内のすべての出力をフラッシュする簡単な方法はありますか?最近(Emacs 24.4にはすでにあると思います)*shell*バッファーは編集できないため、通常のターミナルの動作と同様に動作します。つまり、最後にテキストを追加したり、最後の出力をフラッシュしたりできますが、任意の場所にテキストを追加したり、その一部を任意に削除したりします。この改善(?)について重要な何かを見逃しているようです。それは実際にそれをよりいらいらさせます。*shell**Messages*バッファーについてドキュメントを検索しましたが、質問の言及が見つかりませんでした。

元の質問に加えて、この変更のポイントは何ですか?私にはこれはまったく改善のようには感じられないので、「キャッチ」がない限り、デフォルトとして読み取り/書き込みに設定したいと思います。

私は、Emacsについて話して24.4、当然の25.0.50.1。


2
あなたはいくつかの「改善」に腹を立てているようですが、それが何であるかについては言及していません。あなたのタグから私はあなたがMessages現在読み取り専用であることを言及していると推測しますが、それがシェルバッファとどのように関連しているかはわかりません。
マラバルバ2014年

1
@Malabarba shellバッファーも完全に編集可能でした。つまり、好きな時点でテキストを削除したり追加したりできますが、最後に追加できるのはテキストのみで、他の場所では削除できません。*Messages*同じように動作します。
wvxvw 2014年

回答:


5

(erase-buffer) 読み取り専用の場合、comintおよびシェルバッファーでは機能しません。

シェルのバッファをクリアするために私が頻繁に使用するdefunは次のとおりです。

(defun clear-comint-buffer ()
  (interactive)
  (let ((old-max comint-buffer-maximum-size))
    (setq comint-buffer-maximum-size 0)
    (comint-truncate-buffer)
    (setq comint-buffer-maximum-size old-max)
    (goto-char (point-max))))

これをs-k関連するモードでバインドして、OSXのTerminal.appのクリア動作を模倣することができます。

2016年11月更新

Emacs 25開発(および私の最新ビルドである「26.0.50.1」)のどこかに、(comint-clear-buffer)が追加されましたcomint-mode。これは、私のカスタム定義のより簡潔なバージョンです。参照用のソースは次のとおりです。

(defun comint-clear-buffer ()
  "Clear the comint buffer."
  (interactive)
  (let ((comint-buffer-maximum-size 0))
    (comint-truncate-buffer)))

この組み込みソリューションは、次の場合にも機能します(setq comint-prompt-read-only t)


ええと、これは設計によるものです...まあ、これは質問に答えます。その代わりに私は代替案を探す必要があるようですM-x shell:S
wvxvw

@wvxvw M-x erase-bufferはEmacsトランクのシェルモードバッファーで完全に動作します。24.4でも動作しない理由はわかりません。

@wvxvw私は混乱しています。私のシェルバッファーは読み取り専用ではなく、erase-bufferは正常に動作します。Emacs-25で変更された可能性があります。後で確認します。
Malabarba 2014年

@Malabarba試してみましたが、完全に機能します。

2
@Malabarba / @lunaryorn- (erase-buffer)個人的にうまくいかない理由を見つけました。私は(setq comint-prompt-read-only t)私の設定にあります、それは私がプロンプトを壊さないために役に立ち、それで(erase-buffer)私に吠えます。
waymondo 2014年

13

コマンドを使用*Messages*して、いつものようにバッファをクリーンアップできますkill-buffer。次にメッセージが通知されたときに、バッファが新たに再作成されます。

現在このバッファーが読み取り専用である理由は、読み取り専用であるから継承する 独自のメジャーモードが許可されている special-modeためです。その背後にある利点はいくつかあります。 special-modeは読み取り用に設計されているため、編集用ではないバッファに非常に便利なキーバインドがいくつかあります。


何に関係*shell*があるのかわかりません。しかし、それを消去したい場合は、実行するM-x erase-buffer 必要があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.