dotemacs

My Emacs configuration
git clone git://git.entf.net/dotemacs
Log | Files | Refs | LICENSE

elfeed-log.el (2655B)


      1 ;;; elfeed-log.el --- Elfeed's logging system -*- lexical-binding: t; -*-
      2 
      3 ;;; Commentary:
      4 
      5 ;;; Code:
      6 
      7 (require 'cl-lib)
      8 
      9 (defface elfeed-log-date-face
     10   '((t :inherit font-lock-type-face))
     11   "Face for showing the date in the elfeed log buffer."
     12   :group 'elfeed)
     13 
     14 (defface elfeed-log-error-level-face
     15   '((t :foreground "red"))
     16   "Face for showing the `error' log level in the elfeed log buffer."
     17   :group 'elfeed)
     18 
     19 (defface elfeed-log-warn-level-face
     20   '((t :foreground "goldenrod"))
     21   "Face for showing the `warn' log level in the elfeed log buffer."
     22   :group 'elfeed)
     23 
     24 (defface elfeed-log-info-level-face
     25   '((t :foreground "deep sky blue"))
     26   "Face for showing the `info' log level in the elfeed log buffer."
     27   :group 'elfeed)
     28 
     29 (defface elfeed-log-debug-level-face
     30   '((t :foreground "magenta2"))
     31   "Face for showing the `debug' log level in the elfeed log buffer."
     32   :group 'elfeed)
     33 
     34 (defvar elfeed-log-buffer-name "*elfeed-log*"
     35   "Name of buffer used for logging Elfeed events.")
     36 
     37 (defvar elfeed-log-level 'info
     38   "Lowest type of messages to be logged.")
     39 
     40 (defun elfeed-log-buffer ()
     41   "Returns the buffer for `elfeed-log', creating it as needed."
     42   (let ((buffer (get-buffer elfeed-log-buffer-name)))
     43     (if buffer
     44         buffer
     45       (with-current-buffer (generate-new-buffer elfeed-log-buffer-name)
     46         (special-mode)
     47         (current-buffer)))))
     48 
     49 (defun elfeed-log--level-number (level)
     50   "Return a relative level number for LEVEL."
     51   (cl-case level
     52     (debug -10)
     53     (info 0)
     54     (warn 10)
     55     (error 20)
     56     (otherwise -10)))
     57 
     58 (defun elfeed-log (level fmt &rest objects)
     59   "Write log message FMT at LEVEL to Elfeed's log buffer.
     60 
     61 LEVEL should be a symbol: debug, info, warn, error.
     62 FMT must be a string suitable for `format' given OBJECTS as arguments."
     63   (let ((log-buffer (elfeed-log-buffer))
     64         (log-level-face (cl-case level
     65                           (debug 'elfeed-log-debug-level-face)
     66                           (info 'elfeed-log-info-level-face)
     67                           (warn 'elfeed-log-warn-level-face)
     68                           (error 'elfeed-log-error-level-face)))
     69         (inhibit-read-only t))
     70     (when (>= (elfeed-log--level-number level)
     71               (elfeed-log--level-number elfeed-log-level))
     72       (with-current-buffer log-buffer
     73         (goto-char (point-max))
     74         (insert
     75          (format
     76           (concat "[" (propertize "%s" 'face 'elfeed-log-date-face) "] "
     77                   "[" (propertize "%s" 'face log-level-face) "]: %s\n")
     78           (format-time-string "%Y-%m-%d %H:%M:%S")
     79           level
     80           (apply #'format fmt objects)))))))
     81 
     82 (provide 'elfeed-log)
     83 
     84 ;;; elfeed-log.el ends here