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
Truncate BUFFER or the current buffer to SIZE.
Log the deleted region when the log module is active and
erc-logging-enabled returns non-nil.
Note that prior to ERC 5.6, whenever erc-log.el happened to be
loaded and the option erc-enable-logging was left at its
default value, this function would cause logging to commence
regardless of whether erc-log-mode(var)/erc-log-mode(fun) was enabled or log was
present in erc-modules.
Source Code
;; Defined in /usr/src/emacs/lisp/erc/erc-truncate.el.gz
;;;###autoload
(defun erc-truncate-buffer-to-size (size &optional buffer)
"Truncate BUFFER or the current buffer to SIZE.
Log the deleted region when the `log' module is active and
`erc-logging-enabled' returns non-nil.
Note that prior to ERC 5.6, whenever erc-log.el happened to be
loaded and the option `erc-enable-logging' was left at its
default value, this function would cause logging to commence
regardless of whether `erc-log-mode' was enabled or `log' was
present in `erc-modules'."
;; 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 message boundary (formerly line boundary
;; before 5.6).
(goto-char end)
(goto-char (or (erc--get-inserted-msg-beg end)
(pos-bol)))
(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?
;; The comments above concern pre-5.6 behavior and reflect
;; an obsolete understanding of how `erc-logging-enabled'
;; behaves in practice.
(run-hook-with-args 'erc--pre-clear-functions end)
;; disable undoing for the truncating
(buffer-disable-undo)
(let ((inhibit-read-only t))
(delete-region (point-min) end)))
(buffer-enable-undo)))))