/* debugging level, used by logging.h */
int global_debug_level = 0;
+/* disable inotify auto reload feature if desired */
+int disable_auto_reload = 0;
+
/* two strings for internal use */
static char *tmpstring1, *tmpstring2;
/* alignments */
enum alignment {
- TOP_LEFT = 1,
+ ALIGNMENT_ERROR,
+ TOP_LEFT,
TOP_RIGHT,
TOP_MIDDLE,
BOTTOM_LEFT,
/* fork? */
static int fork_to_background;
+/* set to 0 after the first time conky is run, so we don't fork again after the
+ * first forking */
+static int first_pass = 1;
+
static int cpu_avg_samples, net_avg_samples, diskio_avg_samples;
/* filenames for output */
#define SECRIT_MULTILINE_CHAR '\x02'
-static inline int calc_text_width(const char *s)
+int calc_text_width(const char *s)
{
size_t slen = strlen(s);
get_acpi_fan(p, p_max_size);
}
OBJ(acpiacadapter) {
- get_acpi_ac_adapter(p, p_max_size);
+ get_acpi_ac_adapter(p, p_max_size, (const char *)obj->data.opaque);
}
OBJ(battery) {
get_battery_stuff(p, p_max_size, obj->data.s, BATTERY_STATUS);
print_cmdline_to_pid(obj, p, p_max_size);
}
OBJ(cpu) {
- if (obj->data.i > info.cpu_count) {
- NORM_ERR("obj->data.i %i info.cpu_count %i",
- obj->data.i, info.cpu_count);
- CRIT_ERR(NULL, NULL, "attempting to use more CPUs than you have!");
- }
- percent_print(p, p_max_size,
+ if (cur->cpu_usage) {
+ if (obj->data.i > info.cpu_count) {
+ NORM_ERR("obj->data.i %i info.cpu_count %i",
+ obj->data.i, info.cpu_count);
+ CRIT_ERR(NULL, NULL, "attempting to use more CPUs than you have!");
+ }
+ percent_print(p, p_max_size,
round_to_int(cur->cpu_usage[obj->data.i] * 100.0));
+ }
}
OBJ(cpugauge)
new_gauge(obj, p, p_max_size, round_to_int(cur->cpu_usage[obj->data.i] * 255.0));
print_diskiograph(obj, p, p_max_size);
}
OBJ(diskiograph_read) {
- print_diskiograph(obj, p, p_max_size);
+ print_diskiograph_read(obj, p, p_max_size);
}
OBJ(diskiograph_write) {
- print_diskiograph(obj, p, p_max_size);
+ print_diskiograph_write(obj, p, p_max_size);
}
#endif /* X11 */
OBJ(downspeed) {
update_interval_old = interval;
}
-static inline int get_string_width(const char *s)
+int get_string_width(const char *s)
{
return *s ? calc_text_width(s) : 0;
}
break;
}
#ifdef HAVE_SYS_INOTIFY_H
- if (inotify_fd != -1 && inotify_config_wd == -1 && current_config != 0) {
+ if (!disable_auto_reload && inotify_fd != -1 && inotify_config_wd == -1 && current_config != 0) {
inotify_config_wd = inotify_add_watch(inotify_fd,
current_config,
IN_MODIFY);
}
- if (inotify_fd != -1 && inotify_config_wd != -1 && current_config != 0) {
+ if (!disable_auto_reload && inotify_fd != -1 && inotify_config_wd != -1 && current_config != 0) {
int len = 0, idx = 0;
fd_set descriptors;
struct timeval time_to_wait;
current_config,
IN_MODIFY);
}
+ break;
}
#ifdef HAVE_LUA
else {
idx += INOTIFY_EVENT_SIZE + ev->len;
}
}
+ } else if (disable_auto_reload && inotify_fd != -1) {
+ inotify_rm_watch(inotify_fd, inotify_config_wd);
+ close(inotify_fd);
+ inotify_fd = inotify_config_wd = 0;
}
#endif /* HAVE_SYS_INOTIFY_H */
{
char *current_config_copy = strdup(current_config);
clean_up(NULL, NULL);
+ sleep(1); /* slight pause */
current_config = current_config_copy;
initialisation(argc_copy, argv_copy);
}
{
int i;
+ free_update_callbacks();
+
#ifdef NCURSES
if(output_methods & TO_NCURSES) {
endwin();
#endif /* X11 */
- free_update_callbacks();
-
free_templates();
free_text_objects(&global_root_object, 0);
} else if (strcasecmp(s, "none") == EQUAL) {
return NONE;
}
- return TOP_LEFT;
+ return ALIGNMENT_ERROR;
}
#endif /* X11 */
return 0;
}
+#ifdef X11
+void setalignment(int* text_alignment, unsigned int windowtype, const char* value, const char *f, int line, char setbyconffile) {
+#ifdef OWN_WINDOW
+ if (windowtype == TYPE_DOCK) {
+ NORM_ERR("alignment is disabled when own_window_type is dock");
+ } else
+#endif /*OWN_WINDOW */
+ if (value) {
+ int a = string_to_alignment(value);
+
+ if (a <= 0) {
+ if(setbyconffile == true) {
+ CONF_ERR;
+ } else NORM_ERR("'%s' is not a alignment setting", value);
+ } else {
+ *text_alignment = a;
+ }
+ } else if(setbyconffile == true) {
+ CONF_ERR;
+ }
+}
+#endif /* X11 */
+
char load_config_file(const char *f)
{
int line = 0;
}
}
CONF("alignment") {
-#ifdef OWN_WINDOW
- if (window.type == TYPE_DOCK)
- ;
- else
-#endif /*OWN_WINDOW */
- if (value) {
- int a = string_to_alignment(value);
-
- if (a <= 0) {
- CONF_ERR;
- } else {
- text_alignment = a;
- }
- } else {
- CONF_ERR;
- }
+ setalignment(&text_alignment, window.type, value, f, line, true);
}
CONF("background") {
fork_to_background = string_to_bool(value);
CONF("extra_newline") {
extra_newline = string_to_bool(value);
}
+ CONF("disable_auto_reload") {
+ disable_auto_reload = string_to_bool(value);
+ }
CONF("out_to_stderr") {
if(string_to_bool(value))
output_methods |= TO_STDERR;
set_first_font(optarg);
break;
case 'a':
- text_alignment = string_to_alignment(optarg);
+ setalignment(&text_alignment, window.type, optarg, NULL, 0, false);
break;
#ifdef OWN_WINDOW
break;
#endif /* X11 */
case 'p':
- startup_pause = atoi(optarg);
- sleep(startup_pause);
+ if (first_pass) {
+ startup_pause = atoi(optarg);
+ sleep(startup_pause);
+ }
break;
case '?':
}
global_text = NULL;
/* fork */
- if (fork_to_background) {
+ if (fork_to_background && first_pass) {
int pid = fork();
switch (pid) {
initialisation(argc, argv);
+ first_pass = 0; /* don't ever call fork() again */
+
main_loop();
#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__)