mirror of
https://github.com/Llewellynvdm/conky.git
synced 2024-12-28 13:00:45 +00:00
Merge remote branch 'origin/master' into lua-config
Conflicts: src/conky.cc src/x11.cc
This commit is contained in:
commit
00e91d8c31
1
.gitignore
vendored
1
.gitignore
vendored
@ -5,3 +5,4 @@ patches/
|
|||||||
doc/conky.1
|
doc/conky.1
|
||||||
README
|
README
|
||||||
build*
|
build*
|
||||||
|
doc/*.html
|
||||||
|
@ -54,7 +54,6 @@ set(SYSTEM_CONFIG_FILE "/etc/conky/conky.conf" CACHE STRING "Default system-wide
|
|||||||
set(PACKAGE_LIBRARY_DIR "${CMAKE_INSTALL_PREFIX}/lib/conky" CACHE STRING "Package library path (where Lua bindings are installed" FORCE)
|
set(PACKAGE_LIBRARY_DIR "${CMAKE_INSTALL_PREFIX}/lib/conky" CACHE STRING "Package library path (where Lua bindings are installed" FORCE)
|
||||||
set(DEFAULTNETDEV "eth0" CACHE STRING "Default networkdevice")
|
set(DEFAULTNETDEV "eth0" CACHE STRING "Default networkdevice")
|
||||||
set(CONFIG_FILE "$HOME/.conkyrc" CACHE STRING "Configfile of the user")
|
set(CONFIG_FILE "$HOME/.conkyrc" CACHE STRING "Configfile of the user")
|
||||||
set(MAX_SPECIALS_DEFAULT "512" CACHE STRING "Default maximum number of special things, e.g. fonts, offsets, aligns, etc.")
|
|
||||||
set(MAX_USER_TEXT_DEFAULT "16384" CACHE STRING "Default maximum size of config TEXT buffer, i.e. below TEXT line.")
|
set(MAX_USER_TEXT_DEFAULT "16384" CACHE STRING "Default maximum size of config TEXT buffer, i.e. below TEXT line.")
|
||||||
set(DEFAULT_TEXT_BUFFER_SIZE "256" CACHE STRING "Default size used for temporary, static text buffers")
|
set(DEFAULT_TEXT_BUFFER_SIZE "256" CACHE STRING "Default size used for temporary, static text buffers")
|
||||||
set(MAX_NET_INTERFACES "16" CACHE STRING "Maximum number of network devices")
|
set(MAX_NET_INTERFACES "16" CACHE STRING "Maximum number of network devices")
|
||||||
@ -127,6 +126,8 @@ option(BUILD_BMPX "Build BMPx (music player) support" false)
|
|||||||
|
|
||||||
option(BUILD_MPD "Enable if you want MPD (music player) support" true)
|
option(BUILD_MPD "Enable if you want MPD (music player) support" true)
|
||||||
|
|
||||||
|
option(BUILD_MYSQL "Enable if you want MySQL support" true)
|
||||||
|
|
||||||
option(BUILD_MOC "Enable if you want MOC (music player) support" true)
|
option(BUILD_MOC "Enable if you want MOC (music player) support" true)
|
||||||
|
|
||||||
option(BUILD_XMMS2 "Enable if you want XMMS2 (music player) support" false)
|
option(BUILD_XMMS2 "Enable if you want XMMS2 (music player) support" false)
|
||||||
|
@ -80,6 +80,19 @@ if(BUILD_NCURSES)
|
|||||||
set(conky_libs ${conky_libs} ${NCURSES_LIB})
|
set(conky_libs ${conky_libs} ${NCURSES_LIB})
|
||||||
endif(BUILD_NCURSES)
|
endif(BUILD_NCURSES)
|
||||||
|
|
||||||
|
if(BUILD_MYSQL)
|
||||||
|
find_path(mysql_INCLUDE_PATH mysql.h ${INCLUDE_SEARCH_PATH} /usr/include/mysql /usr/local/include/mysql)
|
||||||
|
if(NOT mysql_INCLUDE_PATH)
|
||||||
|
message(FATAL_ERROR "Unable to find mysql.h")
|
||||||
|
endif(NOT mysql_INCLUDE_PATH)
|
||||||
|
set(conky_includes ${conky_includes} ${mysql_INCLUDE_PATH})
|
||||||
|
find_library(MYSQLCLIENT_LIB NAMES mysqlclient)
|
||||||
|
if(NOT MYSQLCLIENT_LIB)
|
||||||
|
message(FATAL_ERROR "Unable to find mysqlclient library")
|
||||||
|
endif(NOT MYSQLCLIENT_LIB)
|
||||||
|
set(conky_libs ${conky_libs} ${MYSQLCLIENT_LIB})
|
||||||
|
endif(BUILD_MYSQL)
|
||||||
|
|
||||||
if(BUILD_WLAN)
|
if(BUILD_WLAN)
|
||||||
check_include_file(iwlib.h IWLIB_H -D_GNU_SOURCE)
|
check_include_file(iwlib.h IWLIB_H -D_GNU_SOURCE)
|
||||||
if(NOT IWLIB_H)
|
if(NOT IWLIB_H)
|
||||||
|
@ -15,7 +15,6 @@
|
|||||||
#define PACKAGE_LIBDIR "@PACKAGE_LIBRARY_DIR@"
|
#define PACKAGE_LIBDIR "@PACKAGE_LIBRARY_DIR@"
|
||||||
#define DEFAULTNETDEV "@DEFAULTNETDEV@"
|
#define DEFAULTNETDEV "@DEFAULTNETDEV@"
|
||||||
#define CONFIG_FILE "@CONFIG_FILE@"
|
#define CONFIG_FILE "@CONFIG_FILE@"
|
||||||
#define MAX_SPECIALS_DEFAULT @MAX_SPECIALS_DEFAULT@
|
|
||||||
#define MAX_USER_TEXT_DEFAULT @MAX_USER_TEXT_DEFAULT@
|
#define MAX_USER_TEXT_DEFAULT @MAX_USER_TEXT_DEFAULT@
|
||||||
#define DEFAULT_TEXT_BUFFER_SIZE @DEFAULT_TEXT_BUFFER_SIZE@
|
#define DEFAULT_TEXT_BUFFER_SIZE @DEFAULT_TEXT_BUFFER_SIZE@
|
||||||
#define MAX_NET_INTERFACES @MAX_NET_INTERFACES@
|
#define MAX_NET_INTERFACES @MAX_NET_INTERFACES@
|
||||||
@ -52,6 +51,8 @@
|
|||||||
|
|
||||||
#cmakedefine BUILD_MPD 1
|
#cmakedefine BUILD_MPD 1
|
||||||
|
|
||||||
|
#cmakedefine BUILD_MYSQL 1
|
||||||
|
|
||||||
#cmakedefine BUILD_MOC 1
|
#cmakedefine BUILD_MOC 1
|
||||||
|
|
||||||
#cmakedefine BUILD_NVIDIA 0
|
#cmakedefine BUILD_NVIDIA 0
|
||||||
|
@ -119,6 +119,15 @@
|
|||||||
conky -s 'Your uptime is: $uptime'
|
conky -s 'Your uptime is: $uptime'
|
||||||
<para></para></listitem>
|
<para></para></listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>
|
||||||
|
<command>
|
||||||
|
<option>-S | --stdin-config</option>
|
||||||
|
</command>
|
||||||
|
</term>
|
||||||
|
<listitem>Read configuration from stdin.
|
||||||
|
<para></para></listitem>
|
||||||
|
</varlistentry>
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term>
|
<term>
|
||||||
<command>
|
<command>
|
||||||
|
@ -453,16 +453,6 @@
|
|||||||
many connections (if 0 or not set, default is 256)
|
many connections (if 0 or not set, default is 256)
|
||||||
<para /></listitem>
|
<para /></listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
<varlistentry>
|
|
||||||
<term>
|
|
||||||
<command>
|
|
||||||
<option>max_specials</option>
|
|
||||||
</command>
|
|
||||||
</term>
|
|
||||||
<listitem>Maximum number of special things, e.g. fonts,
|
|
||||||
offsets, aligns, etc. (default is 512)
|
|
||||||
<para /></listitem>
|
|
||||||
</varlistentry>
|
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term>
|
<term>
|
||||||
<command>
|
<command>
|
||||||
@ -534,6 +524,52 @@
|
|||||||
<listitem>Port of MPD server
|
<listitem>Port of MPD server
|
||||||
<para /></listitem>
|
<para /></listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>
|
||||||
|
<command>
|
||||||
|
<option>mysql_host</option>
|
||||||
|
</command>
|
||||||
|
</term>
|
||||||
|
<listitem>Host of MySQL server. Defaults to localhost
|
||||||
|
<para /></listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>
|
||||||
|
<command>
|
||||||
|
<option>mysql_port</option>
|
||||||
|
</command>
|
||||||
|
</term>
|
||||||
|
<listitem>Port of MySQL server. Defaults to the default mysql port
|
||||||
|
<para /></listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>
|
||||||
|
<command>
|
||||||
|
<option>mysql_user</option>
|
||||||
|
</command>
|
||||||
|
</term>
|
||||||
|
<listitem>MySQL user name to use when connecting to the server. Defaults to your username
|
||||||
|
<para /></listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>
|
||||||
|
<command>
|
||||||
|
<option>mysql_password</option>
|
||||||
|
</command>
|
||||||
|
</term>
|
||||||
|
<listitem>Password of the MySQL user. Place it between "-chars. When this is not set there
|
||||||
|
is no password used
|
||||||
|
<para /></listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>
|
||||||
|
<command>
|
||||||
|
<option>mysql_db</option>
|
||||||
|
</command>
|
||||||
|
</term>
|
||||||
|
<listitem>MySQL database to use. Defaults to mysql
|
||||||
|
<para /></listitem>
|
||||||
|
</varlistentry>
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term>
|
<term>
|
||||||
<command>
|
<command>
|
||||||
|
@ -7,8 +7,8 @@
|
|||||||
<option>(adapter)</option>
|
<option>(adapter)</option>
|
||||||
</term>
|
</term>
|
||||||
<listitem>ACPI ac adapter state. On linux, the adapter option specifies the
|
<listitem>ACPI ac adapter state. On linux, the adapter option specifies the
|
||||||
subfolder of /sys/class/power_supply containing the state information (defaults
|
subfolder of /sys/class/power_supply containing the state information (tries "AC"
|
||||||
to "AC"). Other systems ignore it.
|
and "ADP1" if there is no argument given). Non-linux systems ignore it.
|
||||||
<para /></listitem>
|
<para /></listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
@ -675,8 +675,8 @@
|
|||||||
</term>
|
</term>
|
||||||
<listitem>
|
<listitem>
|
||||||
Download data from URI using Curl at the
|
Download data from URI using Curl at the
|
||||||
specified interval. The interval may be a floating
|
specified interval. The interval may be a positive floating
|
||||||
point value greater than 0, otherwise defaults to 15
|
point value (0 is allowed), otherwise defaults to 15
|
||||||
minutes. Most useful when used in conjunction with Lua
|
minutes. Most useful when used in conjunction with Lua
|
||||||
and the Lua API. This object is threaded, and once a
|
and the Lua API. This object is threaded, and once a
|
||||||
thread is created it can't be explicitly destroyed.
|
thread is created it can't be explicitly destroyed.
|
||||||
@ -811,6 +811,22 @@
|
|||||||
particular graph value (try it and see).
|
particular graph value (try it and see).
|
||||||
<para /></listitem>
|
<para /></listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>
|
||||||
|
<command>
|
||||||
|
<option>distribution</option>
|
||||||
|
</command>
|
||||||
|
</term>
|
||||||
|
<listitem>The name of the distribution. It could be that some
|
||||||
|
of the untested distributions will show up wrong or as "unknown",
|
||||||
|
if that's the case post a bug on sourceforge, make sure it
|
||||||
|
contains the name of your distribution, the contents of
|
||||||
|
/proc/version and if there is a file that only exists on your
|
||||||
|
distribution, also add the path of that file in the bug. If there
|
||||||
|
is no such file, please add another way which we can use to identify
|
||||||
|
your distribution.
|
||||||
|
<para /></listitem>
|
||||||
|
</varlistentry>
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term>
|
<term>
|
||||||
<command>
|
<command>
|
||||||
@ -2071,15 +2087,10 @@
|
|||||||
<option>(device)</option>
|
<option>(device)</option>
|
||||||
</term>
|
</term>
|
||||||
<listitem>Prints the mixer value as reported by the OS.
|
<listitem>Prints the mixer value as reported by the OS.
|
||||||
Default mixer is "vol", but you can specify one of the
|
Default mixer is "Master", but you can specify one of the
|
||||||
following optional arguments: "vol", "bass", "treble",
|
available ALSA Simple mixer controls.
|
||||||
"synth", "pcm", "speaker", "line", "mic", "cd", "mix",
|
You can find the list of those available on your system
|
||||||
"pcm2", "rec", "igain", "ogain", "line1", "line2", "line3",
|
using amixer.
|
||||||
"dig1", "dig2", "dig3", "phin", "phout", "video", "radio",
|
|
||||||
"monitor". Refer to the definition of SOUND_DEVICE_NAMES in
|
|
||||||
<linux/soundcard.h> (on Linux), <soundcard.h>
|
|
||||||
(on OpenBSD), or <sys/soundcard.h> to find the exact
|
|
||||||
options available on your system.
|
|
||||||
<para /></listitem>
|
<para /></listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
@ -2407,6 +2418,17 @@
|
|||||||
<listitem>MPD's volume
|
<listitem>MPD's volume
|
||||||
<para /></listitem>
|
<para /></listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>
|
||||||
|
<command>
|
||||||
|
<option>mysql</option>
|
||||||
|
</command>
|
||||||
|
<option>query</option>
|
||||||
|
</term>
|
||||||
|
<listitem>Shows the first field of the first row of the
|
||||||
|
result of the query.
|
||||||
|
<para /></listitem>
|
||||||
|
</varlistentry>
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term>
|
<term>
|
||||||
<command>
|
<command>
|
||||||
@ -2440,6 +2462,28 @@
|
|||||||
<listitem>Hostname
|
<listitem>Hostname
|
||||||
<para /></listitem>
|
<para /></listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>
|
||||||
|
<command>
|
||||||
|
<option>nodename_short</option>
|
||||||
|
</command>
|
||||||
|
</term>
|
||||||
|
<listitem>Short hostname (same as 'hostname -s' shell command).
|
||||||
|
<para /></listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>
|
||||||
|
<command>
|
||||||
|
<option>no_update</option>
|
||||||
|
</command>
|
||||||
|
<option>text</option>
|
||||||
|
</term>
|
||||||
|
<listitem>Shows text and parses the vars in it, but doesn't
|
||||||
|
update them. Use this for things that do not change while conky
|
||||||
|
is running, like $machine, $conky_version,... By not updating
|
||||||
|
this you can save some resources.
|
||||||
|
<para /></listitem>
|
||||||
|
</varlistentry>
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term>
|
<term>
|
||||||
<command>
|
<command>
|
||||||
@ -3031,7 +3075,19 @@
|
|||||||
</term>
|
</term>
|
||||||
<listitem>Connects to a tcp port on a host (default is
|
<listitem>Connects to a tcp port on a host (default is
|
||||||
localhost), reads every char available at the moment and
|
localhost), reads every char available at the moment and
|
||||||
shows them.
|
shows them.
|
||||||
|
<para /></listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>
|
||||||
|
<command>
|
||||||
|
<option>read_udp</option>
|
||||||
|
</command>
|
||||||
|
<option>(host) port</option>
|
||||||
|
</term>
|
||||||
|
<listitem>Connects to a udp port on a host (default is
|
||||||
|
localhost), reads every char available at the moment and
|
||||||
|
shows them.
|
||||||
<para /></listitem>
|
<para /></listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
@ -3217,6 +3273,17 @@
|
|||||||
<listitem>Stippled (dashed) horizontal line
|
<listitem>Stippled (dashed) horizontal line
|
||||||
<para /></listitem>
|
<para /></listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>
|
||||||
|
<command>
|
||||||
|
<option>stock</option>
|
||||||
|
</command>
|
||||||
|
<option>symbol data</option>
|
||||||
|
</term>
|
||||||
|
<listitem>Displays the data of a stock symbol. The following data
|
||||||
|
is supported: adv(Average Daily Volume),ask,asksize,bid
|
||||||
|
<para /></listitem>
|
||||||
|
</varlistentry>
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term>
|
<term>
|
||||||
<command>
|
<command>
|
||||||
|
@ -5,13 +5,13 @@
|
|||||||
syntax "conky" "(\.*conkyrc.*$|conky.conf)"
|
syntax "conky" "(\.*conkyrc.*$|conky.conf)"
|
||||||
|
|
||||||
## Configuration items
|
## Configuration items
|
||||||
color green "\<(alignment|append_file|background|border_inner_margin|border_outer_margin|border_width|color0|color1|color2|color3|color4|color5|color6|color7|color8|color9|colorN|cpu_avg_samples|default_bar_size|default_color|default_gauge_size|default_graph_size|default_outline_color|default_shade_color|diskio_avg_samples|display|double_buffer|draw_borders|draw_graph_borders|draw_outline|draw_shades|extra_newline|font|format_human_readable|gap_x|gap_y|if_up_strictness|imap|imlib_cache_flush_interval|imlib_cache_size|lua_draw_hook_post|lua_draw_hook_pre|lua_load|lua_shutdown_hook|lua_startup_hook|mail_spool|max_port_monitor_connections|max_specials|max_text_width|max_user_text|maximum_width|minimum_size|mpd_host|mpd_password|mpd_port|music_player_interval|net_avg_samples|no_buffers|out_to_console|out_to_ncurses|out_to_stderr|out_to_x|override_utf8_locale|overwrite_file|own_window|own_window_class|own_window_colour|own_window_hints|own_window_title|own_window_transparent|own_window_type|pad_percents|pop3|sensor_device|short_units|show_graph_range|show_graph_scale|stippled_borders|temperature_unit|template|template0|template1|template2|template3|template4|template5|template6|template7|template8|template9|text|text_buffer_size|times_in_seconds|top_cpu_separate|top_name_width|total_run_times|update_interval|update_interval_on_battery|uppercase|use_spacer|use_xft|xftalpha|xftfont)\>"
|
color green "\<(alignment|append_file|background|border_inner_margin|border_outer_margin|border_width|color0|color1|color2|color3|color4|color5|color6|color7|color8|color9|colorN|cpu_avg_samples|default_bar_size|default_color|default_gauge_size|default_graph_size|default_outline_color|default_shade_color|diskio_avg_samples|display|double_buffer|draw_borders|draw_graph_borders|draw_outline|draw_shades|extra_newline|font|format_human_readable|gap_x|gap_y|if_up_strictness|imap|imlib_cache_flush_interval|imlib_cache_size|lua_draw_hook_post|lua_draw_hook_pre|lua_load|lua_shutdown_hook|lua_startup_hook|mail_spool|max_port_monitor_connections|max_text_width|max_user_text|maximum_width|minimum_size|mpd_host|mpd_password|mpd_port|music_player_interval|mysql_host|mysql_port|mysql_user|mysql_password|mysql_db|net_avg_samples|no_buffers|out_to_console|out_to_ncurses|out_to_stderr|out_to_x|override_utf8_locale|overwrite_file|own_window|own_window_class|own_window_colour|own_window_hints|own_window_title|own_window_transparent|own_window_type|pad_percents|pop3|sensor_device|short_units|show_graph_range|show_graph_scale|stippled_borders|temperature_unit|template|template0|template1|template2|template3|template4|template5|template6|template7|template8|template9|text|text_buffer_size|times_in_seconds|top_cpu_separate|top_name_width|total_run_times|update_interval|update_interval_on_battery|uppercase|use_spacer|use_xft|xftalpha|xftfont)\>"
|
||||||
|
|
||||||
## Configuration item constants
|
## Configuration item constants
|
||||||
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|middle_middle|undecorated|yes)\>"
|
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|middle_middle|undecorated|yes)\>"
|
||||||
|
|
||||||
## Variables
|
## Variables
|
||||||
color brightblue "\<(acpiacadapter|acpifan|acpitemp|addr|addrs|alignc|alignr|apcupsd|apcupsd_cable|apcupsd_charge|apcupsd_lastxfer|apcupsd_linev|apcupsd_load|apcupsd_loadbar|apcupsd_loadgauge|apcupsd_loadgraph|apcupsd_model|apcupsd_name|apcupsd_status|apcupsd_temp|apcupsd_timeleft|apcupsd_upsmode|apm_adapter|apm_battery_life|apm_battery_time|audacious_bar|audacious_bitrate|audacious_channels|audacious_filename|audacious_frequency|audacious_length|audacious_length_seconds|audacious_main_volume|audacious_playlist_length|audacious_playlist_position|audacious_position|audacious_position_seconds|audacious_status|audacious_title|battery|battery_bar|battery_percent|battery_short|battery_time|blink|bmpx_album|bmpx_artist|bmpx_bitrate|bmpx_title|bmpx_track|bmpx_uri|buffers|cached|cmdline_to_pid|color|color0|color1|color2|color3|color4|color5|color6|color7|color8|color9|combine|conky_build_arch|conky_build_date|conky_version|cpu|cpubar|cpugauge|cpugraph|curl|desktop|desktop_name|desktop_number|disk_protect|diskio|diskio_read|diskio_write|diskiograph|diskiograph_read|diskiograph_write|downspeed|downspeedf|downspeedgraph|draft_mails|else|endif|entropy_avail|entropy_bar|entropy_perc|entropy_poolsize|eval|eve|exec|execbar|execgauge|execgraph|execi|execibar|execigauge|execigraph|execp|execpi|flagged_mails|font|format_time|forwarded_mails|freq|freq_g|fs_bar|fs_bar_free|fs_free|fs_free_perc|fs_size|fs_type|fs_used|fs_used_perc|goto|gw_iface|gw_ip|hddtemp|head|hr|hwmon|i2c|i8k_ac_status|i8k_bios|i8k_buttons_status|i8k_cpu_temp|i8k_left_fan_rpm|i8k_left_fan_status|i8k_right_fan_rpm|i8k_right_fan_status|i8k_serial|i8k_version|ibm_brightness|ibm_fan|ibm_temps|ibm_volume|iconv_start|iconv_stop|if_empty|if_existing|if_gw|if_match|if_mixer_mute|if_mounted|if_mpd_playing|if_running|if_smapi_bat_installed|if_up|if_updatenr|if_xmms2_connected|image|imap_messages|imap_unseen|include|ioscheduler|kernel|laptop_mode|lines|loadavg|loadgraph|lua|lua_bar|lua_gauge|lua_graph|lua_parse|machine|mails|mboxscan|mem|memwithbuffers|membar|memwithbuffersbar|memeasyfree|memfree|memgauge|memgraph|memmax|memperc|mixer|mixerbar|mixerl|mixerlbar|mixerr|mixerrbar|moc_album|moc_artist|moc_bitrate|moc_curtime|moc_file|moc_rate|moc_song|moc_state|moc_timeleft|moc_title|moc_totaltime|monitor|monitor_number|mpd_album|mpd_artist|mpd_bar|mpd_bitrate|mpd_elapsed|mpd_file|mpd_length|mpd_name|mpd_percent|mpd_random|mpd_repeat|mpd_smart|mpd_status|mpd_title|mpd_track|mpd_vol|nameserver|new_mails|nodename|nvidia|obsd_product|obsd_sensors_fan|obsd_sensors_temp|obsd_sensors_volt|obsd_vendor|offset|outlinecolor|pb_battery|pid_chroot|pid_cmdline|pid_cwd|pid_environ|pid_environ_list|pid_exe|pid_nice|pid_openfiles|pid_parent|pid_priority|pid_state|pid_state_short|pid_stderr|pid_stdin|pid_stdout|pid_threads|pid_thread_list|pid_time_kernelmode|pid_time_usermode|pid_time|pid_uid|pid_euid|pid_suid|pid_fsuid|pid_gid|pid_egid|pid_sgid|pid_fsgid|pid_read|pid_vmpeak|pid_vmsize|pid_vmlck|pid_vmhwm|pid_vmrss|pid_vmdata|pid_vmstk|pid_vmexe|pid_vmlib|pid_vmpte|pid_write|platform|pop3_unseen|pop3_used|pre_exec|processes|read_tcp|replied_mails|rss|running_processes|running_threads|scroll|seen_mails|shadecolor|smapi|smapi_bat_bar|smapi_bat_perc|smapi_bat_power|smapi_bat_temp|sony_fanspeed|stippled_hr|swap|swapbar|swapfree|swapmax|swapperc|sysname|tab|tail|tcp_portmon|template0|template1|template2|template3|template4|template5|template6|template7|template8|template9|texeci|texecpi|threads|time|to_bytes|top|top_io|top_mem|top_time|totaldown|totalup|trashed_mails|tztime|gid_name|uid_name|unflagged_mails|unforwarded_mails|unreplied_mails|unseen_mails|updates|upspeed|upspeedf|upspeedgraph|uptime|uptime_short|user_names|user_number|user_terms|user_times|user_time|utime|voffset|voltage_mv|voltage_v|weather|wireless_ap|wireless_bitrate|wireless_essid|wireless_link_bar|wireless_link_qual|wireless_link_qual_max|wireless_link_qual_perc|wireless_mode|words|xmms2_album|xmms2_artist|xmms2_bar|xmms2_bitrate|xmms2_comment|xmms2_date|xmms2_duration|xmms2_elapsed|xmms2_genre|xmms2_id|xmms2_percent|xmms2_playlist|xmms2_size|xmms2_smart|xmms2_status|xmms2_timesplayed|xmms2_title|xmms2_tracknr|xmms2_url)\>"
|
color brightblue "\<(acpiacadapter|acpifan|acpitemp|addr|addrs|alignc|alignr|apcupsd|apcupsd_cable|apcupsd_charge|apcupsd_lastxfer|apcupsd_linev|apcupsd_load|apcupsd_loadbar|apcupsd_loadgauge|apcupsd_loadgraph|apcupsd_model|apcupsd_name|apcupsd_status|apcupsd_temp|apcupsd_timeleft|apcupsd_upsmode|apm_adapter|apm_battery_life|apm_battery_time|audacious_bar|audacious_bitrate|audacious_channels|audacious_filename|audacious_frequency|audacious_length|audacious_length_seconds|audacious_main_volume|audacious_playlist_length|audacious_playlist_position|audacious_position|audacious_position_seconds|audacious_status|audacious_title|battery|battery_bar|battery_percent|battery_short|battery_time|blink|bmpx_album|bmpx_artist|bmpx_bitrate|bmpx_title|bmpx_track|bmpx_uri|buffers|cached|cmdline_to_pid|color|color0|color1|color2|color3|color4|color5|color6|color7|color8|color9|combine|conky_build_arch|conky_build_date|conky_version|cpu|cpubar|cpugauge|cpugraph|curl|desktop|desktop_name|desktop_number|disk_protect|diskio|diskio_read|diskio_write|diskiograph|diskiograph_read|diskiograph_write|distribution|downspeed|downspeedf|downspeedgraph|draft_mails|else|endif|entropy_avail|entropy_bar|entropy_perc|entropy_poolsize|eval|eve|exec|execbar|execgauge|execgraph|execi|execibar|execigauge|execigraph|execp|execpi|flagged_mails|font|format_time|forwarded_mails|freq|freq_g|fs_bar|fs_bar_free|fs_free|fs_free_perc|fs_size|fs_type|fs_used|fs_used_perc|goto|gw_iface|gw_ip|hddtemp|head|hr|hwmon|i2c|i8k_ac_status|i8k_bios|i8k_buttons_status|i8k_cpu_temp|i8k_left_fan_rpm|i8k_left_fan_status|i8k_right_fan_rpm|i8k_right_fan_status|i8k_serial|i8k_version|ibm_brightness|ibm_fan|ibm_temps|ibm_volume|iconv_start|iconv_stop|if_empty|if_existing|if_gw|if_match|if_mixer_mute|if_mounted|if_mpd_playing|if_running|if_smapi_bat_installed|if_up|if_updatenr|if_xmms2_connected|image|imap_messages|imap_unseen|include|ioscheduler|kernel|laptop_mode|lines|loadavg|loadgraph|lua|lua_bar|lua_gauge|lua_graph|lua_parse|machine|mails|mboxscan|mem|memwithbuffers|membar|memwithbuffersbar|memeasyfree|memfree|memgauge|memgraph|memmax|memperc|mixer|mixerbar|mixerl|mixerlbar|mixerr|mixerrbar|moc_album|moc_artist|moc_bitrate|moc_curtime|moc_file|moc_rate|moc_song|moc_state|moc_timeleft|moc_title|moc_totaltime|monitor|monitor_number|mpd_album|mpd_artist|mpd_bar|mpd_bitrate|mpd_elapsed|mpd_file|mpd_length|mpd_name|mpd_percent|mpd_random|mpd_repeat|mpd_smart|mpd_status|mpd_title|mpd_track|mpd_vol|mysql|nameserver|new_mails|nodename|nodename_short|no_update|nvidia|obsd_product|obsd_sensors_fan|obsd_sensors_temp|obsd_sensors_volt|obsd_vendor|offset|outlinecolor|pb_battery|pid_chroot|pid_cmdline|pid_cwd|pid_environ|pid_environ_list|pid_exe|pid_nice|pid_openfiles|pid_parent|pid_priority|pid_state|pid_state_short|pid_stderr|pid_stdin|pid_stdout|pid_threads|pid_thread_list|pid_time_kernelmode|pid_time_usermode|pid_time|pid_uid|pid_euid|pid_suid|pid_fsuid|pid_gid|pid_egid|pid_sgid|pid_fsgid|pid_read|pid_vmpeak|pid_vmsize|pid_vmlck|pid_vmhwm|pid_vmrss|pid_vmdata|pid_vmstk|pid_vmexe|pid_vmlib|pid_vmpte|pid_write|platform|pop3_unseen|pop3_used|pre_exec|processes|read_tcp|read_udp|replied_mails|rss|running_processes|running_threads|scroll|seen_mails|shadecolor|smapi|smapi_bat_bar|smapi_bat_perc|smapi_bat_power|smapi_bat_temp|sony_fanspeed|stippled_hr|stock|swap|swapbar|swapfree|swapmax|swapperc|sysname|tab|tail|tcp_portmon|template0|template1|template2|template3|template4|template5|template6|template7|template8|template9|texeci|texecpi|threads|time|to_bytes|top|top_io|top_mem|top_time|totaldown|totalup|trashed_mails|tztime|gid_name|uid_name|unflagged_mails|unforwarded_mails|unreplied_mails|unseen_mails|updates|upspeed|upspeedf|upspeedgraph|uptime|uptime_short|user_names|user_number|user_terms|user_times|user_time|utime|voffset|voltage_mv|voltage_v|weather|wireless_ap|wireless_bitrate|wireless_essid|wireless_link_bar|wireless_link_qual|wireless_link_qual_max|wireless_link_qual_perc|wireless_mode|words|xmms2_album|xmms2_artist|xmms2_bar|xmms2_bitrate|xmms2_comment|xmms2_date|xmms2_duration|xmms2_elapsed|xmms2_genre|xmms2_id|xmms2_percent|xmms2_playlist|xmms2_size|xmms2_smart|xmms2_status|xmms2_timesplayed|xmms2_title|xmms2_tracknr|xmms2_url)\>"
|
||||||
|
|
||||||
color brightblue "\$\{?[0-9A-Z_!@#$*?-]+\}?"
|
color brightblue "\$\{?[0-9A-Z_!@#$*?-]+\}?"
|
||||||
color cyan "(\{|\}|\(|\)|\;|\]|\[|`|\\|\$|<|>|!|=|&|\|)"
|
color cyan "(\{|\}|\(|\)|\;|\]|\[|`|\\|\$|<|>|!|=|&|\|)"
|
||||||
|
@ -12,7 +12,7 @@ endif
|
|||||||
|
|
||||||
syn region ConkyrcComment start=/^\s*#/ end=/$/
|
syn region ConkyrcComment start=/^\s*#/ end=/$/
|
||||||
|
|
||||||
syn keyword ConkyrcSetting alignment append_file background border_inner_margin border_outer_margin border_width color0 color1 color2 color3 color4 color5 color6 color7 color8 color9 colorN cpu_avg_samples default_bar_size default_color default_gauge_size default_graph_size default_outline_color default_shade_color diskio_avg_samples display double_buffer draw_borders draw_graph_borders draw_outline draw_shades extra_newline font format_human_readable gap_x gap_y if_up_strictness imap imlib_cache_flush_interval imlib_cache_size lua_draw_hook_post lua_draw_hook_pre lua_load lua_shutdown_hook lua_startup_hook mail_spool max_port_monitor_connections max_specials max_text_width max_user_text maximum_width minimum_size mpd_host mpd_password mpd_port music_player_interval net_avg_samples no_buffers out_to_console out_to_ncurses out_to_stderr out_to_x override_utf8_locale overwrite_file own_window own_window_class own_window_colour own_window_hints own_window_title own_window_transparent own_window_type pad_percents pop3 sensor_device short_units show_graph_range show_graph_scale stippled_borders temperature_unit template template0 template1 template2 template3 template4 template5 template6 template7 template8 template9 text text_buffer_size times_in_seconds top_cpu_separate top_name_width total_run_times update_interval update_interval_on_battery uppercase use_spacer use_xft xftalpha xftfont
|
syn keyword ConkyrcSetting alignment append_file background border_inner_margin border_outer_margin border_width color0 color1 color2 color3 color4 color5 color6 color7 color8 color9 colorN cpu_avg_samples default_bar_size default_color default_gauge_size default_graph_size default_outline_color default_shade_color diskio_avg_samples display double_buffer draw_borders draw_graph_borders draw_outline draw_shades extra_newline font format_human_readable gap_x gap_y if_up_strictness imap imlib_cache_flush_interval imlib_cache_size lua_draw_hook_post lua_draw_hook_pre lua_load lua_shutdown_hook lua_startup_hook mail_spool max_port_monitor_connections max_text_width max_user_text maximum_width minimum_size mpd_host mpd_password mpd_port music_player_interval mysql_host mysql_port mysql_user mysql_password mysql_db net_avg_samples no_buffers out_to_console out_to_ncurses out_to_stderr out_to_x override_utf8_locale overwrite_file own_window own_window_class own_window_colour own_window_hints own_window_title own_window_transparent own_window_type pad_percents pop3 sensor_device short_units show_graph_range show_graph_scale stippled_borders temperature_unit template template0 template1 template2 template3 template4 template5 template6 template7 template8 template9 text text_buffer_size times_in_seconds top_cpu_separate top_name_width total_run_times update_interval update_interval_on_battery uppercase use_spacer use_xft xftalpha xftfont
|
||||||
|
|
||||||
syn keyword ConkyrcConstant
|
syn keyword ConkyrcConstant
|
||||||
\ above
|
\ above
|
||||||
@ -50,7 +50,7 @@ syn region ConkyrcVar start=/\$\w\@=/ end=/\W\@=\|$/ contained contains=ConkyrcV
|
|||||||
|
|
||||||
syn match ConkyrcVarStuff /{\@<=/ms=s contained nextgroup=ConkyrcVarName
|
syn match ConkyrcVarStuff /{\@<=/ms=s contained nextgroup=ConkyrcVarName
|
||||||
|
|
||||||
syn keyword ConkyrcVarName contained nextgroup=ConkyrcNumber,ConkyrcColour skipwhite acpiacadapter acpifan acpitemp addr addrs alignc alignr apcupsd apcupsd_cable apcupsd_charge apcupsd_lastxfer apcupsd_linev apcupsd_load apcupsd_loadbar apcupsd_loadgauge apcupsd_loadgraph apcupsd_model apcupsd_name apcupsd_status apcupsd_temp apcupsd_timeleft apcupsd_upsmode apm_adapter apm_battery_life apm_battery_time audacious_bar audacious_bitrate audacious_channels audacious_filename audacious_frequency audacious_length audacious_length_seconds audacious_main_volume audacious_playlist_length audacious_playlist_position audacious_position audacious_position_seconds audacious_status audacious_title battery battery_bar battery_percent battery_short battery_time blink bmpx_album bmpx_artist bmpx_bitrate bmpx_title bmpx_track bmpx_uri buffers cached cmdline_to_pid color color0 color1 color2 color3 color4 color5 color6 color7 color8 color9 combine conky_build_arch conky_build_date conky_version cpu cpubar cpugauge cpugraph curl desktop desktop_name desktop_number disk_protect diskio diskio_read diskio_write diskiograph diskiograph_read diskiograph_write downspeed downspeedf downspeedgraph draft_mails else endif entropy_avail entropy_bar entropy_perc entropy_poolsize eval eve exec execbar execgauge execgraph execi execibar execigauge execigraph execp execpi flagged_mails font format_time forwarded_mails freq freq_g fs_bar fs_bar_free fs_free fs_free_perc fs_size fs_type fs_used fs_used_perc goto gw_iface gw_ip hddtemp head hr hwmon i2c i8k_ac_status i8k_bios i8k_buttons_status i8k_cpu_temp i8k_left_fan_rpm i8k_left_fan_status i8k_right_fan_rpm i8k_right_fan_status i8k_serial i8k_version ibm_brightness ibm_fan ibm_temps ibm_volume iconv_start iconv_stop if_empty if_existing if_gw if_match if_mixer_mute if_mounted if_mpd_playing if_running if_smapi_bat_installed if_up if_updatenr if_xmms2_connected image imap_messages imap_unseen include ioscheduler kernel laptop_mode lines loadavg loadgraph lua lua_bar lua_gauge lua_graph lua_parse machine mails mboxscan mem memwithbuffers membar memwithbuffersbar memeasyfree memfree memgauge memgraph memmax memperc mixer mixerbar mixerl mixerlbar mixerr mixerrbar moc_album moc_artist moc_bitrate moc_curtime moc_file moc_rate moc_song moc_state moc_timeleft moc_title moc_totaltime monitor monitor_number mpd_album mpd_artist mpd_bar mpd_bitrate mpd_elapsed mpd_file mpd_length mpd_name mpd_percent mpd_random mpd_repeat mpd_smart mpd_status mpd_title mpd_track mpd_vol nameserver new_mails nodename nvidia obsd_product obsd_sensors_fan obsd_sensors_temp obsd_sensors_volt obsd_vendor offset outlinecolor pb_battery pid_chroot pid_cmdline pid_cwd pid_environ pid_environ_list pid_exe pid_nice pid_openfiles pid_parent pid_priority pid_state pid_state_short pid_stderr pid_stdin pid_stdout pid_threads pid_thread_list pid_time_kernelmode pid_time_usermode pid_time pid_uid pid_euid pid_suid pid_fsuid pid_gid pid_egid pid_sgid pid_fsgid pid_read pid_vmpeak pid_vmsize pid_vmlck pid_vmhwm pid_vmrss pid_vmdata pid_vmstk pid_vmexe pid_vmlib pid_vmpte pid_write platform pop3_unseen pop3_used pre_exec processes read_tcp replied_mails rss running_processes running_threads scroll seen_mails shadecolor smapi smapi_bat_bar smapi_bat_perc smapi_bat_power smapi_bat_temp sony_fanspeed stippled_hr swap swapbar swapfree swapmax swapperc sysname tab tail tcp_portmon template0 template1 template2 template3 template4 template5 template6 template7 template8 template9 texeci texecpi threads time to_bytes top top_io top_mem top_time totaldown totalup trashed_mails tztime gid_name uid_name unflagged_mails unforwarded_mails unreplied_mails unseen_mails updates upspeed upspeedf upspeedgraph uptime uptime_short user_names user_number user_terms user_times user_time utime voffset voltage_mv voltage_v weather wireless_ap wireless_bitrate wireless_essid wireless_link_bar wireless_link_qual wireless_link_qual_max wireless_link_qual_perc wireless_mode words xmms2_album xmms2_artist xmms2_bar xmms2_bitrate xmms2_comment xmms2_date xmms2_duration xmms2_elapsed xmms2_genre xmms2_id xmms2_percent xmms2_playlist xmms2_size xmms2_smart xmms2_status xmms2_timesplayed xmms2_title xmms2_tracknr xmms2_url
|
syn keyword ConkyrcVarName contained nextgroup=ConkyrcNumber,ConkyrcColour skipwhite acpiacadapter acpifan acpitemp addr addrs alignc alignr apcupsd apcupsd_cable apcupsd_charge apcupsd_lastxfer apcupsd_linev apcupsd_load apcupsd_loadbar apcupsd_loadgauge apcupsd_loadgraph apcupsd_model apcupsd_name apcupsd_status apcupsd_temp apcupsd_timeleft apcupsd_upsmode apm_adapter apm_battery_life apm_battery_time audacious_bar audacious_bitrate audacious_channels audacious_filename audacious_frequency audacious_length audacious_length_seconds audacious_main_volume audacious_playlist_length audacious_playlist_position audacious_position audacious_position_seconds audacious_status audacious_title battery battery_bar battery_percent battery_short battery_time blink bmpx_album bmpx_artist bmpx_bitrate bmpx_title bmpx_track bmpx_uri buffers cached cmdline_to_pid color color0 color1 color2 color3 color4 color5 color6 color7 color8 color9 combine conky_build_arch conky_build_date conky_version cpu cpubar cpugauge cpugraph curl desktop desktop_name desktop_number disk_protect diskio diskio_read diskio_write diskiograph diskiograph_read diskiograph_write distribution downspeed downspeedf downspeedgraph draft_mails else endif entropy_avail entropy_bar entropy_perc entropy_poolsize eval eve exec execbar execgauge execgraph execi execibar execigauge execigraph execp execpi flagged_mails font format_time forwarded_mails freq freq_g fs_bar fs_bar_free fs_free fs_free_perc fs_size fs_type fs_used fs_used_perc goto gw_iface gw_ip hddtemp head hr hwmon i2c i8k_ac_status i8k_bios i8k_buttons_status i8k_cpu_temp i8k_left_fan_rpm i8k_left_fan_status i8k_right_fan_rpm i8k_right_fan_status i8k_serial i8k_version ibm_brightness ibm_fan ibm_temps ibm_volume iconv_start iconv_stop if_empty if_existing if_gw if_match if_mixer_mute if_mounted if_mpd_playing if_running if_smapi_bat_installed if_up if_updatenr if_xmms2_connected image imap_messages imap_unseen include ioscheduler kernel laptop_mode lines loadavg loadgraph lua lua_bar lua_gauge lua_graph lua_parse machine mails mboxscan mem memwithbuffers membar memwithbuffersbar memeasyfree memfree memgauge memgraph memmax memperc mixer mixerbar mixerl mixerlbar mixerr mixerrbar moc_album moc_artist moc_bitrate moc_curtime moc_file moc_rate moc_song moc_state moc_timeleft moc_title moc_totaltime monitor monitor_number mpd_album mpd_artist mpd_bar mpd_bitrate mpd_elapsed mpd_file mpd_length mpd_name mpd_percent mpd_random mpd_repeat mpd_smart mpd_status mpd_title mpd_track mpd_vol mysql nameserver new_mails nodename nodename_short no_update nvidia obsd_product obsd_sensors_fan obsd_sensors_temp obsd_sensors_volt obsd_vendor offset outlinecolor pb_battery pid_chroot pid_cmdline pid_cwd pid_environ pid_environ_list pid_exe pid_nice pid_openfiles pid_parent pid_priority pid_state pid_state_short pid_stderr pid_stdin pid_stdout pid_threads pid_thread_list pid_time_kernelmode pid_time_usermode pid_time pid_uid pid_euid pid_suid pid_fsuid pid_gid pid_egid pid_sgid pid_fsgid pid_read pid_vmpeak pid_vmsize pid_vmlck pid_vmhwm pid_vmrss pid_vmdata pid_vmstk pid_vmexe pid_vmlib pid_vmpte pid_write platform pop3_unseen pop3_used pre_exec processes read_tcp read_udp replied_mails rss running_processes running_threads scroll seen_mails shadecolor smapi smapi_bat_bar smapi_bat_perc smapi_bat_power smapi_bat_temp sony_fanspeed stippled_hr stock swap swapbar swapfree swapmax swapperc sysname tab tail tcp_portmon template0 template1 template2 template3 template4 template5 template6 template7 template8 template9 texeci texecpi threads time to_bytes top top_io top_mem top_time totaldown totalup trashed_mails tztime gid_name uid_name unflagged_mails unforwarded_mails unreplied_mails unseen_mails updates upspeed upspeedf upspeedgraph uptime uptime_short user_names user_number user_terms user_times user_time utime voffset voltage_mv voltage_v weather wireless_ap wireless_bitrate wireless_essid wireless_link_bar wireless_link_qual wireless_link_qual_max wireless_link_qual_perc wireless_mode words xmms2_album xmms2_artist xmms2_bar xmms2_bitrate xmms2_comment xmms2_date xmms2_duration xmms2_elapsed xmms2_genre xmms2_id xmms2_percent xmms2_playlist xmms2_size xmms2_smart xmms2_status xmms2_timesplayed xmms2_title xmms2_tracknr xmms2_url
|
||||||
|
|
||||||
hi def link ConkyrcComment Comment
|
hi def link ConkyrcComment Comment
|
||||||
hi def link ConkyrcSetting Keyword
|
hi def link ConkyrcSetting Keyword
|
||||||
|
@ -36,7 +36,7 @@ endif(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/build.h)
|
|||||||
|
|
||||||
set(conky_sources colours.cc combine.cc common.cc conky.cc core.cc
|
set(conky_sources colours.cc combine.cc common.cc conky.cc core.cc
|
||||||
diskio.cc entropy.cc exec.cc fs.cc mail.cc mixer.cc net_stat.cc template.cc
|
diskio.cc entropy.cc exec.cc fs.cc mail.cc mixer.cc net_stat.cc template.cc
|
||||||
mboxscan.cc read_tcp.cc scroll.cc specials.cc tailhead.cc
|
mboxscan.cc read_tcpip.cc scroll.cc specials.cc tailhead.cc
|
||||||
temphelper.cc text_object.cc timeinfo.cc top.cc algebra.cc prioqueue.cc proc.cc
|
temphelper.cc text_object.cc timeinfo.cc top.cc algebra.cc prioqueue.cc proc.cc
|
||||||
user.cc luamm.cc data-source.cc lua-config.cc setting.cc)
|
user.cc luamm.cc data-source.cc lua-config.cc setting.cc)
|
||||||
|
|
||||||
@ -93,6 +93,11 @@ if(BUILD_MPD)
|
|||||||
set(optional_sources ${optional_sources} ${mpd})
|
set(optional_sources ${optional_sources} ${mpd})
|
||||||
endif(BUILD_MPD)
|
endif(BUILD_MPD)
|
||||||
|
|
||||||
|
if(BUILD_MYSQL)
|
||||||
|
set(mysql mysql.cc)
|
||||||
|
set(optional_sources ${optional_sources} ${mysql})
|
||||||
|
endif(BUILD_MYSQL)
|
||||||
|
|
||||||
if(BUILD_MOC)
|
if(BUILD_MOC)
|
||||||
set(moc moc.cc)
|
set(moc moc.cc)
|
||||||
set(optional_sources ${optional_sources} ${moc})
|
set(optional_sources ${optional_sources} ${moc})
|
||||||
|
@ -72,6 +72,7 @@ void ccurl_free_locations(ccurl_location_list &locations)
|
|||||||
i != locations.end(); i++) {
|
i != locations.end(); i++) {
|
||||||
free_and_zero((*i)->uri);
|
free_and_zero((*i)->uri);
|
||||||
free_and_zero((*i)->result);
|
free_and_zero((*i)->result);
|
||||||
|
(*i)->p_timed_thread.reset();
|
||||||
}
|
}
|
||||||
locations.clear();
|
locations.clear();
|
||||||
}
|
}
|
||||||
@ -222,7 +223,10 @@ void curl_parse_arg(struct text_object *obj, const char *arg)
|
|||||||
NORM_ERR("wrong number of arguments for $curl");
|
NORM_ERR("wrong number of arguments for $curl");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
cd->interval = interval > 0 ? interval * 60 : 15*60;
|
if (argc == 1)
|
||||||
|
cd->interval = 15*60;
|
||||||
|
else
|
||||||
|
cd->interval = interval > 0 ? interval * 60 : update_interval;
|
||||||
obj->data.opaque = cd;
|
obj->data.opaque = cd;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -30,6 +30,7 @@
|
|||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
#include "conky.h"
|
#include "conky.h"
|
||||||
|
#include "core.h"
|
||||||
#include "fs.h"
|
#include "fs.h"
|
||||||
#include "logging.h"
|
#include "logging.h"
|
||||||
#include "net_stat.h"
|
#include "net_stat.h"
|
||||||
@ -458,6 +459,25 @@ void print_loadavg(struct text_object *obj, char *p, int p_max_size)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void scan_no_update(struct text_object *obj, const char *arg)
|
||||||
|
{
|
||||||
|
struct text_object subroot;
|
||||||
|
|
||||||
|
obj->data.s = (char*) malloc(text_buffer_size);
|
||||||
|
parse_conky_vars(&subroot, arg, obj->data.s, text_buffer_size);
|
||||||
|
obj->data.s = (char*) realloc(obj->data.s, strlen(obj->data.s) + 1);
|
||||||
|
free_text_objects(&subroot);
|
||||||
|
}
|
||||||
|
|
||||||
|
void free_no_update(struct text_object *obj) {
|
||||||
|
free(obj->data.s);
|
||||||
|
}
|
||||||
|
|
||||||
|
void print_no_update(struct text_object *obj, char *p, int p_max_size)
|
||||||
|
{
|
||||||
|
snprintf(p, p_max_size, "%s", obj->data.s);
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef BUILD_X11
|
#ifdef BUILD_X11
|
||||||
void scan_loadgraph_arg(struct text_object *obj, const char *arg)
|
void scan_loadgraph_arg(struct text_object *obj, const char *arg)
|
||||||
{
|
{
|
||||||
@ -567,6 +587,18 @@ void print_nodename(struct text_object *obj, char *p, int p_max_size)
|
|||||||
snprintf(p, p_max_size, "%s", info.uname_s.nodename);
|
snprintf(p, p_max_size, "%s", info.uname_s.nodename);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void print_nodename_short(struct text_object *obj, char *p, int p_max_size)
|
||||||
|
{
|
||||||
|
(void)obj;
|
||||||
|
snprintf(p, p_max_size, "%s", info.uname_s.nodename);
|
||||||
|
for(int i=0; p[i] != 0; i++) {
|
||||||
|
if(p[i] == '.') {
|
||||||
|
p[i] = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void print_sysname(struct text_object *obj, char *p, int p_max_size)
|
void print_sysname(struct text_object *obj, char *p, int p_max_size)
|
||||||
{
|
{
|
||||||
(void)obj;
|
(void)obj;
|
||||||
@ -787,6 +819,22 @@ void print_include(struct text_object *obj, char *p, int p_max_size)
|
|||||||
snprintf(p, p_max_size, "%s", &(buf[0]));
|
snprintf(p, p_max_size, "%s", &(buf[0]));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef BUILD_CURL
|
||||||
|
void print_stock(struct text_object *obj, char *p, int p_max_size)
|
||||||
|
{
|
||||||
|
if( ! obj->data.s) {
|
||||||
|
p[0] = 0;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
ccurl_process_info(p, p_max_size, obj->data.s, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void free_stock(struct text_object *obj)
|
||||||
|
{
|
||||||
|
free(obj->data.s);
|
||||||
|
}
|
||||||
|
#endif /* BUILD_CURL */
|
||||||
|
|
||||||
void print_to_bytes(struct text_object *obj, char *p, int p_max_size)
|
void print_to_bytes(struct text_object *obj, char *p, int p_max_size)
|
||||||
{
|
{
|
||||||
std::vector<char> buf(max_user_text);
|
std::vector<char> buf(max_user_text);
|
||||||
|
11
src/common.h
11
src/common.h
@ -34,6 +34,8 @@
|
|||||||
#include "text_object.h"
|
#include "text_object.h"
|
||||||
#include "setting.hh"
|
#include "setting.hh"
|
||||||
|
|
||||||
|
char* readfile(const char* filename, int* total_read, char showerror);
|
||||||
|
|
||||||
void print_to_bytes(struct text_object *, char *, int);
|
void print_to_bytes(struct text_object *, char *, int);
|
||||||
|
|
||||||
void add_update_callback(void (*func)(void));
|
void add_update_callback(void (*func)(void));
|
||||||
@ -87,6 +89,10 @@ int get_battery_perct(const char *bat);
|
|||||||
double get_battery_perct_bar(struct text_object *);
|
double get_battery_perct_bar(struct text_object *);
|
||||||
void get_battery_short_status(char *buf, unsigned int n, const char *bat);
|
void get_battery_short_status(char *buf, unsigned int n, const char *bat);
|
||||||
|
|
||||||
|
void scan_no_update(struct text_object *, const char *);
|
||||||
|
void print_no_update(struct text_object *, char *, int);
|
||||||
|
void free_no_update(struct text_object *);
|
||||||
|
|
||||||
void scan_loadavg_arg(struct text_object *, const char *);
|
void scan_loadavg_arg(struct text_object *, const char *);
|
||||||
void print_loadavg(struct text_object *, char *, int);
|
void print_loadavg(struct text_object *, char *, int);
|
||||||
#ifdef BUILD_X11
|
#ifdef BUILD_X11
|
||||||
@ -114,6 +120,7 @@ double swap_barval(struct text_object *);
|
|||||||
void print_kernel(struct text_object *, char *, int);
|
void print_kernel(struct text_object *, char *, int);
|
||||||
void print_machine(struct text_object *, char *, int);
|
void print_machine(struct text_object *, char *, int);
|
||||||
void print_nodename(struct text_object *, char *, int);
|
void print_nodename(struct text_object *, char *, int);
|
||||||
|
void print_nodename_short(struct text_object *, char *, int);
|
||||||
void print_sysname(struct text_object *, char *, int);
|
void print_sysname(struct text_object *, char *, int);
|
||||||
|
|
||||||
void print_uptime(struct text_object *, char *, int);
|
void print_uptime(struct text_object *, char *, int);
|
||||||
@ -156,4 +163,8 @@ void print_include(struct text_object *, char *, int);
|
|||||||
void print_updates(struct text_object *, char *, int);
|
void print_updates(struct text_object *, char *, int);
|
||||||
int updatenr_iftest(struct text_object *);
|
int updatenr_iftest(struct text_object *);
|
||||||
|
|
||||||
|
#ifdef BUILD_CURL
|
||||||
|
void print_stock(struct text_object *, char *, int);
|
||||||
|
void free_stock(struct text_object *);
|
||||||
|
#endif /* BUILD_CURL */
|
||||||
#endif /* _COMMON_H */
|
#endif /* _COMMON_H */
|
||||||
|
369
src/conky.cc
369
src/conky.cc
@ -99,6 +99,9 @@
|
|||||||
#include "template.h"
|
#include "template.h"
|
||||||
#include "timeinfo.h"
|
#include "timeinfo.h"
|
||||||
#include "top.h"
|
#include "top.h"
|
||||||
|
#ifdef BUILD_MYSQL
|
||||||
|
#include "mysql.h"
|
||||||
|
#endif /* BUILD_MYSQL */
|
||||||
|
|
||||||
#include "lua-config.hh"
|
#include "lua-config.hh"
|
||||||
#include "setting.hh"
|
#include "setting.hh"
|
||||||
@ -323,6 +326,8 @@ struct information info;
|
|||||||
/* path to config file */
|
/* path to config file */
|
||||||
std::string current_config;
|
std::string current_config;
|
||||||
|
|
||||||
|
bool stdinconfig = false;
|
||||||
|
|
||||||
/* 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 conky::simple_config_setting<bool> stuff_in_uppercase("uppercase", false, true);
|
static conky::simple_config_setting<bool> stuff_in_uppercase("uppercase", false, true);
|
||||||
|
|
||||||
@ -857,6 +862,7 @@ int get_string_width(const char *s)
|
|||||||
static int get_string_width_special(char *s, int special_index)
|
static int get_string_width_special(char *s, int special_index)
|
||||||
{
|
{
|
||||||
char *p, *final;
|
char *p, *final;
|
||||||
|
special_t *current = specials;
|
||||||
int idx = 1;
|
int idx = 1;
|
||||||
int width = 0;
|
int width = 0;
|
||||||
long i;
|
long i;
|
||||||
@ -870,6 +876,11 @@ static int get_string_width_special(char *s, int special_index)
|
|||||||
p = strndup(s, text_buffer_size);
|
p = strndup(s, text_buffer_size);
|
||||||
final = p;
|
final = p;
|
||||||
|
|
||||||
|
for(i = 0; i < special_index; i++)
|
||||||
|
current = current->next;
|
||||||
|
for(i = 0; i < idx; i++)
|
||||||
|
current = current->next;
|
||||||
|
|
||||||
while (*p) {
|
while (*p) {
|
||||||
if (*p == SPECIAL_CHAR) {
|
if (*p == SPECIAL_CHAR) {
|
||||||
/* shift everything over by 1 so that the special char
|
/* shift everything over by 1 so that the special char
|
||||||
@ -877,12 +888,13 @@ static int get_string_width_special(char *s, int special_index)
|
|||||||
for (i = 0; i < (long)strlen(p); i++) {
|
for (i = 0; i < (long)strlen(p); i++) {
|
||||||
*(p + i) = *(p + i + 1);
|
*(p + i) = *(p + i + 1);
|
||||||
}
|
}
|
||||||
if (specials[special_index + idx].type == GRAPH
|
if (current->type == GRAPH
|
||||||
|| specials[special_index + idx].type == GAUGE
|
|| current->type == GAUGE
|
||||||
|| specials[special_index + idx].type == BAR) {
|
|| current->type == BAR) {
|
||||||
width += specials[special_index + idx].width;
|
width += current->width;
|
||||||
}
|
}
|
||||||
idx++;
|
idx++;
|
||||||
|
current = current->next;
|
||||||
} else if (*p == SECRIT_MULTILINE_CHAR) {
|
} else if (*p == SECRIT_MULTILINE_CHAR) {
|
||||||
*p = 0;
|
*p = 0;
|
||||||
break;
|
break;
|
||||||
@ -966,10 +978,12 @@ static void update_text_area(void)
|
|||||||
if (own_window.get(*state) && !fixed_pos) {
|
if (own_window.get(*state) && !fixed_pos) {
|
||||||
x += workarea[0];
|
x += workarea[0];
|
||||||
y += workarea[1];
|
y += workarea[1];
|
||||||
text_start_x = window.border_inner_margin + window.border_outer_margin + window.border_width;
|
|
||||||
text_start_y = window.border_inner_margin + window.border_outer_margin + window.border_width;
|
long border_total = window.border_inner_margin
|
||||||
window.x = x - window.border_inner_margin - window.border_outer_margin - window.border_width;
|
+ window.border_outer_margin + window.border_width;
|
||||||
window.y = y - window.border_inner_margin - window.border_outer_margin - window.border_width;
|
text_start_x = text_start_y = border_total;
|
||||||
|
window.x = x - border_total;
|
||||||
|
window.y = y - border_total;
|
||||||
} else
|
} else
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
@ -1005,6 +1019,10 @@ static int text_size_updater(char *s, int special_index)
|
|||||||
int lw;
|
int lw;
|
||||||
int contain_SECRIT_MULTILINE_CHAR = 0;
|
int contain_SECRIT_MULTILINE_CHAR = 0;
|
||||||
char *p;
|
char *p;
|
||||||
|
special_t *current = specials;
|
||||||
|
|
||||||
|
for(int i = 0; i < special_index; i++)
|
||||||
|
current = current->next;
|
||||||
|
|
||||||
if (not out_to_x.get(*state))
|
if (not out_to_x.get(*state))
|
||||||
return 0;
|
return 0;
|
||||||
@ -1016,40 +1034,41 @@ static int text_size_updater(char *s, int special_index)
|
|||||||
w += get_string_width(s);
|
w += get_string_width(s);
|
||||||
*p = SPECIAL_CHAR;
|
*p = SPECIAL_CHAR;
|
||||||
|
|
||||||
if (specials[special_index].type == BAR
|
if (current->type == BAR
|
||||||
|| specials[special_index].type == GAUGE
|
|| current->type == GAUGE
|
||||||
|| specials[special_index].type == GRAPH) {
|
|| current->type == GRAPH) {
|
||||||
w += specials[special_index].width;
|
w += current->width;
|
||||||
if (specials[special_index].height > last_font_height) {
|
if (current->height > last_font_height) {
|
||||||
last_font_height = specials[special_index].height;
|
last_font_height = current->height;
|
||||||
last_font_height += font_height();
|
last_font_height += font_height();
|
||||||
}
|
}
|
||||||
} else if (specials[special_index].type == OFFSET) {
|
} else if (current->type == OFFSET) {
|
||||||
if (specials[special_index].arg > 0) {
|
if (current->arg > 0) {
|
||||||
w += specials[special_index].arg;
|
w += current->arg;
|
||||||
}
|
}
|
||||||
} else if (specials[special_index].type == VOFFSET) {
|
} else if (current->type == VOFFSET) {
|
||||||
last_font_height += specials[special_index].arg;
|
last_font_height += current->arg;
|
||||||
} else if (specials[special_index].type == GOTO) {
|
} else if (current->type == GOTO) {
|
||||||
if (specials[special_index].arg > cur_x) {
|
if (current->arg > cur_x) {
|
||||||
w = (int) specials[special_index].arg;
|
w = (int) current->arg;
|
||||||
}
|
}
|
||||||
} else if (specials[special_index].type == TAB) {
|
} else if (current->type == TAB) {
|
||||||
int start = specials[special_index].arg;
|
int start = current->arg;
|
||||||
int step = specials[special_index].width;
|
int step = current->width;
|
||||||
|
|
||||||
if (!step || step < 0) {
|
if (!step || step < 0) {
|
||||||
step = 10;
|
step = 10;
|
||||||
}
|
}
|
||||||
w += step - (cur_x - text_start_x - start) % step;
|
w += step - (cur_x - text_start_x - start) % step;
|
||||||
} else if (specials[special_index].type == FONT) {
|
} else if (current->type == FONT) {
|
||||||
selected_font = specials[special_index].font_added;
|
selected_font = current->font_added;
|
||||||
if (font_height() > last_font_height) {
|
if (font_height() > last_font_height) {
|
||||||
last_font_height = font_height();
|
last_font_height = font_height();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
special_index++;
|
special_index++;
|
||||||
|
current = current->next;
|
||||||
s = p + 1;
|
s = p + 1;
|
||||||
} else if (*p == SECRIT_MULTILINE_CHAR) {
|
} else if (*p == SECRIT_MULTILINE_CHAR) {
|
||||||
contain_SECRIT_MULTILINE_CHAR = 1;
|
contain_SECRIT_MULTILINE_CHAR = 1;
|
||||||
@ -1265,11 +1284,14 @@ int draw_each_line_inner(char *s, int special_index, int last_special_applied)
|
|||||||
s = p + 1;
|
s = p + 1;
|
||||||
}
|
}
|
||||||
/* draw special */
|
/* draw special */
|
||||||
switch (specials[special_index].type) {
|
special_t *current = specials;
|
||||||
|
for(int i = 0; i < special_index; i++)
|
||||||
|
current = current->next;
|
||||||
|
switch (current->type) {
|
||||||
#ifdef BUILD_X11
|
#ifdef BUILD_X11
|
||||||
case HORIZONTAL_LINE:
|
case HORIZONTAL_LINE:
|
||||||
{
|
{
|
||||||
int h = specials[special_index].height;
|
int h = current->height;
|
||||||
int mid = font_ascent() / 2;
|
int mid = font_ascent() / 2;
|
||||||
|
|
||||||
w = text_start_x + text_width - cur_x;
|
w = text_start_x + text_width - cur_x;
|
||||||
@ -1283,8 +1305,8 @@ int draw_each_line_inner(char *s, int special_index, int last_special_applied)
|
|||||||
|
|
||||||
case STIPPLED_HR:
|
case STIPPLED_HR:
|
||||||
{
|
{
|
||||||
int h = specials[special_index].height;
|
int h = current->height;
|
||||||
char tmp_s = specials[special_index].arg;
|
char tmp_s = current->arg;
|
||||||
int mid = font_ascent() / 2;
|
int mid = font_ascent() / 2;
|
||||||
char ss[2] = { tmp_s, tmp_s };
|
char ss[2] = { tmp_s, tmp_s };
|
||||||
|
|
||||||
@ -1305,15 +1327,15 @@ int draw_each_line_inner(char *s, int special_index, int last_special_applied)
|
|||||||
&& maximum_width > 0) {
|
&& maximum_width > 0) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
h = specials[special_index].height;
|
h = current->height;
|
||||||
bar_usage = specials[special_index].arg;
|
bar_usage = current->arg;
|
||||||
scale = specials[special_index].scale;
|
scale = current->scale;
|
||||||
by = cur_y - (font_ascent() / 2) - 1;
|
by = cur_y - (font_ascent() / 2) - 1;
|
||||||
|
|
||||||
if (h < font_h) {
|
if (h < font_h) {
|
||||||
by -= h / 2 - 1;
|
by -= h / 2 - 1;
|
||||||
}
|
}
|
||||||
w = specials[special_index].width;
|
w = current->width;
|
||||||
if (w == 0) {
|
if (w == 0) {
|
||||||
w = text_start_x + text_width - cur_x - 1;
|
w = text_start_x + text_width - cur_x - 1;
|
||||||
}
|
}
|
||||||
@ -1349,13 +1371,13 @@ int draw_each_line_inner(char *s, int special_index, int last_special_applied)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
h = specials[special_index].height;
|
h = current->height;
|
||||||
by = cur_y - (font_ascent() / 2) - 1;
|
by = cur_y - (font_ascent() / 2) - 1;
|
||||||
|
|
||||||
if (h < font_h) {
|
if (h < font_h) {
|
||||||
by -= h / 2 - 1;
|
by -= h / 2 - 1;
|
||||||
}
|
}
|
||||||
w = specials[special_index].width;
|
w = current->width;
|
||||||
if (w == 0) {
|
if (w == 0) {
|
||||||
w = text_start_x + text_width - cur_x - 1;
|
w = text_start_x + text_width - cur_x - 1;
|
||||||
}
|
}
|
||||||
@ -1370,8 +1392,8 @@ int draw_each_line_inner(char *s, int special_index, int last_special_applied)
|
|||||||
cur_x, by, w, h * 2, 0, 180*64);
|
cur_x, by, w, h * 2, 0, 180*64);
|
||||||
|
|
||||||
#ifdef MATH
|
#ifdef MATH
|
||||||
usage = specials[special_index].arg;
|
usage = current->arg;
|
||||||
scale = specials[special_index].scale;
|
scale = current->scale;
|
||||||
angle = M_PI * usage / scale;
|
angle = M_PI * usage / scale;
|
||||||
px = (float)(cur_x+(w/2.))-(float)(w/2.)*cos(angle);
|
px = (float)(cur_x+(w/2.))-(float)(w/2.)*cos(angle);
|
||||||
py = (float)(by+(h))-(float)(h)*sin(angle);
|
py = (float)(by+(h))-(float)(h)*sin(angle);
|
||||||
@ -1401,13 +1423,13 @@ int draw_each_line_inner(char *s, int special_index, int last_special_applied)
|
|||||||
&& maximum_width > 0) {
|
&& maximum_width > 0) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
h = specials[special_index].height;
|
h = current->height;
|
||||||
by = cur_y - (font_ascent() / 2) - 1;
|
by = cur_y - (font_ascent() / 2) - 1;
|
||||||
|
|
||||||
if (h < font_h) {
|
if (h < font_h) {
|
||||||
by -= h / 2 - 1;
|
by -= h / 2 - 1;
|
||||||
}
|
}
|
||||||
w = specials[special_index].width;
|
w = current->width;
|
||||||
if (w == 0) {
|
if (w == 0) {
|
||||||
w = text_start_x + text_width - cur_x - 1;
|
w = text_start_x + text_width - cur_x - 1;
|
||||||
}
|
}
|
||||||
@ -1423,37 +1445,37 @@ int draw_each_line_inner(char *s, int special_index, int last_special_applied)
|
|||||||
XSetLineAttributes(display, window.gc, 1, LineSolid,
|
XSetLineAttributes(display, window.gc, 1, LineSolid,
|
||||||
CapButt, JoinMiter);
|
CapButt, JoinMiter);
|
||||||
|
|
||||||
if (specials[special_index].last_colour != 0
|
if (current->last_colour != 0
|
||||||
|| specials[special_index].first_colour != 0) {
|
|| current->first_colour != 0) {
|
||||||
tmpcolour = do_gradient(w - 1, specials[special_index].last_colour, specials[special_index].first_colour);
|
tmpcolour = do_gradient(w - 1, current->last_colour, current->first_colour);
|
||||||
}
|
}
|
||||||
colour_idx = 0;
|
colour_idx = 0;
|
||||||
for (i = w - 2; i > -1; i--) {
|
for (i = w - 2; i > -1; i--) {
|
||||||
if (specials[special_index].last_colour != 0
|
if (current->last_colour != 0
|
||||||
|| specials[special_index].first_colour != 0) {
|
|| current->first_colour != 0) {
|
||||||
if (specials[special_index].tempgrad) {
|
if (current->tempgrad) {
|
||||||
#ifdef DEBUG_lol
|
#ifdef DEBUG_lol
|
||||||
assert(
|
assert(
|
||||||
(int)((float)(w - 2) - specials[special_index].graph[j] *
|
(int)((float)(w - 2) - current->graph[j] *
|
||||||
(w - 2) / (float)specials[special_index].scale)
|
(w - 2) / (float)current->scale)
|
||||||
< w - 1
|
< w - 1
|
||||||
);
|
);
|
||||||
assert(
|
assert(
|
||||||
(int)((float)(w - 2) - specials[special_index].graph[j] *
|
(int)((float)(w - 2) - current->graph[j] *
|
||||||
(w - 2) / (float)specials[special_index].scale)
|
(w - 2) / (float)current->scale)
|
||||||
> -1
|
> -1
|
||||||
);
|
);
|
||||||
if (specials[special_index].graph[j] == specials[special_index].scale) {
|
if (current->graph[j] == current->scale) {
|
||||||
assert(
|
assert(
|
||||||
(int)((float)(w - 2) - specials[special_index].graph[j] *
|
(int)((float)(w - 2) - current->graph[j] *
|
||||||
(w - 2) / (float)specials[special_index].scale)
|
(w - 2) / (float)current->scale)
|
||||||
== 0
|
== 0
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
#endif /* DEBUG_lol */
|
#endif /* DEBUG_lol */
|
||||||
XSetForeground(display, window.gc, tmpcolour[
|
XSetForeground(display, window.gc, tmpcolour[
|
||||||
(int)((float)(w - 2) - specials[special_index].graph[j] *
|
(int)((float)(w - 2) - current->graph[j] *
|
||||||
(w - 2) / (float)specials[special_index].scale)
|
(w - 2) / (float)current->scale)
|
||||||
]);
|
]);
|
||||||
} else {
|
} else {
|
||||||
XSetForeground(display, window.gc, tmpcolour[colour_idx++]);
|
XSetForeground(display, window.gc, tmpcolour[colour_idx++]);
|
||||||
@ -1462,10 +1484,10 @@ int draw_each_line_inner(char *s, int special_index, int last_special_applied)
|
|||||||
/* this is mugfugly, but it works */
|
/* this is mugfugly, but it works */
|
||||||
XDrawLine(display, window.drawable, window.gc,
|
XDrawLine(display, window.drawable, window.gc,
|
||||||
cur_x + i + 1, by + h, cur_x + i + 1,
|
cur_x + i + 1, by + h, cur_x + i + 1,
|
||||||
round_to_int((double)by + h - specials[special_index].graph[j] *
|
round_to_int((double)by + h - current->graph[j] *
|
||||||
(h - 1) / specials[special_index].scale));
|
(h - 1) / current->scale));
|
||||||
if ((w - i) / ((float) (w - 2) /
|
if ((w - i) / ((float) (w - 2) /
|
||||||
(specials[special_index].graph_width)) > j
|
(current->graph_width)) > j
|
||||||
&& j < MAX_GRAPH_DEPTH - 3) {
|
&& j < MAX_GRAPH_DEPTH - 3) {
|
||||||
j++;
|
j++;
|
||||||
}
|
}
|
||||||
@ -1519,16 +1541,16 @@ int draw_each_line_inner(char *s, int special_index, int last_special_applied)
|
|||||||
cur_y = tmp_y;
|
cur_y = tmp_y;
|
||||||
}
|
}
|
||||||
#ifdef MATH
|
#ifdef MATH
|
||||||
if (show_graph_scale.get(*state) && (specials[special_index].show_scale == 1)) {
|
if (show_graph_scale.get(*state) && (current->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;
|
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 *)
|
||||||
calloc(log10(floor(specials[special_index].scale)) + 4,
|
calloc(log10(floor(current->scale)) + 4,
|
||||||
sizeof(char));
|
sizeof(char));
|
||||||
sprintf(tmp_str, "%.1f", specials[special_index].scale);
|
sprintf(tmp_str, "%.1f", current->scale);
|
||||||
draw_string(tmp_str);
|
draw_string(tmp_str);
|
||||||
free(tmp_str);
|
free(tmp_str);
|
||||||
cur_x = tmp_x;
|
cur_x = tmp_x;
|
||||||
@ -1544,7 +1566,7 @@ int draw_each_line_inner(char *s, int special_index, int last_special_applied)
|
|||||||
int old = font_ascent();
|
int old = font_ascent();
|
||||||
|
|
||||||
cur_y -= font_ascent();
|
cur_y -= font_ascent();
|
||||||
selected_font = specials[special_index].font_added;
|
selected_font = current->font_added;
|
||||||
set_font();
|
set_font();
|
||||||
if (cur_y + font_ascent() < cur_y + old) {
|
if (cur_y + font_ascent() < cur_y + old) {
|
||||||
cur_y += old;
|
cur_y += old;
|
||||||
@ -1557,43 +1579,43 @@ int draw_each_line_inner(char *s, int special_index, int last_special_applied)
|
|||||||
#endif /* BUILD_X11 */
|
#endif /* BUILD_X11 */
|
||||||
case FG:
|
case FG:
|
||||||
if (draw_mode == FG) {
|
if (draw_mode == FG) {
|
||||||
set_foreground_color(specials[special_index].arg);
|
set_foreground_color(current->arg);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
#ifdef BUILD_X11
|
#ifdef BUILD_X11
|
||||||
case BG:
|
case BG:
|
||||||
if (draw_mode == BG) {
|
if (draw_mode == BG) {
|
||||||
set_foreground_color(specials[special_index].arg);
|
set_foreground_color(current->arg);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case OUTLINE:
|
case OUTLINE:
|
||||||
if (draw_mode == OUTLINE) {
|
if (draw_mode == OUTLINE) {
|
||||||
set_foreground_color(specials[special_index].arg);
|
set_foreground_color(current->arg);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case OFFSET:
|
case OFFSET:
|
||||||
w += specials[special_index].arg;
|
w += current->arg;
|
||||||
last_special_needed = special_index;
|
last_special_needed = special_index;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case VOFFSET:
|
case VOFFSET:
|
||||||
cur_y += specials[special_index].arg;
|
cur_y += current->arg;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case GOTO:
|
case GOTO:
|
||||||
if (specials[special_index].arg >= 0) {
|
if (current->arg >= 0) {
|
||||||
cur_x = (int) specials[special_index].arg;
|
cur_x = (int) current->arg;
|
||||||
}
|
}
|
||||||
last_special_needed = special_index;
|
last_special_needed = special_index;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TAB:
|
case TAB:
|
||||||
{
|
{
|
||||||
int start = specials[special_index].arg;
|
int start = current->arg;
|
||||||
int step = specials[special_index].width;
|
int step = current->width;
|
||||||
|
|
||||||
if (!step || step < 0) {
|
if (!step || step < 0) {
|
||||||
step = 10;
|
step = 10;
|
||||||
@ -1612,13 +1634,13 @@ int draw_each_line_inner(char *s, int special_index, int last_special_applied)
|
|||||||
|
|
||||||
/* 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 "
|
||||||
"specials[special_index].arg %i window.border_inner_margin %i "
|
"current->arg %i window.border_inner_margin %i "
|
||||||
"window.border_width %i\n", pos_x, text_start_x, text_width,
|
"window.border_width %i\n", pos_x, text_start_x, text_width,
|
||||||
cur_x, get_string_width_special(s), gap_x,
|
cur_x, get_string_width_special(s), gap_x,
|
||||||
specials[special_index].arg, window.border_inner_margin,
|
current->arg, window.border_inner_margin,
|
||||||
window.border_width); */
|
window.border_width); */
|
||||||
if (pos_x > specials[special_index].arg && pos_x > cur_x) {
|
if (pos_x > current->arg && pos_x > cur_x) {
|
||||||
cur_x = pos_x - specials[special_index].arg;
|
cur_x = pos_x - current->arg;
|
||||||
}
|
}
|
||||||
last_special_needed = special_index;
|
last_special_needed = special_index;
|
||||||
break;
|
break;
|
||||||
@ -1634,11 +1656,11 @@ int draw_each_line_inner(char *s, int special_index, int last_special_applied)
|
|||||||
|
|
||||||
/* 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 "
|
||||||
"specials[special_index].arg %i\n", pos_x, text_start_x,
|
"current->arg %i\n", pos_x, text_start_x,
|
||||||
text_width, cur_x, get_string_width(s), gap_x,
|
text_width, cur_x, get_string_width(s), gap_x,
|
||||||
specials[special_index].arg); */
|
current->arg); */
|
||||||
if (pos_x > specials[special_index].arg) {
|
if (pos_x > current->arg) {
|
||||||
w = pos_x - specials[special_index].arg;
|
w = pos_x - current->arg;
|
||||||
}
|
}
|
||||||
last_special_needed = special_index;
|
last_special_needed = special_index;
|
||||||
break;
|
break;
|
||||||
@ -1818,10 +1840,12 @@ static void clear_text(int exposures)
|
|||||||
#endif
|
#endif
|
||||||
if (display && window.window) { // make sure these are !null
|
if (display && window.window) { // make sure these are !null
|
||||||
/* there is some extra space for borders and outlines */
|
/* there is some extra space for borders and outlines */
|
||||||
XClearArea(display, window.window, text_start_x - window.border_inner_margin - window.border_outer_margin - window.border_width,
|
long border_total = window.border_inner_margin
|
||||||
text_start_y - window.border_inner_margin - window.border_outer_margin - window.border_width,
|
+ window.border_outer_margin + window.border_width;
|
||||||
text_width + window.border_inner_margin * 2 + window.border_outer_margin * 2 + window.border_width * 2,
|
|
||||||
text_height + window.border_inner_margin * 2 + window.border_outer_margin * 2 + window.border_width * 2, exposures ? True : 0);
|
XClearArea(display, window.window, text_start_x - border_total,
|
||||||
|
text_start_y - border_total, text_width + 2*border_total,
|
||||||
|
text_height + 2*border_total, exposures ? True : 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif /* BUILD_X11 */
|
#endif /* BUILD_X11 */
|
||||||
@ -1938,16 +1962,21 @@ static void main_loop(void)
|
|||||||
need_to_update = 0;
|
need_to_update = 0;
|
||||||
selected_font = 0;
|
selected_font = 0;
|
||||||
update_text_area();
|
update_text_area();
|
||||||
|
|
||||||
|
#if defined(OWN_WINDOW) || defined(BUILD_XDBE)
|
||||||
|
long border_total = window.border_inner_margin
|
||||||
|
+ window.border_outer_margin + window.border_width;
|
||||||
|
#endif
|
||||||
#ifdef OWN_WINDOW
|
#ifdef OWN_WINDOW
|
||||||
if (own_window.get(*state)) {
|
if (own_window.get(*state)) {
|
||||||
int changed = 0;
|
int changed = 0;
|
||||||
|
|
||||||
/* resize window if it isn't right size */
|
/* resize window if it isn't right size */
|
||||||
if (!fixed_size
|
if (!fixed_size
|
||||||
&& (text_width + window.border_inner_margin * 2 + window.border_outer_margin * 2 + window.border_width * 2 != window.width
|
&& (text_width + 2*border_total != window.width
|
||||||
|| text_height + window.border_inner_margin * 2 + window.border_outer_margin * 2 + window.border_width * 2 != window.height)) {
|
|| text_height + 2*border_total != window.height)) {
|
||||||
window.width = text_width + window.border_inner_margin * 2 + window.border_outer_margin * 2 + window.border_width * 2;
|
window.width = text_width + 2*border_total;
|
||||||
window.height = text_height + window.border_inner_margin * 2 + window.border_outer_margin * 2 + window.border_width * 2;
|
window.height = text_height + 2*border_total;
|
||||||
draw_stuff(); /* redraw everything in our newly sized window */
|
draw_stuff(); /* redraw everything in our newly sized window */
|
||||||
XResizeWindow(display, window.window, window.width,
|
XResizeWindow(display, window.window, window.width,
|
||||||
window.height); /* resize window */
|
window.height); /* resize window */
|
||||||
@ -2017,10 +2046,10 @@ static void main_loop(void)
|
|||||||
if (use_xdbe) {
|
if (use_xdbe) {
|
||||||
XRectangle r;
|
XRectangle r;
|
||||||
|
|
||||||
r.x = text_start_x - window.border_inner_margin - window.border_outer_margin - window.border_width;
|
r.x = text_start_x - border_total;
|
||||||
r.y = text_start_y - window.border_inner_margin - window.border_outer_margin - window.border_width;
|
r.y = text_start_y - border_total;
|
||||||
r.width = text_width + window.border_inner_margin * 2 + window.border_outer_margin * 2 + window.border_width * 2;
|
r.width = text_width + 2*border_total;
|
||||||
r.height = text_height + window.border_inner_margin * 2 + window.border_outer_margin * 2 + window.border_width * 2;
|
r.height = text_height + 2*border_total;
|
||||||
XUnionRectWithRegion(&r, x11_stuff.region, x11_stuff.region);
|
XUnionRectWithRegion(&r, x11_stuff.region, x11_stuff.region);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@ -2176,10 +2205,12 @@ static void main_loop(void)
|
|||||||
if (use_xdbe) {
|
if (use_xdbe) {
|
||||||
XRectangle r;
|
XRectangle r;
|
||||||
|
|
||||||
r.x = text_start_x - window.border_inner_margin - window.border_outer_margin - window.border_width;
|
long border_total = window.border_inner_margin
|
||||||
r.y = text_start_y - window.border_inner_margin - window.border_outer_margin - window.border_width;
|
+ window.border_outer_margin + window.border_width;
|
||||||
r.width = text_width + window.border_inner_margin * 2 + window.border_outer_margin * 2 + window.border_width * 2;
|
r.x = text_start_x - border_total;
|
||||||
r.height = text_height + window.border_inner_margin * 2 + window.border_outer_margin * 2 + window.border_width * 2;
|
r.y = text_start_y - border_total;
|
||||||
|
r.width = text_width + 2*border_total;
|
||||||
|
r.height = text_height + 2*border_total;
|
||||||
XUnionRectWithRegion(&r, x11_stuff.region, x11_stuff.region);
|
XUnionRectWithRegion(&r, x11_stuff.region, x11_stuff.region);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@ -2329,10 +2360,41 @@ static void reload_config(void)
|
|||||||
initialisation(argc_copy, argv_copy);
|
initialisation(argc_copy, argv_copy);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef BUILD_X11
|
||||||
|
void clean_up_x11() {
|
||||||
|
if(window_created == 1) {
|
||||||
|
long border_total = window.border_inner_margin
|
||||||
|
+ window.border_outer_margin + window.border_width;
|
||||||
|
XClearArea(display, window.window, text_start_x - border_total,
|
||||||
|
text_start_y - border_total, text_width + 2*border_total,
|
||||||
|
text_height + 2*border_total, 0);
|
||||||
|
}
|
||||||
|
destroy_window();
|
||||||
|
free_fonts();
|
||||||
|
if(x11_stuff.region) {
|
||||||
|
XDestroyRegion(x11_stuff.region);
|
||||||
|
x11_stuff.region = NULL;
|
||||||
|
}
|
||||||
|
if(display) {
|
||||||
|
XCloseDisplay(display);
|
||||||
|
display = NULL;
|
||||||
|
}
|
||||||
|
x_initialised = NO;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void free_specials(special_t *current) {
|
||||||
|
if (current) {
|
||||||
|
free_specials(current->next);
|
||||||
|
if(current->type == GRAPH)
|
||||||
|
free(current->graph);
|
||||||
|
delete current;
|
||||||
|
current = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void clean_up(void *memtofree1, void* memtofree2)
|
void clean_up(void *memtofree1, void* memtofree2)
|
||||||
{
|
{
|
||||||
int i;
|
|
||||||
|
|
||||||
free_update_callbacks();
|
free_update_callbacks();
|
||||||
|
|
||||||
#ifdef BUILD_NCURSES
|
#ifdef BUILD_NCURSES
|
||||||
@ -2349,19 +2411,7 @@ void clean_up(void *memtofree1, void* memtofree2)
|
|||||||
free_and_zero(info.cpu_usage);
|
free_and_zero(info.cpu_usage);
|
||||||
#ifdef BUILD_X11
|
#ifdef BUILD_X11
|
||||||
if (x_initialised == YES) {
|
if (x_initialised == YES) {
|
||||||
if(window_created == 1) {
|
clean_up_x11();
|
||||||
XClearArea(display, window.window, text_start_x - window.border_inner_margin - window.border_outer_margin - window.border_width,
|
|
||||||
text_start_y - window.border_inner_margin - window.border_outer_margin - window.border_width,
|
|
||||||
text_width + window.border_inner_margin * 2 + window.border_outer_margin * 2 + window.border_width * 2,
|
|
||||||
text_height + window.border_inner_margin * 2 + window.border_outer_margin * 2 + window.border_width * 2, 0);
|
|
||||||
}
|
|
||||||
destroy_window();
|
|
||||||
free_fonts();
|
|
||||||
if(x11_stuff.region) {
|
|
||||||
XDestroyRegion(x11_stuff.region);
|
|
||||||
x11_stuff.region = NULL;
|
|
||||||
}
|
|
||||||
x_initialised = NO;
|
|
||||||
}else{
|
}else{
|
||||||
free(fonts); //in set_default_configurations a font is set but not loaded
|
free(fonts); //in set_default_configurations a font is set but not loaded
|
||||||
font_count = -1;
|
font_count = -1;
|
||||||
@ -2406,14 +2456,7 @@ void clean_up(void *memtofree1, void* memtofree2)
|
|||||||
xmlCleanupParser();
|
xmlCleanupParser();
|
||||||
#endif /* BUILD_WEATHER_XOAP */
|
#endif /* BUILD_WEATHER_XOAP */
|
||||||
|
|
||||||
if (specials) {
|
free_specials(specials);
|
||||||
for (i = 0; i < special_count; i++) {
|
|
||||||
if (specials[i].type == GRAPH) {
|
|
||||||
free(specials[i].graph);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
free_and_zero(specials);
|
|
||||||
}
|
|
||||||
|
|
||||||
clear_net_stats();
|
clear_net_stats();
|
||||||
clear_diskio_stats();
|
clear_diskio_stats();
|
||||||
@ -2490,6 +2533,13 @@ static void set_default_configurations(void)
|
|||||||
mpd_set_port("6600");
|
mpd_set_port("6600");
|
||||||
}
|
}
|
||||||
#endif /* BUILD_MPD */
|
#endif /* BUILD_MPD */
|
||||||
|
#ifdef BUILD_MYSQL
|
||||||
|
mysql_settings.host = NULL;
|
||||||
|
mysql_settings.port = 0;
|
||||||
|
mysql_settings.user = NULL;
|
||||||
|
mysql_settings.password = NULL;
|
||||||
|
mysql_settings.db = NULL;
|
||||||
|
#endif /* BUILD_MYSQL */
|
||||||
#ifdef BUILD_XMMS2
|
#ifdef BUILD_XMMS2
|
||||||
info.xmms2.artist = NULL;
|
info.xmms2.artist = NULL;
|
||||||
info.xmms2.album = NULL;
|
info.xmms2.album = NULL;
|
||||||
@ -2565,16 +2615,12 @@ static bool append_works(const char *path)
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifdef BUILD_X11
|
#ifdef BUILD_X11
|
||||||
static char **xargv = 0;
|
|
||||||
static int xargc = 0;
|
|
||||||
|
|
||||||
static void X11_create_window(void)
|
static void X11_create_window(void)
|
||||||
{
|
{
|
||||||
if (out_to_x.get(*state)) {
|
if (out_to_x.get(*state)) {
|
||||||
init_window(text_width + window.border_inner_margin * 2 + window.border_outer_margin * 2 + window.border_width * 2,
|
init_window(text_width + window.border_inner_margin * 2 + window.border_outer_margin * 2 + window.border_width * 2,
|
||||||
text_height + window.border_inner_margin * 2 + window.border_outer_margin * 2 + window.border_width * 2,
|
text_height + window.border_inner_margin * 2 + window.border_outer_margin * 2 + window.border_width * 2,
|
||||||
xargv, xargc);
|
argv_copy, argc_copy);
|
||||||
|
|
||||||
setup_fonts();
|
setup_fonts();
|
||||||
load_fonts();
|
load_fonts();
|
||||||
update_text_area(); /* to position text/window on screen */
|
update_text_area(); /* to position text/window on screen */
|
||||||
@ -2821,6 +2867,43 @@ char load_config_file(const char *f)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif /* BUILD_MPD */
|
#endif /* BUILD_MPD */
|
||||||
|
#ifdef BUILD_MYSQL
|
||||||
|
CONF("mysql_host") {
|
||||||
|
if (value) {
|
||||||
|
mysql_set_host(value);
|
||||||
|
} else {
|
||||||
|
CONF_ERR;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
CONF("mysql_port") {
|
||||||
|
if (value) {
|
||||||
|
mysql_set_port(value);
|
||||||
|
} else {
|
||||||
|
CONF_ERR;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
CONF("mysql_user") {
|
||||||
|
if (value) {
|
||||||
|
mysql_set_user(value);
|
||||||
|
} else {
|
||||||
|
CONF_ERR;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
CONF("mysql_password") {
|
||||||
|
if (value) {
|
||||||
|
mysql_set_password(value);
|
||||||
|
} else {
|
||||||
|
CONF_ERR;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
CONF("mysql_db") {
|
||||||
|
if (value) {
|
||||||
|
mysql_set_db(value);
|
||||||
|
} else {
|
||||||
|
CONF_ERR;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif /* BUILD_MYSQL */
|
||||||
CONF("music_player_interval") {
|
CONF("music_player_interval") {
|
||||||
if (value) {
|
if (value) {
|
||||||
info.music_player_interval = strtod(value, 0);
|
info.music_player_interval = strtod(value, 0);
|
||||||
@ -3068,13 +3151,6 @@ char load_config_file(const char *f)
|
|||||||
CONF_ERR;
|
CONF_ERR;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
CONF("max_specials") {
|
|
||||||
if (value) {
|
|
||||||
max_specials = atoi(value);
|
|
||||||
} else {
|
|
||||||
CONF_ERR;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
CONF("max_user_text") {
|
CONF("max_user_text") {
|
||||||
if (value) {
|
if (value) {
|
||||||
max_user_text = atoi(value);
|
max_user_text = atoi(value);
|
||||||
@ -3281,6 +3357,7 @@ static void print_help(const char *prog_name) {
|
|||||||
" -y Y y position\n"
|
" -y Y y position\n"
|
||||||
#endif /* BUILD_X11 */
|
#endif /* BUILD_X11 */
|
||||||
" -s, --for-scripts=TEXT render TEXT on stdout and exit, enclose TEXT by single quotes\n"
|
" -s, --for-scripts=TEXT render TEXT on stdout and exit, enclose TEXT by single quotes\n"
|
||||||
|
" -S, --stdin-config read configuration from stdin\n"
|
||||||
" -t, --text=TEXT text to render, remember single quotes, like -t '$uptime'\n"
|
" -t, --text=TEXT text to render, remember single quotes, like -t '$uptime'\n"
|
||||||
" -u, --interval=SECS update interval\n"
|
" -u, --interval=SECS update interval\n"
|
||||||
" -i COUNT number of times to update "PACKAGE_NAME" (and quit)\n"
|
" -i COUNT number of times to update "PACKAGE_NAME" (and quit)\n"
|
||||||
@ -3299,7 +3376,7 @@ inline void reset_optind() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* : means that character before that takes an argument */
|
/* : means that character before that takes an argument */
|
||||||
static const char *getopt_string = "vVqdDs:t:u:i:hc:p:"
|
static const char *getopt_string = "vVqdDSs:t:u:i:hc:p:"
|
||||||
#ifdef BUILD_X11
|
#ifdef BUILD_X11
|
||||||
"x:y:w:a:f:X:"
|
"x:y:w:a:f:X:"
|
||||||
#ifdef OWN_WINDOW
|
#ifdef OWN_WINDOW
|
||||||
@ -3337,6 +3414,7 @@ static const struct option longopts[] = {
|
|||||||
{ "window-id", 1, NULL, 'w' },
|
{ "window-id", 1, NULL, 'w' },
|
||||||
#endif /* BUILD_X11 */
|
#endif /* BUILD_X11 */
|
||||||
{ "for-scripts", 1, NULL, 's' },
|
{ "for-scripts", 1, NULL, 's' },
|
||||||
|
{ "stdin-config", 0, NULL, 'S' },
|
||||||
{ "text", 1, NULL, 't' },
|
{ "text", 1, NULL, 't' },
|
||||||
{ "interval", 1, NULL, 'u' },
|
{ "interval", 1, NULL, 'u' },
|
||||||
{ "pause", 1, NULL, 'p' },
|
{ "pause", 1, NULL, 'p' },
|
||||||
@ -3344,8 +3422,13 @@ static const struct option longopts[] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
void set_current_config() {
|
void set_current_config() {
|
||||||
/* check if specified config file is valid */
|
/* set configfile to stdin if that's requested or check if specified config file is valid */
|
||||||
if (not current_config.empty()) {
|
if(stdinconfig) {
|
||||||
|
char mystdin[32];
|
||||||
|
#define CONKYSTDIN "/proc/%u/fd/0"
|
||||||
|
sprintf(mystdin, CONKYSTDIN, getpid());
|
||||||
|
current_config = mystdin;
|
||||||
|
} else if (not current_config.empty()) {
|
||||||
struct stat sb;
|
struct stat sb;
|
||||||
if (stat(current_config.c_str(), &sb) ||
|
if (stat(current_config.c_str(), &sb) ||
|
||||||
(!S_ISREG(sb.st_mode) && !S_ISLNK(sb.st_mode))) {
|
(!S_ISREG(sb.st_mode) && !S_ISLNK(sb.st_mode))) {
|
||||||
@ -3414,11 +3497,6 @@ void initialisation(int argc, char **argv) {
|
|||||||
currentconffile = conftree_add(currentconffile, current_config.c_str());
|
currentconffile = conftree_add(currentconffile, current_config.c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
/* init specials array */
|
|
||||||
if ((specials = (special_t*)calloc(sizeof(struct special_t), max_specials)) == 0) {
|
|
||||||
NORM_ERR("failed to create specials array");
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef MAIL_FILE
|
#ifdef MAIL_FILE
|
||||||
if (current_mail_spool == NULL) {
|
if (current_mail_spool == NULL) {
|
||||||
char buf[256];
|
char buf[256];
|
||||||
@ -3558,8 +3636,6 @@ void initialisation(int argc, char **argv) {
|
|||||||
memset(tmpstring2, 0, text_buffer_size);
|
memset(tmpstring2, 0, text_buffer_size);
|
||||||
|
|
||||||
#ifdef BUILD_X11
|
#ifdef BUILD_X11
|
||||||
xargc = argc;
|
|
||||||
xargv = argv;
|
|
||||||
X11_create_window();
|
X11_create_window();
|
||||||
#endif /* BUILD_X11 */
|
#endif /* BUILD_X11 */
|
||||||
#ifdef BUILD_LUA
|
#ifdef BUILD_LUA
|
||||||
@ -3644,6 +3720,9 @@ int main(int argc, char **argv)
|
|||||||
case 'c':
|
case 'c':
|
||||||
current_config = optarg;
|
current_config = optarg;
|
||||||
break;
|
break;
|
||||||
|
case 'S':
|
||||||
|
stdinconfig = true;
|
||||||
|
break;
|
||||||
case 'q':
|
case 'q':
|
||||||
if (!freopen("/dev/null", "w", stderr))
|
if (!freopen("/dev/null", "w", stderr))
|
||||||
CRIT_ERR(0, 0, "could not open /dev/null as stderr!");
|
CRIT_ERR(0, 0, "could not open /dev/null as stderr!");
|
||||||
@ -3743,7 +3822,13 @@ int main(int argc, char **argv)
|
|||||||
#endif /* BUILD_WEATHER_XOAP */
|
#endif /* BUILD_WEATHER_XOAP */
|
||||||
|
|
||||||
#ifdef HAVE_SYS_INOTIFY_H
|
#ifdef HAVE_SYS_INOTIFY_H
|
||||||
inotify_fd = inotify_init1(IN_NONBLOCK);
|
inotify_fd = inotify_init();
|
||||||
|
if(inotify_fd != -1) {
|
||||||
|
int fl;
|
||||||
|
|
||||||
|
fl = fcntl(inotify_fd, F_GETFL);
|
||||||
|
fcntl(inotify_fd, F_SETFL, fl | O_NONBLOCK);
|
||||||
|
}
|
||||||
#endif /* HAVE_SYS_INOTIFY_H */
|
#endif /* HAVE_SYS_INOTIFY_H */
|
||||||
|
|
||||||
initialisation(argc, argv);
|
initialisation(argc, argv);
|
||||||
|
@ -88,6 +88,10 @@ struct text_object;
|
|||||||
#include "mpd.h"
|
#include "mpd.h"
|
||||||
#endif /* BUILD_MPD */
|
#endif /* BUILD_MPD */
|
||||||
|
|
||||||
|
#ifdef BUILD_MYSQL
|
||||||
|
#include "mysql.h"
|
||||||
|
#endif /* BUILD_MYSQL */
|
||||||
|
|
||||||
/* C++ headers */
|
/* C++ headers */
|
||||||
#ifdef BUILD_CURL
|
#ifdef BUILD_CURL
|
||||||
#include "ccurl_thread.h"
|
#include "ccurl_thread.h"
|
||||||
|
69
src/core.cc
69
src/core.cc
@ -42,6 +42,9 @@
|
|||||||
#include "i8k.h"
|
#include "i8k.h"
|
||||||
#include "imlib2.h"
|
#include "imlib2.h"
|
||||||
#include "proc.h"
|
#include "proc.h"
|
||||||
|
#ifdef BUILD_MYSQL
|
||||||
|
#include "mysql.h"
|
||||||
|
#endif
|
||||||
#ifdef BUILD_X11
|
#ifdef BUILD_X11
|
||||||
#include "fonts.h"
|
#include "fonts.h"
|
||||||
#endif
|
#endif
|
||||||
@ -64,7 +67,7 @@
|
|||||||
#ifdef BUILD_NVIDIA
|
#ifdef BUILD_NVIDIA
|
||||||
#include "nvidia.h"
|
#include "nvidia.h"
|
||||||
#endif
|
#endif
|
||||||
#include "read_tcp.h"
|
#include "read_tcpip.h"
|
||||||
#include "scroll.h"
|
#include "scroll.h"
|
||||||
#include "specials.h"
|
#include "specials.h"
|
||||||
#include "temphelper.h"
|
#include "temphelper.h"
|
||||||
@ -135,6 +138,31 @@ static struct text_object *create_plain_text(const char *s)
|
|||||||
return obj;
|
return obj;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef BUILD_CURL
|
||||||
|
void stock_parse_arg(struct text_object *obj, const char *arg)
|
||||||
|
{
|
||||||
|
char stock[8];
|
||||||
|
char data[8];
|
||||||
|
|
||||||
|
obj->data.s = NULL;
|
||||||
|
if(sscanf(arg, "%7s %7s", stock, data) != 2) {
|
||||||
|
NORM_ERR("wrong number of arguments for $stock");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if(!strcasecmp("ask", data)) strcpy(data, "a");
|
||||||
|
else if(!strcasecmp("adv", data)) strcpy(data, "a2");
|
||||||
|
else if(!strcasecmp("asksize", data)) strcpy(data, "a5");
|
||||||
|
else if(!strcasecmp("bid", data)) strcpy(data, "b");
|
||||||
|
else {
|
||||||
|
NORM_ERR("\"%s\" is not supported by $stock. Supported: adv,ask,asksize,bid", data);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
#define MAX_FINYAH_URL_LENGTH 64
|
||||||
|
obj->data.s = (char*) malloc(MAX_FINYAH_URL_LENGTH);
|
||||||
|
snprintf(obj->data.s, MAX_FINYAH_URL_LENGTH, "http://download.finance.yahoo.com/d/quotes.csv?s=%s&f=%s", stock, data);
|
||||||
|
}
|
||||||
|
#endif /* BUILD_CURL */
|
||||||
|
|
||||||
/* construct_text_object() creates a new text_object */
|
/* construct_text_object() creates a new text_object */
|
||||||
struct text_object *construct_text_object(char *s, const char *arg, long
|
struct text_object *construct_text_object(char *s, const char *arg, long
|
||||||
line, void **ifblock_opaque, void *free_at_crash)
|
line, void **ifblock_opaque, void *free_at_crash)
|
||||||
@ -148,7 +176,7 @@ struct text_object *construct_text_object(char *s, const char *arg, long
|
|||||||
#define __OBJ_HEAD(a, n) if (!strcmp(s, #a)) { \
|
#define __OBJ_HEAD(a, n) if (!strcmp(s, #a)) { \
|
||||||
add_update_callback(n);
|
add_update_callback(n);
|
||||||
#define __OBJ_IF obj_be_ifblock_if(ifblock_opaque, obj)
|
#define __OBJ_IF obj_be_ifblock_if(ifblock_opaque, obj)
|
||||||
#define __OBJ_ARG(...) if (!arg) { CRIT_ERR(obj, free_at_crash, __VA_ARGS__); }
|
#define __OBJ_ARG(...) if (!arg) { free(s); CRIT_ERR(obj, free_at_crash, __VA_ARGS__); }
|
||||||
|
|
||||||
/* defines to be used below */
|
/* defines to be used below */
|
||||||
#define OBJ(a, n) __OBJ_HEAD(a, n) {
|
#define OBJ(a, n) __OBJ_HEAD(a, n) {
|
||||||
@ -183,9 +211,6 @@ struct text_object *construct_text_object(char *s, const char *arg, long
|
|||||||
NORM_ERR("acpiacadapter: arg is only used on linux");
|
NORM_ERR("acpiacadapter: arg is only used on linux");
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
if(! obj->data.opaque)
|
|
||||||
obj->data.opaque = strdup("AC");
|
|
||||||
|
|
||||||
obj->callbacks.print = &print_acpiacadapter;
|
obj->callbacks.print = &print_acpiacadapter;
|
||||||
obj->callbacks.free = &gen_free_opaque;
|
obj->callbacks.free = &gen_free_opaque;
|
||||||
#endif /* !__OpenBSD__ */
|
#endif /* !__OpenBSD__ */
|
||||||
@ -212,9 +237,13 @@ struct text_object *construct_text_object(char *s, const char *arg, long
|
|||||||
}
|
}
|
||||||
obj->callbacks.print = &print_freq_g;
|
obj->callbacks.print = &print_freq_g;
|
||||||
END OBJ_ARG(read_tcp, 0, "read_tcp: Needs \"(host) port\" as argument(s)")
|
END OBJ_ARG(read_tcp, 0, "read_tcp: Needs \"(host) port\" as argument(s)")
|
||||||
parse_read_tcp_arg(obj, arg, free_at_crash);
|
parse_read_tcpip_arg(obj, arg, free_at_crash);
|
||||||
obj->callbacks.print = &print_read_tcp;
|
obj->callbacks.print = &print_read_tcp;
|
||||||
obj->callbacks.free = &free_read_tcp;
|
obj->callbacks.free = &free_read_tcpip;
|
||||||
|
END OBJ_ARG(read_udp, 0, "read_udp: Needs \"(host) port\" as argument(s)")
|
||||||
|
parse_read_tcpip_arg(obj, arg, free_at_crash);
|
||||||
|
obj->callbacks.print = &print_read_udp;
|
||||||
|
obj->callbacks.free = &free_read_tcpip;
|
||||||
#if defined(__linux__)
|
#if defined(__linux__)
|
||||||
END OBJ(voltage_mv, 0)
|
END OBJ(voltage_mv, 0)
|
||||||
get_cpu_count();
|
get_cpu_count();
|
||||||
@ -318,11 +347,11 @@ struct text_object *construct_text_object(char *s, const char *arg, long
|
|||||||
END OBJ(battery_bar, 0)
|
END OBJ(battery_bar, 0)
|
||||||
char bat[64];
|
char bat[64];
|
||||||
if (arg) {
|
if (arg) {
|
||||||
arg = scan_bar(obj, arg, 100);
|
|
||||||
sscanf(arg, "%63s", bat);
|
sscanf(arg, "%63s", bat);
|
||||||
} else {
|
} else {
|
||||||
strcpy(bat, "BAT0");
|
strcpy(bat, "BAT0");
|
||||||
}
|
}
|
||||||
|
scan_bar(obj, bat, 100);
|
||||||
obj->data.s = strndup(bat, text_buffer_size);
|
obj->data.s = strndup(bat, text_buffer_size);
|
||||||
obj->callbacks.barval = &get_battery_perct_bar;
|
obj->callbacks.barval = &get_battery_perct_bar;
|
||||||
obj->callbacks.free = &gen_free_opaque;
|
obj->callbacks.free = &gen_free_opaque;
|
||||||
@ -579,6 +608,16 @@ struct text_object *construct_text_object(char *s, const char *arg, long
|
|||||||
obj->callbacks.print = &print_image_callback;
|
obj->callbacks.print = &print_image_callback;
|
||||||
obj->callbacks.free = &gen_free_opaque;
|
obj->callbacks.free = &gen_free_opaque;
|
||||||
#endif /* BUILD_IMLIB2 */
|
#endif /* BUILD_IMLIB2 */
|
||||||
|
#ifdef BUILD_MYSQL
|
||||||
|
END OBJ_ARG(mysql, 0, "mysql needs a query")
|
||||||
|
obj->data.s = strdup(arg);
|
||||||
|
obj->callbacks.print = &print_mysql;
|
||||||
|
obj->callbacks.free = &free_mysql;
|
||||||
|
#endif /* BUILD_MYSQL */
|
||||||
|
END OBJ_ARG(no_update, 0, "no_update needs arguments")
|
||||||
|
scan_no_update(obj, arg);
|
||||||
|
obj->callbacks.print = &print_no_update;
|
||||||
|
obj->callbacks.free = &free_no_update;
|
||||||
END OBJ(exec, 0)
|
END OBJ(exec, 0)
|
||||||
scan_exec_arg(obj, arg);
|
scan_exec_arg(obj, arg);
|
||||||
obj->parse = false;
|
obj->parse = false;
|
||||||
@ -905,6 +944,8 @@ struct text_object *construct_text_object(char *s, const char *arg, long
|
|||||||
obj->callbacks.print = &print_format_time;
|
obj->callbacks.print = &print_format_time;
|
||||||
END OBJ(nodename, 0)
|
END OBJ(nodename, 0)
|
||||||
obj->callbacks.print = &print_nodename;
|
obj->callbacks.print = &print_nodename;
|
||||||
|
END OBJ(nodename_short, 0)
|
||||||
|
obj->callbacks.print = &print_nodename_short;
|
||||||
END OBJ_ARG(cmdline_to_pid, 0, "cmdline_to_pid needs a command line as argument")
|
END OBJ_ARG(cmdline_to_pid, 0, "cmdline_to_pid needs a command line as argument")
|
||||||
scan_cmdline_to_pid_arg(obj, arg, free_at_crash);
|
scan_cmdline_to_pid_arg(obj, arg, free_at_crash);
|
||||||
obj->callbacks.print = &print_cmdline_to_pid;
|
obj->callbacks.print = &print_cmdline_to_pid;
|
||||||
@ -1038,6 +1079,8 @@ struct text_object *construct_text_object(char *s, const char *arg, long
|
|||||||
END OBJ(processes, &update_total_processes)
|
END OBJ(processes, &update_total_processes)
|
||||||
obj->callbacks.print = &print_processes;
|
obj->callbacks.print = &print_processes;
|
||||||
#ifdef __linux__
|
#ifdef __linux__
|
||||||
|
END OBJ(distribution, 0)
|
||||||
|
obj->callbacks.print = &print_distribution;
|
||||||
END OBJ(running_processes, &update_top)
|
END OBJ(running_processes, &update_top)
|
||||||
top_running = 1;
|
top_running = 1;
|
||||||
obj->callbacks.print = &print_running_processes;
|
obj->callbacks.print = &print_running_processes;
|
||||||
@ -1565,6 +1608,12 @@ struct text_object *construct_text_object(char *s, const char *arg, long
|
|||||||
obj->sub = (text_object*)malloc(sizeof(struct text_object));
|
obj->sub = (text_object*)malloc(sizeof(struct text_object));
|
||||||
extract_variable_text_internal(obj->sub, arg);
|
extract_variable_text_internal(obj->sub, arg);
|
||||||
obj->callbacks.print = &print_to_bytes;
|
obj->callbacks.print = &print_to_bytes;
|
||||||
|
#ifdef BUILD_CURL
|
||||||
|
END OBJ_ARG(stock, 0, "stock needs arguments")
|
||||||
|
stock_parse_arg(obj, arg);
|
||||||
|
obj->callbacks.print = &print_stock;
|
||||||
|
obj->callbacks.free = &free_stock;
|
||||||
|
#endif /* BUILD_CURL */
|
||||||
END OBJ(scroll, 0)
|
END OBJ(scroll, 0)
|
||||||
#ifdef BUILD_X11
|
#ifdef BUILD_X11
|
||||||
/* allocate a follower to reset any color changes */
|
/* allocate a follower to reset any color changes */
|
||||||
@ -1630,7 +1679,7 @@ struct text_object *construct_text_object(char *s, const char *arg, long
|
|||||||
END {
|
END {
|
||||||
char *buf = (char *)malloc(text_buffer_size);
|
char *buf = (char *)malloc(text_buffer_size);
|
||||||
|
|
||||||
NORM_ERR("unknown variable %s", s);
|
NORM_ERR("unknown variable '$%s'", s);
|
||||||
snprintf(buf, text_buffer_size, "${%s}", s);
|
snprintf(buf, text_buffer_size, "${%s}", s);
|
||||||
obj_be_plain_text(obj, buf);
|
obj_be_plain_text(obj, buf);
|
||||||
free(buf);
|
free(buf);
|
||||||
@ -1819,7 +1868,7 @@ int extract_variable_text_internal(struct text_object *retval, const char *const
|
|||||||
strfold(p, 1);
|
strfold(p, 1);
|
||||||
} else if (*p == '#') {
|
} else if (*p == '#') {
|
||||||
char c;
|
char c;
|
||||||
if (remove_comment(p, &c) && p > orig_p && c == '\n') {
|
if (remove_comment(p, &c) && p >= orig_p && c == '\n') {
|
||||||
/* if remove_comment removed a newline, we need to 'back up' with p */
|
/* if remove_comment removed a newline, we need to 'back up' with p */
|
||||||
p--;
|
p--;
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
/* -*- mode: c; c-basic-offset: 4; tab-width: 4; indent-tabs-mode: t -*-
|
/* -*- mode: c; c-basic-offset: 4; tab-width: 4; indent-tabs-mode: t -*-
|
||||||
|
* vim: ts=4 sw=4 noet ai cindent syntax=cpp
|
||||||
*
|
*
|
||||||
* Conky, a system monitor, based on torsmo
|
* Conky, a system monitor, based on torsmo
|
||||||
*
|
*
|
||||||
|
48
src/linux.cc
48
src/linux.cc
@ -1353,6 +1353,8 @@ void get_acpi_fan(char *p_client_buffer, size_t client_buffer_size)
|
|||||||
|
|
||||||
Update: it seems the folder name is hardware-dependent. We add an aditional adapter
|
Update: it seems the folder name is hardware-dependent. We add an aditional adapter
|
||||||
argument, specifying the folder name.
|
argument, specifying the folder name.
|
||||||
|
|
||||||
|
Update: on some systems it's /sys/class/power_supply/ADP1 instead of /sys/class/power_supply/AC
|
||||||
*/
|
*/
|
||||||
|
|
||||||
void get_acpi_ac_adapter(char *p_client_buffer, size_t client_buffer_size, const char *adapter)
|
void get_acpi_ac_adapter(char *p_client_buffer, size_t client_buffer_size, const char *adapter)
|
||||||
@ -1361,14 +1363,20 @@ void get_acpi_ac_adapter(char *p_client_buffer, size_t client_buffer_size, const
|
|||||||
|
|
||||||
char buf[256];
|
char buf[256];
|
||||||
char buf2[256];
|
char buf2[256];
|
||||||
|
struct stat sb;
|
||||||
FILE *fp;
|
FILE *fp;
|
||||||
|
|
||||||
if (!p_client_buffer || client_buffer_size <= 0) {
|
if (!p_client_buffer || client_buffer_size <= 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
snprintf(buf2, sizeof(buf2), "%s/%s/uevent", SYSFS_AC_ADAPTER_DIR, adapter);
|
if(adapter)
|
||||||
fp = open_file(buf2, &rep);
|
snprintf(buf2, sizeof(buf2), "%s/%s/uevent", SYSFS_AC_ADAPTER_DIR, adapter);
|
||||||
|
else{
|
||||||
|
snprintf(buf2, sizeof(buf2), "%s/AC/uevent", SYSFS_AC_ADAPTER_DIR);
|
||||||
|
if(stat(buf2, &sb) == -1) snprintf(buf2, sizeof(buf2), "%s/ADP1/uevent", SYSFS_AC_ADAPTER_DIR);
|
||||||
|
}
|
||||||
|
if(stat(buf2, &sb) == 0) fp = open_file(buf2, &rep); else fp = 0;
|
||||||
if (fp) {
|
if (fp) {
|
||||||
/* sysfs processing */
|
/* sysfs processing */
|
||||||
while (!feof(fp)) {
|
while (!feof(fp)) {
|
||||||
@ -2363,3 +2371,39 @@ void update_diskio(void)
|
|||||||
update_diskio_values(&stats, total_reads, total_writes);
|
update_diskio_values(&stats, total_reads, total_writes);
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void print_distribution(struct text_object *obj, char *p, int p_max_size)
|
||||||
|
{
|
||||||
|
(void)obj;
|
||||||
|
int i, bytes_read;
|
||||||
|
char* buf;
|
||||||
|
struct stat sb;
|
||||||
|
|
||||||
|
if(stat("/etc/arch-release", &sb) == 0) {
|
||||||
|
snprintf(p, p_max_size, "Arch Linux");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
snprintf(p, p_max_size, "Unknown");
|
||||||
|
buf = readfile("/proc/version", &bytes_read, 1);
|
||||||
|
if(buf) {
|
||||||
|
/* I am assuming the distribution name is the first string in /proc/version that:
|
||||||
|
- is preceded by a '('
|
||||||
|
- starts with a capital
|
||||||
|
- is followed by a space and a number
|
||||||
|
but i am not sure if this is always true... */
|
||||||
|
for(i=1; i<bytes_read; i++) {
|
||||||
|
if(buf[i-1] == '(' && buf[i] >= 'A' && buf[i] <= 'Z') break;
|
||||||
|
}
|
||||||
|
if(i < bytes_read) {
|
||||||
|
snprintf(p, p_max_size, "%s", &buf[i]);
|
||||||
|
for(i=1; p[i]; i++) {
|
||||||
|
if(p[i-1] == ' ' && p[i] >= '0' && p[i] <= '9') {
|
||||||
|
p[i-1] = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
free(buf);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@ -53,4 +53,6 @@ int get_entropy_poolsize(unsigned int *);
|
|||||||
|
|
||||||
void update_stat(void);
|
void update_stat(void);
|
||||||
|
|
||||||
|
void print_distribution(struct text_object *, char *, int);
|
||||||
|
|
||||||
#endif /* _LINUX_H */
|
#endif /* _LINUX_H */
|
||||||
|
169
src/mixer.cc
169
src/mixer.cc
@ -38,9 +38,6 @@
|
|||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
|
|
||||||
|
|
||||||
#ifdef MIXER_IS_ALSA
|
|
||||||
#include <alsa/asoundlib.h>
|
|
||||||
#else
|
|
||||||
#ifdef HAVE_LINUX_SOUNDCARD_H
|
#ifdef HAVE_LINUX_SOUNDCARD_H
|
||||||
#include <linux/soundcard.h>
|
#include <linux/soundcard.h>
|
||||||
#else
|
#else
|
||||||
@ -50,173 +47,12 @@
|
|||||||
#include <sys/soundcard.h>
|
#include <sys/soundcard.h>
|
||||||
#endif /* __OpenBSD__ */
|
#endif /* __OpenBSD__ */
|
||||||
#endif /* HAVE_LINUX_SOUNDCARD_H */
|
#endif /* HAVE_LINUX_SOUNDCARD_H */
|
||||||
#endif /* MIXER_IS_ALSA */
|
|
||||||
|
|
||||||
#define MIXER_DEV "/dev/mixer"
|
#define MIXER_DEV "/dev/mixer"
|
||||||
|
|
||||||
#ifdef MIXER_IS_ALSA
|
|
||||||
#define MAX_MIXERS 8
|
|
||||||
struct mixer_control {
|
|
||||||
char name[64];
|
|
||||||
snd_mixer_t *mixer;
|
|
||||||
snd_mixer_selem_id_t *sid;
|
|
||||||
snd_mixer_elem_t *elem;
|
|
||||||
long vol_min, vol_max;
|
|
||||||
};
|
|
||||||
|
|
||||||
static struct mixer_control mixer_data[MAX_MIXERS];
|
|
||||||
int num_mixers = 0;
|
|
||||||
static char soundcard[64] = "default";
|
|
||||||
#else
|
|
||||||
static int mixer_fd;
|
static int mixer_fd;
|
||||||
static const char *devs[] = SOUND_DEVICE_NAMES;
|
static const char *devs[] = SOUND_DEVICE_NAMES;
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef MIXER_IS_ALSA
|
|
||||||
static int parse_simple_id(const char *str, snd_mixer_selem_id_t *sid)
|
|
||||||
{
|
|
||||||
int c, size;
|
|
||||||
char buf[128];
|
|
||||||
char *ptr = buf;
|
|
||||||
|
|
||||||
while (*str == ' ' || *str == '\t')
|
|
||||||
str++;
|
|
||||||
if (!(*str))
|
|
||||||
return -EINVAL;
|
|
||||||
size = 1; /* for '\0' */
|
|
||||||
if (*str != '"' && *str != '\'') {
|
|
||||||
while (*str && *str != ',') {
|
|
||||||
if (size < (int)sizeof(buf)) {
|
|
||||||
*ptr++ = *str;
|
|
||||||
size++;
|
|
||||||
}
|
|
||||||
str++;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
c = *str++;
|
|
||||||
while (*str && *str != c) {
|
|
||||||
if (size < (int)sizeof(buf)) {
|
|
||||||
*ptr++ = *str;
|
|
||||||
size++;
|
|
||||||
}
|
|
||||||
str++;
|
|
||||||
}
|
|
||||||
if (*str == c)
|
|
||||||
str++;
|
|
||||||
}
|
|
||||||
if (*str == '\0') {
|
|
||||||
snd_mixer_selem_id_set_index(sid, 0);
|
|
||||||
*ptr = 0;
|
|
||||||
goto _set;
|
|
||||||
}
|
|
||||||
if (*str != ',')
|
|
||||||
return -EINVAL;
|
|
||||||
*ptr = 0; /* terminate the string */
|
|
||||||
str++;
|
|
||||||
if (!isdigit(*str))
|
|
||||||
return -EINVAL;
|
|
||||||
snd_mixer_selem_id_set_index(sid, atoi(str));
|
|
||||||
_set:
|
|
||||||
snd_mixer_selem_id_set_name(sid, buf);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int mixer_init (const char *name)
|
|
||||||
{
|
|
||||||
/* from amixer.c, replaced -EINVAL with -1 */
|
|
||||||
int i, err;
|
|
||||||
if (!name)
|
|
||||||
name = "Master";
|
|
||||||
|
|
||||||
for (i = 0; i < num_mixers; i++) {
|
|
||||||
if (!strcasecmp (mixer_data[i].name, name)) {
|
|
||||||
return i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (i == MAX_MIXERS) {
|
|
||||||
fprintf (stderr, "max mixers (%d) reached\n", MAX_MIXERS);
|
|
||||||
return -1;
|
|
||||||
};
|
|
||||||
|
|
||||||
num_mixers++;
|
|
||||||
#define data mixer_data[i]
|
|
||||||
|
|
||||||
strncpy (mixer_data[i].name, name, 63);
|
|
||||||
mixer_data[i].name[63] = '\0';
|
|
||||||
snd_mixer_selem_id_alloca (&data.sid);
|
|
||||||
data.mixer = NULL;
|
|
||||||
if (parse_simple_id (name, data.sid) < 0) {
|
|
||||||
fprintf (stderr, "Wrong mixer identifier: %s\n", name);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
if ((err = snd_mixer_open (&data.mixer, 0)) < 0) {
|
|
||||||
fprintf (stderr, "snd_mixer_open: %s\n", snd_strerror (err));
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
if ((err = snd_mixer_attach (data.mixer, soundcard)) < 0) {
|
|
||||||
fprintf (stderr, "snd_mixer_attach: %s\n", snd_strerror (err));
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
if ((err = snd_mixer_selem_register (data.mixer, NULL, NULL)) < 0) {
|
|
||||||
fprintf (stderr, "snd_mixer_selem_register: %s\n",
|
|
||||||
snd_strerror (err));
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
if ((err = snd_mixer_load (data.mixer)) < 0) {
|
|
||||||
fprintf (stderr, "snd_mixer_load: %s\n", snd_strerror (err));
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
if (!(data.elem = snd_mixer_find_selem (data.mixer, data.sid))) {
|
|
||||||
fprintf (stderr, "snd_mixer_find_selem (\"%s\", %i)\n",
|
|
||||||
snd_mixer_selem_id_get_name (data.sid),
|
|
||||||
snd_mixer_selem_id_get_index (data.sid));
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
snd_mixer_selem_get_playback_volume_range(data.elem, &data.vol_min, &data.vol_max);
|
|
||||||
return i;
|
|
||||||
}
|
|
||||||
static int mixer_get_avg (int i)
|
|
||||||
{
|
|
||||||
long val;
|
|
||||||
|
|
||||||
snd_mixer_handle_events (data.mixer);
|
|
||||||
snd_mixer_selem_get_playback_volume (data.elem, 0, &val);
|
|
||||||
if(data.vol_max != 100) {
|
|
||||||
float avgf = ((float)val / data.vol_max) * 100;
|
|
||||||
int avg = (int)avgf;
|
|
||||||
return (avgf - avg < 0.5) ? avg : avg + 1;
|
|
||||||
}
|
|
||||||
return (int) val;
|
|
||||||
}
|
|
||||||
static int mixer_get_left (int i)
|
|
||||||
{
|
|
||||||
/* stub */
|
|
||||||
return mixer_get_avg (i);
|
|
||||||
}
|
|
||||||
static int mixer_get_right (int i)
|
|
||||||
{
|
|
||||||
/* stub */
|
|
||||||
return mixer_get_avg (i);
|
|
||||||
}
|
|
||||||
int mixer_to_255(int i, int x)
|
|
||||||
{
|
|
||||||
return (x-data.vol_min)*255/(data.vol_max-data.vol_min);
|
|
||||||
}
|
|
||||||
int mixer_is_mute(int i)
|
|
||||||
{
|
|
||||||
snd_mixer_handle_events (data.mixer);
|
|
||||||
if (snd_mixer_selem_has_playback_switch (data.elem)) {
|
|
||||||
int val, err;
|
|
||||||
if ((err = snd_mixer_selem_get_playback_switch(data.elem, 0, &val)) < 0)
|
|
||||||
fprintf (stderr, "playback_switch: %s\n", snd_strerror (err));
|
|
||||||
return !val;
|
|
||||||
} else {
|
|
||||||
return !mixer_get_avg(i);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#undef data
|
|
||||||
|
|
||||||
#else /* MIXER_IS_ALSA */
|
|
||||||
int mixer_init(const char *name)
|
int mixer_init(const char *name)
|
||||||
{
|
{
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
@ -282,7 +118,6 @@ int mixer_is_mute(int i)
|
|||||||
}
|
}
|
||||||
|
|
||||||
#define mixer_to_255(i, x) x
|
#define mixer_to_255(i, x) x
|
||||||
#endif /* MIXER_IS_ALSA */
|
|
||||||
|
|
||||||
void parse_mixer_arg(struct text_object *obj, const char *arg)
|
void parse_mixer_arg(struct text_object *obj, const char *arg)
|
||||||
{
|
{
|
||||||
@ -318,10 +153,10 @@ void scan_mixer_bar(struct text_object *obj, const char *arg)
|
|||||||
|
|
||||||
if (arg && sscanf(arg, "%63s %n", buf1, &n) >= 1) {
|
if (arg && sscanf(arg, "%63s %n", buf1, &n) >= 1) {
|
||||||
obj->data.i = mixer_init(buf1);
|
obj->data.i = mixer_init(buf1);
|
||||||
scan_bar(obj, arg + n, 255);
|
scan_bar(obj, arg + n, 100);
|
||||||
} else {
|
} else {
|
||||||
obj->data.i = mixer_init(NULL);
|
obj->data.i = mixer_init(NULL);
|
||||||
scan_bar(obj, arg, 255);
|
scan_bar(obj, arg, 100);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -99,8 +99,6 @@ void init_mpd(void)
|
|||||||
{
|
{
|
||||||
if (!(refcount++)) /* first client */
|
if (!(refcount++)) /* first client */
|
||||||
memset(&mpd_info, 0, sizeof(mpd_info));
|
memset(&mpd_info, 0, sizeof(mpd_info));
|
||||||
|
|
||||||
refcount++;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void clear_mpd(void)
|
static void clear_mpd(void)
|
||||||
@ -304,7 +302,7 @@ bool mpd_process(thread_handle &handle)
|
|||||||
|
|
||||||
static void update_mpd_thread(thread_handle &handle)
|
static void update_mpd_thread(thread_handle &handle)
|
||||||
{
|
{
|
||||||
while (1) if (mpd_process(handle)) return;
|
while (mpd_process(handle)) ;
|
||||||
/* never reached */
|
/* never reached */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
112
src/mysql.cc
Normal file
112
src/mysql.cc
Normal file
@ -0,0 +1,112 @@
|
|||||||
|
/* -*- mode: c++; c-basic-offset: 4; tab-width: 4; indent-tabs-mode: t -*-
|
||||||
|
* vim: ts=4 sw=4 noet ai cindent syntax=cpp
|
||||||
|
*
|
||||||
|
* Conky, a system monitor, based on torsmo
|
||||||
|
*
|
||||||
|
* Any original torsmo code is licensed under the BSD license
|
||||||
|
*
|
||||||
|
* All code written since the fork of torsmo is licensed under the GPL
|
||||||
|
*
|
||||||
|
* Please see COPYING for details
|
||||||
|
*
|
||||||
|
* Copyright (c) 2005-2010 Brenden Matthews, Philip Kovacs, et. al.
|
||||||
|
* (see AUTHORS)
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "conky.h"
|
||||||
|
#include "logging.h"
|
||||||
|
#include <mysql.h>
|
||||||
|
|
||||||
|
struct mysql_conn mysql_settings;
|
||||||
|
|
||||||
|
void print_mysql(struct text_object *obj, char *p, int p_max_size) {
|
||||||
|
MYSQL *conn = mysql_init(NULL);
|
||||||
|
|
||||||
|
if(mysql_settings.db == NULL)
|
||||||
|
mysql_settings.db = strdup("mysql");
|
||||||
|
if(conn == NULL) {
|
||||||
|
NORM_ERR("Can't initialize MySQL");
|
||||||
|
mysql_library_end();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!mysql_real_connect(conn, mysql_settings.host, mysql_settings.user, mysql_settings.password, mysql_settings.db, mysql_settings.port, NULL, 0)) {
|
||||||
|
NORM_ERR("MySQL: %s", mysql_error(conn));
|
||||||
|
mysql_close(conn);
|
||||||
|
mysql_library_end();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if(mysql_query(conn, obj->data.s)) {
|
||||||
|
NORM_ERR("MySQL: %s", mysql_error(conn));
|
||||||
|
mysql_close(conn);
|
||||||
|
mysql_library_end();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
MYSQL_RES *res = mysql_use_result(conn);
|
||||||
|
if(res == NULL) {
|
||||||
|
NORM_ERR("MySQL: %s", mysql_error(conn));
|
||||||
|
mysql_close(conn);
|
||||||
|
mysql_library_end();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
MYSQL_ROW row = mysql_fetch_row(res);
|
||||||
|
if(row) {
|
||||||
|
snprintf(p, p_max_size, "%s", row[0]);
|
||||||
|
} else {
|
||||||
|
NORM_ERR("MySQL: '%s' returned no results", obj->data.s);
|
||||||
|
}
|
||||||
|
mysql_free_result(res);
|
||||||
|
mysql_close(conn);
|
||||||
|
mysql_library_end();
|
||||||
|
}
|
||||||
|
|
||||||
|
void free_mysql(struct text_object *obj) {
|
||||||
|
free(mysql_settings.host);
|
||||||
|
free(mysql_settings.user);
|
||||||
|
if(mysql_settings.password) free(mysql_settings.password);
|
||||||
|
free(mysql_settings.db);
|
||||||
|
free(obj->data.s);
|
||||||
|
}
|
||||||
|
|
||||||
|
void mysql_set_host(const char *host) {
|
||||||
|
free(mysql_settings.host);
|
||||||
|
mysql_settings.host = strdup(host);
|
||||||
|
}
|
||||||
|
|
||||||
|
void mysql_set_port(const char *port) {
|
||||||
|
mysql_settings.port = strtol(port, 0, 0);
|
||||||
|
if(mysql_settings.port < 1 || mysql_settings.port > 0xffff)
|
||||||
|
mysql_settings.port = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void mysql_set_user(const char *user) {
|
||||||
|
free(mysql_settings.user);
|
||||||
|
mysql_settings.user = strdup(user);
|
||||||
|
}
|
||||||
|
|
||||||
|
void mysql_set_password(const char *password) {
|
||||||
|
free_and_zero(mysql_settings.password);
|
||||||
|
if(password && strlen(password) > 2 && password[0] == '"' && password[strlen(password)-1] == '"') {
|
||||||
|
mysql_settings.password = strdup(password+1);
|
||||||
|
mysql_settings.password[strlen(password)-2] = 0;
|
||||||
|
} else
|
||||||
|
mysql_settings.password = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
void mysql_set_db(const char *db) {
|
||||||
|
free(mysql_settings.db);
|
||||||
|
mysql_settings.db = strdup(db);
|
||||||
|
}
|
48
src/mysql.h
Normal file
48
src/mysql.h
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
/* -*- mode: c++; c-basic-offset: 4; tab-width: 4; indent-tabs-mode: t -*-
|
||||||
|
* vim: ts=4 sw=4 noet ai cindent syntax=cpp
|
||||||
|
*
|
||||||
|
* Conky, a system monitor, based on torsmo
|
||||||
|
*
|
||||||
|
* Please see COPYING for details
|
||||||
|
*
|
||||||
|
* Copyright (c) 2005-2010 Brenden Matthews, Philip Kovacs, et. al.
|
||||||
|
* (see AUTHORS)
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef MYSQL_H_
|
||||||
|
#define MYSQL_H_
|
||||||
|
|
||||||
|
struct mysql_conn {
|
||||||
|
char *host;
|
||||||
|
int port;
|
||||||
|
char *user;
|
||||||
|
char *password;
|
||||||
|
char *db;
|
||||||
|
};
|
||||||
|
|
||||||
|
extern struct mysql_conn mysql_settings;
|
||||||
|
|
||||||
|
void mysql_set_host(const char *);
|
||||||
|
void mysql_set_port(const char *);
|
||||||
|
void mysql_set_user(const char *);
|
||||||
|
void mysql_set_password(const char *);
|
||||||
|
void mysql_set_db(const char *);
|
||||||
|
|
||||||
|
void print_mysql(struct text_object *, char *, int);
|
||||||
|
void free_mysql(struct text_object *);
|
||||||
|
|
||||||
|
#endif /*MYSQL_H_*/
|
@ -37,7 +37,7 @@
|
|||||||
#include <dirent.h>
|
#include <dirent.h>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
|
||||||
char* readfile(char* filename, int* total_read, char showerror) {
|
char* readfile(const char* filename, int* total_read, char showerror) {
|
||||||
FILE* file;
|
FILE* file;
|
||||||
char* buf = NULL;
|
char* buf = NULL;
|
||||||
int bytes_read;
|
int bytes_read;
|
||||||
|
@ -37,17 +37,17 @@
|
|||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <netinet/in.h>
|
#include <netinet/in.h>
|
||||||
|
|
||||||
struct read_tcp_data {
|
struct read_tcpip_data {
|
||||||
char *host;
|
char *host;
|
||||||
unsigned int port;
|
unsigned int port;
|
||||||
};
|
};
|
||||||
|
|
||||||
void parse_read_tcp_arg(struct text_object *obj, const char *arg, void *free_at_crash)
|
void parse_read_tcpip_arg(struct text_object *obj, const char *arg, void *free_at_crash)
|
||||||
{
|
{
|
||||||
struct read_tcp_data *rtd;
|
struct read_tcpip_data *rtd;
|
||||||
|
|
||||||
rtd = (struct read_tcp_data *) malloc(sizeof(struct read_tcp_data));
|
rtd = (struct read_tcpip_data *) malloc(sizeof(struct read_tcpip_data));
|
||||||
memset(rtd, 0, sizeof(struct read_tcp_data));
|
memset(rtd, 0, sizeof(struct read_tcpip_data));
|
||||||
|
|
||||||
rtd->host = (char *) malloc(text_buffer_size);
|
rtd->host = (char *) malloc(text_buffer_size);
|
||||||
sscanf(arg, "%s", rtd->host);
|
sscanf(arg, "%s", rtd->host);
|
||||||
@ -57,54 +57,70 @@ void parse_read_tcp_arg(struct text_object *obj, const char *arg, void *free_at_
|
|||||||
strcpy(rtd->host,"localhost");
|
strcpy(rtd->host,"localhost");
|
||||||
}
|
}
|
||||||
if(rtd->port < 1 || rtd->port > 65535)
|
if(rtd->port < 1 || rtd->port > 65535)
|
||||||
CRIT_ERR(obj, free_at_crash, "read_tcp: Needs \"(host) port\" as argument(s)");
|
CRIT_ERR(obj, free_at_crash, "read_tcp and read_udp need a port from 1 to 65535 as argument");
|
||||||
|
|
||||||
rtd->port = htons(rtd->port);
|
rtd->port = htons(rtd->port);
|
||||||
obj->data.opaque = rtd;
|
obj->data.opaque = rtd;
|
||||||
}
|
}
|
||||||
|
|
||||||
void print_read_tcp(struct text_object *obj, char *p, int p_max_size)
|
void print_read_tcpip(struct text_object *obj, char *p, int p_max_size, int protocol)
|
||||||
{
|
{
|
||||||
int sock, received;
|
int sock, received;
|
||||||
struct sockaddr_in addr;
|
struct sockaddr_in addr;
|
||||||
struct hostent* he;
|
struct hostent* he;
|
||||||
fd_set readfds;
|
fd_set readfds;
|
||||||
struct timeval tv;
|
struct timeval tv;
|
||||||
struct read_tcp_data *rtd = (struct read_tcp_data *) obj->data.opaque;
|
struct read_tcpip_data *rtd = (struct read_tcpip_data *) obj->data.opaque;
|
||||||
|
|
||||||
if (!rtd)
|
if (!rtd)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (!(he = gethostbyname(rtd->host))) {
|
if (!(he = gethostbyname(rtd->host))) {
|
||||||
NORM_ERR("read_tcp: Problem with resolving the hostname");
|
NORM_ERR("%s: Problem with resolving the hostname", protocol == IPPROTO_TCP ? "read_tcp" : "read_udp");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if ((sock = socket(he->h_addrtype, SOCK_STREAM, 0)) == -1) {
|
if ((sock = socket(he->h_addrtype, protocol == IPPROTO_TCP ? SOCK_STREAM : SOCK_DGRAM, protocol)) == -1) {
|
||||||
NORM_ERR("read_tcp: Couldn't create a socket");
|
NORM_ERR("%s: Couldn't create a socket", protocol == IPPROTO_TCP ? "read_tcp" : "read_udp");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
memset(&addr, 0, sizeof(addr));
|
memset(&addr, 0, sizeof(addr));
|
||||||
addr.sin_family = AF_INET;
|
addr.sin_family = AF_INET;
|
||||||
addr.sin_port = rtd->port;
|
addr.sin_port = rtd->port;
|
||||||
memcpy(&addr.sin_addr, he->h_addr, he->h_length);
|
memcpy(&addr.sin_addr, he->h_addr, he->h_length);
|
||||||
if (!connect(sock, (struct sockaddr*)&addr, sizeof(struct sockaddr))) {
|
if (connect(sock, (struct sockaddr*)&addr, sizeof(struct sockaddr)) != 0) {
|
||||||
NORM_ERR("read_tcp: Couldn't create a connection");
|
if(protocol == IPPROTO_TCP) {
|
||||||
|
NORM_ERR("read_tcp: Couldn't create a connection");
|
||||||
|
} else {
|
||||||
|
NORM_ERR("read_udp: Couldn't listen"); //other error because udp is connectionless
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if(protocol == IPPROTO_UDP)
|
||||||
|
write(sock, NULL, 0); //when using udp send a zero-length packet to let the other end know of our existence
|
||||||
FD_ZERO(&readfds);
|
FD_ZERO(&readfds);
|
||||||
FD_SET(sock, &readfds);
|
FD_SET(sock, &readfds);
|
||||||
tv.tv_sec = 1;
|
tv.tv_sec = 1;
|
||||||
tv.tv_usec = 0;
|
tv.tv_usec = 0;
|
||||||
if(select(sock + 1, &readfds, NULL, NULL, &tv) > 0){
|
if(select(sock + 1, &readfds, NULL, NULL, &tv) > 0){
|
||||||
received = recv(sock, p, p_max_size, 0);
|
received = recv(sock, p, p_max_size, 0);
|
||||||
p[received] = 0;
|
if(received != -1) p[received] = 0; else p[0] = 0;
|
||||||
}
|
}
|
||||||
close(sock);
|
close(sock);
|
||||||
}
|
}
|
||||||
|
|
||||||
void free_read_tcp(struct text_object *obj)
|
void print_read_tcp(struct text_object *obj, char *p, int p_max_size)
|
||||||
{
|
{
|
||||||
struct read_tcp_data *rtd = (struct read_tcp_data *) obj->data.opaque;
|
print_read_tcpip(obj, p, p_max_size, IPPROTO_TCP);
|
||||||
|
}
|
||||||
|
|
||||||
|
void print_read_udp(struct text_object *obj, char *p, int p_max_size)
|
||||||
|
{
|
||||||
|
print_read_tcpip(obj, p, p_max_size, IPPROTO_UDP);
|
||||||
|
}
|
||||||
|
|
||||||
|
void free_read_tcpip(struct text_object *obj)
|
||||||
|
{
|
||||||
|
struct read_tcpip_data *rtd = (struct read_tcpip_data *) obj->data.opaque;
|
||||||
|
|
||||||
if (!rtd)
|
if (!rtd)
|
||||||
return;
|
return;
|
@ -31,8 +31,9 @@
|
|||||||
#ifndef _READ_TCP_H
|
#ifndef _READ_TCP_H
|
||||||
#define _READ_TCP_H
|
#define _READ_TCP_H
|
||||||
|
|
||||||
void parse_read_tcp_arg(struct text_object *, const char *, void *);
|
void parse_read_tcpip_arg(struct text_object *, const char *, void *);
|
||||||
void print_read_tcp(struct text_object *, char *, int);
|
void print_read_tcp(struct text_object *, char *, int);
|
||||||
void free_read_tcp(struct text_object *);
|
void print_read_udp(struct text_object *, char *, int);
|
||||||
|
void free_read_tcpip(struct text_object *);
|
||||||
|
|
||||||
#endif /* _READ_TCP_H */
|
#endif /* _READ_TCP_H */
|
@ -40,11 +40,6 @@
|
|||||||
#endif /* HAVE_SYS_PARAM_H */
|
#endif /* HAVE_SYS_PARAM_H */
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
|
||||||
/* maximum number of special things, e.g. fonts, offsets, aligns, etc. */
|
|
||||||
int max_specials = MAX_SPECIALS_DEFAULT;
|
|
||||||
|
|
||||||
/* create specials array on heap instead of stack with introduction of
|
|
||||||
* max_specials */
|
|
||||||
struct special_t *specials = NULL;
|
struct special_t *specials = NULL;
|
||||||
|
|
||||||
int special_count;
|
int special_count;
|
||||||
@ -251,16 +246,32 @@ char *scan_graph(struct text_object *obj, const char *args, double defscale)
|
|||||||
* Printing various special text objects
|
* Printing various special text objects
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
struct special_t *new_special_t_node()
|
||||||
|
{
|
||||||
|
special_t *newnode = new special_t;
|
||||||
|
|
||||||
|
newnode->graph = NULL;
|
||||||
|
newnode->next = NULL;
|
||||||
|
return newnode;
|
||||||
|
}
|
||||||
|
|
||||||
struct special_t *new_special(char *buf, enum special_types t)
|
struct special_t *new_special(char *buf, enum special_types t)
|
||||||
{
|
{
|
||||||
if (special_count >= max_specials) {
|
special_t* current;
|
||||||
CRIT_ERR(NULL, NULL, "too many special things in text");
|
|
||||||
}
|
|
||||||
|
|
||||||
buf[0] = SPECIAL_CHAR;
|
buf[0] = SPECIAL_CHAR;
|
||||||
buf[1] = '\0';
|
buf[1] = '\0';
|
||||||
specials[special_count].type = t;
|
if(!specials)
|
||||||
return &specials[special_count++];
|
specials = new_special_t_node();
|
||||||
|
current = specials;
|
||||||
|
for(int i=0; i < special_count; i++) {
|
||||||
|
if(current->next == NULL)
|
||||||
|
current->next = new_special_t_node();
|
||||||
|
current = current->next;
|
||||||
|
}
|
||||||
|
current->type = t;
|
||||||
|
special_count++;
|
||||||
|
return current;
|
||||||
}
|
}
|
||||||
|
|
||||||
void new_gauge_in_shell(struct text_object *obj, char *p, int p_max_size, double usage)
|
void new_gauge_in_shell(struct text_object *obj, char *p, int p_max_size, double usage)
|
||||||
|
@ -73,6 +73,7 @@ struct special_t {
|
|||||||
unsigned long last_colour;
|
unsigned long last_colour;
|
||||||
short font_added;
|
short font_added;
|
||||||
char tempgrad;
|
char tempgrad;
|
||||||
|
struct special_t *next;
|
||||||
};
|
};
|
||||||
|
|
||||||
/* direct access to the registered specials (FIXME: bad encapsulation) */
|
/* direct access to the registered specials (FIXME: bad encapsulation) */
|
||||||
@ -91,9 +92,6 @@ extern int default_gauge_height;
|
|||||||
/* forward declare to avoid mutual inclusion between specials.h and text_object.h */
|
/* forward declare to avoid mutual inclusion between specials.h and text_object.h */
|
||||||
struct text_object;
|
struct text_object;
|
||||||
|
|
||||||
/* max number of specials allowed (TODO: use linked list instead) */
|
|
||||||
extern int max_specials;
|
|
||||||
|
|
||||||
/* scanning special arguments */
|
/* scanning special arguments */
|
||||||
const char *scan_bar(struct text_object *, const char *, double);
|
const char *scan_bar(struct text_object *, const char *, double);
|
||||||
const char *scan_gauge(struct text_object *, const char *, double);
|
const char *scan_gauge(struct text_object *, const char *, double);
|
||||||
|
@ -38,6 +38,7 @@
|
|||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
#include <memory>
|
||||||
|
|
||||||
#define MAX_HEADTAIL_LINES 30
|
#define MAX_HEADTAIL_LINES 30
|
||||||
#define DEFAULT_MAX_HEADTAIL_USES 2
|
#define DEFAULT_MAX_HEADTAIL_USES 2
|
||||||
|
@ -466,6 +466,8 @@ void destroy_window(void)
|
|||||||
|
|
||||||
void init_window(int w, int h, char **argv, int argc)
|
void init_window(int w, int h, char **argv, int argc)
|
||||||
{
|
{
|
||||||
|
// these vars are unused if OWN_WINDOW is not defined
|
||||||
|
(void)own_window; (void)w; (void)h; (void)argv; (void)argc;
|
||||||
/* There seems to be some problems with setting transparent background
|
/* There seems to be some problems with setting transparent background
|
||||||
* (on fluxbox this time). It doesn't happen always and I don't know why it
|
* (on fluxbox this time). It doesn't happen always and I don't know why it
|
||||||
* happens but I bet the bug is somewhere here. */
|
* happens but I bet the bug is somewhere here. */
|
||||||
|
Loading…
Reference in New Issue
Block a user