mirror of
https://github.com/vale981/yabar
synced 2025-03-06 01:51:41 -05:00
introduce support of internal blocks; add internal time and uptime blks
This commit is contained in:
parent
9909914c06
commit
b01d6ee3c6
4 changed files with 142 additions and 45 deletions
|
@ -92,7 +92,7 @@ static void * ya_exec(void * _blk) {
|
|||
}
|
||||
}
|
||||
else if (blk->attr & BLKA_INTERNAL) {
|
||||
/*TODO*/
|
||||
ya_reserved_blks[blk->internal->index].function(blk);
|
||||
}
|
||||
/*Shouldn't get here*/
|
||||
else {
|
||||
|
|
53
src/ya_intern.c
Normal file
53
src/ya_intern.c
Normal file
|
@ -0,0 +1,53 @@
|
|||
/*
|
||||
* Yabar - A modern and lightweight status bar for X window managers.
|
||||
*
|
||||
* Copyright (c) 2016, George Badawi
|
||||
* See LICENSE for more information.
|
||||
*
|
||||
*/
|
||||
|
||||
#include "yabar.h"
|
||||
|
||||
#define YA_INTERNAL
|
||||
void ya_int_time(ya_block_t * blk);
|
||||
void ya_int_uptime(ya_block_t * blk);
|
||||
struct reserved_blk ya_reserved_blks[YA_INTERNAL_LEN] = {
|
||||
{"YA_INT_TIME", ya_int_time},
|
||||
{"YA_INT_UPTIME", ya_int_uptime}
|
||||
};
|
||||
|
||||
//#ifdef YA_INTERNAL
|
||||
|
||||
#include <time.h>
|
||||
void ya_int_time(ya_block_t * blk) {
|
||||
time_t rawtime;
|
||||
struct tm * ya_tm;
|
||||
while(1) {
|
||||
time(&rawtime);
|
||||
ya_tm = localtime(&rawtime);
|
||||
strftime(blk->buf, 512, blk->internal->option[0], ya_tm);
|
||||
ya_draw_pango_text(blk);
|
||||
sleep(blk->sleep);
|
||||
}
|
||||
}
|
||||
|
||||
#include <sys/sysinfo.h>
|
||||
|
||||
void ya_int_uptime(ya_block_t *blk) {
|
||||
struct sysinfo ya_sysinfo;
|
||||
long hr, tmp;
|
||||
uint8_t min;
|
||||
while(1) {
|
||||
sysinfo(&ya_sysinfo);
|
||||
tmp = ya_sysinfo.uptime;
|
||||
hr = tmp/3600;
|
||||
tmp %= 3600;
|
||||
min = tmp/60;
|
||||
tmp %= 60;
|
||||
snprintf(blk->buf, 512, "%ld:%02d:%02ld", hr, min, tmp);
|
||||
ya_draw_pango_text(blk);
|
||||
sleep(blk->sleep);
|
||||
}
|
||||
}
|
||||
|
||||
//#endif //YA_INTERNAL
|
108
src/ya_parse.c
108
src/ya_parse.c
|
@ -272,24 +272,75 @@ static void ya_setup_bar(config_setting_t * set) {
|
|||
ya_create_bar(bar);
|
||||
}
|
||||
|
||||
#define YA_RESERVED_NUM 1
|
||||
char *ya_reserved_blocks[YA_RESERVED_NUM]={"ya_time"};
|
||||
//#define YA_INTERNAL_LEN 1
|
||||
//char *ya_reserved_blocks[YA_INTERNAL_LEN]={"YA_INT_TIME"};
|
||||
|
||||
static void ya_setup_block(config_setting_t * set, uint32_t type_init) {
|
||||
inline static void ya_check_blk_internal(ya_block_t *blk, config_setting_t *set, const char *strexec) {
|
||||
const char *retstr;
|
||||
for (int i=0; i < YA_INTERNAL_LEN; i++) {
|
||||
if(strcmp(strexec, ya_reserved_blks[i].name)==0) {
|
||||
blk->internal = calloc(1, sizeof(blk_intern_t));
|
||||
blk->attr |= BLKA_INTERNAL;
|
||||
blk->internal->index = i;
|
||||
if(config_setting_lookup_string(set, "internal-prefix", &retstr) == CONFIG_TRUE)
|
||||
blk->internal->prefix = strdup(retstr);
|
||||
if(config_setting_lookup_string(set, "internal-suffix", &retstr) == CONFIG_TRUE)
|
||||
blk->internal->suffix = strdup(retstr);
|
||||
if(config_setting_lookup_string(set, "internal-option1", &retstr) == CONFIG_TRUE)
|
||||
blk->internal->option[0] = strdup(retstr);
|
||||
if(config_setting_lookup_string(set, "internal-option2", &retstr) == CONFIG_TRUE)
|
||||
blk->internal->option[1] = strdup(retstr);
|
||||
if(config_setting_lookup_string(set, "internal-option3", &retstr) == CONFIG_TRUE)
|
||||
blk->internal->option[2] = strdup(retstr);
|
||||
}
|
||||
}
|
||||
//check if the for-loop never found a matching internal block
|
||||
if ((blk->attr & BLKA_INTERNAL)==0)
|
||||
blk->attr |= BLKA_EXTERNAL;
|
||||
}
|
||||
|
||||
static void ya_setup_block(config_setting_t * set) {
|
||||
struct ya_block * blk = calloc(1,sizeof(ya_block_t));
|
||||
int retcnf, retint;
|
||||
const char *retstr;
|
||||
blk->attr = type_init;
|
||||
|
||||
blk->pid = -1;
|
||||
blk->name = strdup(config_setting_name(set));
|
||||
|
||||
retcnf = config_setting_lookup_string(set, "inherit", &retstr);
|
||||
if(retcnf == CONFIG_TRUE) {
|
||||
ya_inherit_blk(blk, retstr);
|
||||
}
|
||||
|
||||
retcnf = config_setting_lookup_string(set, "exec", &retstr);
|
||||
if(retcnf == CONFIG_FALSE) {
|
||||
if(NOT_INHERIT_BLK(blk)) {
|
||||
fprintf(stderr, "No exec is defined for block: %s.%s. Skipping this block...\n", blk->bar->name, blk->name);
|
||||
free(blk->name);
|
||||
free(blk);
|
||||
return;
|
||||
}
|
||||
}
|
||||
else if(strlen(retstr) < 1) {
|
||||
fprintf(stderr, "exec entry is empty for block: %s.%s. Skipping this block...\n", blk->bar->name, blk->name);
|
||||
free(blk->name);
|
||||
free(blk);
|
||||
return;
|
||||
|
||||
}
|
||||
else {
|
||||
ya_check_blk_internal(blk, set, retstr);
|
||||
if (blk->attr & BLKA_EXTERNAL) {
|
||||
blk->cmd = strdup(retstr);
|
||||
}
|
||||
}
|
||||
if (blk->attr & BLKA_INTERNAL)
|
||||
goto skip_type;
|
||||
retcnf = config_setting_lookup_string(set, "type", &retstr);
|
||||
if(retcnf == CONFIG_FALSE) {
|
||||
if(NOT_INHERIT_BLK(blk)) {
|
||||
fprintf(stderr, "No type is defined for block: %s. Skipping this block...\n", config_setting_name(set));
|
||||
free(blk->name);
|
||||
free(blk);
|
||||
return;
|
||||
}
|
||||
|
@ -303,38 +354,20 @@ static void ya_setup_block(config_setting_t * set, uint32_t type_init) {
|
|||
}
|
||||
else if(strcmp(retstr, "periodic")==0) {
|
||||
blk->attr |= BLKA_PERIODIC;
|
||||
retcnf = config_setting_lookup_int(set, "interval", &retint);
|
||||
if(retcnf == CONFIG_FALSE) {
|
||||
blk->sleep = 5;
|
||||
}
|
||||
else {
|
||||
blk->sleep = retint;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
retcnf = config_setting_lookup_string(set, "exec", &retstr);
|
||||
if(retcnf == CONFIG_FALSE) {
|
||||
if(NOT_INHERIT_BLK(blk)) {
|
||||
fprintf(stderr, "No exec is defined for block: %s. Skipping this block...\n", config_setting_name(set));
|
||||
free(blk);
|
||||
return;
|
||||
}
|
||||
}
|
||||
else {
|
||||
int len = strlen(retstr);
|
||||
if (len) {
|
||||
blk->cmd = strdup(retstr);
|
||||
}
|
||||
else {
|
||||
fprintf(stderr, "exec is empty for block: %s. Skipping this block...\n", config_setting_name(set));
|
||||
free(blk);
|
||||
return;
|
||||
//TODO handle
|
||||
}
|
||||
}
|
||||
blk->name = strdup(config_setting_name(set));
|
||||
skip_type:
|
||||
retcnf = config_setting_lookup_int(set, "interval", &retint);
|
||||
if(retcnf == CONFIG_FALSE) {
|
||||
blk->sleep = 5;
|
||||
}
|
||||
else {
|
||||
blk->sleep = retint;
|
||||
}
|
||||
|
||||
retcnf = config_setting_lookup_string(set, "command-button1", &retstr);
|
||||
if(retcnf == CONFIG_TRUE) {
|
||||
blk->button_cmd[0] = strdup(retstr);
|
||||
|
@ -482,18 +515,9 @@ void ya_config_parse() {
|
|||
blknum = config_setting_length(blklist_set);
|
||||
|
||||
for (int i=0; i < blknum; i++) {
|
||||
uint32_t type_init = 0;
|
||||
blkstr = (char *)config_setting_get_string_elem(blklist_set, i);
|
||||
curblk_set = config_setting_lookup(curbar_set, blkstr);
|
||||
for(int i=0; i < YA_RESERVED_NUM; i++) {
|
||||
if(strcmp(blkstr, ya_reserved_blocks[i])==0) {
|
||||
type_init = BLKA_INTERNAL;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(type_init == 0)
|
||||
type_init = BLKA_EXTERNAL;
|
||||
ya_setup_block(curblk_set, type_init);
|
||||
ya_setup_block(curblk_set);
|
||||
}
|
||||
}
|
||||
config_destroy(&ya_conf);
|
||||
|
|
24
src/yabar.h
24
src/yabar.h
|
@ -92,8 +92,19 @@ enum {
|
|||
#define NOT_INHERIT_BLK(blk) (((blk)->attr & BLKA_INHERIT)==0)
|
||||
|
||||
#define CMONLEN 16
|
||||
#define YA_INTERNAL_LEN 2
|
||||
|
||||
typedef struct ya_monitor ya_monitor_t;
|
||||
typedef struct ya_bar ya_bar_t;
|
||||
typedef struct ya_block ya_block_t;
|
||||
typedef struct blk_intern blk_intern_t;
|
||||
typedef void(*funcp)(ya_block_t *);
|
||||
|
||||
struct reserved_blk {
|
||||
char *name;
|
||||
funcp function;
|
||||
};
|
||||
|
||||
struct ya_monitor {
|
||||
char name[CMONLEN];
|
||||
xcb_rectangle_t pos;
|
||||
|
@ -101,7 +112,6 @@ struct ya_monitor {
|
|||
struct ya_monitor *next_mon;
|
||||
};
|
||||
|
||||
typedef struct ya_bar ya_bar_t;
|
||||
struct ya_block {
|
||||
char *name;
|
||||
char buf [BUFSIZE];
|
||||
|
@ -129,9 +139,18 @@ struct ya_block {
|
|||
uint32_t fgcolor; //foreground color
|
||||
uint32_t ulcolor; //underline color
|
||||
uint32_t olcolor; //overline color
|
||||
|
||||
blk_intern_t *internal;
|
||||
};
|
||||
|
||||
|
||||
struct blk_intern {
|
||||
char *prefix;
|
||||
char *suffix;
|
||||
char *option[3];
|
||||
uint8_t index;
|
||||
};
|
||||
|
||||
typedef struct ya_block ya_block_t;
|
||||
|
||||
struct ya_bar {
|
||||
char *name;
|
||||
|
@ -189,6 +208,7 @@ typedef struct yabar_gen_info yabar_info_t;
|
|||
|
||||
extern yabar_info_t ya;
|
||||
extern char conf_file[CFILELEN];
|
||||
extern struct reserved_blk ya_reserved_blks[YA_INTERNAL_LEN];
|
||||
|
||||
void ya_init();
|
||||
void ya_execute();
|
||||
|
|
Loading…
Add table
Reference in a new issue