You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

91 lines
1.5 KiB

/*
* keyd - A key remapping daemon.
*
* © 2019 Raheman Vaiya (see also: LICENSE).
*/
#include "log.h"
#include <time.h>
char errstr[2048];
int log_level = 0;
int suppress_colours = 0;
static const char *colorize(const char *s)
{
int i;
static char buf[1024];
size_t n = 0;
int inside_escape = 0;
for (i = 0; s[i] != 0 && n < sizeof(buf); i++) {
if (s[i+1] == '{') {
int escape_num = 0;
switch (s[i]) {
case 'r': escape_num = 1; break;
case 'g': escape_num = 2; break;
case 'y': escape_num = 3; break;
case 'b': escape_num = 4; break;
case 'm': escape_num = 5; break;
case 'c': escape_num = 6; break;
case 'w': escape_num = 7; break;
default: break;
}
if (escape_num) {
if (!suppress_colours && (sizeof(buf)-n > 5)) {
buf[n++] = '\033';
buf[n++] = '[';
buf[n++] = '3';
buf[n++] = '0' + escape_num;
buf[n++] = 'm';
}
inside_escape = 1;
i++;
continue;
}
}
if (s[i] == '}' && inside_escape) {
if (!suppress_colours && (sizeof(buf)-n > 4)) {
memcpy(buf+n, "\033[0m", 4);
n += 4;
}
inside_escape = 0;
continue;
}
buf[n++] = s[i];
}
buf[n] = 0;
return buf;
}
void die(const char *fmt, ...) {
fprintf(stderr, "%s", colorize("r{FATAL ERROR:} "));
va_list ap;
va_start(ap, fmt);
vfprintf(stderr, colorize(fmt), ap);
va_end(ap);
exit(-1);
}
void _keyd_log(int level, const char *fmt, ...)
{
if (level > log_level)
return;
va_list ap;
va_start(ap, fmt);
vprintf(colorize(fmt), ap);
va_end(ap);
}