eshellバッファートランケーションのパフォーマンスを向上させる方法は?


8

私は現在、構成に以下を追加することにより、20,000行でバッファーを切り捨てます。

(setq eshell-buffer-maximum-lines 20000)
;; automatically truncate buffer after output
(add-to-list 'eshell-output-filter-functions 'eshell-truncate-buffer)

これは20,000行未満でうまく機能し、バッファーが20,000行に達すると、すべての行で切り捨てられます(そのため、バッファーは常に20,001行に留まります)。ただし、バッファーが20,000行に達すると、後続の各行の印刷に時間がかかり、emacsのCPUがしばらくの間100%に留まります。

バッファの切り捨てのパフォーマンスを向上させる方法はありますか?おそらく、追加された100行ごとにしか切り捨てられませんか?私は本当にそれがために必要みたいではありません正確に 、私はちょうどバッファが無限に成長する必要はありません20,000行。


3
アイドル時間後に切り捨てませんか?
PythonNut 2015

eshell-truncate-buffer出力が生成されるたびに実行されるため、すべての行で切り捨てられます。出力の生成とは無関係に切り捨てを行う方が理にかなっています。@PythonNutが提案するように、タイムアウト後の切り捨ての方が合理的です。
rekado 2015

回答:


6

PythonNutとrekadoからの提案を受けて、私はアイドル時に切り捨てに切り替えたので、現在の解決策は次のようになります。

(defun my/truncate-eshell-buffers ()
  "Truncates all eshell buffers"
  (interactive)
  (save-current-buffer
    (dolist (buffer (buffer-list t))
      (set-buffer buffer)
      (when (eq major-mode 'eshell-mode)
        (eshell-truncate-buffer)))))

;; After being idle for 5 seconds, truncate all the eshell-buffers if
;; needed. If this needs to be canceled, you can run `(cancel-timer
;; my/eshell-truncate-timer)'
(setq my/eshell-truncate-timer
      (run-with-idle-timer 5 t #'my/truncate-eshell-buffers))

この後、に追加'eshell-truncate-bufferする必要はありません'eshell-output-filter-functions。それは素晴らしいです!

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