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)))))