123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 |
- (require 'erc)
- (defgroup erc-truncate nil
- "Truncate buffers when they reach a certain size"
- :group 'erc)
- (defcustom erc-max-buffer-size 30000
- "*Maximum size in chars of each ERC buffer.
- Used only when auto-truncation is enabled.
- \(see `erc-truncate-buffer' and `erc-insert-post-hook')."
- :group 'erc-truncate
- :type 'integer)
- (define-erc-module truncate nil
- "Truncate a query buffer if it gets too large.
- This prevents the query buffer from getting too large, which can
- bring any grown Emacs to its knees after a few days worth of
- tracking heavy-traffic channels."
-
- ((add-hook 'erc-insert-post-hook 'erc-truncate-buffer))
-
- ((remove-hook 'erc-insert-post-hook 'erc-truncate-buffer)))
- (defun erc-truncate-buffer-to-size (size &optional buffer)
- "Truncates the buffer to the size SIZE.
- If BUFFER is not provided, the current buffer is assumed. The deleted
- region is logged if `erc-logging-enabled' returns non-nil."
-
-
-
- (if (not buffer)
- (setq buffer (current-buffer))
- (unless (get-buffer buffer)
- (error "erc-truncate-buffer-to-size: %S is not a buffer" buffer)))
- (when (> (buffer-size buffer) (+ size 512))
- (with-current-buffer buffer
-
-
-
-
- (save-restriction
- (widen)
- (let ((end (- erc-insert-marker size)))
-
- (goto-char end)
- (beginning-of-line)
- (setq end (point))
-
-
-
-
-
-
-
-
-
-
-
-
- (when (and (boundp 'erc-enable-logging)
- erc-enable-logging
- (erc-logging-enabled buffer))
- (erc-save-buffer-in-logs))
-
- (buffer-disable-undo)
- (let ((inhibit-read-only t))
- (delete-region (point-min) end)))
- (buffer-enable-undo)))))
- (defun erc-truncate-buffer ()
- "Truncates the current buffer to `erc-max-buffer-size'.
- Meant to be used in hooks, like `erc-insert-post-hook'."
- (interactive)
- (erc-truncate-buffer-to-size erc-max-buffer-size))
- (provide 'erc-truncate)
|