1
0
mirror of https://github.com/Llewellynvdm/conky.git synced 2025-01-12 19:06:36 +00:00

Multiline alignment support, some other misc stuff.

Added support for X alignment across multi-lined objects (i.e., using
$alignr with $exec).  This may be a bit buggy.  Disabled OpenMP code
until GCC's implementation stabilizes (it's causing too many problems).
A couple Lua API changes.
This commit is contained in:
Brenden Matthews 2009-07-18 13:46:36 -06:00
parent 5eef83d90a
commit 670e9a0eb1
13 changed files with 214 additions and 113 deletions

View File

@ -3,6 +3,9 @@
www.weather.com as a source of weather data (this avoids adding www.weather.com as a source of weather data (this avoids adding
libxml2 as a required dependency for users that wish to use noaa libxml2 as a required dependency for users that wish to use noaa
and not weather.com) and not weather.com)
* Added support for X alignment across multi-lined objects (i.e., using
$alignr with $exec)
* Disabled OpenMP code until GCC's implementation stabilizes
2009-07-18 2009-07-18
* www.weather.com can now be used as well as a source of weather data * www.weather.com can now be used as well as a source of weather data

View File

@ -752,26 +752,26 @@ AC_CHECK_HEADER(zlib.h,
dnl dnl
dnl Check for OpenMP support dnl Check for OpenMP support
dnl dnl
dnl removed for now due to problems with GCC's OpenMP implementation
AC_ARG_ENABLE([openmp], dnl AC_ARG_ENABLE([openmp],
AC_HELP_STRING([--enable-openmp], [enable if you want OpenMP support @<:@default=no@:>@]), dnl AC_HELP_STRING([--enable-openmp], [enable if you want OpenMP support @<:@default=no@:>@]),
[want_openmp="$enableval"], [want_openmp=no]) dnl [want_openmp="$enableval"], [want_openmp=no])
if test x$want_openmp = xyes; then dnl if test x$want_openmp = xyes; then
AX_OPENMP([ dnl AX_OPENMP([
gcc_version=`$CC -dumpversion` dnl gcc_version=`$CC -dumpversion`
gcc_major=`echo $gcc_version | sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'` dnl gcc_major=`echo $gcc_version | sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'`
gcc_minor=`echo $gcc_version | sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'` dnl gcc_minor=`echo $gcc_version | sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'`
dnl check that the gcc version is >=4.3, if we're using gcc dnl dnl check that the gcc version is >=4.3, if we're using gcc
if test ! "x$GCC" = "xyes" -o $gcc_major -ge 4 -a $gcc_minor -ge 3; then dnl if test ! "x$GCC" = "xyes" -o $gcc_major -ge 4 -a $gcc_minor -ge 3; then
AC_DEFINE(HAVE_OPENMP,1,[Define if OpenMP is enabled]) dnl AC_DEFINE(HAVE_OPENMP,1,[Define if OpenMP is enabled])
conky_CFLAGS="$conky_CFLAGS $OPENMP_CFLAGS" dnl conky_CFLAGS="$conky_CFLAGS $OPENMP_CFLAGS"
else dnl else
want_openmp=no dnl want_openmp=no
fi dnl fi
dnl ])
]) dnl fi
fi
dnl dnl
dnl Check doc stuff dnl Check doc stuff

View File

@ -337,11 +337,13 @@
</command> </command>
<option>function_name [function arguments]</option> <option>function_name [function arguments]</option>
</term> </term>
<listitem>This function, if defined, will be called by <listitem>
Conky through each iteration after drawing to the window. <para>This function, if defined, will be called by
Requires X support. Takes any number of optional arguments. Conky through each iteration after drawing to the
window. Requires X support. Takes any number of
<para /></listitem> optional arguments. Use this hook for drawing things on
top of what Conky draws.</para>
</listitem>
</varlistentry> </varlistentry>
<varlistentry> <varlistentry>
<term> <term>
@ -350,11 +352,13 @@
</command> </command>
<option>function_name [function arguments]</option> <option>function_name [function arguments]</option>
</term> </term>
<listitem>This function, if defined, will be called by <listitem>
Conky through each iteration before drawing to the window. <para>This function, if defined, will be called by
Requires X support. Takes any number of optional arguments. Conky through each iteration before drawing to the
window. Requires X support. Takes any number of
<para /></listitem> optional arguments. Use this hook for drawing things on
top of what Conky draws.</para>
</listitem>
</varlistentry> </varlistentry>
<varlistentry> <varlistentry>
<term> <term>

View File

@ -188,7 +188,7 @@
&config_settings; &config_settings;
</refsect1> </refsect1>
<refsect1> <refsect1>
<title>Variables</title> <title>Objects/Variables</title>
<para>Colours are parsed using XParsecolor(), there might be a <para>Colours are parsed using XParsecolor(), there might be a
list of them: /usr/share/X11/rgb.txt. list of them: /usr/share/X11/rgb.txt.
Colour can be also in Colour can be also in

View File

@ -99,6 +99,30 @@
build date, and architecture.</para> build date, and architecture.</para>
</listitem> </listitem>
</varlistentry> </varlistentry>
<varlistentry>
<term>
<command>
<option>conky_build_date</option>
</command>
<option>string</option>
</term>
<listitem>
<para>A string containing the build date for this
particular instance of Conky.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>
<option>conky_build_arch</option>
</command>
<option>string</option>
</term>
<listitem>
<para>A string containing the build architecture for
this particular instance of Conky.</para>
</listitem>
</varlistentry>
<varlistentry> <varlistentry>
<term> <term>
<command> <command>

View File

@ -655,8 +655,8 @@
<option>desktop</option> <option>desktop</option>
</command> </command>
</term> </term>
<listitem>Number of the desktop on which conky is running <listitem>Number of the desktop on which conky is running
or the message "Not running in X" if this is the case. or the message "Not running in X" if this is the case.
<para /></listitem> <para /></listitem>
</varlistentry> </varlistentry>
<varlistentry> <varlistentry>
@ -665,8 +665,8 @@
<option>desktop_name</option> <option>desktop_name</option>
</command> </command>
</term> </term>
<listitem>Name of the desktop on which conky is running <listitem>Name of the desktop on which conky is running or
or the message "Not running in X" if this is the case. the message "Not running in X" if this is the case.
<para /></listitem> <para /></listitem>
</varlistentry> </varlistentry>
<varlistentry> <varlistentry>
@ -675,8 +675,8 @@
<option>desktop_number</option> <option>desktop_number</option>
</command> </command>
</term> </term>
<listitem>Number of desktops or the message "Not running <listitem>Number of desktops or the message "Not running in
in X" if this is the case. X" if this is the case.
<para /></listitem> <para /></listitem>
</varlistentry> </varlistentry>
<varlistentry> <varlistentry>
@ -2151,8 +2151,8 @@
<option>monitor</option> <option>monitor</option>
</command> </command>
</term> </term>
<listitem>Number of the monitor on which conky is running <listitem>Number of the monitor on which conky is running
or the message "Not running in X" if this is the case. or the message "Not running in X" if this is the case.
<para /></listitem> <para /></listitem>
</varlistentry> </varlistentry>
<varlistentry> <varlistentry>
@ -2161,8 +2161,8 @@
<option>monitor_number</option> <option>monitor_number</option>
</command> </command>
</term> </term>
<listitem>Number of monitors or the message "Not running <listitem>Number of monitors or the message "Not running in
in X" if this is the case. X" if this is the case.
<para /></listitem> <para /></listitem>
</varlistentry> </varlistentry>
<varlistentry> <varlistentry>
@ -3363,10 +3363,10 @@
into the cloud_cover one</option> into the cloud_cover one</option>
</member> </member>
</simplelist> </simplelist>
<para>'delay_in_minutes' (optional, default 30) cannot be <para>'delay_in_minutes' (optional, default 30) cannot
lower than 30 min.</para> be lower than 30 min.</para>
<para>Note that these variables are still EXPERIMENTAL and <para>Note that these variables are still EXPERIMENTAL
can be subject to many future changes.</para> and can be subject to many future changes.</para>
</listitem> </listitem>
</varlistentry> </varlistentry>
<varlistentry> <varlistentry>

View File

@ -111,7 +111,7 @@ unsigned long *do_gradient(int width, unsigned long first_colour, unsigned long
greendiff = abs(green1 - green2); greendiff = abs(green1 - green2);
bluediff = abs(blue1 - blue2); bluediff = abs(blue1 - blue2);
#ifdef HAVE_OPENMP #ifdef HAVE_OPENMP
#pragma omp parallel for #pragma omp parallel for schedule(dynamic,10) shared(colours)
#endif /* HAVE_OPENMP */ #endif /* HAVE_OPENMP */
for (i = 0; i < width; i++) { for (i = 0; i < width; i++) {
int red3 = 0, green3 = 0, blue3 = 0; // colour components int red3 = 0, green3 = 0, blue3 = 0; // colour components

View File

@ -366,7 +366,7 @@ void update_stuff(void)
* updated */ * updated */
#ifdef HAVE_OPENMP #ifdef HAVE_OPENMP
#pragma omp parallel for #pragma omp parallel for schedule(dynamic,10)
#endif /* HAVE_OPENMP */ #endif /* HAVE_OPENMP */
for (i = 0; i < 16; i++) { for (i = 0; i < 16; i++) {
if (netstats[i].dev) { if (netstats[i].dev) {

View File

@ -304,7 +304,7 @@ struct information info;
char *current_config; char *current_config;
/* 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_uppercase;
/* Run how many times? */ /* Run how many times? */
static unsigned long total_run_times; static unsigned long total_run_times;
@ -450,10 +450,14 @@ int check_contains(char *f, char *s)
} }
#ifdef X11 #ifdef X11
#define SECRIT_MULTILINE_CHAR '\x02'
static inline int calc_text_width(const char *s, int l) static inline int calc_text_width(const char *s, int l)
{ {
if ((output_methods & TO_X) == 0) if ((output_methods & TO_X) == 0) {
return 0; return 0;
}
#ifdef XFT #ifdef XFT
if (use_xft) { if (use_xft) {
XGlyphInfo gi; XGlyphInfo gi;
@ -479,27 +483,24 @@ static inline int calc_text_width(const char *s, int l)
static char *text_buffer; static char *text_buffer;
#ifdef X11
static unsigned int special_index; /* used when drawing */
#endif /* X11 */
/* quite boring functions */ /* quite boring functions */
static inline void for_each_line(char *b, void f(char *)) static inline void for_each_line(char *b, int f(char *, int))
{ {
char *ps, *pe; char *ps, *pe;
int special_index = 0; /* specials index */
for (ps = b, pe = b; *pe; pe++) { for (ps = b, pe = b; *pe; pe++) {
if (*pe == '\n') { if (*pe == '\n') {
*pe = '\0'; *pe = '\0';
f(ps); special_index = f(ps, special_index);
*pe = '\n'; *pe = '\n';
ps = pe + 1; ps = pe + 1;
} }
} }
if (ps < pe) { if (ps < pe) {
f(ps); f(ps, special_index);
} }
} }
@ -3679,6 +3680,22 @@ static inline double get_barnum(char *buf)
return barnum; return barnum;
} }
/* substitutes all occurrences of '\n' with SECRIT_MULTILINE_CHAR, which allows
* multi-line objects like $exec work with $align[rc] and friends
*/
void substitute_newlines(char *p, long l)
{
char *s = p;
if (l < 0) return;
while (p && *p && p < s + l) {
if (*p == '\n') {
/* only substitute if it's not the last newline */
*p = SECRIT_MULTILINE_CHAR;
}
p++;
}
}
static void generate_text_internal(char *p, int p_max_size, static void generate_text_internal(char *p, int p_max_size,
struct text_object root, struct information *cur) struct text_object root, struct information *cur)
{ {
@ -3699,7 +3716,8 @@ static void generate_text_internal(char *p, int p_max_size,
p[0] = 0; p[0] = 0;
obj = root.next; obj = root.next;
while (obj && p_max_size > 0) { while (obj && p_max_size > 0) {
needed = 0; // reset for top stuff char multiline = 0; /* set to 1 if we have a multi-line object */
needed = 0; /* reset for top stuff */
/* IFBLOCK jumping algorithm /* IFBLOCK jumping algorithm
* *
@ -4193,14 +4211,13 @@ static void generate_text_internal(char *p, int p_max_size,
} }
#if defined(__linux__) #if defined(__linux__)
OBJ(addrs) { OBJ(addrs) {
if(NULL != obj->data.net->addrs && strlen(obj->data.net->addrs) > 2) if (NULL != obj->data.net->addrs && strlen(obj->data.net->addrs) > 2) {
{
obj->data.net->addrs[strlen(obj->data.net->addrs) - 2] = 0; /* remove ", " from end of string */ obj->data.net->addrs[strlen(obj->data.net->addrs) - 2] = 0; /* remove ", " from end of string */
strcpy(p, obj->data.net->addrs); strcpy(p, obj->data.net->addrs);
} else {
strcpy(p, "0.0.0.0");
} }
else }
strcpy(p, "0.0.0.0");
}
#endif /* __linux__ */ #endif /* __linux__ */
#if defined(IMLIB2) && defined(X11) #if defined(IMLIB2) && defined(X11)
OBJ(image) { OBJ(image) {
@ -4211,10 +4228,12 @@ static void generate_text_internal(char *p, int p_max_size,
#endif /* IMLIB2 */ #endif /* IMLIB2 */
OBJ(eval) { OBJ(eval) {
evaluate(obj->data.s, p); evaluate(obj->data.s, p);
multiline = 1;
} }
OBJ(exec) { OBJ(exec) {
read_exec(obj->data.s, p, text_buffer_size); read_exec(obj->data.s, p, text_buffer_size);
remove_deleted_chars(p); remove_deleted_chars(p);
multiline = 1;
} }
OBJ(execp) { OBJ(execp) {
struct information *tmp_info; struct information *tmp_info;
@ -4228,6 +4247,7 @@ static void generate_text_internal(char *p, int p_max_size,
free_text_objects(&subroot, 1); free_text_objects(&subroot, 1);
free(tmp_info); free(tmp_info);
multiline = 1;
} }
#ifdef X11 #ifdef X11
OBJ(execgauge) { OBJ(execgauge) {
@ -4364,6 +4384,7 @@ static void generate_text_internal(char *p, int p_max_size,
obj->data.execi.last_update = current_update_time; obj->data.execi.last_update = current_update_time;
} }
snprintf(p, text_buffer_size, "%s", obj->data.execi.buffer); snprintf(p, text_buffer_size, "%s", obj->data.execi.buffer);
multiline = 1;
} }
OBJ(execpi) { OBJ(execpi) {
struct text_object subroot; struct text_object subroot;
@ -4392,6 +4413,7 @@ static void generate_text_internal(char *p, int p_max_size,
} }
free_text_objects(&subroot, 1); free_text_objects(&subroot, 1);
free(tmp_info); free(tmp_info);
multiline = 1;
} }
OBJ(texeci) { OBJ(texeci) {
if (!obj->data.texeci.p_timed_thread) { if (!obj->data.texeci.p_timed_thread) {
@ -4411,6 +4433,7 @@ static void generate_text_internal(char *p, int p_max_size,
snprintf(p, text_buffer_size, "%s", obj->data.texeci.buffer); snprintf(p, text_buffer_size, "%s", obj->data.texeci.buffer);
timed_thread_unlock(obj->data.texeci.p_timed_thread); timed_thread_unlock(obj->data.texeci.p_timed_thread);
} }
multiline = 1;
} }
#endif /* HAVE_POPEN */ #endif /* HAVE_POPEN */
OBJ(imap_unseen) { OBJ(imap_unseen) {
@ -4684,12 +4707,14 @@ static void generate_text_internal(char *p, int p_max_size,
snprintf(p, p_max_size, "%s", str); snprintf(p, p_max_size, "%s", str);
free(str); free(str);
} }
multiline = 1;
} }
OBJ(lua_parse) { OBJ(lua_parse) {
char *str = llua_getstring(obj->data.s); char *str = llua_getstring(obj->data.s);
if (str) { if (str) {
evaluate(str, p); evaluate(str, p);
} }
multiline = 1;
} }
OBJ(lua_bar) { OBJ(lua_bar) {
double per; double per;
@ -5746,7 +5771,7 @@ static void generate_text_internal(char *p, int p_max_size,
OBJ(to_bytes) { OBJ(to_bytes) {
char buf[max_user_text]; char buf[max_user_text];
long long bytes; long long bytes;
char unit[16]; //16 because we can also have long names (like mega-bytes) char unit[16]; // 16 because we can also have long names (like mega-bytes)
generate_text_internal(buf, max_user_text, *obj->sub, cur); generate_text_internal(buf, max_user_text, *obj->sub, cur);
if(sscanf(buf, "%lli%s", &bytes, unit) == 2 && strlen(unit) < 16){ if(sscanf(buf, "%lli%s", &bytes, unit) == 2 && strlen(unit) < 16){
@ -5849,12 +5874,12 @@ static void generate_text_internal(char *p, int p_max_size,
} }
strcat(p, "\n"); strcat(p, "\n");
#ifdef HAVE_OPENMP #ifdef HAVE_OPENMP
#pragma omp parallel for #pragma omp parallel for schedule(dynamic,10)
#endif /* HAVE_OPENMP */ #endif /* HAVE_OPENMP */
for(i=0; i<2; i++) if(current[i]) current[i]=current[i]->next; for(i=0; i<2; i++) if(current[i]) current[i]=current[i]->next;
} }
#ifdef HAVE_OPENMP #ifdef HAVE_OPENMP
#pragma omp parallel for #pragma omp parallel for schedule(dynamic,10)
#endif /* HAVE_OPENMP */ #endif /* HAVE_OPENMP */
for(i=0; i<2; i++) { for(i=0; i<2; i++) {
while(ll_rows[i] != NULL) { while(ll_rows[i] != NULL) {
@ -5996,6 +6021,9 @@ static void generate_text_internal(char *p, int p_max_size,
a = outptr - p; a = outptr - p;
} }
#endif /* HAVE_ICONV */ #endif /* HAVE_ICONV */
if (multiline) {
substitute_newlines(p, a - 2);
}
p += a; p += a;
p_max_size -= a; p_max_size -= a;
} }
@ -6046,7 +6074,7 @@ static void generate_text(void)
generate_text_internal(p, max_user_text, global_root_object, cur); generate_text_internal(p, max_user_text, global_root_object, cur);
if (stuff_in_upper_case) { if (stuff_in_uppercase) {
char *tmp_p; char *tmp_p;
tmp_p = text_buffer; tmp_p = text_buffer;
@ -6064,7 +6092,6 @@ static void generate_text(void)
} }
last_update_time = current_update_time; last_update_time = current_update_time;
total_updates++; total_updates++;
// free(p);
} }
static inline int get_string_width(const char *s) static inline int get_string_width(const char *s)
@ -6077,7 +6104,7 @@ static inline int get_string_width(const char *s)
return strlen(s); return strlen(s);
} }
static inline int get_string_width_special(char *s) static int get_string_width_special(char *s, int special_index)
{ {
#ifdef X11 #ifdef X11
char *p, *final; char *p, *final;
@ -6086,7 +6113,7 @@ static inline int get_string_width_special(char *s)
long i; long i;
if ((output_methods & TO_X) == 0) { if ((output_methods & TO_X) == 0) {
#endif #endif /* X11 */
return (s) ? strlen(s) : 0; return (s) ? strlen(s) : 0;
#ifdef X11 #ifdef X11
} }
@ -6111,6 +6138,9 @@ static inline int get_string_width_special(char *s)
width += specials[special_index + idx].width; width += specials[special_index + idx].width;
} }
idx++; idx++;
} else if (*p == SECRIT_MULTILINE_CHAR) {
*p = 0;
break;
} else { } else {
p++; p++;
} }
@ -6124,7 +6154,7 @@ static inline int get_string_width_special(char *s)
} }
#ifdef X11 #ifdef X11
static void text_size_updater(char *s); static int text_size_updater(char *s, int special_index);
int last_font_height; int last_font_height;
static void update_text_area(void) static void update_text_area(void)
@ -6140,7 +6170,6 @@ static void update_text_area(void)
{ {
text_width = minimum_width; text_width = minimum_width;
text_height = 0; text_height = 0;
special_index = 0;
last_font_height = font_height(); last_font_height = font_height();
for_each_line(text_buffer, text_size_updater); for_each_line(text_buffer, text_size_updater);
text_width += 1; text_width += 1;
@ -6243,13 +6272,13 @@ static int draw_mode; /* FG, BG or OUTLINE */
#ifdef X11 #ifdef X11
static long current_color; static long current_color;
static void text_size_updater(char *s) static int text_size_updater(char *s, int special_index)
{ {
int w = 0; int w = 0;
char *p; char *p;
if ((output_methods & TO_X) == 0) if ((output_methods & TO_X) == 0)
return; return 0;
/* get string widths and skip specials */ /* get string widths and skip specials */
p = s; p = s;
while (*p) { while (*p) {
@ -6293,6 +6322,14 @@ static void text_size_updater(char *s)
special_index++; special_index++;
s = p + 1; s = p + 1;
} else if (*p == SECRIT_MULTILINE_CHAR) {
int lw;
*p = '\0';
lw = get_string_width(s);
*p = SECRIT_MULTILINE_CHAR;
s = p + 1;
w = lw > w ? lw : w;
text_height += last_font_height;
} }
p++; p++;
} }
@ -6306,6 +6343,7 @@ static void text_size_updater(char *s)
text_height += last_font_height; text_height += last_font_height;
last_font_height = font_height(); last_font_height = font_height();
return special_index;
} }
static inline void set_foreground_color(long c) static inline void set_foreground_color(long c)
@ -6418,36 +6456,38 @@ static void draw_string(const char *s)
memcpy(tmpstring1, s, text_buffer_size); memcpy(tmpstring1, s, text_buffer_size);
} }
static void draw_line(char *s) #ifdef X11
int draw_each_line_inner(char *s, int special_index, const int last_special_applied)
{ {
#ifdef X11 int font_h = font_height();
char *p;
int cur_y_add = 0; int cur_y_add = 0;
int font_h; char *recurse = 0;
char *tmp_str; char *p = s;
int last_special_needed = -1;
if ((output_methods & TO_X) == 0) {
#endif /* X11 */
draw_string(s);
return;
#ifdef X11
}
cur_x = text_start_x; cur_x = text_start_x;
cur_y += font_ascent(); cur_y += font_ascent();
font_h = font_height();
/* find specials and draw stuff */
p = s;
while (*p) { while (*p) {
if (*p == SPECIAL_CHAR) { if (*p == SECRIT_MULTILINE_CHAR) {
/* special newline marker for multi-line objects */
recurse = p + 1;
*p = '\0';
break;
}
if (*p == SPECIAL_CHAR || last_special_applied > -1) {
int w = 0; int w = 0;
/* draw string before special */ /* draw string before special, unless we're dealing multi-line
*p = '\0'; * specials */
draw_string(s); if (last_special_applied > -1) {
*p = SPECIAL_CHAR; special_index = last_special_applied;
s = p + 1; } else {
*p = '\0';
draw_string(s);
*p = SPECIAL_CHAR;
s = p + 1;
}
/* draw special */ /* draw special */
switch (specials[special_index].type) { switch (specials[special_index].type) {
case HORIZONTAL_LINE: case HORIZONTAL_LINE:
@ -6670,6 +6710,7 @@ static void draw_line(char *s)
char *tmp_hour_str; char *tmp_hour_str;
char *tmp_min_str; char *tmp_min_str;
char *tmp_sec_str; char *tmp_sec_str;
char *tmp_str;
unsigned short int timeunits; unsigned short int timeunits;
if (seconds != 0) { if (seconds != 0) {
timeunits = seconds / 86400; seconds %= 86400; timeunits = seconds / 86400; seconds %= 86400;
@ -6711,6 +6752,7 @@ static void draw_line(char *s)
if (show_graph_scale && (specials[special_index].show_scale == 1)) { if (show_graph_scale && (specials[special_index].show_scale == 1)) {
int tmp_x = cur_x; int tmp_x = cur_x;
int tmp_y = cur_y; int tmp_y = cur_y;
char *tmp_str;
cur_x += font_ascent() / 2; cur_x += font_ascent() / 2;
cur_y += font_h / 2; cur_y += font_h / 2;
tmp_str = (char *) tmp_str = (char *)
@ -6762,6 +6804,7 @@ static void draw_line(char *s)
case OFFSET: case OFFSET:
w += specials[special_index].arg; w += specials[special_index].arg;
last_special_needed = special_index;
break; break;
case VOFFSET: case VOFFSET:
@ -6772,6 +6815,7 @@ static void draw_line(char *s)
if (specials[special_index].arg >= 0) { if (specials[special_index].arg >= 0) {
cur_x = (int) specials[special_index].arg; cur_x = (int) specials[special_index].arg;
} }
last_special_needed = special_index;
break; break;
case TAB: case TAB:
@ -6783,6 +6827,7 @@ static void draw_line(char *s)
step = 10; step = 10;
} }
w = step - (cur_x - text_start_x - start) % step; w = step - (cur_x - text_start_x - start) % step;
last_special_needed = special_index;
break; break;
} }
@ -6791,7 +6836,7 @@ static void draw_line(char *s)
/* TODO: add back in "+ window.border_inner_margin" to the end of /* TODO: add back in "+ window.border_inner_margin" to the end of
* this line? */ * this line? */
int pos_x = text_start_x + text_width - int pos_x = text_start_x + text_width -
get_string_width_special(s); get_string_width_special(s, special_index);
/* printf("pos_x %i text_start_x %i text_width %i cur_x %i " /* printf("pos_x %i text_start_x %i text_width %i cur_x %i "
"get_string_width(p) %i gap_x %i " "get_string_width(p) %i gap_x %i "
@ -6803,13 +6848,15 @@ static void draw_line(char *s)
if (pos_x > specials[special_index].arg && pos_x > cur_x) { if (pos_x > specials[special_index].arg && pos_x > cur_x) {
cur_x = pos_x - specials[special_index].arg; cur_x = pos_x - specials[special_index].arg;
} }
last_special_needed = special_index;
break; break;
} }
case ALIGNC: case ALIGNC:
{ {
int pos_x = (text_width) / 2 - get_string_width_special(s) / int pos_x = (text_width) / 2 - get_string_width_special(s,
2 - (cur_x - text_start_x); special_index) / 2 - (cur_x -
text_start_x);
/* int pos_x = text_start_x + text_width / 2 - /* int pos_x = text_start_x + text_width / 2 -
get_string_width_special(s) / 2; */ get_string_width_special(s) / 2; */
@ -6821,24 +6868,41 @@ static void draw_line(char *s)
if (pos_x > specials[special_index].arg) { if (pos_x > specials[special_index].arg) {
w = pos_x - specials[special_index].arg; w = pos_x - specials[special_index].arg;
} }
last_special_needed = special_index;
break; break;
} }
} }
cur_x += w; cur_x += w;
special_index++; if (special_index != last_special_applied) special_index++;
} }
p++; p++;
} }
if (cur_y_add > 0) { cur_y += cur_y_add;
cur_y += cur_y_add;
}
draw_string(s); draw_string(s);
cur_y += font_descent(); cur_y += font_descent();
if (recurse && *recurse) {
special_index = draw_each_line_inner(recurse, special_index, last_special_applied);
*(recurse - 1) = SECRIT_MULTILINE_CHAR;
}
return special_index;
}
#endif /* X11 */
static int draw_line(char *s, int special_index)
{
#ifdef X11
if ((output_methods & TO_X) == 0) {
#endif /* X11 */
draw_string(s);
return 0;
#ifdef X11
}
/* find specials and draw stuff */
return draw_each_line_inner(s, special_index, -1);
#endif /* X11 */ #endif /* X11 */
} }
@ -6871,7 +6935,6 @@ static void draw_text(void)
} }
/* draw text */ /* draw text */
special_index = 0;
} }
setup_fonts(); setup_fonts();
#endif /* X11 */ #endif /* X11 */
@ -7755,7 +7818,7 @@ static void set_default_configurations(void)
no_buffers = 1; no_buffers = 1;
update_interval = 3.0; update_interval = 3.0;
info.music_player_interval = 1.0; info.music_player_interval = 1.0;
stuff_in_upper_case = 0; stuff_in_uppercase = 0;
info.users.number = 1; info.users.number = 1;
#ifdef TCP_PORT_MONITOR #ifdef TCP_PORT_MONITOR
@ -8527,7 +8590,7 @@ static void load_config_file(const char *f)
} }
} }
CONF("uppercase") { CONF("uppercase") {
stuff_in_upper_case = string_to_bool(value); stuff_in_uppercase = string_to_bool(value);
} }
CONF("max_specials") { CONF("max_specials") {
if (value) { if (value) {
@ -8892,7 +8955,7 @@ static void load_config_file_x11(const char *f)
} }
#endif #endif
CONF("text") { CONF("text") {
//initialize X11 if nothing X11-related is mentioned before TEXT (and if X11 is the default outputmethod) /* initialize X11 if nothing X11-related is mentioned before TEXT (and if X11 is the default outputmethod) */
if(output_methods & TO_X) { if(output_methods & TO_X) {
X11_initialisation(); X11_initialisation();
} }
@ -9359,3 +9422,4 @@ static void signal_handler(int sig)
* and do any signal processing there, NOT here. */ * and do any signal processing there, NOT here. */
g_signal_pending = sig; g_signal_pending = sig;
} }

View File

@ -420,7 +420,7 @@ void update_net_stats(void)
curtmp2 = 0; curtmp2 = 0;
// get an average // get an average
#ifdef HAVE_OPENMP #ifdef HAVE_OPENMP
#pragma omp parallel for reduction(+:curtmp1, curtmp2) #pragma omp parallel for reduction(+:curtmp1, curtmp2) schedule(dynamic,10)
#endif /* HAVE_OPENMP */ #endif /* HAVE_OPENMP */
for (i = 0; i < info.net_avg_samples; i++) { for (i = 0; i < info.net_avg_samples; i++) {
curtmp1 = curtmp1 + ns->net_rec[i]; curtmp1 = curtmp1 + ns->net_rec[i];
@ -436,7 +436,7 @@ void update_net_stats(void)
ns->trans_speed = curtmp2 / (double) info.net_avg_samples; ns->trans_speed = curtmp2 / (double) info.net_avg_samples;
if (info.net_avg_samples > 1) { if (info.net_avg_samples > 1) {
#ifdef HAVE_OPENMP #ifdef HAVE_OPENMP
#pragma omp parallel for #pragma omp parallel for schedule(dynamic,10)
#endif /* HAVE_OPENMP */ #endif /* HAVE_OPENMP */
for (i = info.net_avg_samples; i > 1; i--) { for (i = info.net_avg_samples; i > 1; i--) {
ns->net_rec[i - 1] = ns->net_rec[i - 2]; ns->net_rec[i - 1] = ns->net_rec[i - 2];
@ -687,7 +687,7 @@ inline static void update_stat(void)
(float) (cpu[idx].cpu_total - cpu[idx].cpu_last_total); (float) (cpu[idx].cpu_total - cpu[idx].cpu_last_total);
curtmp = 0; curtmp = 0;
#ifdef HAVE_OPENMP #ifdef HAVE_OPENMP
#pragma omp parallel for reduction(+:curtmp) #pragma omp parallel for reduction(+:curtmp) schedule(dynamic,10)
#endif /* HAVE_OPENMP */ #endif /* HAVE_OPENMP */
for (i = 0; i < info.cpu_avg_samples; i++) { for (i = 0; i < info.cpu_avg_samples; i++) {
curtmp = curtmp + cpu[idx].cpu_val[i]; curtmp = curtmp + cpu[idx].cpu_val[i];
@ -707,7 +707,7 @@ inline static void update_stat(void)
cpu[idx].cpu_last_total = cpu[idx].cpu_total; cpu[idx].cpu_last_total = cpu[idx].cpu_total;
cpu[idx].cpu_last_active_total = cpu[idx].cpu_active_total; cpu[idx].cpu_last_active_total = cpu[idx].cpu_active_total;
#ifdef HAVE_OPENMP #ifdef HAVE_OPENMP
#pragma omp parallel for #pragma omp parallel for schedule(dynamic,10)
#endif /* HAVE_OPENMP */ #endif /* HAVE_OPENMP */
for (i = info.cpu_avg_samples - 1; i > 0; i--) { for (i = info.cpu_avg_samples - 1; i > 0; i--) {
cpu[idx].cpu_val[i] = cpu[idx].cpu_val[i - 1]; cpu[idx].cpu_val[i] = cpu[idx].cpu_val[i - 1];
@ -823,7 +823,7 @@ static int get_first_file_in_a_directory(const char *dir, char *s, int *rep)
s[255] = '\0'; s[255] = '\0';
#ifdef HAVE_OPENMP #ifdef HAVE_OPENMP
#pragma omp parallel for #pragma omp parallel for schedule(dynamic,10)
#endif /* HAVE_OPENMP */ #endif /* HAVE_OPENMP */
for (i = 0; i < n; i++) { for (i = 0; i < n; i++) {
free(namelist[i]); free(namelist[i]);
@ -1492,7 +1492,7 @@ void init_batteries(void)
return; return;
} }
#ifdef HAVE_OPENMP #ifdef HAVE_OPENMP
#pragma omp parallel for #pragma omp parallel for schedule(dynamic,10)
#endif /* HAVE_OPENMP */ #endif /* HAVE_OPENMP */
for (idx = 0; idx < MAX_BATTERY_COUNT; idx++) { for (idx = 0; idx < MAX_BATTERY_COUNT; idx++) {
batteries[idx][0] = '\0'; batteries[idx][0] = '\0';

View File

@ -84,6 +84,12 @@ void llua_init(void)
lua_pushstring(lua_L, VERSION); lua_pushstring(lua_L, VERSION);
lua_setglobal(lua_L, "conky_version"); lua_setglobal(lua_L, "conky_version");
lua_pushstring(lua_L, BUILD_DATE);
lua_setglobal(lua_L, "conky_build_date");
lua_pushstring(lua_L, BUILD_ARCH);
lua_setglobal(lua_L, "conky_build_arch");
lua_pushstring(lua_L, current_config); lua_pushstring(lua_L, current_config);
lua_setglobal(lua_L, "conky_config"); lua_setglobal(lua_L, "conky_config");

View File

@ -371,7 +371,7 @@ void new_bar_in_shell(char* buffer, int buf_max_size, double usage, int width)
int i = 0, j = 0, scaledusage = round_to_int( usage * width / 100); int i = 0, j = 0, scaledusage = round_to_int( usage * width / 100);
#ifdef HAVE_OPENMP #ifdef HAVE_OPENMP
#pragma omp parallel for #pragma omp parallel for schedule(dynamic,10)
#endif /* HAVE_OPENMP */ #endif /* HAVE_OPENMP */
for(i=0; i<(int)scaledusage; i++) { for(i=0; i<(int)scaledusage; i++) {
*(buffer+i)='#'; *(buffer+i)='#';
@ -379,7 +379,7 @@ void new_bar_in_shell(char* buffer, int buf_max_size, double usage, int width)
/* gcc seems to think i is not initialized properly :/ */ /* gcc seems to think i is not initialized properly :/ */
j = i; j = i;
#ifdef HAVE_OPENMP #ifdef HAVE_OPENMP
#pragma omp parallel for #pragma omp parallel for schedule(dynamic,10)
#endif /* HAVE_OPENMP */ #endif /* HAVE_OPENMP */
for(i = j/* cheats */; i < width; i++) { for(i = j/* cheats */; i < width; i++) {
*(buffer+i)='_'; *(buffer+i)='_';

View File

@ -38,7 +38,7 @@
#define TEMPGRAD "-t" #define TEMPGRAD "-t"
enum special_types { enum special_types {
HORIZONTAL_LINE, HORIZONTAL_LINE = 1,
STIPPLED_HR, STIPPLED_HR,
BAR, BAR,
FG, FG,