git.fiddlerwoaroof.com
utils.lisp
117ea1ef
 ;; This Source Code Form is subject to the terms of the Mozilla Public
 ;; License, v. 2.0. If a copy of the MPL was not distributed with this
 ;; file, You can obtain one at http://mozilla.org/MPL/2.0/.
 
 (in-package #:syslog_helper)
 
 (cffi:defcstruct winsize
   (ws_row :unsigned-short)
   (ws_col :unsigned-short)
   (ws_xpixel :unsigned-short)
   (ws_ypixel :unsigned-short))
 
 (defun get-term-size ()
   (flet ((ioctl-gwinsz (fd)
 	   (cffi:with-foreign-object (ptr '(:pointer (:struct winsize)))
 	     (let* ((res (osicat-posix:ioctl fd osicat-posix:tiocgwinsz ptr)))
 	       (if (= res 0)
 		   (cffi:with-foreign-slots ((ws_row ws_col) ptr (:struct winsize))
 		     (list ws_row ws_col))
 		   (format t "~&error~%"))))))
     (loop with err = nil
        for x from 0 to 2
        for res = (handler-case (ioctl-gwinsz x)
 		   (osicat-posix:enotty (c) (setf err c)))
        finally (if err
 		   (error err)
 		   (return res)))))
 
 (eval-when (:compile-toplevel :load-toplevel :execute)
   (defun symbol-concat (start end)
     (serapeum:concat
      (symbol-name start)
      (symbol-name end))))
 
 (defmacro define-codecs (name () &body mappings)
   `(progn
      (defun ,(intern (symbol-concat '#:decode- name)) (,name)
        (ecase ,name
 	 ,@mappings))
      (defun ,(intern (symbol-concat '#:encode- name)) (,name)
        (string-case:string-case ((string-downcase ,name))
 	 ,@(mapcar #'reverse mappings)))))
 
 (cl-ansi-term:update-style-sheet
  '((:emergency :black :b-red :bold)
    (:alert :black :b-red)
    (:critical :red :bold)
    (:error :red)
    (:warning :yellow :bold)
    (:notice :yellow)
    (:info :green)))