indent --no-tabs -linux
This commit is contained in:
parent
3cc299537e
commit
609f20c99c
10
draw.c
10
draw.c
@ -235,12 +235,12 @@ void initfont(DC * dc, const char *fontstr)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void setopacity(DC * dc, Window win, unsigned long opacity)
|
||||||
setopacity(DC *dc, Window win, unsigned long opacity)
|
|
||||||
{
|
{
|
||||||
Atom _NET_WM_WINDOW_OPACITY = XInternAtom(dc->dpy, "_NET_WM_WINDOW_OPACITY", false);
|
Atom _NET_WM_WINDOW_OPACITY =
|
||||||
XChangeProperty(dc->dpy, win, _NET_WM_WINDOW_OPACITY, XA_CARDINAL, 32, PropModeReplace,
|
XInternAtom(dc->dpy, "_NET_WM_WINDOW_OPACITY", false);
|
||||||
(unsigned char *)&opacity, 1L);
|
XChangeProperty(dc->dpy, win, _NET_WM_WINDOW_OPACITY, XA_CARDINAL, 32,
|
||||||
|
PropModeReplace, (unsigned char *)&opacity, 1L);
|
||||||
}
|
}
|
||||||
|
|
||||||
void mapdc(DC * dc, Window win, unsigned int w, unsigned int h)
|
void mapdc(DC * dc, Window win, unsigned int w, unsigned int h)
|
||||||
|
2
draw.h
2
draw.h
@ -70,7 +70,7 @@ unsigned long getcolor(DC * dc, const char *colstr);
|
|||||||
ColorSet *initcolor(DC * dc, const char *foreground, const char *background);
|
ColorSet *initcolor(DC * dc, const char *foreground, const char *background);
|
||||||
DC *initdc(void);
|
DC *initdc(void);
|
||||||
void initfont(DC * dc, const char *fontstr);
|
void initfont(DC * dc, const char *fontstr);
|
||||||
void setopacity(DC *dc, Window win, unsigned long opacity);
|
void setopacity(DC * dc, Window win, unsigned long opacity);
|
||||||
void mapdc(DC * dc, Window win, unsigned int w, unsigned int h);
|
void mapdc(DC * dc, Window win, unsigned int w, unsigned int h);
|
||||||
void resizedc(DC * dc, unsigned int w, unsigned int h);
|
void resizedc(DC * dc, unsigned int w, unsigned int h);
|
||||||
int textnw(DC * dc, const char *text, size_t len);
|
int textnw(DC * dc, const char *text, size_t len);
|
||||||
|
270
dunst.c
270
dunst.c
@ -45,7 +45,6 @@
|
|||||||
#define INFO 2
|
#define INFO 2
|
||||||
#define DEBUG 3
|
#define DEBUG 3
|
||||||
|
|
||||||
|
|
||||||
/* global variables */
|
/* global variables */
|
||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
@ -107,7 +106,7 @@ void warn(const char *text, int urg);
|
|||||||
void init_shortcut(keyboard_shortcut * shortcut);
|
void init_shortcut(keyboard_shortcut * shortcut);
|
||||||
KeySym string_to_mask(char *str);
|
KeySym string_to_mask(char *str);
|
||||||
|
|
||||||
static void print_notification(notification *n)
|
static void print_notification(notification * n)
|
||||||
{
|
{
|
||||||
printf("{\n");
|
printf("{\n");
|
||||||
printf("\tappname: %s\n", n->appname);
|
printf("\tappname: %s\n", n->appname);
|
||||||
@ -154,7 +153,7 @@ static int tear_down_error_handler(void)
|
|||||||
int grab_key(keyboard_shortcut * ks)
|
int grab_key(keyboard_shortcut * ks)
|
||||||
{
|
{
|
||||||
if (!ks->is_valid)
|
if (!ks->is_valid)
|
||||||
return 1;
|
return 1;
|
||||||
Window root;
|
Window root;
|
||||||
root = RootWindow(dc->dpy, DefaultScreen(dc->dpy));
|
root = RootWindow(dc->dpy, DefaultScreen(dc->dpy));
|
||||||
|
|
||||||
@ -379,9 +378,9 @@ int do_word_wrap(char *source, int max_width)
|
|||||||
*eol = '\0';
|
*eol = '\0';
|
||||||
return 1 + do_word_wrap(eol + 1, max_width);
|
return 1 + do_word_wrap(eol + 1, max_width);
|
||||||
}
|
}
|
||||||
if (*eol == '\\' && *(eol+1) == 'n') {
|
if (*eol == '\\' && *(eol + 1) == 'n') {
|
||||||
*eol = ' ';
|
*eol = ' ';
|
||||||
*(eol+1) = '\0';
|
*(eol + 1) = '\0';
|
||||||
return 1 + do_word_wrap(eol + 2, max_width);
|
return 1 + do_word_wrap(eol + 2, max_width);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -404,7 +403,7 @@ int do_word_wrap(char *source, int max_width)
|
|||||||
return 1 + do_word_wrap(space + 1, max_width);
|
return 1 + do_word_wrap(space + 1, max_width);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
eol++;
|
eol++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -412,7 +411,7 @@ void update_draw_txt_buf(notification * n, int max_width)
|
|||||||
{
|
{
|
||||||
rstrip(n->msg);
|
rstrip(n->msg);
|
||||||
char *msg = n->msg;
|
char *msg = n->msg;
|
||||||
while(isspace(*msg))
|
while (isspace(*msg))
|
||||||
msg++;
|
msg++;
|
||||||
|
|
||||||
if (n->draw_txt_buf.txt)
|
if (n->draw_txt_buf.txt)
|
||||||
@ -447,9 +446,10 @@ void update_draw_txt_buf(notification * n, int max_width)
|
|||||||
char *new_buf;
|
char *new_buf;
|
||||||
if (hours > 0) {
|
if (hours > 0) {
|
||||||
asprintf(&new_buf, "%s (%dh %dm %ds old)", buf, hours,
|
asprintf(&new_buf, "%s (%dh %dm %ds old)", buf, hours,
|
||||||
minutes, seconds);
|
minutes, seconds);
|
||||||
} else if (minutes > 0) {
|
} else if (minutes > 0) {
|
||||||
asprintf(&new_buf, "%s (%dm %ds old)", buf, minutes, seconds);
|
asprintf(&new_buf, "%s (%dm %ds old)", buf, minutes,
|
||||||
|
seconds);
|
||||||
} else {
|
} else {
|
||||||
asprintf(&new_buf, "%s (%ds old)", buf, seconds);
|
asprintf(&new_buf, "%s (%ds old)", buf, seconds);
|
||||||
}
|
}
|
||||||
@ -484,7 +484,8 @@ int calculate_x_offset(int line_width, int text_width)
|
|||||||
/* If the text is wider than the frame, bouncing is enabled and word_wrap disabled */
|
/* If the text is wider than the frame, bouncing is enabled and word_wrap disabled */
|
||||||
if (line_width < text_width && bounce_freq > 0.0001 && !word_wrap) {
|
if (line_width < text_width && bounce_freq > 0.0001 && !word_wrap) {
|
||||||
gettimeofday(&t, NULL);
|
gettimeofday(&t, NULL);
|
||||||
pos = ((t.tv_sec % 100) * 1e6 + t.tv_usec) / (1e6 / bounce_freq);
|
pos =
|
||||||
|
((t.tv_sec % 100) * 1e6 + t.tv_usec) / (1e6 / bounce_freq);
|
||||||
return (1 + sinf(2 * 3.14159 * pos)) * leftover / 2;
|
return (1 + sinf(2 * 3.14159 * pos)) * leftover / 2;
|
||||||
}
|
}
|
||||||
switch (align) {
|
switch (align) {
|
||||||
@ -579,8 +580,6 @@ void draw_win(void)
|
|||||||
line_cnt += n->draw_txt_buf.line_count;
|
line_cnt += n->draw_txt_buf.line_count;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* calculate height */
|
/* calculate height */
|
||||||
if (geometry.h == 0) {
|
if (geometry.h == 0) {
|
||||||
height = line_cnt * line_height;
|
height = line_cnt * line_height;
|
||||||
@ -590,7 +589,6 @@ void draw_win(void)
|
|||||||
|
|
||||||
height += (l_length(displayed_notifications) - 1) * separator_height;
|
height += (l_length(displayed_notifications) - 1) * separator_height;
|
||||||
|
|
||||||
|
|
||||||
/* add "(x more)" */
|
/* add "(x more)" */
|
||||||
draw_txt x_more;
|
draw_txt x_more;
|
||||||
x_more.txt = NULL;
|
x_more.txt = NULL;
|
||||||
@ -612,7 +610,8 @@ void draw_win(void)
|
|||||||
} else {
|
} else {
|
||||||
/* append "(x more)" message to notification text */
|
/* append "(x more)" message to notification text */
|
||||||
notification *n =
|
notification *n =
|
||||||
(notification *) displayed_notifications->head->data;
|
(notification *) displayed_notifications->head->
|
||||||
|
data;
|
||||||
print_to =
|
print_to =
|
||||||
draw_txt_get_line(&n->draw_txt_buf,
|
draw_txt_get_line(&n->draw_txt_buf,
|
||||||
n->draw_txt_buf.line_count);
|
n->draw_txt_buf.line_count);
|
||||||
@ -628,7 +627,7 @@ void draw_win(void)
|
|||||||
notification *n = (notification *) iter->data;
|
notification *n = (notification *) iter->data;
|
||||||
for (int i = 0; i < n->draw_txt_buf.line_count; i++) {
|
for (int i = 0; i < n->draw_txt_buf.line_count; i++) {
|
||||||
char *line =
|
char *line =
|
||||||
draw_txt_get_line(&n->draw_txt_buf, i+1);
|
draw_txt_get_line(&n->draw_txt_buf, i + 1);
|
||||||
assert(line != NULL);
|
assert(line != NULL);
|
||||||
width = MAX(width, textw(dc, line));
|
width = MAX(width, textw(dc, line));
|
||||||
}
|
}
|
||||||
@ -668,14 +667,16 @@ void draw_win(void)
|
|||||||
|
|
||||||
/* draw separator */
|
/* draw separator */
|
||||||
if (separator_height > 0) {
|
if (separator_height > 0) {
|
||||||
dc -> x = 0;
|
dc->x = 0;
|
||||||
double color;
|
double color;
|
||||||
if (sep_color == AUTO)
|
if (sep_color == AUTO)
|
||||||
color = calculate_foreground_color(n->colors->BG);
|
color =
|
||||||
|
calculate_foreground_color(n->colors->BG);
|
||||||
else
|
else
|
||||||
color = n->colors->FG;
|
color = n->colors->FG;
|
||||||
|
|
||||||
drawrect(dc, 0, 0, width, separator_height, true, color);
|
drawrect(dc, 0, 0, width, separator_height, true,
|
||||||
|
color);
|
||||||
dc->y += separator_height;
|
dc->y += separator_height;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -703,8 +704,7 @@ void draw_win(void)
|
|||||||
|
|
||||||
/* move and map window */
|
/* move and map window */
|
||||||
if (x != window_dim.x || y != window_dim.y
|
if (x != window_dim.x || y != window_dim.y
|
||||||
|| width != window_dim.w
|
|| width != window_dim.w || height != window_dim.h) {
|
||||||
|| height != window_dim.h) {
|
|
||||||
|
|
||||||
XResizeWindow(dc->dpy, win, width, height);
|
XResizeWindow(dc->dpy, win, width, height);
|
||||||
XMoveWindow(dc->dpy, win, x, y);
|
XMoveWindow(dc->dpy, win, x, y);
|
||||||
@ -914,7 +914,7 @@ int init_notification(notification * n, int id)
|
|||||||
n->msg = string_replace("%b", n->body, n->msg);
|
n->msg = string_replace("%b", n->body, n->msg);
|
||||||
if (n->progress) {
|
if (n->progress) {
|
||||||
char pg[10];
|
char pg[10];
|
||||||
sprintf(pg, "[%3d%%]", n->progress-1);
|
sprintf(pg, "[%3d%%]", n->progress - 1);
|
||||||
n->msg = string_replace("%p", pg, n->msg);
|
n->msg = string_replace("%p", pg, n->msg);
|
||||||
} else {
|
} else {
|
||||||
n->msg = string_replace("%p", "", n->msg);
|
n->msg = string_replace("%p", "", n->msg);
|
||||||
@ -922,14 +922,14 @@ int init_notification(notification * n, int id)
|
|||||||
|
|
||||||
n->msg = fix_markup(n->msg);
|
n->msg = fix_markup(n->msg);
|
||||||
|
|
||||||
|
|
||||||
n->dup_count = 0;
|
n->dup_count = 0;
|
||||||
n->draw_txt_buf.txt = NULL;
|
n->draw_txt_buf.txt = NULL;
|
||||||
|
|
||||||
/* check if n is a duplicate */
|
/* check if n is a duplicate */
|
||||||
for (l_node * iter = notification_queue->head; iter; iter = iter->next) {
|
for (l_node * iter = notification_queue->head; iter; iter = iter->next) {
|
||||||
notification *orig = (notification *) iter->data;
|
notification *orig = (notification *) iter->data;
|
||||||
if (strcmp(orig->appname, n->appname) == 0 && strcmp(orig->msg, n->msg) == 0) {
|
if (strcmp(orig->appname, n->appname) == 0
|
||||||
|
&& strcmp(orig->msg, n->msg) == 0) {
|
||||||
orig->dup_count++;
|
orig->dup_count++;
|
||||||
free_notification(n);
|
free_notification(n);
|
||||||
return orig->id;
|
return orig->id;
|
||||||
@ -939,7 +939,8 @@ int init_notification(notification * n, int id)
|
|||||||
for (l_node * iter = displayed_notifications->head; iter;
|
for (l_node * iter = displayed_notifications->head; iter;
|
||||||
iter = iter->next) {
|
iter = iter->next) {
|
||||||
notification *orig = (notification *) iter->data;
|
notification *orig = (notification *) iter->data;
|
||||||
if (strcmp(orig->appname, n->appname) == 0 && strcmp(orig->msg, n->msg) == 0) {
|
if (strcmp(orig->appname, n->appname) == 0
|
||||||
|
&& strcmp(orig->msg, n->msg) == 0) {
|
||||||
orig->dup_count++;
|
orig->dup_count++;
|
||||||
orig->start = now;
|
orig->start = now;
|
||||||
free_notification(n);
|
free_notification(n);
|
||||||
@ -978,7 +979,7 @@ int init_notification(notification * n, int id)
|
|||||||
n->id = id;
|
n->id = id;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(strlen(n->msg) == 0) {
|
if (strlen(n->msg) == 0) {
|
||||||
close_notification(n, 2);
|
close_notification(n, 2);
|
||||||
printf("skipping notification: %s %s\n", n->body, n->summary);
|
printf("skipping notification: %s %s\n", n->body, n->summary);
|
||||||
} else {
|
} else {
|
||||||
@ -988,7 +989,6 @@ int init_notification(notification * n, int id)
|
|||||||
if (print_notifications)
|
if (print_notifications)
|
||||||
print_notification(n);
|
print_notification(n);
|
||||||
|
|
||||||
|
|
||||||
return n->id;
|
return n->id;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1100,7 +1100,6 @@ void init_shortcut(keyboard_shortcut * ks)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (ks->sym == NoSymbol || ks->code == NoSymbol) {
|
if (ks->sym == NoSymbol || ks->code == NoSymbol) {
|
||||||
fprintf(stderr, "Warning: Unknown keyboard shortcut: %s\n",
|
fprintf(stderr, "Warning: Unknown keyboard shortcut: %s\n",
|
||||||
ks->str);
|
ks->str);
|
||||||
@ -1305,7 +1304,6 @@ void setup(void)
|
|||||||
color_strings[ColBG][NORM] = normbgcolor;
|
color_strings[ColBG][NORM] = normbgcolor;
|
||||||
color_strings[ColBG][CRIT] = critbgcolor;
|
color_strings[ColBG][CRIT] = critbgcolor;
|
||||||
|
|
||||||
|
|
||||||
/* parse and set geometry and monitor position */
|
/* parse and set geometry and monitor position */
|
||||||
if (geom[0] == '-') {
|
if (geom[0] == '-') {
|
||||||
geometry.negative_width = true;
|
geometry.negative_width = true;
|
||||||
@ -1352,7 +1350,8 @@ void setup(void)
|
|||||||
DefaultScreen(dc->dpy)),
|
DefaultScreen(dc->dpy)),
|
||||||
CWOverrideRedirect | CWBackPixmap | CWEventMask, &wa);
|
CWOverrideRedirect | CWBackPixmap | CWEventMask, &wa);
|
||||||
transparency = transparency > 100 ? 100 : transparency;
|
transparency = transparency > 100 ? 100 : transparency;
|
||||||
setopacity(dc, win, (unsigned long)((100 - transparency) * (0xffffffff/100)));
|
setopacity(dc, win,
|
||||||
|
(unsigned long)((100 - transparency) * (0xffffffff / 100)));
|
||||||
grab_key(&history_ks);
|
grab_key(&history_ks);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1444,22 +1443,45 @@ void load_options(char *cmdline_config_path)
|
|||||||
load_ini_file(config_file);
|
load_ini_file(config_file);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
font = option_get_string("global", "font", "-fn", font, "The font dunst should use.");
|
font =
|
||||||
format = option_get_string("global", "format", "-format", format, "The format template for the notifictions");
|
option_get_string("global", "font", "-fn", font,
|
||||||
sort = option_get_bool("global", "sort", "-sort", sort, "Sort notifications by urgency and date?");
|
"The font dunst should use.");
|
||||||
indicate_hidden = option_get_bool("global", "indicate_hidden", "-indicate_hidden", indicate_hidden, "Show how many notificaitons are hidden?");
|
format =
|
||||||
word_wrap = option_get_bool("global", "word_wrap", "-word_wrap", word_wrap, "Truncating long lines or do word wrap");
|
option_get_string("global", "format", "-format", format,
|
||||||
idle_threshold = option_get_int("global", "idle_threshold", "-idle_threshold", idle_threshold, "Don't timeout notifications if user is longer idle than threshold");
|
"The format template for the notifictions");
|
||||||
monitor = option_get_int("global", "monitor", "-mon", monitor, "On which monitor should the notifications be displayed");
|
sort =
|
||||||
|
option_get_bool("global", "sort", "-sort", sort,
|
||||||
|
"Sort notifications by urgency and date?");
|
||||||
|
indicate_hidden =
|
||||||
|
option_get_bool("global", "indicate_hidden", "-indicate_hidden",
|
||||||
|
indicate_hidden,
|
||||||
|
"Show how many notificaitons are hidden?");
|
||||||
|
word_wrap =
|
||||||
|
option_get_bool("global", "word_wrap", "-word_wrap", word_wrap,
|
||||||
|
"Truncating long lines or do word wrap");
|
||||||
|
idle_threshold =
|
||||||
|
option_get_int("global", "idle_threshold", "-idle_threshold",
|
||||||
|
idle_threshold,
|
||||||
|
"Don't timeout notifications if user is longer idle than threshold");
|
||||||
|
monitor =
|
||||||
|
option_get_int("global", "monitor", "-mon", monitor,
|
||||||
|
"On which monitor should the notifications be displayed");
|
||||||
{
|
{
|
||||||
char *c = option_get_string("global", "follow", "-follow", "", "Follow mouse, keyboard or none?");
|
char *c =
|
||||||
|
option_get_string("global", "follow", "-follow", "",
|
||||||
|
"Follow mouse, keyboard or none?");
|
||||||
if (strlen(c) > 0) {
|
if (strlen(c) > 0) {
|
||||||
parse_follow_mode(c);
|
parse_follow_mode(c);
|
||||||
free(c);
|
free(c);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
geom = option_get_string("global", "geometry", "-geom/-geometry", geom, "Geometry for the window");
|
geom =
|
||||||
line_height = option_get_int("global", "line_height", "-lh/-line_height", line_height, "Add additional padding above and beneath text");
|
option_get_string("global", "geometry", "-geom/-geometry", geom,
|
||||||
|
"Geometry for the window");
|
||||||
|
line_height =
|
||||||
|
option_get_int("global", "line_height", "-lh/-line_height",
|
||||||
|
line_height,
|
||||||
|
"Add additional padding above and beneath text");
|
||||||
{
|
{
|
||||||
char *c = option_get_string("global", "modifier", NULL, "", "");
|
char *c = option_get_string("global", "modifier", NULL, "", "");
|
||||||
if (strlen(c) > 0) {
|
if (strlen(c) > 0) {
|
||||||
@ -1471,12 +1493,22 @@ void load_options(char *cmdline_config_path)
|
|||||||
free(c);
|
free(c);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
close_ks.str = option_get_string("global", "key", NULL, close_ks.str, "");
|
close_ks.str =
|
||||||
close_all_ks.str = option_get_string("global", "all_key", NULL, close_all_ks.str, "");
|
option_get_string("global", "key", NULL, close_ks.str, "");
|
||||||
history_ks.str = option_get_string("global", "history_key", NULL, history_ks.str, "");
|
close_all_ks.str =
|
||||||
bounce_freq = option_get_double("global", "bounce_freq", "-bounce_freq", bounce_freq, "Make long text bounce from side to side");
|
option_get_string("global", "all_key", NULL, close_all_ks.str, "");
|
||||||
|
history_ks.str =
|
||||||
|
option_get_string("global", "history_key", NULL, history_ks.str,
|
||||||
|
"");
|
||||||
|
bounce_freq =
|
||||||
|
option_get_double("global", "bounce_freq", "-bounce_freq",
|
||||||
|
bounce_freq,
|
||||||
|
"Make long text bounce from side to side");
|
||||||
{
|
{
|
||||||
char *c = option_get_string("global", "alignment", "-align/-alignment", "", "Align notifications left/center/right");
|
char *c =
|
||||||
|
option_get_string("global", "alignment",
|
||||||
|
"-align/-alignment", "",
|
||||||
|
"Align notifications left/center/right");
|
||||||
if (strlen(c) > 0) {
|
if (strlen(c) > 0) {
|
||||||
if (strcmp(c, "left") == 0)
|
if (strcmp(c, "left") == 0)
|
||||||
align = left;
|
align = left;
|
||||||
@ -1485,42 +1517,91 @@ void load_options(char *cmdline_config_path)
|
|||||||
else if (strcmp(c, "right") == 0)
|
else if (strcmp(c, "right") == 0)
|
||||||
align = right;
|
align = right;
|
||||||
else
|
else
|
||||||
fprintf(stderr, "Warning: unknown allignment\n");
|
fprintf(stderr,
|
||||||
|
"Warning: unknown allignment\n");
|
||||||
free(c);
|
free(c);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
show_age_threshold = option_get_int("global", "show_age_threshold", "-show_age_threshold", show_age_threshold, "When should the age of the notification be displayed?");
|
show_age_threshold =
|
||||||
sticky_history = option_get_bool("global", "sticky_history", "-sticky_history", sticky_history, "Don't timeout notifications popped up from history");
|
option_get_int("global", "show_age_threshold",
|
||||||
separator_height = option_get_int("global", "separator_height", "-sep_height/-separator_height", separator_height, "height of the separator line");
|
"-show_age_threshold", show_age_threshold,
|
||||||
transparency = option_get_int("global", "transparency", "-transparency", transparency, "Transparency. range 0-100");
|
"When should the age of the notification be displayed?");
|
||||||
|
sticky_history =
|
||||||
|
option_get_bool("global", "sticky_history", "-sticky_history",
|
||||||
|
sticky_history,
|
||||||
|
"Don't timeout notifications popped up from history");
|
||||||
|
separator_height =
|
||||||
|
option_get_int("global", "separator_height",
|
||||||
|
"-sep_height/-separator_height", separator_height,
|
||||||
|
"height of the separator line");
|
||||||
|
transparency =
|
||||||
|
option_get_int("global", "transparency", "-transparency",
|
||||||
|
transparency, "Transparency. range 0-100");
|
||||||
{
|
{
|
||||||
char *c = option_get_string("global", "separator_color", "-sep_color/-separator_color", "", "Color of the separator line (or 'auto')");
|
char *c =
|
||||||
|
option_get_string("global", "separator_color",
|
||||||
|
"-sep_color/-separator_color", "",
|
||||||
|
"Color of the separator line (or 'auto')");
|
||||||
if (strlen(c) > 0) {
|
if (strlen(c) > 0) {
|
||||||
if (strcmp(c, "auto") == 0)
|
if (strcmp(c, "auto") == 0)
|
||||||
sep_color = AUTO;
|
sep_color = AUTO;
|
||||||
else if (strcmp(c, "foreground") == 0)
|
else if (strcmp(c, "foreground") == 0)
|
||||||
sep_color = FOREGROUND;
|
sep_color = FOREGROUND;
|
||||||
else
|
else
|
||||||
fprintf(stderr, "Warning: Unknown separator color\n");
|
fprintf(stderr,
|
||||||
|
"Warning: Unknown separator color\n");
|
||||||
free(c);
|
free(c);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
lowbgcolor = option_get_string("urgency_low", "background", "-lb", lowbgcolor, "Background color for notifcations with low urgency");
|
lowbgcolor =
|
||||||
lowfgcolor = option_get_string("urgency_low", "foreground", "-lf", lowfgcolor, "Foreground color for notifications with low urgency");
|
option_get_string("urgency_low", "background", "-lb", lowbgcolor,
|
||||||
timeouts[LOW] = option_get_int("urgency_low", "timeout", "-lto", timeouts[LOW], "Timeout for notifications with low urgency");
|
"Background color for notifcations with low urgency");
|
||||||
normbgcolor = option_get_string("urgency_normal", "background", "-nb", normbgcolor, "Background color for notifications with normal urgency");
|
lowfgcolor =
|
||||||
normfgcolor = option_get_string("urgency_normal", "foreground", "-nf", normfgcolor, "Foreground color for notifications with normal urgency");
|
option_get_string("urgency_low", "foreground", "-lf", lowfgcolor,
|
||||||
timeouts[NORM] = option_get_int("urgency_normal", "timeout", "-nto", timeouts[NORM], "Timeout for notifications with normal urgency");
|
"Foreground color for notifications with low urgency");
|
||||||
critbgcolor = option_get_string("urgency_critical", "background", "-cb", critbgcolor, "Background color for notifications with critical urgency");
|
timeouts[LOW] =
|
||||||
critfgcolor = option_get_string("urgency_critical", "foreground", "-cf", critfgcolor, "Foreground color for notifications with ciritical urgency");
|
option_get_int("urgency_low", "timeout", "-lto", timeouts[LOW],
|
||||||
timeouts[CRIT] = option_get_int("urgency_critical", "timeout", "-cto", timeouts[CRIT], "Timeout for notifications with critical urgency");
|
"Timeout for notifications with low urgency");
|
||||||
|
normbgcolor =
|
||||||
|
option_get_string("urgency_normal", "background", "-nb",
|
||||||
|
normbgcolor,
|
||||||
|
"Background color for notifications with normal urgency");
|
||||||
|
normfgcolor =
|
||||||
|
option_get_string("urgency_normal", "foreground", "-nf",
|
||||||
|
normfgcolor,
|
||||||
|
"Foreground color for notifications with normal urgency");
|
||||||
|
timeouts[NORM] =
|
||||||
|
option_get_int("urgency_normal", "timeout", "-nto", timeouts[NORM],
|
||||||
|
"Timeout for notifications with normal urgency");
|
||||||
|
critbgcolor =
|
||||||
|
option_get_string("urgency_critical", "background", "-cb",
|
||||||
|
critbgcolor,
|
||||||
|
"Background color for notifications with critical urgency");
|
||||||
|
critfgcolor =
|
||||||
|
option_get_string("urgency_critical", "foreground", "-cf",
|
||||||
|
critfgcolor,
|
||||||
|
"Foreground color for notifications with ciritical urgency");
|
||||||
|
timeouts[CRIT] =
|
||||||
|
option_get_int("urgency_critical", "timeout", "-cto",
|
||||||
|
timeouts[CRIT],
|
||||||
|
"Timeout for notifications with critical urgency");
|
||||||
|
|
||||||
close_ks.str = option_get_string("shortcuts", "close", "-key", close_ks.str, "Shortcut for closing one notification");
|
close_ks.str =
|
||||||
close_all_ks.str = option_get_string("shortcuts", "close_all", "-all_key", close_all_ks.str, "Shortcut for closing all notifications");
|
option_get_string("shortcuts", "close", "-key", close_ks.str,
|
||||||
history_ks.str = option_get_string("shortcuts", "history", "-history_key", history_ks.str, "Shortcut to pop the last notification from history");
|
"Shortcut for closing one notification");
|
||||||
|
close_all_ks.str =
|
||||||
|
option_get_string("shortcuts", "close_all", "-all_key",
|
||||||
|
close_all_ks.str,
|
||||||
|
"Shortcut for closing all notifications");
|
||||||
|
history_ks.str =
|
||||||
|
option_get_string("shortcuts", "history", "-history_key",
|
||||||
|
history_ks.str,
|
||||||
|
"Shortcut to pop the last notification from history");
|
||||||
|
|
||||||
print_notifications = cmdline_get_bool("-print", false, "Print notifications to cmdline (DEBUG)");
|
print_notifications =
|
||||||
|
cmdline_get_bool("-print", false,
|
||||||
|
"Print notifications to cmdline (DEBUG)");
|
||||||
|
|
||||||
char *cur_section = NULL;
|
char *cur_section = NULL;
|
||||||
for (;;) {
|
for (;;) {
|
||||||
@ -1528,23 +1609,25 @@ void load_options(char *cmdline_config_path)
|
|||||||
if (!cur_section)
|
if (!cur_section)
|
||||||
break;
|
break;
|
||||||
if (strcmp(cur_section, "global") == 0
|
if (strcmp(cur_section, "global") == 0
|
||||||
|| strcmp(cur_section, "shortcuts") == 0
|
|| strcmp(cur_section, "shortcuts") == 0
|
||||||
|| strcmp(cur_section, "urgency_low") == 0
|
|| strcmp(cur_section, "urgency_low") == 0
|
||||||
|| strcmp(cur_section, "urgency_normal") == 0
|
|| strcmp(cur_section, "urgency_normal") == 0
|
||||||
|| strcmp(cur_section, "urgency_critical") == 0)
|
|| strcmp(cur_section, "urgency_critical") == 0)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
rule_t *current_rule = dunst_rules_find_or_create(cur_section);
|
rule_t *current_rule = dunst_rules_find_or_create(cur_section);
|
||||||
current_rule->appname = ini_get_string(
|
current_rule->appname =
|
||||||
cur_section, "appname", current_rule->appname);
|
ini_get_string(cur_section, "appname",
|
||||||
current_rule->summary = ini_get_string(
|
current_rule->appname);
|
||||||
cur_section, "summary", current_rule->summary);
|
current_rule->summary =
|
||||||
current_rule->body = ini_get_string(
|
ini_get_string(cur_section, "summary",
|
||||||
cur_section, "body", current_rule->body);
|
current_rule->summary);
|
||||||
current_rule->icon = ini_get_string(
|
current_rule->body =
|
||||||
cur_section, "icon", current_rule->icon);
|
ini_get_string(cur_section, "body", current_rule->body);
|
||||||
current_rule->timeout = ini_get_int(
|
current_rule->icon =
|
||||||
cur_section, "timeout", current_rule->timeout);
|
ini_get_string(cur_section, "icon", current_rule->icon);
|
||||||
|
current_rule->timeout =
|
||||||
|
ini_get_int(cur_section, "timeout", current_rule->timeout);
|
||||||
{
|
{
|
||||||
char *urg = ini_get_string(cur_section, "urgency", "");
|
char *urg = ini_get_string(cur_section, "urgency", "");
|
||||||
if (strlen(urg) > 0) {
|
if (strlen(urg) > 0) {
|
||||||
@ -1556,16 +1639,17 @@ void load_options(char *cmdline_config_path)
|
|||||||
current_rule->urgency = CRIT;
|
current_rule->urgency = CRIT;
|
||||||
else
|
else
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"unknown urgency: %s, ignoring\n", urg);
|
"unknown urgency: %s, ignoring\n",
|
||||||
|
urg);
|
||||||
free(urg);
|
free(urg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
current_rule->fg = ini_get_string(
|
current_rule->fg =
|
||||||
cur_section, "foreground", current_rule->fg);
|
ini_get_string(cur_section, "foreground", current_rule->fg);
|
||||||
current_rule->bg = ini_get_string(
|
current_rule->bg =
|
||||||
cur_section, "background", current_rule->bg);
|
ini_get_string(cur_section, "background", current_rule->bg);
|
||||||
current_rule->format = ini_get_string(
|
current_rule->format =
|
||||||
cur_section, "format", current_rule->format);
|
ini_get_string(cur_section, "format", current_rule->format);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef STATIC_CONFIG
|
#ifndef STATIC_CONFIG
|
||||||
@ -1575,7 +1659,6 @@ void load_options(char *cmdline_config_path)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
now = time(&now);
|
now = time(&now);
|
||||||
@ -1591,20 +1674,22 @@ int main(int argc, char *argv[])
|
|||||||
|
|
||||||
cmdline_load(argc, argv);
|
cmdline_load(argc, argv);
|
||||||
|
|
||||||
|
if (cmdline_get_bool("-v/-version", false, "Print version")
|
||||||
if (cmdline_get_bool("-v/-version", false, "Print version") || cmdline_get_bool("--version", false, "Print version")) {
|
|| cmdline_get_bool("--version", false, "Print version")) {
|
||||||
print_version();
|
print_version();
|
||||||
}
|
}
|
||||||
|
|
||||||
char *cmdline_config_path;
|
char *cmdline_config_path;
|
||||||
cmdline_config_path = cmdline_get_string("-conf/-config", NULL, "Path to configuration file");
|
cmdline_config_path =
|
||||||
|
cmdline_get_string("-conf/-config", NULL,
|
||||||
|
"Path to configuration file");
|
||||||
load_options(cmdline_config_path);
|
load_options(cmdline_config_path);
|
||||||
|
|
||||||
if (cmdline_get_bool("-h/-help", false, "Print help") || cmdline_get_bool("--help", false, "Print help")) {
|
if (cmdline_get_bool("-h/-help", false, "Print help")
|
||||||
|
|| cmdline_get_bool("--help", false, "Print help")) {
|
||||||
usage(EXIT_SUCCESS);
|
usage(EXIT_SUCCESS);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
initdbus();
|
initdbus();
|
||||||
setup();
|
setup();
|
||||||
|
|
||||||
@ -1628,7 +1713,8 @@ void usage(int exit_status)
|
|||||||
|
|
||||||
void print_version(void)
|
void print_version(void)
|
||||||
{
|
{
|
||||||
printf("Dunst - a dmenu-ish notification-daemon, version: %s\n", VERSION);
|
printf("Dunst - a dmenu-ish notification-daemon, version: %s\n",
|
||||||
|
VERSION);
|
||||||
exit(EXIT_SUCCESS);
|
exit(EXIT_SUCCESS);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
3
dunst.h
3
dunst.h
@ -14,7 +14,6 @@
|
|||||||
#define ColFG 1
|
#define ColFG 1
|
||||||
#define ColBG 0
|
#define ColBG 0
|
||||||
|
|
||||||
|
|
||||||
enum alignment { left, center, right };
|
enum alignment { left, center, right };
|
||||||
enum separator_color { FOREGROUND, AUTO };
|
enum separator_color { FOREGROUND, AUTO };
|
||||||
enum follow_mode { FOLLOW_NONE, FOLLOW_MOUSE, FOLLOW_KEYBOARD };
|
enum follow_mode { FOLLOW_NONE, FOLLOW_MOUSE, FOLLOW_KEYBOARD };
|
||||||
@ -51,7 +50,7 @@ typedef struct _notification {
|
|||||||
time_t timestamp;
|
time_t timestamp;
|
||||||
int timeout;
|
int timeout;
|
||||||
int urgency;
|
int urgency;
|
||||||
bool redisplayed; /* has been displayed before? */
|
bool redisplayed; /* has been displayed before? */
|
||||||
int id;
|
int id;
|
||||||
int dup_count;
|
int dup_count;
|
||||||
ColorSet *colors;
|
ColorSet *colors;
|
||||||
|
18
dunst_dbus.c
18
dunst_dbus.c
@ -336,11 +336,17 @@ void notify(DBusMessage * dmsg)
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
dbus_message_iter_get_basic(&hint, &hint_name);
|
dbus_message_iter_get_basic(&hint, &hint_name);
|
||||||
_extract_hint(DBUS_TYPE_BYTE, "urgency", hint_name, &hint, &urgency);
|
_extract_hint(DBUS_TYPE_BYTE, "urgency", hint_name,
|
||||||
_extract_hint(DBUS_TYPE_STRING, "fgcolor", hint_name, &hint, &fgcolor);
|
&hint, &urgency);
|
||||||
_extract_hint(DBUS_TYPE_STRING, "bgcolor", hint_name, &hint, &bgcolor);
|
_extract_hint(DBUS_TYPE_STRING, "fgcolor", hint_name,
|
||||||
_extract_hint(DBUS_TYPE_INT32, "value", hint_name, &hint, &progress);
|
&hint, &fgcolor);
|
||||||
if (!progress) _extract_hint(DBUS_TYPE_UINT32, "value", hint_name, &hint, &progress);
|
_extract_hint(DBUS_TYPE_STRING, "bgcolor", hint_name,
|
||||||
|
&hint, &bgcolor);
|
||||||
|
_extract_hint(DBUS_TYPE_INT32, "value", hint_name,
|
||||||
|
&hint, &progress);
|
||||||
|
if (!progress)
|
||||||
|
_extract_hint(DBUS_TYPE_UINT32, "value",
|
||||||
|
hint_name, &hint, &progress);
|
||||||
dbus_message_iter_next(&hint);
|
dbus_message_iter_next(&hint);
|
||||||
}
|
}
|
||||||
dbus_message_iter_next(&hints);
|
dbus_message_iter_next(&hints);
|
||||||
@ -358,7 +364,7 @@ void notify(DBusMessage * dmsg)
|
|||||||
n->body = body != NULL ? strdup(body) : "";
|
n->body = body != NULL ? strdup(body) : "";
|
||||||
n->icon = icon != NULL ? strdup(icon) : "";
|
n->icon = icon != NULL ? strdup(icon) : "";
|
||||||
n->timeout = expires;
|
n->timeout = expires;
|
||||||
n->progress = (progress < 0 || progress > 100) ? 0 : progress+1;
|
n->progress = (progress < 0 || progress > 100) ? 0 : progress + 1;
|
||||||
n->urgency = urgency;
|
n->urgency = urgency;
|
||||||
n->dbus_client = strdup(dbus_message_get_sender(dmsg));
|
n->dbus_client = strdup(dbus_message_get_sender(dmsg));
|
||||||
for (i = 0; i < ColLast; i++) {
|
for (i = 0; i < ColLast; i++) {
|
||||||
|
62
options.c
62
options.c
@ -11,20 +11,16 @@
|
|||||||
#include "utils.h"
|
#include "utils.h"
|
||||||
|
|
||||||
typedef struct _entry_t {
|
typedef struct _entry_t {
|
||||||
char *key;
|
char *key;
|
||||||
char *value;
|
char *value;
|
||||||
} entry_t;
|
} entry_t;
|
||||||
|
|
||||||
typedef struct _section_t {
|
typedef struct _section_t {
|
||||||
char *name;
|
char *name;
|
||||||
int entry_count;
|
int entry_count;
|
||||||
entry_t *entries;
|
entry_t *entries;
|
||||||
} section_t;
|
} section_t;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static int section_count = 0;
|
static int section_count = 0;
|
||||||
static section_t *sections;
|
static section_t *sections;
|
||||||
|
|
||||||
@ -45,16 +41,16 @@ static int cmdline_find_option(char *key);
|
|||||||
section_t *new_section(char *name)
|
section_t *new_section(char *name)
|
||||||
{
|
{
|
||||||
section_count++;
|
section_count++;
|
||||||
sections = realloc(sections, sizeof(section_t) *section_count);
|
sections = realloc(sections, sizeof(section_t) * section_count);
|
||||||
sections[section_count - 1].name = strdup(name);
|
sections[section_count - 1].name = strdup(name);
|
||||||
sections[section_count - 1].entries = NULL;
|
sections[section_count - 1].entries = NULL;
|
||||||
sections[section_count - 1].entry_count = 0;
|
sections[section_count - 1].entry_count = 0;
|
||||||
return §ions[section_count -1];
|
return §ions[section_count - 1];
|
||||||
}
|
}
|
||||||
|
|
||||||
void free_ini(void)
|
void free_ini(void)
|
||||||
{
|
{
|
||||||
for(int i = 0; i < section_count; i++) {
|
for (int i = 0; i < section_count; i++) {
|
||||||
for (int j = 0; j < sections[i].entry_count; j++) {
|
for (int j = 0; j < sections[i].entry_count; j++) {
|
||||||
free(sections[i].entries[j].key);
|
free(sections[i].entries[j].key);
|
||||||
free(sections[i].entries[j].value);
|
free(sections[i].entries[j].value);
|
||||||
@ -145,7 +141,7 @@ char *next_section(char *section)
|
|||||||
if (i + 1 >= section_count)
|
if (i + 1 >= section_count)
|
||||||
return NULL;
|
return NULL;
|
||||||
else
|
else
|
||||||
return sections[i+1].name;
|
return sections[i + 1].name;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
@ -192,7 +188,7 @@ char *clean_value(char *value)
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int load_ini_file(FILE *fp)
|
int load_ini_file(FILE * fp)
|
||||||
{
|
{
|
||||||
char line[BUFSIZ];
|
char line[BUFSIZ];
|
||||||
|
|
||||||
@ -209,7 +205,9 @@ int load_ini_file(FILE *fp)
|
|||||||
if (*start == '[') {
|
if (*start == '[') {
|
||||||
char *end = strstr(start + 1, "]");
|
char *end = strstr(start + 1, "]");
|
||||||
if (!end) {
|
if (!end) {
|
||||||
printf("Warning: invalid config file at line %d\n", line_num);
|
printf
|
||||||
|
("Warning: invalid config file at line %d\n",
|
||||||
|
line_num);
|
||||||
printf("Missing ']'\n");
|
printf("Missing ']'\n");
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -218,27 +216,30 @@ int load_ini_file(FILE *fp)
|
|||||||
|
|
||||||
if (current_section)
|
if (current_section)
|
||||||
free(current_section);
|
free(current_section);
|
||||||
current_section = (strdup(start+1));
|
current_section = (strdup(start + 1));
|
||||||
new_section(current_section);
|
new_section(current_section);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
char *equal = strstr(start + 1, "=");
|
char *equal = strstr(start + 1, "=");
|
||||||
if (!equal) {
|
if (!equal) {
|
||||||
printf("Warning: invalid config file at line %d\n", line_num);
|
printf("Warning: invalid config file at line %d\n",
|
||||||
|
line_num);
|
||||||
printf("Missing '='\n");
|
printf("Missing '='\n");
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
*equal = '\0';
|
*equal = '\0';
|
||||||
char *key = rstrip(start);
|
char *key = rstrip(start);
|
||||||
char *value = lskip(equal+1);
|
char *value = lskip(equal + 1);
|
||||||
|
|
||||||
char *quote = strstr(value, "\"");
|
char *quote = strstr(value, "\"");
|
||||||
if (quote) {
|
if (quote) {
|
||||||
char *closing_quote = strstr(quote + 1, "\"");
|
char *closing_quote = strstr(quote + 1, "\"");
|
||||||
if (!closing_quote) {
|
if (!closing_quote) {
|
||||||
printf("Warning: invalid config file at line %d\n", line_num);
|
printf
|
||||||
|
("Warning: invalid config file at line %d\n",
|
||||||
|
line_num);
|
||||||
printf("Missing '\"'\n");
|
printf("Missing '\"'\n");
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -254,7 +255,8 @@ int load_ini_file(FILE *fp)
|
|||||||
value = rstrip(value);
|
value = rstrip(value);
|
||||||
|
|
||||||
if (!current_section) {
|
if (!current_section) {
|
||||||
printf("Warning: invalid config file at line: %d\n", line_num);
|
printf("Warning: invalid config file at line: %d\n",
|
||||||
|
line_num);
|
||||||
printf("Key value pair without a section\n");
|
printf("Key value pair without a section\n");
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -314,12 +316,13 @@ static char *cmdline_get_value(char *key)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (idx + 1 >= cmdline_argc || cmdline_argv[idx+1][0] == '-') {
|
if (idx + 1 >= cmdline_argc || cmdline_argv[idx + 1][0] == '-') {
|
||||||
/* the argument is missing */
|
/* the argument is missing */
|
||||||
fprintf(stderr, "Warning: %s, missing argument. Ignoring\n", key);
|
fprintf(stderr, "Warning: %s, missing argument. Ignoring\n",
|
||||||
|
key);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
return cmdline_argv[idx+1];
|
return cmdline_argv[idx + 1];
|
||||||
}
|
}
|
||||||
|
|
||||||
char *cmdline_get_string(char *key, char *def, char *description)
|
char *cmdline_get_string(char *key, char *def, char *description)
|
||||||
@ -364,7 +367,8 @@ int cmdline_get_bool(char *key, int def, char *description)
|
|||||||
return def;
|
return def;
|
||||||
}
|
}
|
||||||
|
|
||||||
char *option_get_string(char *ini_section, char *ini_key, char *cmdline_key, char *def, char *description)
|
char *option_get_string(char *ini_section, char *ini_key, char *cmdline_key,
|
||||||
|
char *def, char *description)
|
||||||
{
|
{
|
||||||
char *val = NULL;
|
char *val = NULL;
|
||||||
|
|
||||||
@ -380,7 +384,8 @@ char *option_get_string(char *ini_section, char *ini_key, char *cmdline_key, cha
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int option_get_int(char *ini_section, char *ini_key, char *cmdline_key, int def, char *description)
|
int option_get_int(char *ini_section, char *ini_key, char *cmdline_key, int def,
|
||||||
|
char *description)
|
||||||
{
|
{
|
||||||
/* *str is only used to check wether the cmdline option is actually set. */
|
/* *str is only used to check wether the cmdline option is actually set. */
|
||||||
char *str = cmdline_get_value(cmdline_key);
|
char *str = cmdline_get_value(cmdline_key);
|
||||||
@ -395,7 +400,8 @@ int option_get_int(char *ini_section, char *ini_key, char *cmdline_key, int def,
|
|||||||
return val;
|
return val;
|
||||||
}
|
}
|
||||||
|
|
||||||
double option_get_double(char *ini_section, char *ini_key, char *cmdline_key, double def, char *description)
|
double option_get_double(char *ini_section, char *ini_key, char *cmdline_key,
|
||||||
|
double def, char *description)
|
||||||
{
|
{
|
||||||
char *str = cmdline_get_value(cmdline_key);
|
char *str = cmdline_get_value(cmdline_key);
|
||||||
double val = cmdline_get_double(cmdline_key, def, description);
|
double val = cmdline_get_double(cmdline_key, def, description);
|
||||||
@ -406,7 +412,8 @@ double option_get_double(char *ini_section, char *ini_key, char *cmdline_key, do
|
|||||||
return val;
|
return val;
|
||||||
}
|
}
|
||||||
|
|
||||||
int option_get_bool(char *ini_section, char *ini_key, char *cmdline_key, int def, char *description)
|
int option_get_bool(char *ini_section, char *ini_key, char *cmdline_key,
|
||||||
|
int def, char *description)
|
||||||
{
|
{
|
||||||
int val;
|
int val;
|
||||||
|
|
||||||
@ -449,4 +456,5 @@ char *cmdline_create_usage(void)
|
|||||||
{
|
{
|
||||||
return strdup(usage_str);
|
return strdup(usage_str);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* vim: set ts=8 sw=8 tw=0: */
|
/* vim: set ts=8 sw=8 tw=0: */
|
||||||
|
13
options.h
13
options.h
@ -3,7 +3,6 @@
|
|||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
|
|
||||||
int load_ini_file(FILE *);
|
int load_ini_file(FILE *);
|
||||||
char *ini_get_string(char *section, char *key, const char *def);
|
char *ini_get_string(char *section, char *key, const char *def);
|
||||||
int ini_get_int(char *section, char *key, int def);
|
int ini_get_int(char *section, char *key, int def);
|
||||||
@ -19,10 +18,14 @@ double cmdline_get_double(char *key, double def, char *description);
|
|||||||
int cmdline_get_bool(char *key, int def, char *description);
|
int cmdline_get_bool(char *key, int def, char *description);
|
||||||
char *cmdline_create_usage(void);
|
char *cmdline_create_usage(void);
|
||||||
|
|
||||||
char *option_get_string(char *ini_section, char *ini_key, char *cmdline_key, char *def, char *description);
|
char *option_get_string(char *ini_section, char *ini_key, char *cmdline_key,
|
||||||
int option_get_int(char *ini_section, char *ini_key, char *cmdline_key, int def, char *description);
|
char *def, char *description);
|
||||||
double option_get_double(char *ini_section, char *ini_key, char *cmdline_key, double def, char *description);
|
int option_get_int(char *ini_section, char *ini_key, char *cmdline_key, int def,
|
||||||
int option_get_bool(char *ini_section, char *ini_key, char *cmdline_key, int def, char *description);
|
char *description);
|
||||||
|
double option_get_double(char *ini_section, char *ini_key, char *cmdline_key,
|
||||||
|
double def, char *description);
|
||||||
|
int option_get_bool(char *ini_section, char *ini_key, char *cmdline_key,
|
||||||
|
int def, char *description);
|
||||||
|
|
||||||
/* returns the next known section.
|
/* returns the next known section.
|
||||||
* if section == NULL returns first section.
|
* if section == NULL returns first section.
|
||||||
|
5
utils.c
5
utils.c
@ -6,7 +6,6 @@
|
|||||||
#include "utils.h"
|
#include "utils.h"
|
||||||
#include "dunst.h"
|
#include "dunst.h"
|
||||||
|
|
||||||
|
|
||||||
char *rstrip(char *str)
|
char *rstrip(char *str)
|
||||||
{
|
{
|
||||||
char *end;
|
char *end;
|
||||||
@ -20,7 +19,7 @@ char *rstrip(char *str)
|
|||||||
|
|
||||||
char *lskip(char *s)
|
char *lskip(char *s)
|
||||||
{
|
{
|
||||||
for(; *s && isspace(*s); s++);
|
for (; *s && isspace(*s); s++) ;
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -54,7 +53,7 @@ char *string_replace(const char *needle, const char *replacement,
|
|||||||
int digit_count(int i)
|
int digit_count(int i)
|
||||||
{
|
{
|
||||||
int len = 0;
|
int len = 0;
|
||||||
if ( i == 0) {
|
if (i == 0) {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
2
utils.h
2
utils.h
@ -9,7 +9,7 @@ char *string_replace(const char *needle, const char *replacement,
|
|||||||
char *haystack);
|
char *haystack);
|
||||||
|
|
||||||
/* exit with an error message */
|
/* exit with an error message */
|
||||||
void die(char * msg, int exit_value);
|
void die(char *msg, int exit_value);
|
||||||
|
|
||||||
int digit_count(int i);
|
int digit_count(int i);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user