1
0
mirror of https://github.com/Llewellynvdm/conky.git synced 2024-12-27 20:44:56 +00:00

Add X11 display argument/conf entry (FR #2474243)

Signed-off-by: Nikos Ntarmos <ntarmos@cs.uoi.gr>
Signed-off-by: Brenden Matthews <brenden@rty.ca>
This commit is contained in:
Nikos Ntarmos 2009-04-01 20:06:31 +03:00 committed by Brenden Matthews
parent 508df32b5a
commit f91faa64b8
3 changed files with 333 additions and 255 deletions

View File

@ -247,6 +247,9 @@ struct information info;
/* default config file */ /* default config file */
static char *current_config; static char *current_config;
/* display to connect to */
static char *disp = NULL;
/* set to 1 if you want all text to be in uppercase */ /* set to 1 if you want all text to be in uppercase */
static unsigned int stuff_in_upper_case; static unsigned int stuff_in_upper_case;
@ -6157,6 +6160,7 @@ static void main_loop(void)
} }
static void load_config_file(const char *); static void load_config_file(const char *);
static void load_config_file_x11(const char *);
/* reload the config file */ /* reload the config file */
static void reload_config(void) static void reload_config(void)
@ -6183,6 +6187,7 @@ static void reload_config(void)
if (current_config) { if (current_config) {
clear_fs_stats(); clear_fs_stats();
load_config_file(current_config); load_config_file(current_config);
load_config_file_x11(current_config);
/* re-init specials array */ /* re-init specials array */
if ((specials = realloc((void *) specials, if ((specials = realloc((void *) specials,
@ -6492,7 +6497,7 @@ static void X11_initialisation(void)
{ {
if (x_initialised == YES) return; if (x_initialised == YES) return;
output_methods |= TO_X; output_methods |= TO_X;
init_X11(); init_X11(disp);
set_default_configurations_for_x(); set_default_configurations_for_x();
x_initialised = YES; x_initialised = YES;
} }
@ -6590,6 +6595,15 @@ static void load_config_file(const char *f)
} }
} }
} }
CONF("display") {
if (!value || x_initialised == YES) {
CONF_ERR;
} else {
if (disp)
free(disp);
disp = strdup(value);
}
}
CONF("alignment") { CONF("alignment") {
if (window.type == TYPE_DOCK) if (window.type == TYPE_DOCK)
; ;
@ -6634,106 +6648,6 @@ static void load_config_file(const char *f)
CONF_ERR; CONF_ERR;
} }
} }
CONF("color0") {
X11_initialisation();
if (x_initialised == YES) {
if (value) {
color0 = get_x11_color(value);
} else {
CONF_ERR;
}
}
}
CONF("color1") {
X11_initialisation();
if (x_initialised == YES) {
if (value) {
color1 = get_x11_color(value);
} else {
CONF_ERR;
}
}
}
CONF("color2") {
X11_initialisation();
if (x_initialised == YES) {
if (value) {
color2 = get_x11_color(value);
} else {
CONF_ERR;
}
}
}
CONF("color3") {
X11_initialisation();
if (x_initialised == YES) {
if (value) {
color3 = get_x11_color(value);
} else {
CONF_ERR;
}
}
}
CONF("color4") {
X11_initialisation();
if (x_initialised == YES) {
if (value) {
color4 = get_x11_color(value);
} else {
CONF_ERR;
}
}
}
CONF("color5") {
X11_initialisation();
if (x_initialised == YES) {
if (value) {
color5 = get_x11_color(value);
} else {
CONF_ERR;
}
}
}
CONF("color6") {
X11_initialisation();
if (x_initialised == YES) {
if (value) {
color6 = get_x11_color(value);
} else {
CONF_ERR;
}
}
}
CONF("color7") {
X11_initialisation();
if (x_initialised == YES) {
if (value) {
color7 = get_x11_color(value);
} else {
CONF_ERR;
}
}
}
CONF("color8") {
X11_initialisation();
if (x_initialised == YES) {
if (value) {
color8 = get_x11_color(value);
} else {
CONF_ERR;
}
}
}
CONF("color9") {
X11_initialisation();
if (x_initialised == YES) {
if (value) {
color9 = get_x11_color(value);
} else {
CONF_ERR;
}
}
}
#define TEMPLATE_CONF(n) \ #define TEMPLATE_CONF(n) \
CONF("template"#n) { \ CONF("template"#n) { \
if (value) { \ if (value) { \
@ -6753,36 +6667,6 @@ static void load_config_file(const char *f)
TEMPLATE_CONF(7) TEMPLATE_CONF(7)
TEMPLATE_CONF(8) TEMPLATE_CONF(8)
TEMPLATE_CONF(9) TEMPLATE_CONF(9)
CONF("default_color") {
X11_initialisation();
if (x_initialised == YES) {
if (value) {
default_fg_color = get_x11_color(value);
} else {
CONF_ERR;
}
}
}
CONF3("default_shade_color", "default_shadecolor") {
X11_initialisation();
if (x_initialised == YES) {
if (value) {
default_bg_color = get_x11_color(value);
} else {
CONF_ERR;
}
}
}
CONF3("default_outline_color", "default_outlinecolor") {
X11_initialisation();
if (x_initialised == YES) {
if (value) {
default_out_color = get_x11_color(value);
} else {
CONF_ERR;
}
}
}
#endif /* X11 */ #endif /* X11 */
CONF("imap") { CONF("imap") {
if (value) { if (value) {
@ -6944,27 +6828,16 @@ static void load_config_file(const char *f)
use_xft = string_to_bool(value); use_xft = string_to_bool(value);
} }
CONF("font") { CONF("font") {
X11_initialisation(); if (value) {
if (x_initialised == YES) { set_first_font(value);
if (value) {
set_first_font(value);
} else {
CONF_ERR;
}
} }
} }
CONF("xftalpha") { CONF("xftalpha") {
X11_initialisation(); if (value && font_count >= 0) {
if (x_initialised == YES) { fonts[0].font_alpha = atof(value) * 65535.0;
if (value && font_count >= 0) {
fonts[0].font_alpha = atof(value) * 65535.0;
} else {
CONF_ERR;
}
} }
} }
CONF("xftfont") { CONF("xftfont") {
X11_initialisation();
if (use_xft) { if (use_xft) {
#else #else
CONF("use_xft") { CONF("use_xft") {
@ -6980,13 +6853,9 @@ static void load_config_file(const char *f)
} }
CONF("font") { CONF("font") {
#endif #endif
if(x_initialised == YES) { if (value) {
if (value) { set_first_font(value);
set_first_font(value); }
} else {
CONF_ERR;
}
}
#ifdef XFT #ifdef XFT
} }
#endif #endif
@ -7060,113 +6929,76 @@ static void load_config_file(const char *f)
#ifdef X11 #ifdef X11
#ifdef OWN_WINDOW #ifdef OWN_WINDOW
CONF("own_window") { CONF("own_window") {
X11_initialisation(); if (value) {
if (x_initialised == YES) { own_window = string_to_bool(value);
if (value) {
own_window = string_to_bool(value);
} else {
CONF_ERR;
}
} }
} }
CONF("own_window_class") { CONF("own_window_class") {
X11_initialisation(); if (value) {
if (x_initialised == YES) { memset(window.class_name, 0, sizeof(window.class_name));
if (value) { strncpy(window.class_name, value,
memset(window.class_name, 0, sizeof(window.class_name));
strncpy(window.class_name, value,
sizeof(window.class_name) - 1); sizeof(window.class_name) - 1);
} else {
CONF_ERR;
}
} }
} }
CONF("own_window_title") { CONF("own_window_title") {
X11_initialisation(); if (value) {
if (x_initialised == YES) { memset(window.title, 0, sizeof(window.title));
if (value) { strncpy(window.title, value, sizeof(window.title) - 1);
memset(window.title, 0, sizeof(window.title));
strncpy(window.title, value, sizeof(window.title) - 1);
} else {
CONF_ERR;
}
} }
} }
CONF("own_window_transparent") { CONF("own_window_transparent") {
X11_initialisation(); if (value) {
if (x_initialised == YES) { set_transparent = string_to_bool(value);
if (value) {
set_transparent = string_to_bool(value);
} else {
CONF_ERR;
}
}
}
CONF("own_window_colour") {
X11_initialisation();
if (x_initialised == YES) {
if (value) {
background_colour = get_x11_color(value);
} else {
ERR("Invalid colour for own_window_colour (try omitting the "
"'#' for hex colours");
}
} }
} }
CONF("own_window_hints") { CONF("own_window_hints") {
X11_initialisation(); if (value) {
if (x_initialised == YES) { char *p_hint, *p_save;
if (value) { char delim[] = ", ";
char *p_hint, *p_save;
char delim[] = ", ";
/* tokenize the value into individual hints */ /* tokenize the value into individual hints */
if ((p_hint = strtok_r(value, delim, &p_save)) != NULL) { if ((p_hint = strtok_r(value, delim, &p_save)) != NULL) {
do { do {
/* fprintf(stderr, "hint [%s] parsed\n", p_hint); */ /* fprintf(stderr, "hint [%s] parsed\n", p_hint); */
if (strncmp(p_hint, "undecorate", 10) == EQUAL) { if (strncmp(p_hint, "undecorate", 10) == EQUAL) {
SET_HINT(window.hints, HINT_UNDECORATED); SET_HINT(window.hints, HINT_UNDECORATED);
} else if (strncmp(p_hint, "below", 5) == EQUAL) { } else if (strncmp(p_hint, "below", 5) == EQUAL) {
SET_HINT(window.hints, HINT_BELOW); SET_HINT(window.hints, HINT_BELOW);
} else if (strncmp(p_hint, "above", 5) == EQUAL) { } else if (strncmp(p_hint, "above", 5) == EQUAL) {
SET_HINT(window.hints, HINT_ABOVE); SET_HINT(window.hints, HINT_ABOVE);
} else if (strncmp(p_hint, "sticky", 6) == EQUAL) { } else if (strncmp(p_hint, "sticky", 6) == EQUAL) {
SET_HINT(window.hints, HINT_STICKY); SET_HINT(window.hints, HINT_STICKY);
} else if (strncmp(p_hint, "skip_taskbar", 12) == EQUAL) { } else if (strncmp(p_hint, "skip_taskbar", 12) == EQUAL) {
SET_HINT(window.hints, HINT_SKIP_TASKBAR); SET_HINT(window.hints, HINT_SKIP_TASKBAR);
} else if (strncmp(p_hint, "skip_pager", 10) == EQUAL) { } else if (strncmp(p_hint, "skip_pager", 10) == EQUAL) {
SET_HINT(window.hints, HINT_SKIP_PAGER); SET_HINT(window.hints, HINT_SKIP_PAGER);
} else { } else {
CONF_ERR; CONF_ERR;
} }
p_hint = strtok_r(NULL, delim, &p_save); p_hint = strtok_r(NULL, delim, &p_save);
} while (p_hint != NULL); } while (p_hint != NULL);
}
} else {
CONF_ERR;
} }
} else {
CONF_ERR;
} }
} }
CONF("own_window_type") { CONF("own_window_type") {
X11_initialisation(); if (value) {
if (x_initialised == YES) { if (strncmp(value, "normal", 6) == EQUAL) {
if (value) { window.type = TYPE_NORMAL;
if (strncmp(value, "normal", 6) == EQUAL) { } else if (strncmp(value, "desktop", 7) == EQUAL) {
window.type = TYPE_NORMAL; window.type = TYPE_DESKTOP;
} else if (strncmp(value, "desktop", 7) == EQUAL) { } else if (strncmp(value, "dock", 7) == EQUAL) {
window.type = TYPE_DESKTOP; window.type = TYPE_DOCK;
} else if (strncmp(value, "dock", 7) == EQUAL) { text_alignment = TOP_LEFT;
window.type = TYPE_DOCK; } else if (strncmp(value, "override", 8) == EQUAL) {
text_alignment = TOP_LEFT; window.type = TYPE_OVERRIDE;
} else if (strncmp(value, "override", 8) == EQUAL) {
window.type = TYPE_OVERRIDE;
} else {
CONF_ERR;
}
} else { } else {
CONF_ERR; CONF_ERR;
} }
} else {
CONF_ERR;
} }
} }
#endif #endif
@ -7233,12 +7065,6 @@ static void load_config_file(const char *f)
} }
} }
CONF("text") { CONF("text") {
#ifdef X11
//initialize X11 if nothing X11-related is mentioned before TEXT (and if X11 is the default outputmethod)
if(output_methods & TO_X) {
X11_initialisation();
}
#endif
if (global_text) { if (global_text) {
free(global_text); free(global_text);
global_text = 0; global_text = 0;
@ -7344,18 +7170,28 @@ static void load_config_file(const char *f)
} }
} }
CONF("color0"){}
CONF("color1"){}
CONF("color2"){}
CONF("color3"){}
CONF("color4"){}
CONF("color5"){}
CONF("color6"){}
CONF("color7"){}
CONF("color8"){}
CONF("color9"){}
CONF("default_color"){}
CONF3("default_shade_color", "default_shadecolor"){}
CONF3("default_outline_color", "default_outlinecolor") {}
CONF("own_window_colour") {}
else { else {
ERR("%s: %d: no such configuration: '%s'", f, line, name); ERR("%s: %d: no such configuration: '%s'", f, line, name);
} }
#undef CONF
#undef CONF2
} }
fclose(fp); fclose(fp);
#undef CONF_ERR
if (info.music_player_interval == 0) { if (info.music_player_interval == 0) {
// default to update_interval // default to update_interval
info.music_player_interval = update_interval; info.music_player_interval = update_interval;
@ -7365,6 +7201,240 @@ static void load_config_file(const char *f)
} }
} }
static void load_config_file_x11(const char *f)
{
int line = 0;
FILE *fp;
#ifdef CONFIG_OUTPUT
if (!strcmp(f, "==builtin==")) {
#ifdef HAVE_FOPENCOOKIE
fp = fopencookie(NULL, "r", conf_cookie);
#endif
} else
#endif /* CONFIG_OUTPUT */
fp = fopen(f, "r");
if (!fp) {
return;
}
DBGP("reading contents from config file '%s'", f);
while (!feof(fp)) {
char buf[256], *p, *p2, *name, *value;
line++;
if (fgets(buf, 256, fp) == NULL) {
break;
}
p = buf;
/* break at comment */
p2 = strchr(p, '#');
if (p2) {
*p2 = '\0';
}
/* skip spaces */
while (*p && isspace((int) *p)) {
p++;
}
if (*p == '\0') {
continue; /* empty line */
}
name = p;
/* skip name */
p2 = p;
while (*p2 && !isspace((int) *p2)) {
p2++;
}
if (*p2 != '\0') {
*p2 = '\0'; /* break at name's end */
p2++;
}
/* get value */
if (*p2) {
p = p2;
while (*p && isspace((int) *p)) {
p++;
}
value = p;
p2 = value + strlen(value);
while (isspace((int) *(p2 - 1))) {
*--p2 = '\0';
}
} else {
value = 0;
}
#ifdef X11
CONF2("color0") {
X11_initialisation();
if (x_initialised == YES) {
if (value) {
color0 = get_x11_color(value);
} else {
CONF_ERR;
}
}
}
CONF("color1") {
X11_initialisation();
if (x_initialised == YES) {
if (value) {
color1 = get_x11_color(value);
} else {
CONF_ERR;
}
}
}
CONF("color2") {
X11_initialisation();
if (x_initialised == YES) {
if (value) {
color2 = get_x11_color(value);
} else {
CONF_ERR;
}
}
}
CONF("color3") {
X11_initialisation();
if (x_initialised == YES) {
if (value) {
color3 = get_x11_color(value);
} else {
CONF_ERR;
}
}
}
CONF("color4") {
X11_initialisation();
if (x_initialised == YES) {
if (value) {
color4 = get_x11_color(value);
} else {
CONF_ERR;
}
}
}
CONF("color5") {
X11_initialisation();
if (x_initialised == YES) {
if (value) {
color5 = get_x11_color(value);
} else {
CONF_ERR;
}
}
}
CONF("color6") {
X11_initialisation();
if (x_initialised == YES) {
if (value) {
color6 = get_x11_color(value);
} else {
CONF_ERR;
}
}
}
CONF("color7") {
X11_initialisation();
if (x_initialised == YES) {
if (value) {
color7 = get_x11_color(value);
} else {
CONF_ERR;
}
}
}
CONF("color8") {
X11_initialisation();
if (x_initialised == YES) {
if (value) {
color8 = get_x11_color(value);
} else {
CONF_ERR;
}
}
}
CONF("color9") {
X11_initialisation();
if (x_initialised == YES) {
if (value) {
color9 = get_x11_color(value);
} else {
CONF_ERR;
}
}
}
CONF("default_color") {
X11_initialisation();
if (x_initialised == YES) {
if (value) {
default_fg_color = get_x11_color(value);
} else {
CONF_ERR;
}
}
}
CONF3("default_shade_color", "default_shadecolor") {
X11_initialisation();
if (x_initialised == YES) {
if (value) {
default_bg_color = get_x11_color(value);
} else {
CONF_ERR;
}
}
}
CONF3("default_outline_color", "default_outlinecolor") {
X11_initialisation();
if (x_initialised == YES) {
if (value) {
default_out_color = get_x11_color(value);
} else {
CONF_ERR;
}
}
}
#ifdef OWN_WINDOW
CONF("own_window_colour") {
X11_initialisation();
if (x_initialised == YES) {
if (value) {
background_colour = get_x11_color(value);
} else {
ERR("Invalid colour for own_window_colour (try omitting the "
"'#' for hex colours");
}
}
}
#endif
#endif /* X11 */
CONF("text") {
#ifdef X11
//initialize X11 if nothing X11-related is mentioned before TEXT (and if X11 is the default outputmethod)
if(output_methods & TO_X) {
X11_initialisation();
}
#endif
}
#undef CONF
#undef CONF2
}
fclose(fp);
#undef CONF_ERR
}
static void print_help(const char *prog_name) { static void print_help(const char *prog_name) {
printf("Usage: %s [OPTION]...\n" printf("Usage: %s [OPTION]...\n"
PACKAGE_NAME" is a system monitor that renders text on desktop or to own transparent\n" PACKAGE_NAME" is a system monitor that renders text on desktop or to own transparent\n"
@ -7403,7 +7473,7 @@ static void print_help(const char *prog_name) {
/* : means that character before that takes an argument */ /* : means that character before that takes an argument */
static const char *getopt_string = "vVqdDt:u:i:hc:" static const char *getopt_string = "vVqdDt:u:i:hc:"
#ifdef X11 #ifdef X11
"x:y:w:a:f:" "x:y:w:a:f:X:"
#ifdef OWN_WINDOW #ifdef OWN_WINDOW
"o" "o"
#endif #endif
@ -7428,6 +7498,7 @@ static const struct option longopts[] = {
#ifdef X11 #ifdef X11
{ "alignment", 1, NULL, 'a' }, { "alignment", 1, NULL, 'a' },
{ "font", 1, NULL, 'f' }, { "font", 1, NULL, 'f' },
{ "display", 1, NULL, 'X' },
#ifdef OWN_WINDOW #ifdef OWN_WINDOW
{ "own-window", 0, NULL, 'o' }, { "own-window", 0, NULL, 'o' },
#endif #endif
@ -7618,6 +7689,11 @@ int main(int argc, char **argv)
case 'a': case 'a':
text_alignment = string_to_alignment(optarg); text_alignment = string_to_alignment(optarg);
break; break;
case 'X':
if (disp)
free(disp);
disp = strdup(optarg);
break;
#ifdef OWN_WINDOW #ifdef OWN_WINDOW
case 'o': case 'o':
@ -7667,8 +7743,10 @@ int main(int argc, char **argv)
#ifdef X11 #ifdef X11
/* load font */ /* load font */
if (output_methods & TO_X) if (output_methods & TO_X) {
load_config_file_x11(current_config);
load_fonts(); load_fonts();
}
#endif /* X11 */ #endif /* X11 */
/* generate text and get initial size */ /* generate text and get initial size */

View File

@ -65,9 +65,9 @@ static Window find_desktop_window(Window *p_root, Window *p_desktop);
static Window find_subwindow(Window win, int w, int h); static Window find_subwindow(Window win, int w, int h);
/* X11 initializer */ /* X11 initializer */
void init_X11(void) void init_X11(const char *disp)
{ {
if ((display = XOpenDisplay(0)) == NULL) { if ((display = XOpenDisplay(disp)) == NULL) {
CRIT_ERR("can't open display: %s", XDisplayName(0)); CRIT_ERR("can't open display: %s", XDisplayName(0));
} }

View File

@ -76,7 +76,7 @@ extern int workarea[4];
extern struct conky_window window; extern struct conky_window window;
void init_X11(void); void init_X11(const char*);
void init_window(int use_own_window, int width, int height, int set_trans, void init_window(int use_own_window, int width, int height, int set_trans,
int back_colour, char **argv, int argc); int back_colour, char **argv, int argc);
void create_gc(void); void create_gc(void);