Function: erc-truncate-buffer-to-size
erc-truncate-buffer-to-size is an autoloaded and byte-compiled
function defined in erc-truncate.el.gz.
Signature
(erc-truncate-buffer-to-size SIZE &optional BUFFER)
Documentation
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.
Source Code
;; Defined in /usr/src/emacs/lisp/erc/erc-truncate.el.gz
;;;###autoload
(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 buffer is non-nil, but get-buffer does not return anything,
;; then this is a bug. If buffer is a buffer name, get the buffer
;; object. If buffer is nil, use the current buffer.
(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
;; Note that when erc-insert-post-hook runs, the buffer is
;; narrowed to the new message. So do this delicate widening.
;; I am not sure, I think this was not recommended behavior in
;; Emacs 20.
(save-restriction
(widen)
(let ((end (- erc-insert-marker size)))
;; truncate at line boundaries
(goto-char end)
(beginning-of-line)
(setq end (point))
;; try to save the current buffer using
;; `erc-save-buffer-in-logs'. We use this, in case the
;; user has both `erc-save-buffer-in-logs' and
;; `erc-truncate-buffer' in `erc-insert-post-hook'. If
;; this is the case, only the non-saved part of the current
;; buffer should be saved. Rather than appending the
;; deleted part of the buffer to the log file.
;;
;; Alternatively this could be made conditional on:
;; (not (memq 'erc-save-buffer-in-logs
;; erc-insert-post-hook))
;; Comments?
(when (and (boundp 'erc-enable-logging)
erc-enable-logging
(erc-logging-enabled buffer))
(erc-save-buffer-in-logs))
;; disable undoing for the truncating
(buffer-disable-undo)
(let ((inhibit-read-only t))
(delete-region (point-min) end)))
(buffer-enable-undo)))))