factor/misc/fuel/fuel-log.el

81 lines
2.2 KiB
EmacsLisp
Raw Blame History

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

;;; fuel-log.el -- logging utilities
;; Copyright (C) 2008, 2009 Jose Antonio Ortega Ruiz
;; See http://factorcode.org/license.txt for BSD license.
;; Author: Jose Antonio Ortega Ruiz <jao@gnu.org>
;; Keywords: languages, fuel, factor
;; Start date: Sun Dec 14, 2008 01:00
;;; Comentary:
;; Some utilities for maintaining a simple log buffer, mainly for
;; debugging purposes.
;;; Code:
(require 'fuel-base)
;;; Customization:
(defvar fuel-log--buffer-name "*fuel messages*"
"Name of the log buffer")
(defvar fuel-log--max-buffer-size 32000
"Maximum size of the Factor messages log")
(defvar fuel-log--max-message-size 512
"Maximum size of individual log messages")
(defvar fuel-log--verbose-p t
"Log level for Factor messages")
(defvar fuel-log--inhibit-p nil
"Set this to t to inhibit all log messages")
(defvar fuel-log--debug-p nil
"If t, all messages are logged no matter what")
;;;###autoload
(define-derived-mode factor-messages-mode fundamental-mode "FUEL Messages"
"Simple mode to log interactions with the factor listener"
(buffer-disable-undo)
(setq-local comint-redirect-subvert-readonly t)
(add-hook 'after-change-functions
'(lambda (b e len)
(let ((inhibit-read-only t))
(when (> b fuel-log--max-buffer-size)
(delete-region (point-min) b))))
nil t)
(setq buffer-read-only t))
(defun fuel-log--buffer ()
(or (get-buffer fuel-log--buffer-name)
(with-current-buffer (get-buffer-create fuel-log--buffer-name)
(factor-messages-mode)
(current-buffer))))
(defun fuel-log--msg (type &rest args)
(when (or fuel-log--debug-p (not fuel-log--inhibit-p))
(with-current-buffer (fuel-log--buffer)
(let ((inhibit-read-only t))
(insert
(fuel-shorten-str (format "\n%s: %s\n" type (apply 'format args))
fuel-log--max-message-size))))))
(defsubst fuel-log--warn (&rest args)
(apply 'fuel-log--msg 'WARNING args))
(defsubst fuel-log--error (&rest args)
(apply 'fuel-log--msg 'ERROR args))
(defsubst fuel-log--info (&rest args)
(when fuel-log--verbose-p
(apply 'fuel-log--msg 'INFO args) ""))
(provide 'fuel-log)
;;; fuel-log.el ends here