]> gitweb.factorcode.org Git - factor.git/blob - misc/fuel/fuel-log.el
Support multiline entries in the UI Listener
[factor.git] / misc / fuel / fuel-log.el
1 ;;; fuel-log.el -- logging utilities -*- lexical-binding: t -*-
2
3 ;; Copyright (C) 2008, 2009 Jose Antonio Ortega Ruiz
4 ;; See http://factorcode.org/license.txt for BSD license.
5
6 ;; Author: Jose Antonio Ortega Ruiz <jao@gnu.org>
7 ;; Keywords: languages, fuel, factor
8 ;; Start date: Sun Dec 14, 2008 01:00
9
10 ;;; Comentary:
11
12 ;; Some utilities for maintaining a simple log buffer, mainly for
13 ;; debugging purposes.
14
15 ;;; Code:
16
17 (require 'fuel-base)
18
19 ;;; Customization:
20
21 (defvar fuel-log--buffer-name "*fuel messages*"
22   "Name of the log buffer")
23
24 (defvar fuel-log--max-buffer-size 128000
25   "Maximum size of the Factor messages log")
26
27 (defvar fuel-log--max-message-size 1024
28   "Maximum size of individual log messages")
29
30 (defvar fuel-log--verbose-p t
31   "Log level for Factor messages")
32
33 (defvar fuel-log--inhibit-p nil
34   "Set this to t to inhibit all log messages")
35
36 (defvar fuel-log--debug-p nil
37   "If t, all messages are logged no matter what")
38
39 ;;;###autoload
40 (define-derived-mode factor-messages-mode fundamental-mode "FUEL Messages"
41   "Simple mode to log interactions with the factor listener"
42   (buffer-disable-undo)
43   (setq-local comint-redirect-subvert-readonly t)
44   (add-hook 'after-change-functions
45             '(lambda (b e len)
46                (let ((inhibit-read-only t))
47                  (when (> b fuel-log--max-buffer-size)
48                    (delete-region (point-min) b))))
49             nil t))
50
51 (defun fuel-log--buffer ()
52   (or (get-buffer fuel-log--buffer-name)
53       (with-current-buffer (get-buffer-create fuel-log--buffer-name)
54         (factor-messages-mode)
55         (current-buffer))))
56
57 (defun fuel-log--timestamp ()
58   (format-time-string "%Y-%m-%d %T"))
59
60 (defun fuel-log--format-msg (type args)
61   (format "%s %s: %s\n\n" (fuel-log--timestamp) type (apply 'format args)))
62
63 (defun fuel-log--msg (type args)
64   (when (or fuel-log--debug-p (not fuel-log--inhibit-p))
65     (with-current-buffer (fuel-log--buffer)
66       (goto-char (point-max))
67       (let ((inhibit-read-only t))
68         (insert
69          (fuel-shorten-str (fuel-log--format-msg type args)
70                            fuel-log--max-message-size))))))
71
72 (defun fuel-log--warn (&rest args)
73   (fuel-log--msg 'WARNING args))
74
75 (defun fuel-log--error (&rest args)
76   (fuel-log--msg 'ERROR args))
77
78 (defun fuel-log--info (&rest args)
79   (when fuel-log--verbose-p
80     (fuel-log--msg 'INFO args)))
81
82 (provide 'fuel-log)
83
84 ;;; fuel-log.el ends here