1
0
mirror of https://github.com/Llewellynvdm/conky.git synced 2025-02-15 02:11:38 +00:00

Added the combine variable

This commit is contained in:
Nikolas Garofil 2009-04-30 21:05:59 +02:00
parent cf97fd3b52
commit e05e9ece8e
8 changed files with 144 additions and 1 deletions

View File

@ -1,3 +1,8 @@
2009-04-30
* Added $combine, a var that places 2 other vars next to each other, even if they
have a output of multiple lines. This also makes the moving of RSS-itemes with
$goto (see change from 2009-04-19) no longer necessary.
2009-04-28
* Various XMMS2 updates (thanks Lassi)
* Make ALSA mixers available on Linux, and added $if_mixer_mute (thanks

4
README
View File

@ -676,6 +676,10 @@ conky(1) conky(1)
Conky version
combine var1 var2
Places the lines of var2 to the right of the lines of var1 seperated by the chars that are put between var1 and var2. For example: ${combine ${head /proc/cpuinfo 2} - ${head /proc/meminfo 1}} gives as output "cpuinfo_line1 - meminfo_line1" on line 1 and "cpuinfo_line2 -" on line 2. $combine vars can also be nested to place more vars next to each other.
conky_build_date
Date Conky was built

View File

@ -603,6 +603,10 @@ Change drawing color to color
Change drawing color to colorN configuration option, where N is a digit between 0 and 9, inclusively.
.TP
\fB\*(T<\fBcombine\fR\*(T>\fR \*(T<\fBvar1 var2\fR\*(T>
Places the lines of var2 to the right of the lines of var1 seperated by the chars that are put between var1 and var2. For example: ${combine ${head /proc/cpuinfo 2} - ${head /proc/meminfo 1}} gives as output "cpuinfo_line1 - meminfo_line1" on line 1 and "cpuinfo_line2 -" on line 2. $combine vars can also be nested to place more vars next to each other.
.TP
\fB\*(T<\fBconky_version\fR\*(T>\fR
Conky version

View File

@ -381,6 +381,16 @@
<para></para></listitem>
</varlistentry>
<varlistentry>
<term>
<command><option>combine</option></command>
<option>var1 var2</option>
</term>
<listitem>
Places the lines of var2 to the right of the lines of var1 seperated by the chars that are put between var1 and var2. For example: ${combine ${head /proc/cpuinfo 2} - ${head /proc/meminfo 1}} gives as output "cpuinfo_line1 - meminfo_line1" on line 1 and "cpuinfo_line2 -" on line 2. $combine vars can also be nested to place more vars next to each other.
<para></para></listitem>
</varlistentry>
<varlistentry>
<term>
<command><option>conky_version</option></command>

View File

@ -11,7 +11,7 @@ color green "\<(alias|alignment|background|show_graph_range|show_graph_scale|bor
color yellow "\<(above|below|bottom_left|bottom_right|bottom_middle|desktop|dock|no|none|normal|override|skip_pager|skip_taskbar|sticky|top_left|top_right|top_middle|middle_left|middle_right|undecorated|yes)\>"
## Variables
color brightblue "\<(acpitemp|acpitempf|freq|freq_g|voltage_mv|voltage_v|wireless_essid|wireless_mode|wireless_bitrate|wireless_ap|wireless_link_qual|wireless_link_qual_max|wireless_link_qual_perc|wireless_link_bar|freq_dyn|freq_dyn_g|adt746xcpu|adt746xfan|acpifan|acpiacadapter|battery|battery_time|battery_percent|battery_bar|buffers|cached|cpu|cpubar|cpugraph|loadgraph|lines|color|color0|color1|color2|color3|color4|color5|color6|color7|color8|color9|conky_version|conky_build_date|conky_build_arch|disk_protect|i8k_version|i8k_bios|i8k_serial|i8k_cpu_temp|i8k_cpu_tempf|i8k_left_fan_status|i8k_right_fan_status|i8k_left_fan_rpm|i8k_right_fan_rpm|i8k_ac_status|i8k_buttons_status|ibm_fan|ibm_temps|ibm_volume|ibm_brightness|if_up|if_updatenr|if_gw|gw_iface|gw_ip|laptop_mode|pb_battery|obsd_sensors_temp|obsd_sensors_fan|obsd_sensors_volt|obsd_vendor|obsd_product|font|diskio|diskio_write|diskio_read|diskiograph|diskiograph_read|diskiograph_write|downspeed|downspeedf|downspeedgraph|else|endif|addr|addrs|image|exec|execp|execbar|execgraph|execibar|execigraph|execi|execpi|texeci|imap_unseen|imap_messages|pop3_unseen|pop3_used|fs_bar|fs_free|fs_free_perc|fs_size|fs_type|fs_used|fs_bar_free|fs_used_perc|loadavg|goto|tab|hr|nameserver|rss|hddtemp|offset|voffset|i2c|platform|hwmon|alignr|alignc|if_empty|if_existing|if_mounted|if_running|ioscheduler|kernel|machine|mem|memeasyfree|memfree|memmax|memperc|membar|memgraph|mixer|mixerl|mixerr|mixerbar|mixerlbar|mixerrbar|mails|mboxscan|new_mails|nodename|outlinecolor|processes|running_processes|scroll|shadecolor|stippled_hr|swap|swapmax|swapperc|swapbar|sysname|time|utime|tztime|totaldown|totalup|updates|upspeed|upspeedf|upspeedgraph|uptime_short|uptime|user_names|user_terms|user_times|user_number|apm_adapter|apm_battery_life|apm_battery_time|monitor|monitor_number|mpd_title|mpd_artist|mpd_album|mpd_random|mpd_repeat|mpd_track|mpd_name|mpd_file|mpd_vol|mpd_bitrate|mpd_status|mpd_elapsed|mpd_length|mpd_percent|mpd_bar|mpd_smart|words|xmms2_artist|xmms2_album|xmms2_title|xmms2_genre|xmms2_comment|xmms2_url|xmms2_status|xmms2_date|xmms2_tracknr|xmms2_bitrate|xmms2_id|xmms2_size|xmms2_elapsed|xmms2_duration|xmms2_percent|xmms2_bar|xmms2_playlist|xmms2_timesplayed|xmms2_smart|audacious_status|audacious_title|audacious_length|audacious_length_seconds|audacious_position|audacious_position_seconds|audacious_bitrate|audacious_frequency|audacious_channels|audacious_filename|audacious_playlist_length|audacious_playlist_position|audacious_bar|bmpx_title|bmpx_artist|bmpx_album|bmpx_uri|bmpx_track|bmpx_bitrate|top|top_mem|tail|head|tcp_portmon|iconv_start|iconv_stop|entropy_avail|entropy_poolsize|entropy_bar|smapi|if_smapi_bat_installed|smapi_bat_perc|smapi_bat_bar)\>"
color brightblue "\<(acpitemp|acpitempf|freq|freq_g|voltage_mv|voltage_v|wireless_essid|wireless_mode|wireless_bitrate|wireless_ap|wireless_link_qual|wireless_link_qual_max|wireless_link_qual_perc|wireless_link_bar|freq_dyn|freq_dyn_g|adt746xcpu|adt746xfan|acpifan|acpiacadapter|battery|battery_time|battery_percent|battery_bar|buffers|cached|cpu|cpubar|cpugraph|loadgraph|lines|color|color0|color1|color2|color3|color4|color5|color6|color7|color8|color9|combine|conky_version|conky_build_date|conky_build_arch|disk_protect|i8k_version|i8k_bios|i8k_serial|i8k_cpu_temp|i8k_cpu_tempf|i8k_left_fan_status|i8k_right_fan_status|i8k_left_fan_rpm|i8k_right_fan_rpm|i8k_ac_status|i8k_buttons_status|ibm_fan|ibm_temps|ibm_volume|ibm_brightness|if_up|if_updatenr|if_gw|gw_iface|gw_ip|laptop_mode|pb_battery|obsd_sensors_temp|obsd_sensors_fan|obsd_sensors_volt|obsd_vendor|obsd_product|font|diskio|diskio_write|diskio_read|diskiograph|diskiograph_read|diskiograph_write|downspeed|downspeedf|downspeedgraph|else|endif|addr|addrs|image|exec|execp|execbar|execgraph|execibar|execigraph|execi|execpi|texeci|imap_unseen|imap_messages|pop3_unseen|pop3_used|fs_bar|fs_free|fs_free_perc|fs_size|fs_type|fs_used|fs_bar_free|fs_used_perc|loadavg|goto|tab|hr|nameserver|rss|hddtemp|offset|voffset|i2c|platform|hwmon|alignr|alignc|if_empty|if_existing|if_mounted|if_running|ioscheduler|kernel|machine|mem|memeasyfree|memfree|memmax|memperc|membar|memgraph|mixer|mixerl|mixerr|mixerbar|mixerlbar|mixerrbar|mails|mboxscan|new_mails|nodename|outlinecolor|processes|running_processes|scroll|shadecolor|stippled_hr|swap|swapmax|swapperc|swapbar|sysname|time|utime|tztime|totaldown|totalup|updates|upspeed|upspeedf|upspeedgraph|uptime_short|uptime|user_names|user_terms|user_times|user_number|apm_adapter|apm_battery_life|apm_battery_time|monitor|monitor_number|mpd_title|mpd_artist|mpd_album|mpd_random|mpd_repeat|mpd_track|mpd_name|mpd_file|mpd_vol|mpd_bitrate|mpd_status|mpd_elapsed|mpd_length|mpd_percent|mpd_bar|mpd_smart|words|xmms2_artist|xmms2_album|xmms2_title|xmms2_genre|xmms2_comment|xmms2_url|xmms2_status|xmms2_date|xmms2_tracknr|xmms2_bitrate|xmms2_id|xmms2_size|xmms2_elapsed|xmms2_duration|xmms2_percent|xmms2_bar|xmms2_playlist|xmms2_timesplayed|xmms2_smart|audacious_status|audacious_title|audacious_length|audacious_length_seconds|audacious_position|audacious_position_seconds|audacious_bitrate|audacious_frequency|audacious_channels|audacious_filename|audacious_playlist_length|audacious_playlist_position|audacious_bar|bmpx_title|bmpx_artist|bmpx_album|bmpx_uri|bmpx_track|bmpx_bitrate|top|top_mem|tail|head|tcp_portmon|iconv_start|iconv_stop|entropy_avail|entropy_poolsize|entropy_bar|smapi|if_smapi_bat_installed|smapi_bat_perc|smapi_bat_bar)\>"
color brightblue "\$\{?[0-9A-Z_!@#$*?-]+\}?"

View File

@ -179,6 +179,7 @@ syn keyword ConkyrcVarName contained nextgroup=ConkyrcNumber,ConkyrcColour skipw
\ color7
\ color8
\ color9
\ combine
\ conky_version
\ conky_build_date
\ conky_build_arch

View File

@ -967,6 +967,13 @@ static void free_text_objects(struct text_object *root)
free_text_objects(obj->sub);
free(obj->sub);
break;
case OBJ_combine:
free(data.combine.left);
free(data.combine.seperation);
free(data.combine.right);
free_text_objects(obj->sub);
free(obj->sub);
break;
}
free(obj);
}
@ -2532,6 +2539,48 @@ static struct text_object *construct_text_object(const char *s,
} else {
CRIT_ERR("scroll needs arguments: <length> [<step>] <text>");
}
END OBJ(combine, 0)
if(arg) {
unsigned int i,j;
unsigned int indenting = 0; //vars can be used as args for other vars
int startvar[2];
int endvar[2];
startvar[0] = endvar[0] = startvar[1] = endvar[1] = -1;
j=0;
for(i=0; arg[i] != 0 && j < 2; i++) {
if(startvar[j] == -1) {
if(arg[i] == '$') {
startvar[j] = i;
}
}else if(endvar[j] == -1) {
if(arg[i] == '{') {
indenting++;
}else if(arg[i] == '}') {
indenting--;
}
if(indenting == 0 && (arg[i+1] == ' ' || arg[i+1] == '$' || arg[i+1] == 0)) {
endvar[j]=i+1;
j++;
}
}
}
if(startvar[0] >= 0 && endvar[0] >= 0 && startvar[1] >= 0 && endvar[1] >= 0) {
obj->data.combine.left=malloc(endvar[0]-startvar[0]+1);
obj->data.combine.seperation=malloc(startvar[1]-endvar[0]+1);
obj->data.combine.right=malloc(endvar[1]-startvar[1]+1);
strncpy(obj->data.combine.left, arg+startvar[0], endvar[0]-startvar[0]); obj->data.combine.left[endvar[0]-startvar[0]]=0;
strncpy(obj->data.combine.seperation, arg+endvar[0], startvar[1]-endvar[0]); obj->data.combine.seperation[startvar[1]-endvar[0]]=0;
strncpy(obj->data.combine.right, arg+startvar[1], endvar[1]-startvar[1]); obj->data.combine.right[endvar[1]-startvar[1]]=0;
obj->sub = malloc(sizeof(struct text_object));
extract_variable_text_internal(obj->sub, obj->data.combine.left, 0);
obj->sub->sub = malloc(sizeof(struct text_object));
extract_variable_text_internal(obj->sub->sub, obj->data.combine.right, 0);
} else {
CRIT_ERR("combine needs arguments: <text1> <text2>");
}
} else {
CRIT_ERR("combine needs arguments: <text1> <text2>");
}
#ifdef NVIDIA
END OBJ(nvidia, 0)
if (!arg) {
@ -4869,6 +4918,69 @@ static void generate_text_internal(char *p, int p_max_size,
}
snprintf(p, p_max_size, "%s", buf);
}
OBJ(combine) {
char buf[2][max_user_text];
unsigned int i, j;
unsigned int longest=0;
unsigned int nextstart;
unsigned int nr_rows[2];
struct llrows {
char* row;
struct llrows* next;
};
struct llrows *ll_rows[2], *current[2];
struct text_object * objsub = obj->sub;
p[0]=0;
for(i=0; i<2; i++) {
nr_rows[i] = 1;
nextstart = 0;
ll_rows[i] = malloc(sizeof(struct llrows));
current[i] = ll_rows[i];
for(j=0; j<i; j++) objsub = objsub->sub;
generate_text_internal(buf[i], max_user_text, *objsub, cur);
for(j=0; buf[i][j] != 0; j++) {
if(buf[i][j] == '\t') buf[i][j] = ' ';
if(buf[i][j] == '\n') {
buf[i][j] = 0;
current[i]->row = strdup(buf[i]+nextstart);
if(i==0 && strlen(current[i]->row) > longest) longest = strlen(current[i]->row);
current[i]->next = malloc(sizeof(struct llrows));
current[i] = current[i]->next;
nextstart = j + 1;
nr_rows[i]++;
}
}
current[i]->row = strdup(buf[i]+nextstart);
if(i==0 && strlen(current[i]->row) > longest) longest = strlen(current[i]->row);
current[i]->next = NULL;
current[i] = ll_rows[i];
}
for(j=0; j < (nr_rows[0] > nr_rows[1] ? nr_rows[0] : nr_rows[1] ); j++) {
if(current[0]) {
strcat(p, current[0]->row);
i=strlen(current[0]->row);
}else i = 0;
while(i < longest) {
strcat(p, " ");
i++;
}
if(current[1]) {
strcat(p, obj->data.combine.seperation);
strcat(p, current[1]->row);
}
strcat(p, "\n");
for(i=0; i<2; i++) if(current[i]) current[i]=current[i]->next;
}
for(i=0; i<2; i++) {
while(ll_rows[i] != NULL) {
current[i]=ll_rows[i];
free(current[i]->row);
ll_rows[i]=current[i]->next;
free(current[i]);
}
}
}
#ifdef NVIDIA
OBJ(nvidia) {
int value = get_nvidia_value(obj->data.nvidia.type, display);

View File

@ -368,6 +368,7 @@ enum text_object_type {
OBJ_hddtemp,
#endif
OBJ_scroll,
OBJ_combine,
OBJ_entropy_avail,
OBJ_entropy_poolsize,
OBJ_entropy_bar
@ -493,6 +494,12 @@ struct text_object {
unsigned int start;
} scroll;
struct {
char *left;
char *seperation;
char *right;
} combine;
struct local_mail_s local_mail;
#ifdef NVIDIA
struct nvidia_s nvidia;