diff --git a/AUTHORS b/AUTHORS index fc9499bb..46837aa0 100644 --- a/AUTHORS +++ b/AUTHORS @@ -135,6 +135,10 @@ Johannes Winkelmann jolapache maildir format +Jonas Koelker + reload on SIGHUP patch + pad percantages fix patch + Joshua Gerrish mpd password patch @@ -164,6 +168,7 @@ killfire Lassi Selander XMMS2 patch + XMMS2 fixes patch Lauri Hakkarainen Some translating, web and other stuff @@ -211,6 +216,9 @@ Philip Kovacs Phil multiple batteries support + tp_smapi support + if_up patch + fix sysfs crashing patch Psychon a bunch of code cleanups @@ -218,9 +226,16 @@ Psychon roiban adi hex colour patch +Ryan Tandy + fs_type patch + Rui Paulo NetBSD support +Roland Shoemaker + user info patch + conky version info patch + Roman Bogorodskiy FreeBSD support BMPx support diff --git a/ChangeLog b/ChangeLog index b6bd380a..2b327d98 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,9 +1,21 @@ # $Id$ 2008-03-17 - * Applied 2 patches: + * Applied 12 patches: 1) sysfs battery support (for Linux >=2.6.24) (thanks Kapil) 2) Improved audacious support patch (thanks Miroslav) + 3) tp_smapi support patch for IBM laptops (thanks Phil) + 4) user info patch (thanks Roland) + 5) added conky build info patch (thanks Roland) + 6) added if_up patch (thanks Phil) + 7) added reload on SIGHUP patch (thanks Jonas) + 8) added pad percentages patch (thanks Jonas) + 9) added fs_type patch (thanks Ryan) + 10) added xmms2 fixes patch (thanks Lassi) + 11) fix sysfs crash patch (thanks Phil) + 12) multiple ip patch ($addrs) + * Added more alignment support (top_middle, bottom_middle, middle_left, + and middle_right). 2008-02-08 * Applied 2 patches: diff --git a/README b/README index 801d1450..45e1e8e8 100644 --- a/README +++ b/README @@ -39,7 +39,7 @@ COMPILING Example to compile and run Conky with all optional components (note that some configure options may differ for your system): - sh autogen.sh # Only required if building from Svn + sh autogen.sh # Only required if building from SVN ./configure --prefix=/usr --mandir=/usr/share/man --in- fodir=/usr/share/info --datadir=/usr/share --sysconfdir=/etc --local- @@ -75,14 +75,15 @@ YOU SHOULD KNOW unless you think something's seriously wrong (mem leak, etc.). An easy way to force Conky to reload your ~/.conkyrc: "killall -SIGUSR1 - conky". Saves you the trouble of having to kill and then restart. + conky". Saves you the trouble of having to kill and then restart. You + can now also do the same with SIGHUP. - IMPORTANT: For previous Conky users, Conky 1.3 no longer supports the - metar stuff. mdsplib was causing way too many problems. Hopefully + IMPORTANT: For previous Conky users, Conky 1.3 no longer supports the + metar stuff. mdsplib was causing way too many problems. Hopefully there'll be a better solution in Conky 2.x... OPTIONS - Command line options override configurations defined in configuration + Command line options override configurations defined in configuration file. -v | -V | --verbose @@ -138,21 +139,23 @@ OPTIONS CONFIGURATION SETTINGS - Default configuration file is $HOME/.conkyrc (can be changed from + Default configuration file is $HOME/.conkyrc (can be changed from conky.c among other things). See conkyrc.sample. If installing from De- - bian package, this should be in /usr/share/doc/conky/examples ("gunzip + bian package, this should be in /usr/share/doc/conky/examples ("gunzip conkyrc.sample.gz" to get conkyrc.sample). - You might want to copy it to $HOME/.conkyrc and then start modifying + You might want to copy it to $HOME/.conkyrc and then start modifying it. Other configs can be found at http://conky.sf.net alignment - Aligned position on screen, may be top_left, top_right, bot- - tom_left, bottom_right, or none + Aligned position on screen, may be top_left, top_right, top_mid- + dle, bottom_left, bottom_right, bottom_middle, middle_left, mid- + dle_right, or none (also can be abreviated as tl, tr, tm, bl, + br, bm, ml, mr) background - Boolean value, if true, Conky will be forked to background when + Boolean value, if true, Conky will be forked to background when started @@ -200,7 +203,7 @@ CONFIGURATION SETTINGS top_cpu_separate If true, cpu in top will show usage of one processor's power. If - false, cpu in top will show the usage of all processors' power + false, cpu in top will show the usage of all processors' power combined. @@ -241,18 +244,18 @@ CONFIGURATION SETTINGS font Font name in X, xfontsel can be used to get a nice font - gap_x Gap, in pixels, between right or left border of screen, same as + gap_x Gap, in pixels, between right or left border of screen, same as passing -x at command line, e.g. gap_x 10 - gap_y Gap, in pixels, between top or bottom border of screen, same as + gap_y Gap, in pixels, between top or bottom border of screen, same as passing -y at command line, e.g. gap_y 10. - imap Default global IMAP server. Arguments are: "host user pass [-i - interval] [-f folder] [-p port] [-e command]". Default port is - 143, default folder is 'INBOX', default interval is 5 minutes. - If the password is supplied as '*', you will be prompted to en- + imap Default global IMAP server. Arguments are: "host user pass [-i + interval] [-f folder] [-p port] [-e command]". Default port is + 143, default folder is 'INBOX', default interval is 5 minutes. + If the password is supplied as '*', you will be prompted to en- ter the password when Conky starts. @@ -261,12 +264,12 @@ CONFIGURATION SETTINGS max_port_monitor_connections - Allow each port monitor to track at most this many connections + Allow each port monitor to track at most this many connections (if 0 or not set, default is 256) max_specials - Maximum number of special things, e.g. fonts, offsets, aligns, + Maximum number of special things, e.g. fonts, offsets, aligns, etc. (default is 512) @@ -300,7 +303,7 @@ CONFIGURATION SETTINGS music_player_interval - Music player thread update interval (defaults to Conky's update + Music player thread update interval (defaults to Conky's update interval) @@ -325,21 +328,21 @@ CONFIGURATION SETTINGS own_window_colour colour - If own_window_transparent no, set a specified background colour - (defaults to black). Takes either a hex value (#ffffff) or a + If own_window_transparent no, set a specified background colour + (defaults to black). Takes either a hex value (#ffffff) or a valid RGB name (see /usr/lib/X11/rgb.txt) own_window_hints undecorated,below,above,sticky,skip_taskbar,skip_pager - If own_window is yes, you may use these window manager hints to + If own_window is yes, you may use these window manager hints to affect the way Conky displays. Notes: Use own_window_type desk- - top as another way to implement many of these hints implicitly. - If you use own_window_type override, window manager hints have + top as another way to implement many of these hints implicitly. + If you use own_window_type override, window manager hints have no meaning and are ignored. own_window_title - Manually set the window name. Defaults to " - conky". + Manually set the window name. Defaults to " - conky". own_window_transparent @@ -347,11 +350,11 @@ CONFIGURATION SETTINGS own_window_type - if own_window is yes, you may specify type normal, desktop or + if own_window is yes, you may specify type normal, desktop or override (default: normal). Desktop windows are special windows - that have no window decorations; are always visible on your - desktop; do not appear in your pager or taskbar; and are sticky - across all workspaces. Override windows are not under the con- + that have no window decorations; are always visible on your + desktop; do not appear in your pager or taskbar; and are sticky + across all workspaces. Override windows are not under the con- trol of the window manager. Hints are ignored. This type of win- dow can be useful for certain situations. @@ -364,9 +367,9 @@ CONFIGURATION SETTINGS Pad percentages to this many decimals (0 = no padding) - pop3 Default global POP3 server. Arguments are: "host user pass [-i - interval] [-p port] [-e command]". Default port is 110, default - interval is 5 minutes. If the password is supplied as '*', you + pop3 Default global POP3 server. Arguments are: "host user pass [-i + interval] [-p port] [-e command]". Default port is 110, default + interval is 5 minutes. If the password is supplied as '*', you will be prompted to enter the password when Conky starts. @@ -380,7 +383,7 @@ CONFIGURATION SETTINGS total_run_times - Total number of times for Conky to update before quitting. Zero + Total number of times for Conky to update before quitting. Zero makes Conky run forever @@ -395,8 +398,8 @@ CONFIGURATION SETTINGS use_spacer Adds spaces around certain objects to stop them from moving oth- er things around. Arguments are left, right, and none (default). - The old true/false values are deprecated and default to - right/none respectively. Note that this only helps if you are + The old true/false values are deprecated and default to + right/none respectively. Note that this only helps if you are using a mono font, such as Bitstream Vera Sans Mono. @@ -416,16 +419,21 @@ CONFIGURATION SETTINGS VARIABLES - Colors are parsed using XParsecolor(), there might be a list of them: - /usr/X11R6/lib/X11/rgb.txt. Also, . - Color can be also in #rrggbb format (hex). Note that when displaying - bytes, power is 1024 and not 1000 so 1M really means 1024*1024 bytes + Colors are parsed using XParsecolor(), there might be a list of them: + /usr/X11R6/lib/X11/rgb.txt. Also, . + Color can be also in #rrggbb format (hex). Note that when displaying + bytes, power is 1024 and not 1000 so 1M really means 1024*1024 bytes and not 1000*1000. addr interface IP address for an interface + addrs interface + IP addresses for an interface (if one - works like addr). Linux + only. + + acpiacadapter ACPI ac adapter state. @@ -609,6 +617,18 @@ VARIABLES color9 Change drawing color to color9 configuration option + conky_version + Conky version + + + conky_build_date + Date Conky was built + + + conky_bulid_arch + CPU architecture Conky was built for + + cpu (cpuN) CPU usage in percents. For SMP machines, the CPU number can be provided as an argument. ${cpu cpu0} is the total usage, and @@ -763,6 +783,10 @@ VARIABLES File system size + fs_type (fs) + File system type + + fs_used (fs) File system used space @@ -919,11 +943,22 @@ VARIABLES and the matching $endif + if_smapi_bat_installed (INDEX) + when using smapi, if the battery with index INDEX is installed, + display everything between $if_smapi_bat_installed and the + matching $endif + + + if_up (interface) + if INTERFACE exists and is up, display everything between $if_up + and the matching $endif + + imap_messages (args) Displays the number of messages in your global IMAP inbox by de- - fault. You can define individual IMAP inboxes seperately by + fault. You can define individual IMAP inboxes seperately by passing arguments to this object. Arguments are: "host user pass - [-i interval] [-p port] [-e command]". Default port is 143, de- + [-i interval] [-p port] [-e command]". Default port is 143, de- fault interval is 5 minutes. If the password is supplied as '*', you will be prompted to enter the password when Conky starts. @@ -932,7 +967,7 @@ VARIABLES Displays the number of unseen messages in your global IMAP inbox by default. You can define individual IMAP inboxes seperately by passing arguments to this object. Arguments are: "host user pass - [-i interval] [-p port] [-e command]". Default port is 143, de- + [-i interval] [-p port] [-e command]". Default port is 143, de- fault interval is 5 minutes. If the password is supplied as '*', you will be prompted to enter the password when Conky starts. @@ -950,16 +985,16 @@ VARIABLES mails (mailbox) (interval) - Mail count in the specified mailbox or your mail spool if not. - Both mbox and maildir type mailboxes are supported. You can use - a program like fetchmail to get mails from some server using + Mail count in the specified mailbox or your mail spool if not. + Both mbox and maildir type mailboxes are supported. You can use + a program like fetchmail to get mails from some server using your favourite protocol. See also new_mails. mboxscan (-n number of messages to print) (-fw from width) (-sw subject width) mbox - Print a summary of recent messages in an mbox format mailbox. - mbox parameter is the filename of the mailbox (can be encapsu- + Print a summary of recent messages in an mbox format mailbox. + mbox parameter is the filename of the mailbox (can be encapsu- lated using '"', ie. ${mboxscan -n 10 "/home/brenden/some box"} @@ -1057,26 +1092,26 @@ VARIABLES pb_battery item If running on Apple powerbook/ibook, display information on bat- - tery status. The item parameter specifies, what information to + tery status. The item parameter specifies, what information to display. Exactly one item must be specified. Valid items are: status: Display if battery is fully charged, charging, discharg- ing or absent (running on AC) - percent: Display charge of battery in percent, if charging or - discharging. Nothing will be displayed, if battery is fully + percent: Display charge of battery in percent, if charging or + discharging. Nothing will be displayed, if battery is fully charged or absent. time: Display the time remaining until the battery will be fully - charged or discharged at current rate. Nothing is displayed, if - battery is absent or if it's present but fully charged and not + charged or discharged at current rate. Nothing is displayed, if + battery is absent or if it's present but fully charged and not discharging. platform (dev) type n - Platform sensor from sysfs (Linux 2.6). Parameter dev may be - omitted if you have only one platform device. Platform type is - either 'in' or 'vol' meaning voltage; 'fan' meaning fan; 'temp' + Platform sensor from sysfs (Linux 2.6). Parameter dev may be + omitted if you have only one platform device. Platform type is + either 'in' or 'vol' meaning voltage; 'fan' meaning fan; 'temp' (Celsius) or 'tempf' (Fahrenheit) meaning temperature. Parameter - n is number of the sensor. See /sys/bus/platform/devices/ on + n is number of the sensor. See /sys/bus/platform/devices/ on your local computer. @@ -1084,17 +1119,17 @@ VARIABLES Displays the number of unseen messages in your global POP3 inbox by default. You can define individual POP3 inboxes seperately by passing arguments to this object. Arguments are: "host user pass - [-i interval] [-p port] [-e command]". Default port is 110, de- + [-i interval] [-p port] [-e command]". Default port is 110, de- fault interval is 5 minutes. If the password is supplied as '*', you will be prompted to enter the password when Conky starts. pop3_used (args) - Displays the amount of space (in MiB, 2^20) used in your global - POP3 inbox by default. You can define individual POP3 inboxes - seperately by passing arguments to this object. Arguments are: - "host user pass [-i interval] [-p port] [-e command]". Default - port is 110, default interval is 5 minutes. If the password is + Displays the amount of space (in MiB, 2^20) used in your global + POP3 inbox by default. You can define individual POP3 inboxes + seperately by passing arguments to this object. Arguments are: + "host user pass [-i interval] [-p port] [-e command]". Default + port is 110, default interval is 5 minutes. If the password is supplied as '*', you will be prompted to enter the password when Conky starts. @@ -1116,6 +1151,25 @@ VARIABLES Change shading color + smapi (ARGS) + when using smapi, display contents of the /sys/devices/plat- + form/smapi directory. ARGS are either '(FILENAME)' or 'bat (IN- + DEX) (FILENAME)' to display the corresponding files' content. + This is a very raw method of accessing the smapi values. When + available, better use one of the smapi_* variables instead. + + + smapi_bat_perc (INDEX) + when using smapi, display the remaining capacity in percent of + the battery with index INDEX. This is a separate variable be- + cause it supports the 'use_spacer' configuration option. + + + smapi_bat_bar (INDEX),(height),(width) + when using smapi, display the remaining capacity of the battery + with index INDEX as a bar. + + stippled_hr (space) Stippled (dashed) horizontal line @@ -1272,6 +1326,22 @@ VARIABLES Uptime in a shorter format + user_number + Number of users logged in + + + user_names + Lists the names of the users logged in + + + user_terms + Lists the consoles in use + + + user_times + Lists how long users have been logged in for + + voffset (pixels) Change vertical offset by N pixels. Negative values will cause text to overlap. See also $offset. diff --git a/README.cvs-version b/README.svn-version similarity index 85% rename from README.cvs-version rename to README.svn-version index f1872286..dfad05bc 100644 --- a/README.cvs-version +++ b/README.svn-version @@ -1,9 +1,9 @@ THESE INSTRUCTIONS ARE ONLY IF "sh autogen.sh" DOESN'T WORK!!! First, read the README. This contains instructions specific to building conky -fresh from a CVS checkout: +Fresh from a SVN checkout: -* As the README says, you need to have the X development libraries installed. +* As the README says, you need to have the X development libraries installed. This should be a package along the lines of libx11-dev or xorg-x11-dev . * Conky requires three "auto-tools", with at least the specific version numbers. Make sure these are installed: @@ -12,7 +12,7 @@ fresh from a CVS checkout: automake-1.9 autoconf-2.59 -* In the directory where you checked out conky from CVS, +* In the directory where you checked out conky from SVN, run "aclocal", "automake", and then "autoconf". Make sure you run those commands with the latest versions... it is very possible that older versions are installed, and diff --git a/configure.ac.in b/configure.ac.in index 5a5f11f6..26c86e84 100644 --- a/configure.ac.in +++ b/configure.ac.in @@ -219,6 +219,19 @@ if test x$want_rss = xyes; then AC_DEFINE(RSS, 1, [Define if you want rss support]) fi +dnl +dnl SMAPI +dnl + +AC_ARG_ENABLE([smapi], + AC_HELP_STRING([--enable-smapi], [enable if you want smapi support @<:@default=no@:>@]), + [want_smapi="$enableval"], [want_smapi=no]) + +AM_CONDITIONAL(BUILD_SMAPI, test x$want_smapi = xyes) +if test x$want_smapi = xyes; then + AC_DEFINE(SMAPI, 1, [Define if you want smapi support]) +fi + dnl dnl Wireless extensions dnl @@ -474,6 +487,14 @@ AC_SEARCH_LIBS(clock_gettime, [rt], [AC_DEFINE(HAVE_CLOCK_GETTIME, 1, [Define if you have clock_gettime()])], [AC_CHECK_FUNCS([gettimeofday], [], [AC_MSG_ERROR([gettimeofday() not available!])])], []) +dnl +dnl Structure checks +dnl + +AC_CHECK_MEMBER([struct statfs.f_fstypename], + [AC_DEFINE(HAVE_STRUCT_STATFS_F_FSTYPENAME, 1, [Define if struct statfs has the f_fstypename member])], + [], + [#include ]) dnl dnl Check for zlib @@ -583,4 +604,5 @@ $PACKAGE $VERSION configured successfully: portmon: $want_portmon rss: $want_rss wireless: $want_wlan + smapi: $want_smapi EOF diff --git a/doc/config_settings.xml b/doc/config_settings.xml index 9bf9f5f1..54750aea 100644 --- a/doc/config_settings.xml +++ b/doc/config_settings.xml @@ -2,7 +2,7 @@ - Aligned position on screen, may be top_left, top_right, bottom_left, bottom_right, or none + Aligned position on screen, may be top_left, top_right, top_middle, bottom_left, bottom_right, bottom_middle, middle_left, middle_right, or none (also can be abreviated as tl, tr, tm, bl, br, bm, ml, mr) diff --git a/doc/conky.1 b/doc/conky.1 index fb14f374..7cda6ae2 100644 --- a/doc/conky.1 +++ b/doc/conky.1 @@ -41,16 +41,16 @@ Debian,etc. users -- Conky will be in Debian's repositories soon (by mid-Septemb Ubuntu shortly thereafter. Until then, "dpkg -i" the .deb package to install. .PP Example to compile and run Conky with all optional components (note that some configure options may differ for your system): -.TP -\fB\*(T<\fBsh autogen.sh\fR\*(T>\fR \*(T<\fB# Only required if building from Svn\fR\*(T> -.TP -\fB\*(T<\fB\&./configure \fR\*(T>\fR\*(T<\fB\-\-prefix=/usr \-\-mandir=/usr/share/man \-\-infodir=/usr/share/info \-\-datadir=/usr/share \-\-sysconfdir=/etc \-\-localstatedir=/var/lib \-\-disable\-own\-window \-\-enable\-audacious[=yes|no|legacy] \-\-enable\-bmpx \-\-disable\-hddtemp \-\-disable\-mpd \-\-enable\-xmms2 \-\-disable\-portmon \-\-disable\-network \-\-enable\-debug \-\-disable\-x11 \-\-disable\-double\-buffer \-\-disable\-xdamage \-\-disable\-xft\fR\*(T> -.TP -\fB\*(T<\fBmake\fR\*(T>\fR -.TP -\fB\*(T<\fBmake install\fR\*(T>\fR \*(T<\fB# Optional\fR\*(T> -.TP -\fB\*(T<\fBsrc/conky\fR\*(T>\fR +.TP +\fB\*(T<\fBsh autogen.sh\fR\*(T>\fR \*(T<\fB# Only required if building from SVN\fR\*(T> +.TP +\fB\*(T<\fB\&./configure \fR\*(T>\fR\*(T<\fB\-\-prefix=/usr \-\-mandir=/usr/share/man \-\-infodir=/usr/share/info \-\-datadir=/usr/share \-\-sysconfdir=/etc \-\-localstatedir=/var/lib \-\-disable\-own\-window \-\-enable\-audacious[=yes|no|legacy] \-\-enable\-bmpx \-\-disable\-hddtemp \-\-disable\-mpd \-\-enable\-xmms2 \-\-disable\-portmon \-\-disable\-network \-\-enable\-debug \-\-disable\-x11 \-\-disable\-double\-buffer \-\-disable\-xdamage \-\-disable\-xft\fR\*(T> +.TP +\fB\*(T<\fBmake\fR\*(T>\fR +.TP +\fB\*(T<\fBmake install\fR\*(T>\fR \*(T<\fB# Optional\fR\*(T> +.TP +\fB\*(T<\fBsrc/conky\fR\*(T>\fR .PP Conky probably doesn't compile with compilers other than gcc and icc. It doesn't compile with C89 compiler and not even with pure C99. @@ -70,61 +70,61 @@ If you do use them, please do not complain about memory or CPU usage, unless you think something's seriously wrong (mem leak, etc.). .PP An easy way to force Conky to reload your ~/.conkyrc: "killall -SIGUSR1 conky". -Saves you the trouble of having to kill and then restart. +Saves you the trouble of having to kill and then restart. You can now also do the same with SIGHUP. .PP IMPORTANT: For previous Conky users, Conky 1.3 no longer supports the metar stuff. mdsplib was causing way too many problems. Hopefully there'll be a better solution in Conky 2.x... .SH OPTIONS Command line options override configurations defined in configuration file. -.TP +.TP \fB\*(T<\fB\-v | \-V | \-\-verbose\fR\*(T>\fR Prints version and exits -.TP +.TP \fB\*(T<\fB\-a | \-\-alignment=\fR\*(T>\fR\*(T<\fBALIGNMENT\fR\*(T> Text alignment on screen, {top,bottom}_{left,right} or none -.TP +.TP \fB\*(T<\fB\-b | \-\-double\-buffer\fR\*(T>\fR Use double buffering (eliminates "flicker") -.TP +.TP \fB\*(T<\fB\-c | \-\-config=\fR\*(T>\fR\*(T<\fBFILE\fR\*(T> Config file to load instead of $HOME/.conkyrc -.TP +.TP \fB\*(T<\fB\-d | \-\-daemonize\fR\*(T>\fR Daemonize Conky, aka fork to background -.TP +.TP \fB\*(T<\fB\-f | \-\-font=\fR\*(T>\fR\*(T<\fBFONT\fR\*(T> Font to use -.TP +.TP \fB\*(T<\fB\-h | \-\-help\fR\*(T>\fR Prints command line help and exits -.TP +.TP \fB\*(T<\fB\-o | \-\-own\-window\fR\*(T>\fR Create own window to draw -.TP +.TP \fB\*(T<\fB\-t | \-\-text=\fR\*(T>\fR\*(T<\fBTEXT\fR\*(T> Text to render, remember single quotes, like -t ' $uptime ' -.TP +.TP \fB\*(T<\fB\-u | \-\-interval=\fR\*(T>\fR\*(T<\fBSECONDS\fR\*(T> Update interval -.TP +.TP \fB\*(T<\fB\-w | \-\-window\-id=\fR\*(T>\fR\*(T<\fBWIN_ID\fR\*(T> Window id to draw -.TP +.TP \fB\*(T<\fB\-x \fR\*(T>\fR\*(T<\fBX_COORDINATE\fR\*(T> X position -.TP +.TP \fB\*(T<\fB\-y \fR\*(T>\fR\*(T<\fBY_COORDINATE\fR\*(T> Y position @@ -135,204 +135,204 @@ this should be in /usr/share/doc/conky/examples ("gunzip conkyrc.sample.gz" to g .PP You might want to copy it to $HOME/.conkyrc and then start modifying it. Other configs can be found at http://conky.sf.net -.TP +.TP \fB\*(T<\fBalignment\fR\*(T>\fR -Aligned position on screen, may be top_left, top_right, bottom_left, bottom_right, or none +Aligned position on screen, may be top_left, top_right, top_middle, bottom_left, bottom_right, bottom_middle, middle_left, middle_right, or none (also can be abreviated as tl, tr, tm, bl, br, bm, ml, mr) -.TP +.TP \fB\*(T<\fBbackground\fR\*(T>\fR Boolean value, if true, Conky will be forked to background when started -.TP +.TP \fB\*(T<\fBborder_margin\fR\*(T>\fR Border margin in pixels -.TP +.TP \fB\*(T<\fBborder_width\fR\*(T>\fR Border width in pixels -.TP +.TP \fB\*(T<\fBcolor0\fR\*(T>\fR A color variable for use inside TEXT segments -.TP +.TP \fB\*(T<\fBcolor1\fR\*(T>\fR A color variable for use inside TEXT segments -.TP +.TP \fB\*(T<\fBcolor2\fR\*(T>\fR A color variable for use inside TEXT segments -.TP +.TP \fB\*(T<\fBcolor3\fR\*(T>\fR A color variable for use inside TEXT segments -.TP +.TP \fB\*(T<\fBcolor4\fR\*(T>\fR A color variable for use inside TEXT segments -.TP +.TP \fB\*(T<\fBcolor5\fR\*(T>\fR A color variable for use inside TEXT segments -.TP +.TP \fB\*(T<\fBcolor6\fR\*(T>\fR A color variable for use inside TEXT segments -.TP +.TP \fB\*(T<\fBcolor7\fR\*(T>\fR A color variable for use inside TEXT segments -.TP +.TP \fB\*(T<\fBcolor8\fR\*(T>\fR A color variable for use inside TEXT segments -.TP +.TP \fB\*(T<\fBcolor9\fR\*(T>\fR A color variable for use inside TEXT segments -.TP +.TP \fB\*(T<\fBcpu_avg_samples\fR\*(T>\fR The number of samples to average for CPU monitoring -.TP +.TP \fB\*(T<\fBtop_cpu_separate\fR\*(T>\fR If true, cpu in top will show usage of one processor's power. If false, cpu in top will show the usage of all processors' power combined. -.TP +.TP \fB\*(T<\fBdefault_color\fR\*(T>\fR Default color and border color -.TP +.TP \fB\*(T<\fBdefault_outline_color\fR\*(T>\fR Default outline color -.TP +.TP \fB\*(T<\fBdefault_shade_color\fR\*(T>\fR Default shading color and border's shading color -.TP +.TP \fB\*(T<\fBdouble_buffer\fR\*(T>\fR Use the Xdbe extension? (eliminates flicker) It is highly recommended to use own window with this one so double buffer won't be so big. -.TP +.TP \fB\*(T<\fBdraw_borders\fR\*(T>\fR Draw borders around text? -.TP +.TP \fB\*(T<\fBdraw_graph_borders\fR\*(T>\fR Draw borders around graphs? -.TP +.TP \fB\*(T<\fBdraw_outline\fR\*(T>\fR Draw outlines? -.TP +.TP \fB\*(T<\fBdraw_shades\fR\*(T>\fR Draw shades? -.TP +.TP \fB\*(T<\fBfont\fR\*(T>\fR Font name in X, xfontsel can be used to get a nice font -.TP +.TP \fB\*(T<\fBgap_x\fR\*(T>\fR Gap, in pixels, between right or left border of screen, same as passing -x at command line, e.g. gap_x 10 -.TP +.TP \fB\*(T<\fBgap_y\fR\*(T>\fR Gap, in pixels, between top or bottom border of screen, same as passing -y at command line, e.g. gap_y 10. -.TP +.TP \fB\*(T<\fBimap\fR\*(T>\fR Default global IMAP server. Arguments are: "host user pass [-i interval] [-f folder] [-p port] [-e command]". Default port is 143, default folder is 'INBOX', default interval is 5 minutes. If the password is supplied as '*', you will be prompted to enter the password when Conky starts. -.TP +.TP \fB\*(T<\fBmail_spool\fR\*(T>\fR Mail spool for mail checking -.TP +.TP \fB\*(T<\fBmax_port_monitor_connections\fR\*(T>\fR Allow each port monitor to track at most this many connections (if 0 or not set, default is 256) -.TP +.TP \fB\*(T<\fBmax_specials\fR\*(T>\fR Maximum number of special things, e.g. fonts, offsets, aligns, etc. (default is 512) -.TP -\fB\*(T<\fBmax_user_text\fR\*(T>\fR \*(T<\fBbytes\fR\*(T> +.TP +\fB\*(T<\fBmax_user_text\fR\*(T>\fR \*(T<\fBbytes\fR\*(T> Maximum size of user text buffer, i.e. layout below TEXT line in config file (default is 16384 bytes) -.TP -\fB\*(T<\fBtext_buffer_size\fR\*(T>\fR \*(T<\fBbytes\fR\*(T> +.TP +\fB\*(T<\fBtext_buffer_size\fR\*(T>\fR \*(T<\fBbytes\fR\*(T> Size of the standard text buffer (default is 1280 bytes). -.TP -\fB\*(T<\fBmaximum_width\fR\*(T>\fR \*(T<\fBpixels\fR\*(T> +.TP +\fB\*(T<\fBmaximum_width\fR\*(T>\fR \*(T<\fBpixels\fR\*(T> Maximum width of window -.TP -\fB\*(T<\fBminimum_size\fR\*(T>\fR \*(T<\fBwidth (height)\fR\*(T> +.TP +\fB\*(T<\fBminimum_size\fR\*(T>\fR \*(T<\fBwidth (height)\fR\*(T> Minimum size of window -.TP +.TP \fB\*(T<\fBmpd_host\fR\*(T>\fR Host of MPD server -.TP +.TP \fB\*(T<\fBmpd_port\fR\*(T>\fR Port of MPD server -.TP +.TP \fB\*(T<\fBmpd_password\fR\*(T>\fR MPD server password -.TP +.TP \fB\*(T<\fBmusic_player_interval\fR\*(T>\fR Music player thread update interval (defaults to Conky's update interval) -.TP +.TP \fB\*(T<\fBnet_avg_samples\fR\*(T>\fR The number of samples to average for net data -.TP +.TP \fB\*(T<\fBno_buffers\fR\*(T>\fR Substract (file system) buffers from used memory? -.TP +.TP \fB\*(T<\fBoverride_utf8_locale\fR\*(T>\fR Force UTF8? requires XFT -.TP +.TP \fB\*(T<\fBown_window\fR\*(T>\fR Boolean, create own window to draw? -.TP +.TP \fB\*(T<\fBown_window_class\fR\*(T>\fR Manually set the WM_CLASS name. Defaults to "Conky". -.TP -\fB\*(T<\fBown_window_colour\fR\*(T>\fR \*(T<\fBcolour\fR\*(T> +.TP +\fB\*(T<\fBown_window_colour\fR\*(T>\fR \*(T<\fBcolour\fR\*(T> If own_window_transparent no, set a specified background colour (defaults to black). Takes either a hex value (#ffffff) or a valid RGB name (see /usr/lib/X11/rgb.txt) -.TP -\fB\*(T<\fBown_window_hints\fR\*(T>\fR \*(T<\fBundecorated,below,above,sticky,skip_taskbar,skip_pager\fR\*(T> +.TP +\fB\*(T<\fBown_window_hints\fR\*(T>\fR \*(T<\fBundecorated,below,above,sticky,skip_taskbar,skip_pager\fR\*(T> If own_window is yes, you may use these window manager hints to affect the way Conky displays. Notes: Use own_window_type desktop as another way to implement many of these hints implicitly. If you use own_window_type override, window manager hints have no meaning and are ignored. -.TP +.TP \fB\*(T<\fBown_window_title\fR\*(T>\fR Manually set the window name. Defaults to " - conky". -.TP +.TP \fB\*(T<\fBown_window_transparent\fR\*(T>\fR Boolean, set pseudo-transparency? -.TP +.TP \fB\*(T<\fBown_window_type\fR\*(T>\fR if own_window is yes, you may specify type normal, desktop or override (default: normal). Desktop windows are special windows that have no window decorations; are always visible @@ -340,55 +340,55 @@ on your desktop; do not appear in your pager or taskbar; and are sticky across a Override windows are not under the control of the window manager. Hints are ignored. This type of window can be useful for certain situations. -.TP -\fB\*(T<\fBout_to_console\fR\*(T>\fR +.TP +\fB\*(T<\fBout_to_console\fR\*(T>\fR Print text to stdout. -.TP +.TP \fB\*(T<\fBpad_percents\fR\*(T>\fR Pad percentages to this many decimals (0 = no padding) -.TP +.TP \fB\*(T<\fBpop3\fR\*(T>\fR Default global POP3 server. Arguments are: "host user pass [-i interval] [-p port] [-e command]". Default port is 110, default interval is 5 minutes. If the password is supplied as '*', you will be prompted to enter the password when Conky starts. -.TP +.TP \fB\*(T<\fBshort_units\fR\*(T>\fR Shortens units to a single character (kiB->k, GiB->G, etc.). Default is off. -.TP +.TP \fB\*(T<\fBstippled_borders\fR\*(T>\fR Border stippling (dashing) in pixels -.TP +.TP \fB\*(T<\fBtotal_run_times\fR\*(T>\fR Total number of times for Conky to update before quitting. Zero makes Conky run forever -.TP +.TP \fB\*(T<\fBupdate_interval\fR\*(T>\fR Update interval in seconds -.TP +.TP \fB\*(T<\fBuppercase\fR\*(T>\fR Boolean value, if true, text is rendered in upper case -.TP +.TP \fB\*(T<\fBuse_spacer\fR\*(T>\fR Adds spaces around certain objects to stop them from moving other things around. Arguments are left, right, and none (default). The old true/false values are deprecated and default to right/none respectively. Note that this only helps if you are using a mono font, such as Bitstream Vera Sans Mono. -.TP +.TP \fB\*(T<\fBuse_xft\fR\*(T>\fR Use Xft (anti-aliased font and stuff) -.TP +.TP \fB\*(T<\fBxftalpha\fR\*(T>\fR Alpha of Xft font. Must be a value at or between 1 and 0. -.TP +.TP \fB\*(T<\fBxftfont\fR\*(T>\fR Xft font to use. -.TP +.TP \fB\*(T<\fBTEXT\fR\*(T>\fR After this begins text to be formatted on screen @@ -398,570 +398,598 @@ Colors are parsed using XParsecolor(), there might be a list of them: Color can be also in #rrggbb format (hex). Note that when displaying bytes, power is 1024 and not 1000 so 1M really means 1024*1024 bytes and not 1000*1000. -.TP -\fB\*(T<\fBaddr\fR\*(T>\fR \*(T<\fBinterface\fR\*(T> +.TP +\fB\*(T<\fBaddr\fR\*(T>\fR \*(T<\fBinterface\fR\*(T> IP address for an interface -.TP -\fB\*(T<\fBacpiacadapter\fR\*(T>\fR +.TP +\fB\*(T<\fBaddrs\fR\*(T>\fR \*(T<\fBinterface\fR\*(T> +IP addresses for an interface (if one - works like addr). Linux only. + +.TP +\fB\*(T<\fBacpiacadapter\fR\*(T>\fR ACPI ac adapter state. -.TP -\fB\*(T<\fBacpifan\fR\*(T>\fR +.TP +\fB\*(T<\fBacpifan\fR\*(T>\fR ACPI fan state -.TP -\fB\*(T<\fBacpitemp\fR\*(T>\fR +.TP +\fB\*(T<\fBacpitemp\fR\*(T>\fR ACPI temperature in C. -.TP -\fB\*(T<\fBacpitempf\fR\*(T>\fR +.TP +\fB\*(T<\fBacpitempf\fR\*(T>\fR ACPI temperature in F. -.TP -\fB\*(T<\fBadt746xcpu\fR\*(T>\fR +.TP +\fB\*(T<\fBadt746xcpu\fR\*(T>\fR CPU temperature from therm_adt746x -.TP -\fB\*(T<\fBadt746xfan\fR\*(T>\fR +.TP +\fB\*(T<\fBadt746xfan\fR\*(T>\fR Fan speed from therm_adt746x -.TP -\fB\*(T<\fBalignr\fR\*(T>\fR \*(T<\fB(num)\fR\*(T> +.TP +\fB\*(T<\fBalignr\fR\*(T>\fR \*(T<\fB(num)\fR\*(T> Right-justify text, with space of N -.TP -\fB\*(T<\fBalignc\fR\*(T>\fR \*(T<\fB(num)\fR\*(T> +.TP +\fB\*(T<\fBalignc\fR\*(T>\fR \*(T<\fB(num)\fR\*(T> Align text to centre -.TP -\fB\*(T<\fBapm_adapter\fR\*(T>\fR +.TP +\fB\*(T<\fBapm_adapter\fR\*(T>\fR Display APM AC adapter status (FreeBSD only) -.TP -\fB\*(T<\fBapm_battery_life\fR\*(T>\fR +.TP +\fB\*(T<\fBapm_battery_life\fR\*(T>\fR Display APM battery life in percent (FreeBSD only) -.TP -\fB\*(T<\fBapm_battery_time\fR\*(T>\fR +.TP +\fB\*(T<\fBapm_battery_time\fR\*(T>\fR Display remaining APM battery life in hh:mm:ss or "unknown" if AC adapterstatus is on-line or charging (FreeBSD only) -.TP -\fB\*(T<\fBaudacious_bar\fR\*(T>\fR \*(T<\fB(height),(width)\fR\*(T> +.TP +\fB\*(T<\fBaudacious_bar\fR\*(T>\fR \*(T<\fB(height),(width)\fR\*(T> Progress bar -.TP -\fB\*(T<\fBaudacious_bitrate\fR\*(T>\fR +.TP +\fB\*(T<\fBaudacious_bitrate\fR\*(T>\fR Bitrate of current tune -.TP -\fB\*(T<\fBaudacious_channels\fR\*(T>\fR +.TP +\fB\*(T<\fBaudacious_channels\fR\*(T>\fR Number of audio channels of current tune -.TP -\fB\*(T<\fBaudacious_filename\fR\*(T>\fR +.TP +\fB\*(T<\fBaudacious_filename\fR\*(T>\fR Full path and filename of current tune -.TP -\fB\*(T<\fBaudacious_frequency\fR\*(T>\fR +.TP +\fB\*(T<\fBaudacious_frequency\fR\*(T>\fR Sampling frequency of current tune -.TP -\fB\*(T<\fBaudacious_length\fR\*(T>\fR +.TP +\fB\*(T<\fBaudacious_length\fR\*(T>\fR Total length of current tune as MM:SS -.TP -\fB\*(T<\fBaudacious_length_seconds\fR\*(T>\fR +.TP +\fB\*(T<\fBaudacious_length_seconds\fR\*(T>\fR Total length of current tune in seconds -.TP -\fB\*(T<\fBaudacious_playlist_position\fR\*(T>\fR +.TP +\fB\*(T<\fBaudacious_playlist_position\fR\*(T>\fR Playlist position of current tune -.TP -\fB\*(T<\fBaudacious_playlist_length\fR\*(T>\fR +.TP +\fB\*(T<\fBaudacious_playlist_length\fR\*(T>\fR Number of tunes in playlist -.TP -\fB\*(T<\fBaudacious_position\fR\*(T>\fR +.TP +\fB\*(T<\fBaudacious_position\fR\*(T>\fR Position of current tune (MM:SS) -.TP -\fB\*(T<\fBaudacious_position_seconds\fR\*(T>\fR +.TP +\fB\*(T<\fBaudacious_position_seconds\fR\*(T>\fR Position of current tune in seconds -.TP -\fB\*(T<\fBaudacious_status\fR\*(T>\fR +.TP +\fB\*(T<\fBaudacious_status\fR\*(T>\fR Player status (Playing/Paused/Stopped/Not running) -.TP -\fB\*(T<\fBaudacious_title\fR\*(T>\fR \*(T<\fB(max length)\fR\*(T> +.TP +\fB\*(T<\fBaudacious_title\fR\*(T>\fR \*(T<\fB(max length)\fR\*(T> Title of current tune with optional maximum length specifier -.TP -\fB\*(T<\fBbattery\fR\*(T>\fR \*(T<\fB(num)\fR\*(T> +.TP +\fB\*(T<\fBbattery\fR\*(T>\fR \*(T<\fB(num)\fR\*(T> Battery status and remaining percentage capacity of ACPI or APM battery. ACPI battery number can be given as argument (default is BAT0). -.TP -\fB\*(T<\fBbattery_bar\fR\*(T>\fR \*(T<\fB(height),(width) (num)\fR\*(T> +.TP +\fB\*(T<\fBbattery_bar\fR\*(T>\fR \*(T<\fB(height),(width) (num)\fR\*(T> Battery percentage remaining of ACPI battery in a bar. ACPI battery number can be given as argument (default is BAT0). -.TP -\fB\*(T<\fBbattery_percent\fR\*(T>\fR \*(T<\fB(num)\fR\*(T> +.TP +\fB\*(T<\fBbattery_percent\fR\*(T>\fR \*(T<\fB(num)\fR\*(T> Battery percentage remaining for ACPI battery. ACPI battery number can be given as argument (default is BAT0). -.TP -\fB\*(T<\fBbattery_time\fR\*(T>\fR \*(T<\fB(num)\fR\*(T> +.TP +\fB\*(T<\fBbattery_time\fR\*(T>\fR \*(T<\fB(num)\fR\*(T> Battery charge/discharge time remaining of ACPI battery. ACPI battery number can be given as argument (default is BAT0). -.TP -\fB\*(T<\fBbmpx_artist\fR\*(T>\fR +.TP +\fB\*(T<\fBbmpx_artist\fR\*(T>\fR Artist in current BMPx track -.TP -\fB\*(T<\fBbmpx_album\fR\*(T>\fR +.TP +\fB\*(T<\fBbmpx_album\fR\*(T>\fR Album in current BMPx track -.TP -\fB\*(T<\fBbmpx_title\fR\*(T>\fR +.TP +\fB\*(T<\fBbmpx_title\fR\*(T>\fR Title of the current BMPx track -.TP -\fB\*(T<\fBbmpx_track\fR\*(T>\fR +.TP +\fB\*(T<\fBbmpx_track\fR\*(T>\fR Track number of the current BMPx track -.TP -\fB\*(T<\fBbmpx_bitrate\fR\*(T>\fR +.TP +\fB\*(T<\fBbmpx_bitrate\fR\*(T>\fR Bitrate of the current BMPx track -.TP -\fB\*(T<\fBbmpx_uri\fR\*(T>\fR +.TP +\fB\*(T<\fBbmpx_uri\fR\*(T>\fR URI of the current BMPx track -.TP -\fB\*(T<\fBbuffers\fR\*(T>\fR +.TP +\fB\*(T<\fBbuffers\fR\*(T>\fR Amount of memory buffered -.TP -\fB\*(T<\fBcached\fR\*(T>\fR +.TP +\fB\*(T<\fBcached\fR\*(T>\fR Amount of memory cached -.TP -\fB\*(T<\fBcolor\fR\*(T>\fR \*(T<\fB(color)\fR\*(T> +.TP +\fB\*(T<\fBcolor\fR\*(T>\fR \*(T<\fB(color)\fR\*(T> Change drawing color to color -.TP -\fB\*(T<\fBcolor0\fR\*(T>\fR +.TP +\fB\*(T<\fBcolor0\fR\*(T>\fR Change drawing color to color0 configuration option -.TP -\fB\*(T<\fBcolor1\fR\*(T>\fR +.TP +\fB\*(T<\fBcolor1\fR\*(T>\fR Change drawing color to color1 configuration option -.TP -\fB\*(T<\fBcolor2\fR\*(T>\fR +.TP +\fB\*(T<\fBcolor2\fR\*(T>\fR Change drawing color to color2 configuration option -.TP -\fB\*(T<\fBcolor3\fR\*(T>\fR +.TP +\fB\*(T<\fBcolor3\fR\*(T>\fR Change drawing color to color3 configuration option -.TP -\fB\*(T<\fBcolor4\fR\*(T>\fR +.TP +\fB\*(T<\fBcolor4\fR\*(T>\fR Change drawing color to color4 configuration option -.TP -\fB\*(T<\fBcolor5\fR\*(T>\fR +.TP +\fB\*(T<\fBcolor5\fR\*(T>\fR Change drawing color to color5 configuration option -.TP -\fB\*(T<\fBcolor6\fR\*(T>\fR +.TP +\fB\*(T<\fBcolor6\fR\*(T>\fR Change drawing color to color6 configuration option -.TP -\fB\*(T<\fBcolor7\fR\*(T>\fR +.TP +\fB\*(T<\fBcolor7\fR\*(T>\fR Change drawing color to color7 configuration option -.TP -\fB\*(T<\fBcolor8\fR\*(T>\fR +.TP +\fB\*(T<\fBcolor8\fR\*(T>\fR Change drawing color to color8 configuration option -.TP -\fB\*(T<\fBcolor9\fR\*(T>\fR +.TP +\fB\*(T<\fBcolor9\fR\*(T>\fR Change drawing color to color9 configuration option -.TP -\fB\*(T<\fBcpu\fR\*(T>\fR \*(T<\fB(cpuN)\fR\*(T> +.TP +\fB\*(T<\fBconky_version\fR\*(T>\fR +Conky version + +.TP +\fB\*(T<\fBconky_build_date\fR\*(T>\fR +Date Conky was built + +.TP +\fB\*(T<\fBconky_bulid_arch\fR\*(T>\fR +CPU architecture Conky was built for + +.TP +\fB\*(T<\fBcpu\fR\*(T>\fR \*(T<\fB(cpuN)\fR\*(T> CPU usage in percents. For SMP machines, the CPU number can be provided as an argument. ${cpu cpu0} is the total usage, and ${cpu cpuX} (X >= 1) are individual CPUs. -.TP -\fB\*(T<\fBcpubar\fR\*(T>\fR \*(T<\fB(cpu number) (height),(width)\fR\*(T> +.TP +\fB\*(T<\fBcpubar\fR\*(T>\fR \*(T<\fB(cpu number) (height),(width)\fR\*(T> Bar that shows CPU usage, height is bar's height in pixels. See $cpu for more info on SMP. -.TP -\fB\*(T<\fBcpugraph\fR\*(T>\fR \*(T<\fB(cpu number) (height),(width) (gradient colour 1) (gradient colour 2)\fR\*(T> +.TP +\fB\*(T<\fBcpugraph\fR\*(T>\fR \*(T<\fB(cpu number) (height),(width) (gradient colour 1) (gradient colour 2)\fR\*(T> CPU usage graph, with optional colours in hex, minus the #. See $cpu for more info on SMP. -.TP -\fB\*(T<\fBdiskio\fR\*(T>\fR \*(T<\fB(device)\fR\*(T> +.TP +\fB\*(T<\fBdiskio\fR\*(T>\fR \*(T<\fB(device)\fR\*(T> Displays current disk IO. Device is optional, and takes the form of sda for /dev/sda. Individual partitions are allowed. -.TP -\fB\*(T<\fBdiskiograph\fR\*(T>\fR \*(T<\fB(device) (height),(width) (gradient colour 1) (gradient colour 2) (scale)\fR\*(T> +.TP +\fB\*(T<\fBdiskiograph\fR\*(T>\fR \*(T<\fB(device) (height),(width) (gradient colour 1) (gradient colour 2) (scale)\fR\*(T> Disk IO graph, colours defined in hex, minus the #. If scale is non-zero, it becomes the scale for the graph. -.TP -\fB\*(T<\fBdiskio_read\fR\*(T>\fR \*(T<\fB(device)\fR\*(T> +.TP +\fB\*(T<\fBdiskio_read\fR\*(T>\fR \*(T<\fB(device)\fR\*(T> Displays current disk IO for reads. Device as in diskio. -.TP -\fB\*(T<\fBdiskiograph_read\fR\*(T>\fR \*(T<\fB(device) (height),(width) (gradient colour 1) (gradient colour 2) (scale)\fR\*(T> +.TP +\fB\*(T<\fBdiskiograph_read\fR\*(T>\fR \*(T<\fB(device) (height),(width) (gradient colour 1) (gradient colour 2) (scale)\fR\*(T> Disk IO graph for reads, colours defined in hex, minus the #. If scale is non-zero, it becomes the scale for the graph. Device as in diskio. -.TP -\fB\*(T<\fBdiskio_write\fR\*(T>\fR \*(T<\fB(device)\fR\*(T> +.TP +\fB\*(T<\fBdiskio_write\fR\*(T>\fR \*(T<\fB(device)\fR\*(T> Displays current disk IO for writes. Device as in diskio. -.TP -\fB\*(T<\fBdiskiograph_write\fR\*(T>\fR \*(T<\fB(device) (height),(width) (gradient colour 1) (gradient colour 2) (scale)\fR\*(T> +.TP +\fB\*(T<\fBdiskiograph_write\fR\*(T>\fR \*(T<\fB(device) (height),(width) (gradient colour 1) (gradient colour 2) (scale)\fR\*(T> Disk IO graph for writes, colours defined in hex, minus the #. If scale is non-zero, it becomes the scale for the graph. Device as in diskio. -.TP -\fB\*(T<\fBdownspeed\fR\*(T>\fR \*(T<\fBnet\fR\*(T> +.TP +\fB\*(T<\fBdownspeed\fR\*(T>\fR \*(T<\fBnet\fR\*(T> Download speed in kilobytes -.TP -\fB\*(T<\fBdownspeedf\fR\*(T>\fR \*(T<\fBnet\fR\*(T> +.TP +\fB\*(T<\fBdownspeedf\fR\*(T>\fR \*(T<\fBnet\fR\*(T> Download speed in kilobytes with one decimal -.TP -\fB\*(T<\fBdownspeedgraph\fR\*(T>\fR \*(T<\fBnet (height),(width) (gradient colour 1) (gradient colour 2) (scale)\fR\*(T> +.TP +\fB\*(T<\fBdownspeedgraph\fR\*(T>\fR \*(T<\fBnet (height),(width) (gradient colour 1) (gradient colour 2) (scale)\fR\*(T> Download speed graph, colours defined in hex, minus the #. If scale is non-zero, it becomes the scale for the graph. -.TP -\fB\*(T<\fBelse\fR\*(T>\fR +.TP +\fB\*(T<\fBelse\fR\*(T>\fR Text to show if any of the above are not true -.TP -\fB\*(T<\fBentropy_avail\fR\*(T>\fR +.TP +\fB\*(T<\fBentropy_avail\fR\*(T>\fR Current entropy available for crypto freaks -.TP -\fB\*(T<\fBentropy_bar\fR\*(T>\fR \*(T<\fB(height),(width)\fR\*(T> +.TP +\fB\*(T<\fBentropy_bar\fR\*(T>\fR \*(T<\fB(height),(width)\fR\*(T> Normalized bar of available entropy for crypto freaks -.TP -\fB\*(T<\fBentropy_poolsize\fR\*(T>\fR +.TP +\fB\*(T<\fBentropy_poolsize\fR\*(T>\fR Total size of system entropy pool for crypto freaks -.TP -\fB\*(T<\fBexec\fR\*(T>\fR \*(T<\fBcommand\fR\*(T> +.TP +\fB\*(T<\fBexec\fR\*(T>\fR \*(T<\fBcommand\fR\*(T> Executes a shell command and displays the output in conky. warning: this takes a lot more resources than other variables. I'd recommend coding wanted behaviour in C and posting a patch. -.TP -\fB\*(T<\fBexecbar\fR\*(T>\fR \*(T<\fBcommand\fR\*(T> +.TP +\fB\*(T<\fBexecbar\fR\*(T>\fR \*(T<\fBcommand\fR\*(T> Same as exec, except if the first value return is a value between 0-100, it will use that number for a bar. The size for the bar is currently fixed, but that may change in the future. -.TP -\fB\*(T<\fBexecgraph\fR\*(T>\fR \*(T<\fBcommand\fR\*(T> +.TP +\fB\*(T<\fBexecgraph\fR\*(T>\fR \*(T<\fBcommand\fR\*(T> Same as execbar, but graphs values. -.TP -\fB\*(T<\fBexeci\fR\*(T>\fR \*(T<\fBinterval command\fR\*(T> +.TP +\fB\*(T<\fBexeci\fR\*(T>\fR \*(T<\fBinterval command\fR\*(T> Same as exec but with specific interval. Interval can't be less than update_interval in configuration. See also $texeci -.TP -\fB\*(T<\fBexecibar\fR\*(T>\fR \*(T<\fBinterval command\fR\*(T> +.TP +\fB\*(T<\fBexecibar\fR\*(T>\fR \*(T<\fBinterval command\fR\*(T> Same as execbar, except with an interval -.TP -\fB\*(T<\fBexecigraph\fR\*(T>\fR \*(T<\fBinterval command\fR\*(T> +.TP +\fB\*(T<\fBexecigraph\fR\*(T>\fR \*(T<\fBinterval command\fR\*(T> Same as execigraph, but takes an interval arg graphs values -.TP -\fB\*(T<\fBfont\fR\*(T>\fR \*(T<\fB(font)\fR\*(T> +.TP +\fB\*(T<\fBfont\fR\*(T>\fR \*(T<\fB(font)\fR\*(T> Specify a different font. This new font will apply to the current line and everything following. You can use a $font with no arguments to change back to the default font (much like with $color) -.TP -\fB\*(T<\fBfreq\fR\*(T>\fR \*(T<\fB(n)\fR\*(T> +.TP +\fB\*(T<\fBfreq\fR\*(T>\fR \*(T<\fB(n)\fR\*(T> Returns CPU #n's frequency in MHz. CPUs are counted from 1. If omitted, the parameter defaults to 1. -.TP -\fB\*(T<\fBfreq_g\fR\*(T>\fR \*(T<\fB(n)\fR\*(T> +.TP +\fB\*(T<\fBfreq_g\fR\*(T>\fR \*(T<\fB(n)\fR\*(T> Returns CPU #n's frequency in GHz. CPUs are counted from 1. If omitted, the parameter defaults to 1. -.TP -\fB\*(T<\fBfreq_dyn\fR\*(T>\fR +.TP +\fB\*(T<\fBfreq_dyn\fR\*(T>\fR Returns CPU frequency in MHz, but is calculated by counting to clock cycles to complete an instruction. Only available for x86/amd64. -.TP -\fB\*(T<\fBfreq_dyn_g\fR\*(T>\fR +.TP +\fB\*(T<\fBfreq_dyn_g\fR\*(T>\fR Returns CPU frequency in GHz, but is calculated by counting to clock cycles to complete an instruction. Only available for x86/amd64. -.TP -\fB\*(T<\fBfs_bar\fR\*(T>\fR \*(T<\fB(height),(width) fs\fR\*(T> +.TP +\fB\*(T<\fBfs_bar\fR\*(T>\fR \*(T<\fB(height),(width) fs\fR\*(T> Bar that shows how much space is used on a file system. height is the height in pixels. fs is any file on that file system. -.TP -\fB\*(T<\fBfs_free\fR\*(T>\fR \*(T<\fB(fs)\fR\*(T> +.TP +\fB\*(T<\fBfs_free\fR\*(T>\fR \*(T<\fB(fs)\fR\*(T> Free space on a file system available for users. -.TP -\fB\*(T<\fBfs_free_perc\fR\*(T>\fR \*(T<\fB(fs)\fR\*(T> +.TP +\fB\*(T<\fBfs_free_perc\fR\*(T>\fR \*(T<\fB(fs)\fR\*(T> Free percentage of space on a file system available for users. -.TP -\fB\*(T<\fBfs_size\fR\*(T>\fR \*(T<\fB(fs)\fR\*(T> +.TP +\fB\*(T<\fBfs_size\fR\*(T>\fR \*(T<\fB(fs)\fR\*(T> File system size -.TP -\fB\*(T<\fBfs_used\fR\*(T>\fR \*(T<\fB(fs)\fR\*(T> +.TP +\fB\*(T<\fBfs_type\fR\*(T>\fR \*(T<\fB(fs)\fR\*(T> +File system type + +.TP +\fB\*(T<\fBfs_used\fR\*(T>\fR \*(T<\fB(fs)\fR\*(T> File system used space -.TP -\fB\*(T<\fBgoto\fR\*(T>\fR \*(T<\fBx\fR\*(T> +.TP +\fB\*(T<\fBgoto\fR\*(T>\fR \*(T<\fBx\fR\*(T> The next element will be printed at position 'x'. -.TP -\fB\*(T<\fBhddtemp\fR\*(T>\fR \*(T<\fBdev, (host,(port))\fR\*(T> +.TP +\fB\*(T<\fBhddtemp\fR\*(T>\fR \*(T<\fBdev, (host,(port))\fR\*(T> Displays temperature of a selected hard disk drive as reported by the hddtemp daemon running on host:port. Default host is 127.0.0.1, default port is 7634. -.TP -\fB\*(T<\fBhead\fR\*(T>\fR \*(T<\fBlogfile lines (interval)\fR\*(T> +.TP +\fB\*(T<\fBhead\fR\*(T>\fR \*(T<\fBlogfile lines (interval)\fR\*(T> Displays first N lines of supplied text text file. If interval is not supplied, Conky assumes 2x Conky's interval. Max of 30 lines can be displayed, or until the text buffer is filled. -.TP -\fB\*(T<\fBhr\fR\*(T>\fR \*(T<\fB(height)\fR\*(T> +.TP +\fB\*(T<\fBhr\fR\*(T>\fR \*(T<\fB(height)\fR\*(T> Horizontal line, height is the height in pixels -.TP -\fB\*(T<\fBhwmon\fR\*(T>\fR \*(T<\fB(dev) type n\fR\*(T> +.TP +\fB\*(T<\fBhwmon\fR\*(T>\fR \*(T<\fB(dev) type n\fR\*(T> Hwmon sensor from sysfs (Linux 2.6). Parameter dev may be omitted if you have only one hwmon device. Parameter type is either 'in' or 'vol' meaning voltage; 'fan' meaning fan; 'temp' (Celsius) or 'tempf' (Fahrenheit) meaning temperature. Parameter n is number of the sensor. See /sys/class/hwmon/ on your local computer. -.TP -\fB\*(T<\fBiconv_start\fR\*(T>\fR \*(T<\fBcodeset_from codeset_to\fR\*(T> +.TP +\fB\*(T<\fBiconv_start\fR\*(T>\fR \*(T<\fBcodeset_from codeset_to\fR\*(T> Convert text from one codeset to another using GNU iconv. Needs to be stopped with iconv_stop. -.TP -\fB\*(T<\fBiconv_stop\fR\*(T>\fR +.TP +\fB\*(T<\fBiconv_stop\fR\*(T>\fR Stop iconv codeset conversion. -.TP -\fB\*(T<\fBi2c\fR\*(T>\fR \*(T<\fB(dev) type n\fR\*(T> +.TP +\fB\*(T<\fBi2c\fR\*(T>\fR \*(T<\fB(dev) type n\fR\*(T> I2C sensor from sysfs (Linux 2.6). Parameter dev may be omitted if you have only one I2C device. Parameter type is either 'in' or 'vol' meaning voltage; 'fan' meaning fan; 'temp' (Celsius) or 'tempf' (Fahrenheit) meaning temperature. Parameter n is number of the sensor. See /sys/bus/i2c/devices/ on your local computer. -.TP -\fB\*(T<\fBi8k_ac_status\fR\*(T>\fR +.TP +\fB\*(T<\fBi8k_ac_status\fR\*(T>\fR If running the i8k kernel driver for Inspiron laptops, displays whether ac power is on, as listed in /proc/i8k (translated to human-readable). Beware that this is by default not enabled by i8k itself. -.TP -\fB\*(T<\fBi8k_bios\fR\*(T>\fR +.TP +\fB\*(T<\fBi8k_bios\fR\*(T>\fR If running the i8k kernel driver for Inspiron laptops, displays the bios version as listed in /proc/i8k. -.TP -\fB\*(T<\fBi8k_buttons_status\fR\*(T>\fR +.TP +\fB\*(T<\fBi8k_buttons_status\fR\*(T>\fR If running the i8k kernel driver for Inspiron laptops, displays the volume buttons status as listed in /proc/i8k. -.TP -\fB\*(T<\fBi8k_cpu_temp\fR\*(T>\fR +.TP +\fB\*(T<\fBi8k_cpu_temp\fR\*(T>\fR If running the i8k kernel driver for Inspiron laptops, displays the cpu temperature in Celsius, as reported by /proc/i8k. -.TP -\fB\*(T<\fBi8k_cpu_tempf\fR\*(T>\fR +.TP +\fB\*(T<\fBi8k_cpu_tempf\fR\*(T>\fR If running the i8k kernel driver for Inspiron laptops, displays the cpu temperature in Fahrenheit, as reported by /proc/i8k. -.TP -\fB\*(T<\fBi8k_left_fan_rpm\fR\*(T>\fR +.TP +\fB\*(T<\fBi8k_left_fan_rpm\fR\*(T>\fR If running the i8k kernel driver for Inspiron laptops, displays the left fan's rate of rotation, in revolutions per minute as listed in /proc/i8k. Beware, some laptops i8k reports these fans in reverse order. -.TP -\fB\*(T<\fBi8k_left_fan_status\fR\*(T>\fR +.TP +\fB\*(T<\fBi8k_left_fan_status\fR\*(T>\fR If running the i8k kernel driver for Inspiron laptops, displays the left fan status as listed in /proc/i8k (translated to human-readable). Beware, some laptops i8k reports these fans in reverse order. -.TP -\fB\*(T<\fBi8k_right_fan_rpm\fR\*(T>\fR +.TP +\fB\*(T<\fBi8k_right_fan_rpm\fR\*(T>\fR If running the i8k kernel driver for Inspiron laptops, displays the right fan's rate of rotation, in revolutions per minute as listed in /proc/i8k. Beware, some laptops i8k reports these fans in reverse order. -.TP -\fB\*(T<\fBi8k_right_fan_status\fR\*(T>\fR +.TP +\fB\*(T<\fBi8k_right_fan_status\fR\*(T>\fR If running the i8k kernel driver for Inspiron laptops, displays the right fan status as listed in /proc/i8k (translated to human-readable). Beware, some laptops i8k reports these fans in reverse order. -.TP -\fB\*(T<\fBi8k_serial\fR\*(T>\fR +.TP +\fB\*(T<\fBi8k_serial\fR\*(T>\fR If running the i8k kernel driver for Inspiron laptops, displays your laptop serial number as listed in /proc/i8k. -.TP -\fB\*(T<\fBi8k_version\fR\*(T>\fR +.TP +\fB\*(T<\fBi8k_version\fR\*(T>\fR If running the i8k kernel driver for Inspiron laptops, displays the version formatting of /proc/i8k. -.TP -\fB\*(T<\fBibm_fan\fR\*(T>\fR +.TP +\fB\*(T<\fBibm_fan\fR\*(T>\fR If running the IBM ACPI, displays the fan speed. -.TP -\fB\*(T<\fBibm_temps\fR\*(T>\fR \*(T<\fBN\fR\*(T> +.TP +\fB\*(T<\fBibm_temps\fR\*(T>\fR \*(T<\fBN\fR\*(T> If running the IBM ACPI, displays the temperatures from the IBM temperature sensors (N=0..7) Sensor 0 is on the CPU, 3 is on the GPU. -.TP -\fB\*(T<\fBibm_volume\fR\*(T>\fR +.TP +\fB\*(T<\fBibm_volume\fR\*(T>\fR If running the IBM ACPI, displays the "master" volume, controlled by the volume keys (0-14). -.TP -\fB\*(T<\fBibm_brightness\fR\*(T>\fR +.TP +\fB\*(T<\fBibm_brightness\fR\*(T>\fR If running the IBM ACPI, displays the brigtness of the laptops's LCD (0-7). -.TP -\fB\*(T<\fBif_empty\fR\*(T>\fR \*(T<\fB(var)\fR\*(T> +.TP +\fB\*(T<\fBif_empty\fR\*(T>\fR \*(T<\fB(var)\fR\*(T> if conky variable VAR is empty, display everything between $if_empty and the matching $endif -.TP -\fB\*(T<\fBif_running\fR\*(T>\fR \*(T<\fB(process)\fR\*(T> +.TP +\fB\*(T<\fBif_running\fR\*(T>\fR \*(T<\fB(process)\fR\*(T> if PROCESS is running, display everything $if_running and the matching $endif -.TP -\fB\*(T<\fBif_existing\fR\*(T>\fR \*(T<\fBfile (string)\fR\*(T> +.TP +\fB\*(T<\fBif_existing\fR\*(T>\fR \*(T<\fBfile (string)\fR\*(T> if FILE exists, display everything between if_existing and the matching $endif. The optional second paramater checks for FILE containing the specified string and prints everything between $if_existing and the matching $endif. -.TP -\fB\*(T<\fBif_mounted\fR\*(T>\fR \*(T<\fB(mountpoint)\fR\*(T> +.TP +\fB\*(T<\fBif_mounted\fR\*(T>\fR \*(T<\fB(mountpoint)\fR\*(T> if MOUNTPOINT is mounted, display everything between $if_mounted and the matching $endif -.TP -\fB\*(T<\fBimap_messages\fR\*(T>\fR \*(T<\fB(args)\fR\*(T> +.TP +\fB\*(T<\fBif_smapi_bat_installed\fR\*(T>\fR \*(T<\fB(INDEX)\fR\*(T> +when using smapi, if the battery with index INDEX is installed, display everything between $if_smapi_bat_installed and the matching $endif + +.TP +\fB\*(T<\fBif_up\fR\*(T>\fR \*(T<\fB(interface)\fR\*(T> +if INTERFACE exists and is up, display everything between $if_up and the matching $endif + +.TP +\fB\*(T<\fBimap_messages\fR\*(T>\fR \*(T<\fB(args)\fR\*(T> Displays the number of messages in your global IMAP inbox by default. You can define individual IMAP inboxes seperately by passing arguments to this object. Arguments are: "host user pass [-i interval] [-p port] [-e command]". Default port is 143, default interval is 5 minutes. If the password is supplied as '*', you will be prompted to enter the password when Conky starts. -.TP -\fB\*(T<\fBimap_unseen\fR\*(T>\fR \*(T<\fB(args)\fR\*(T> +.TP +\fB\*(T<\fBimap_unseen\fR\*(T>\fR \*(T<\fB(args)\fR\*(T> Displays the number of unseen messages in your global IMAP inbox by default. You can define individual IMAP inboxes seperately by passing arguments to this object. Arguments are: "host user pass [-i interval] [-p port] [-e command]". Default port is 143, default interval is 5 minutes. If the password is supplied as '*', you will be prompted to enter the password when Conky starts. -.TP -\fB\*(T<\fBkernel\fR\*(T>\fR +.TP +\fB\*(T<\fBkernel\fR\*(T>\fR Kernel version -.TP -\fB\*(T<\fBloadavg\fR\*(T>\fR +.TP +\fB\*(T<\fBloadavg\fR\*(T>\fR (1,2,3)> System load average, 1 is for past 1 minute, 2 for past 5 minutes and 3 for past 15 minutes. -.TP -\fB\*(T<\fBmachine\fR\*(T>\fR +.TP +\fB\*(T<\fBmachine\fR\*(T>\fR Machine, i686 for example -.TP -\fB\*(T<\fBmails\fR\*(T>\fR \*(T<\fB(mailbox)\fR\*(T> \*(T<\fB(interval)\fR\*(T> +.TP +\fB\*(T<\fBmails\fR\*(T>\fR \*(T<\fB(mailbox)\fR\*(T> \*(T<\fB(interval)\fR\*(T> Mail count in the specified mailbox or your mail spool if not. Both mbox and maildir type mailboxes are supported. You can use a program like fetchmail to get mails from some server using your favourite protocol. See also new_mails. -.TP -\fB\*(T<\fBmboxscan\fR\*(T>\fR \*(T<\fB(\-n number of messages to print) (\-fw from width) (\-sw subject width) mbox\fR\*(T> +.TP +\fB\*(T<\fBmboxscan\fR\*(T>\fR \*(T<\fB(\-n number of messages to print) (\-fw from width) (\-sw subject width) mbox\fR\*(T> Print a summary of recent messages in an mbox format mailbox. mbox parameter is the filename of the mailbox (can be encapsulated using '"', ie. ${mboxscan -n 10 "/home/brenden/some box"} -.TP -\fB\*(T<\fBmem\fR\*(T>\fR +.TP +\fB\*(T<\fBmem\fR\*(T>\fR Amount of memory in use -.TP -\fB\*(T<\fBmembar\fR\*(T>\fR \*(T<\fB(height),(width)\fR\*(T> +.TP +\fB\*(T<\fBmembar\fR\*(T>\fR \*(T<\fB(height),(width)\fR\*(T> Bar that shows amount of memory in use -.TP -\fB\*(T<\fBmemmax\fR\*(T>\fR +.TP +\fB\*(T<\fBmemmax\fR\*(T>\fR Total amount of memory -.TP -\fB\*(T<\fBmemperc\fR\*(T>\fR +.TP +\fB\*(T<\fBmemperc\fR\*(T>\fR Percentage of memory in use -.TP -\fB\*(T<\fBmpd_artist\fR\*(T>\fR +.TP +\fB\*(T<\fBmpd_artist\fR\*(T>\fR Artist in current MPD song must be enabled at compile -.TP -\fB\*(T<\fBmpd_album\fR\*(T>\fR +.TP +\fB\*(T<\fBmpd_album\fR\*(T>\fR Album in current MPD song -.TP -\fB\*(T<\fBmpd_bar\fR\*(T>\fR \*(T<\fB(height),(width)\fR\*(T> +.TP +\fB\*(T<\fBmpd_bar\fR\*(T>\fR \*(T<\fB(height),(width)\fR\*(T> Bar of mpd's progress -.TP -\fB\*(T<\fBmpd_bitrate\fR\*(T>\fR +.TP +\fB\*(T<\fBmpd_bitrate\fR\*(T>\fR Bitrate of current song -.TP -\fB\*(T<\fBmpd_status\fR\*(T>\fR +.TP +\fB\*(T<\fBmpd_status\fR\*(T>\fR Playing, stopped, et cetera. -.TP -\fB\*(T<\fBmpd_title\fR\*(T>\fR \*(T<\fB(max length)\fR\*(T> +.TP +\fB\*(T<\fBmpd_title\fR\*(T>\fR \*(T<\fB(max length)\fR\*(T> Title of current MPD song -.TP -\fB\*(T<\fBmpd_vol\fR\*(T>\fR +.TP +\fB\*(T<\fBmpd_vol\fR\*(T>\fR MPD's volume -.TP -\fB\*(T<\fBmpd_elapsed\fR\*(T>\fR +.TP +\fB\*(T<\fBmpd_elapsed\fR\*(T>\fR Song's elapsed time -.TP -\fB\*(T<\fBmpd_length\fR\*(T>\fR +.TP +\fB\*(T<\fBmpd_length\fR\*(T>\fR Song's length -.TP -\fB\*(T<\fBmpd_percent\fR\*(T>\fR +.TP +\fB\*(T<\fBmpd_percent\fR\*(T>\fR Percent of song's progress -.TP -\fB\*(T<\fBmpd_random\fR\*(T>\fR +.TP +\fB\*(T<\fBmpd_random\fR\*(T>\fR Random status (On/Off) -.TP -\fB\*(T<\fBmpd_repeat\fR\*(T>\fR +.TP +\fB\*(T<\fBmpd_repeat\fR\*(T>\fR Repeat status (On/Off) -.TP -\fB\*(T<\fBmpd_track\fR\*(T>\fR +.TP +\fB\*(T<\fBmpd_track\fR\*(T>\fR Prints the MPD track field -.TP -\fB\*(T<\fBmpd_name\fR\*(T>\fR +.TP +\fB\*(T<\fBmpd_name\fR\*(T>\fR Prints the MPD name field -.TP -\fB\*(T<\fBmpd_file\fR\*(T>\fR +.TP +\fB\*(T<\fBmpd_file\fR\*(T>\fR Prints the file name of the current MPD song -.TP -\fB\*(T<\fBmpd_smart\fR\*(T>\fR +.TP +\fB\*(T<\fBmpd_smart\fR\*(T>\fR Prints the song name in either the form "artist - title" or file name, depending on whats available -.TP -\fB\*(T<\fBnew_mails\fR\*(T>\fR \*(T<\fB(mailbox)\fR\*(T> \*(T<\fB(interval)\fR\*(T> +.TP +\fB\*(T<\fBnew_mails\fR\*(T>\fR \*(T<\fB(mailbox)\fR\*(T> \*(T<\fB(interval)\fR\*(T> Unread mail count in the specified mailbox or mail spool if not. Both mbox and maildir type mailboxes are supported. -.TP -\fB\*(T<\fBnodename\fR\*(T>\fR +.TP +\fB\*(T<\fBnodename\fR\*(T>\fR Hostname -.TP -\fB\*(T<\fBoutlinecolor\fR\*(T>\fR \*(T<\fB(color)\fR\*(T> +.TP +\fB\*(T<\fBoutlinecolor\fR\*(T>\fR \*(T<\fB(color)\fR\*(T> Change outline color -.TP -\fB\*(T<\fBpb_battery\fR\*(T>\fR \*(T<\fBitem\fR\*(T> +.TP +\fB\*(T<\fBpb_battery\fR\*(T>\fR \*(T<\fBitem\fR\*(T> If running on Apple powerbook/ibook, display information on battery status. The item parameter specifies, what information to display. Exactly one item @@ -984,60 +1012,72 @@ rate. Nothing is displayed, if battery is absent or if it's present but fully charged and not discharging. -.TP -\fB\*(T<\fBplatform\fR\*(T>\fR \*(T<\fB(dev) type n\fR\*(T> +.TP +\fB\*(T<\fBplatform\fR\*(T>\fR \*(T<\fB(dev) type n\fR\*(T> Platform sensor from sysfs (Linux 2.6). Parameter dev may be omitted if you have only one platform device. Platform type is either 'in' or 'vol' meaning voltage; 'fan' meaning fan; 'temp' (Celsius) or 'tempf' (Fahrenheit) meaning temperature. Parameter n is number of the sensor. See /sys/bus/platform/devices/ on your local computer. -.TP -\fB\*(T<\fBpop3_unseen\fR\*(T>\fR \*(T<\fB(args)\fR\*(T> +.TP +\fB\*(T<\fBpop3_unseen\fR\*(T>\fR \*(T<\fB(args)\fR\*(T> Displays the number of unseen messages in your global POP3 inbox by default. You can define individual POP3 inboxes seperately by passing arguments to this object. Arguments are: "host user pass [-i interval] [-p port] [-e command]". Default port is 110, default interval is 5 minutes. If the password is supplied as '*', you will be prompted to enter the password when Conky starts. -.TP -\fB\*(T<\fBpop3_used\fR\*(T>\fR \*(T<\fB(args)\fR\*(T> +.TP +\fB\*(T<\fBpop3_used\fR\*(T>\fR \*(T<\fB(args)\fR\*(T> Displays the amount of space (in MiB, 2^20) used in your global POP3 inbox by default. You can define individual POP3 inboxes seperately by passing arguments to this object. Arguments are: "host user pass [-i interval] [-p port] [-e command]". Default port is 110, default interval is 5 minutes. If the password is supplied as '*', you will be prompted to enter the password when Conky starts. -.TP -\fB\*(T<\fBpre_exec\fR\*(T>\fR \*(T<\fBshell command\fR\*(T> +.TP +\fB\*(T<\fBpre_exec\fR\*(T>\fR \*(T<\fBshell command\fR\*(T> Executes a shell command one time before conky displays anything and puts output as text. -.TP -\fB\*(T<\fBprocesses\fR\*(T>\fR +.TP +\fB\*(T<\fBprocesses\fR\*(T>\fR Total processes (sleeping and running) -.TP -\fB\*(T<\fBrunning_processes\fR\*(T>\fR +.TP +\fB\*(T<\fBrunning_processes\fR\*(T>\fR Running processes (not sleeping), requires Linux 2.6 -.TP -\fB\*(T<\fBshadecolor\fR\*(T>\fR \*(T<\fB(color)\fR\*(T> +.TP +\fB\*(T<\fBshadecolor\fR\*(T>\fR \*(T<\fB(color)\fR\*(T> Change shading color -.TP -\fB\*(T<\fBstippled_hr\fR\*(T>\fR \*(T<\fB(space)\fR\*(T> +.TP +\fB\*(T<\fBsmapi\fR\*(T>\fR \*(T<\fB(ARGS)\fR\*(T> +when using smapi, display contents of the /sys/devices/platform/smapi directory. ARGS are either '(FILENAME)' or 'bat (INDEX) (FILENAME)' to display the corresponding files' content. This is a very raw method of accessing the smapi values. When available, better use one of the smapi_* variables instead. + +.TP +\fB\*(T<\fBsmapi_bat_perc\fR\*(T>\fR \*(T<\fB(INDEX)\fR\*(T> +when using smapi, display the remaining capacity in percent of the battery with index INDEX. This is a separate variable because it supports the 'use_spacer' configuration option. + +.TP +\fB\*(T<\fBsmapi_bat_bar\fR\*(T>\fR \*(T<\fB(INDEX),(height),(width)\fR\*(T> +when using smapi, display the remaining capacity of the battery with index INDEX as a bar. + +.TP +\fB\*(T<\fBstippled_hr\fR\*(T>\fR \*(T<\fB(space)\fR\*(T> Stippled (dashed) horizontal line -.TP -\fB\*(T<\fBswapbar\fR\*(T>\fR \*(T<\fB(height),(width)\fR\*(T> +.TP +\fB\*(T<\fBswapbar\fR\*(T>\fR \*(T<\fB(height),(width)\fR\*(T> Bar that shows amount of swap in use -.TP -\fB\*(T<\fBswap\fR\*(T>\fR +.TP +\fB\*(T<\fBswap\fR\*(T>\fR Amount of swap in use -.TP -\fB\*(T<\fBswapmax\fR\*(T>\fR +.TP +\fB\*(T<\fBswapmax\fR\*(T>\fR Total amount of swap -.TP -\fB\*(T<\fBswapperc\fR\*(T>\fR +.TP +\fB\*(T<\fBswapperc\fR\*(T>\fR Percentage of swap in use -.TP -\fB\*(T<\fBsysname\fR\*(T>\fR +.TP +\fB\*(T<\fBsysname\fR\*(T>\fR System name, Linux for example -.TP -\fB\*(T<\fBtcp_portmon\fR\*(T>\fR \*(T<\fBport_begin port_end item (index)\fR\*(T> \fI(ip4 only at present)\fR +.TP +\fB\*(T<\fBtcp_portmon\fR\*(T>\fR \*(T<\fBport_begin port_end item (index)\fR\*(T> \fI(ip4 only at present)\fR TCP port monitor for specified local ports. Port numbers must be in the range 1 to 65535. Valid items are: \fBcount\fR - total number of connections in the range @@ -1081,203 +1121,219 @@ displays the remote host port of the fifth connection on a privileged port displays the local service name of the fifteenth connection in the range of all ports Note that port monitor variables which share the same port range actually refer to the same monitor, so many references to a single port range for different items and different indexes all use the same monitor internally. In other words, the program avoids creating redundant monitors. -.TP -\fB\*(T<\fBtexeci\fR\*(T>\fR \*(T<\fBinterval command\fR\*(T> +.TP +\fB\*(T<\fBtexeci\fR\*(T>\fR \*(T<\fBinterval command\fR\*(T> Runs a command at an interval inside a thread and displays the output. Same as $execi, except the command is run inside a thread. Use this if you have a slow script to keep Conky updating. You should make the interval slightly longer then the time it takes your script to execute. For example, if you have a script that take 5 seconds to execute, you should make the interval at least 6 seconds. See also $execi. -.TP -\fB\*(T<\fBoffset\fR\*(T>\fR \*(T<\fB(pixels)\fR\*(T> +.TP +\fB\*(T<\fBoffset\fR\*(T>\fR \*(T<\fB(pixels)\fR\*(T> Move text over by N pixels. See also $voffset. -.TP -\fB\*(T<\fBrss\fR\*(T>\fR \*(T<\fBurl delay_in_minutes action item_num\fR\*(T> +.TP +\fB\*(T<\fBrss\fR\*(T>\fR \*(T<\fBurl delay_in_minutes action item_num\fR\*(T> Download and parse RSS feeds. Action may be one of the following: feed_title, item_title (with num par), item_desc (with num par) and item_titles. -.TP -\fB\*(T<\fBtab\fR\*(T>\fR \*(T<\fB(width, (start))\fR\*(T> +.TP +\fB\*(T<\fBtab\fR\*(T>\fR \*(T<\fB(width, (start))\fR\*(T> Puts a tab of the specified width, starting from column 'start'. -.TP -\fB\*(T<\fBtail\fR\*(T>\fR \*(T<\fBlogfile lines (interval)\fR\*(T> +.TP +\fB\*(T<\fBtail\fR\*(T>\fR \*(T<\fBlogfile lines (interval)\fR\*(T> Displays last N lines of supplied text text file. If interval is not supplied, Conky assumes 2x Conky's interval. Max of 30 lines can be displayed, or until the text buffer is filled. -.TP -\fB\*(T<\fBtime\fR\*(T>\fR \*(T<\fB(format)\fR\*(T> +.TP +\fB\*(T<\fBtime\fR\*(T>\fR \*(T<\fB(format)\fR\*(T> Local time, see man strftime to get more information about format -.TP -\fB\*(T<\fButime\fR\*(T>\fR \*(T<\fB(format)\fR\*(T> +.TP +\fB\*(T<\fButime\fR\*(T>\fR \*(T<\fB(format)\fR\*(T> Display time in UTC (universal coordinate time). -.TP -\fB\*(T<\fBtztime\fR\*(T>\fR \*(T<\fB(timezone) (format)\fR\*(T> +.TP +\fB\*(T<\fBtztime\fR\*(T>\fR \*(T<\fB(timezone) (format)\fR\*(T> Local time for specified timezone, see man strftime to get more information about format. The timezone argument is specified in similar fashion as TZ environment variable. For hints, look in /usr/share/zoneinfo. e.g. US/Pacific, Europe/Zurich, etc. -.TP -\fB\*(T<\fBtotaldown\fR\*(T>\fR \*(T<\fBnet\fR\*(T> +.TP +\fB\*(T<\fBtotaldown\fR\*(T>\fR \*(T<\fBnet\fR\*(T> Total download, overflows at 4 GB on Linux with 32-bit arch and there doesn't seem to be a way to know how many times it has already done that before conky has started. -.TP -\fB\*(T<\fBtop\fR\*(T>\fR \*(T<\fBtype, num\fR\*(T> +.TP +\fB\*(T<\fBtop\fR\*(T>\fR \*(T<\fBtype, num\fR\*(T> This takes arguments in the form:top (name) (number) Basically, processes are ranked from highest to lowest in terms of cpu usage, which is what (num) represents. The types are: "name", "pid", "cpu", "mem", and "time". There can be a max of 10 processes listed. -.TP -\fB\*(T<\fBtop_mem\fR\*(T>\fR \*(T<\fBtype, num\fR\*(T> +.TP +\fB\*(T<\fBtop_mem\fR\*(T>\fR \*(T<\fBtype, num\fR\*(T> Same as top, except sorted by mem usage instead of cpu -.TP -\fB\*(T<\fBtotalup\fR\*(T>\fR \*(T<\fBnet\fR\*(T> +.TP +\fB\*(T<\fBtotalup\fR\*(T>\fR \*(T<\fBnet\fR\*(T> Total upload, this one too, may overflow -.TP -\fB\*(T<\fBupdates\fR\*(T>\fR \*(T<\fBNumber of updates\fR\*(T> +.TP +\fB\*(T<\fBupdates\fR\*(T>\fR \*(T<\fBNumber of updates\fR\*(T> for debugging -.TP -\fB\*(T<\fBupspeed\fR\*(T>\fR \*(T<\fBnet\fR\*(T> +.TP +\fB\*(T<\fBupspeed\fR\*(T>\fR \*(T<\fBnet\fR\*(T> Upload speed in kilobytes -.TP -\fB\*(T<\fBupspeedf\fR\*(T>\fR \*(T<\fBnet\fR\*(T> +.TP +\fB\*(T<\fBupspeedf\fR\*(T>\fR \*(T<\fBnet\fR\*(T> Upload speed in kilobytes with one decimal -.TP -\fB\*(T<\fBupspeedgraph\fR\*(T>\fR \*(T<\fBnet (height),(width) (gradient colour 1) (gradient colour 2) (scale)\fR\*(T> +.TP +\fB\*(T<\fBupspeedgraph\fR\*(T>\fR \*(T<\fBnet (height),(width) (gradient colour 1) (gradient colour 2) (scale)\fR\*(T> Upload speed graph, colours defined in hex, minus the #. If scale is non-zero, it becomes the scale for the graph. -.TP -\fB\*(T<\fBuptime\fR\*(T>\fR +.TP +\fB\*(T<\fBuptime\fR\*(T>\fR Uptime -.TP -\fB\*(T<\fBuptime_short\fR\*(T>\fR +.TP +\fB\*(T<\fBuptime_short\fR\*(T>\fR Uptime in a shorter format -.TP -\fB\*(T<\fBvoffset\fR\*(T>\fR \*(T<\fB(pixels)\fR\*(T> +.TP +\fB\*(T<\fBuser_number\fR\*(T>\fR +Number of users logged in + +.TP +\fB\*(T<\fBuser_names\fR\*(T>\fR +Lists the names of the users logged in + +.TP +\fB\*(T<\fBuser_terms\fR\*(T>\fR +Lists the consoles in use + +.TP +\fB\*(T<\fBuser_times\fR\*(T>\fR +Lists how long users have been logged in for + +.TP +\fB\*(T<\fBvoffset\fR\*(T>\fR \*(T<\fB(pixels)\fR\*(T> Change vertical offset by N pixels. Negative values will cause text to overlap. See also $offset. -.TP -\fB\*(T<\fBvoltage_mv\fR\*(T>\fR \*(T<\fB(n)\fR\*(T> +.TP +\fB\*(T<\fBvoltage_mv\fR\*(T>\fR \*(T<\fB(n)\fR\*(T> Returns CPU #n's voltage in mV. CPUs are counted from 1. If omitted, the parameter defaults to 1. -.TP -\fB\*(T<\fBvoltage_v\fR\*(T>\fR \*(T<\fB(n)\fR\*(T> +.TP +\fB\*(T<\fBvoltage_v\fR\*(T>\fR \*(T<\fB(n)\fR\*(T> Returns CPU #n's voltage in V. CPUs are counted from 1. If omitted, the parameter defaults to 1. -.TP -\fB\*(T<\fBwireless_essid\fR\*(T>\fR \*(T<\fBnet\fR\*(T> +.TP +\fB\*(T<\fBwireless_essid\fR\*(T>\fR \*(T<\fBnet\fR\*(T> Wireless access point ESSID (Linux only) -.TP -\fB\*(T<\fBwireless_mode\fR\*(T>\fR \*(T<\fBnet\fR\*(T> +.TP +\fB\*(T<\fBwireless_mode\fR\*(T>\fR \*(T<\fBnet\fR\*(T> Wireless mode (Managed/Ad-Hoc/Master) (Linux only) -.TP -\fB\*(T<\fBwireless_bitrate\fR\*(T>\fR \*(T<\fBnet\fR\*(T> +.TP +\fB\*(T<\fBwireless_bitrate\fR\*(T>\fR \*(T<\fBnet\fR\*(T> Wireless bitrate (ie 11 Mb/s) (Linux only) -.TP -\fB\*(T<\fBwireless_ap\fR\*(T>\fR \*(T<\fBnet\fR\*(T> +.TP +\fB\*(T<\fBwireless_ap\fR\*(T>\fR \*(T<\fBnet\fR\*(T> Wireless access point MAC address (Linux only) -.TP -\fB\*(T<\fBwireless_link_qual\fR\*(T>\fR \*(T<\fBnet\fR\*(T> +.TP +\fB\*(T<\fBwireless_link_qual\fR\*(T>\fR \*(T<\fBnet\fR\*(T> Wireless link quality (Linux only) -.TP -\fB\*(T<\fBwireless_link_qual_max\fR\*(T>\fR \*(T<\fBnet\fR\*(T> +.TP +\fB\*(T<\fBwireless_link_qual_max\fR\*(T>\fR \*(T<\fBnet\fR\*(T> Wireless link quality maximum value (Linux only) -.TP -\fB\*(T<\fBwireless_link_qual_perc\fR\*(T>\fR \*(T<\fBnet\fR\*(T> +.TP +\fB\*(T<\fBwireless_link_qual_perc\fR\*(T>\fR \*(T<\fBnet\fR\*(T> Wireless link quality in percents (Linux only) -.TP -\fB\*(T<\fBwireless_link_bar\fR\*(T>\fR \*(T<\fB(height), (width) net\fR\*(T> +.TP +\fB\*(T<\fBwireless_link_bar\fR\*(T>\fR \*(T<\fB(height), (width) net\fR\*(T> Wireless link quality bar (Linux only) -.TP -\fB\*(T<\fBxmms2_artist\fR\*(T>\fR +.TP +\fB\*(T<\fBxmms2_artist\fR\*(T>\fR Artist in current XMMS2 song -.TP -\fB\*(T<\fBxmms2_album\fR\*(T>\fR +.TP +\fB\*(T<\fBxmms2_album\fR\*(T>\fR Album in current XMMS2 song -.TP -\fB\*(T<\fBxmms2_title\fR\*(T>\fR +.TP +\fB\*(T<\fBxmms2_title\fR\*(T>\fR Title in current XMMS2 song -.TP -\fB\*(T<\fBxmms2_genre\fR\*(T>\fR +.TP +\fB\*(T<\fBxmms2_genre\fR\*(T>\fR Genre in current XMMS2 song -.TP -\fB\*(T<\fBxmms2_comment\fR\*(T>\fR +.TP +\fB\*(T<\fBxmms2_comment\fR\*(T>\fR Comment in current XMMS2 song -.TP -\fB\*(T<\fBxmms2_decoder\fR\*(T>\fR +.TP +\fB\*(T<\fBxmms2_decoder\fR\*(T>\fR Decoder plugin used -.TP -\fB\*(T<\fBxmms2_transport\fR\*(T>\fR +.TP +\fB\*(T<\fBxmms2_transport\fR\*(T>\fR Transport plugin used -.TP -\fB\*(T<\fBxmms2_url\fR\*(T>\fR +.TP +\fB\*(T<\fBxmms2_url\fR\*(T>\fR Full path to current song -.TP -\fB\*(T<\fBxmms2_tracknr\fR\*(T>\fR +.TP +\fB\*(T<\fBxmms2_tracknr\fR\*(T>\fR Track number in current XMMS2 song -.TP -\fB\*(T<\fBxmms2_bitrate\fR\*(T>\fR +.TP +\fB\*(T<\fBxmms2_bitrate\fR\*(T>\fR Bitrate of current song -.TP -\fB\*(T<\fBxmms2_id\fR\*(T>\fR +.TP +\fB\*(T<\fBxmms2_id\fR\*(T>\fR XMMS2 id of current song -.TP -\fB\*(T<\fBxmms2_duration\fR\*(T>\fR +.TP +\fB\*(T<\fBxmms2_duration\fR\*(T>\fR Duration of current song -.TP -\fB\*(T<\fBxmms2_elapsed\fR\*(T>\fR +.TP +\fB\*(T<\fBxmms2_elapsed\fR\*(T>\fR Song's elapsed time -.TP -\fB\*(T<\fBxmms2_size\fR\*(T>\fR +.TP +\fB\*(T<\fBxmms2_size\fR\*(T>\fR Size of current song -.TP -\fB\*(T<\fBxmms2_percent\fR\*(T>\fR +.TP +\fB\*(T<\fBxmms2_percent\fR\*(T>\fR Percent of song's progress -.TP -\fB\*(T<\fBxmms2_status\fR\*(T>\fR +.TP +\fB\*(T<\fBxmms2_status\fR\*(T>\fR XMMS2 status (Playing, Paused, Stopped, or Disconnected) -.TP -\fB\*(T<\fBxmms2_bar\fR\*(T>\fR \*(T<\fB(height),(width)\fR\*(T> +.TP +\fB\*(T<\fBxmms2_bar\fR\*(T>\fR \*(T<\fB(height),(width)\fR\*(T> Bar of XMMS2's progress -.TP -\fB\*(T<\fBxmms2_smart\fR\*(T>\fR +.TP +\fB\*(T<\fBxmms2_smart\fR\*(T>\fR Prints the song name in either the form "artist - title" or file name, depending on whats available .SH EXAMPLES -.TP +.TP \*(T\*(T<\fB\-t '${time %D %H:%M}' \-o \-u 30\fR\*(T> Start Conky in its own window with date and clock as text and 30 sec update interval. -.TP +.TP \*(T\*(T<\fB\-a top_left \-x 5 \-y 500 \-d\fR\*(T> Start Conky to background at coordinates (5, 500). .SH FILES diff --git a/doc/docs.xml b/doc/docs.xml index 0fd254bb..e9299e94 100644 --- a/doc/docs.xml +++ b/doc/docs.xml @@ -74,7 +74,7 @@ - + @@ -129,7 +129,7 @@ An easy way to force Conky to reload your ~/.conkyrc: "killall -SIGUSR1 conky". - Saves you the trouble of having to kill and then restart. + Saves you the trouble of having to kill and then restart. You can now also do the same with SIGHUP. IMPORTANT: For previous Conky users, Conky 1.3 no longer supports the metar stuff. diff --git a/doc/variables.xml b/doc/variables.xml index aa11301e..6ae23554 100644 --- a/doc/variables.xml +++ b/doc/variables.xml @@ -9,6 +9,17 @@ + + + + + + + IP addresses for an interface (if one - works like addr). Linux only. + + + + @@ -442,6 +453,33 @@ + + + + + + Conky version + + + + + + + + + Date Conky was built + + + + + + + + + CPU architecture Conky was built for + + + @@ -751,6 +789,16 @@ + + + + + + + File system type + + + @@ -1033,6 +1081,26 @@ + + + + + + + when using smapi, if the battery with index INDEX is installed, display everything between $if_smapi_bat_installed and the matching $endif + + + + + + + + + + if INTERFACE exists and is up, display everything between $if_up and the matching $endif + + + @@ -1420,6 +1488,36 @@ + + + + + + + when using smapi, display contents of the /sys/devices/platform/smapi directory. ARGS are either '(FILENAME)' or 'bat (INDEX) (FILENAME)' to display the corresponding files' content. This is a very raw method of accessing the smapi values. When available, better use one of the smapi_* variables instead. + + + + + + + + + + when using smapi, display the remaining capacity in percent of the battery with index INDEX. This is a separate variable because it supports the 'use_spacer' configuration option. + + + + + + + + + + when using smapi, display the remaining capacity of the battery with index INDEX as a bar. + + + @@ -1700,6 +1798,42 @@ + + + + + + Number of users logged in + + + + + + + + + Lists the names of the users logged in + + + + + + + + + Lists the consoles in use + + + + + + + + + Lists how long users have been logged in for + + + @@ -1741,7 +1875,7 @@ Wireless access point ESSID (Linux only) - + @@ -1751,7 +1885,7 @@ Wireless mode (Managed/Ad-Hoc/Master) (Linux only) - + @@ -1761,7 +1895,7 @@ Wireless bitrate (ie 11 Mb/s) (Linux only) - + diff --git a/extras/nano/conky.nanorc b/extras/nano/conky.nanorc index 34d57ca2..9829b659 100644 --- a/extras/nano/conky.nanorc +++ b/extras/nano/conky.nanorc @@ -9,7 +9,7 @@ syntax "conky" "\.*conkyrc.*$" color green "\<(alignment|background|border_margin|border_width|cpu_avg_samples|default_color|default_shade_color|default_outline_color|double_buffer|draw_borders|draw_graph_borders|draw_shades|draw_outline|font|gap_x|gap_y|imap|mail_spool|max_port_monitor_connections|max_specials|max_user_text|maximum_width|minimum_size|mpd_host|mpd_port|mpd_password|music_player_interval|net_avg_samples|no_buffers|out_to_console|override_utf8_locale|own_window|own_window_class|own_window_colour|own_window_hints|own_window_title|own_window_transparent|own_window_type|pad_percents|pop3|stippled_borders|total_run_times|update_interval|uppercase|use_spacer|use_xft|xftalpha|xftfont)\>" ## Variables -color brightblue "\<(acpiacadapter|acpifan|acpitemp|acpitempf|addr|adt746xcpu|adt746xfan|align|alignr|apm_adapter|apm_battery_life|apm_battery_time|audacious_bar|audacious_bitrate|audacious_channels|audacious_filename|audacious_frequency|audacious_length|audacious_length_seconds|audacious_playlist_length|audacious_playlist_position|audacious_position|audacious_position_seconds|audacious_status|audacious_title|battery|battery_time|bmpx_album|bmpx_artist|bmpx_bitrate|bmpx_title|bmpx_track|bmpx_uri|buffers|cached|color|colour|cpu|cpubar|cpugraph|diskio|diskiograph|downspeed|downspeedf|downspeedgraph|else|entropy_avail|entropy_bar|entropy_poolsize|exec|execbar|execgraph|execi|execibar|execigraph|font|freq|freq_dyn|freq_dyn_g|freq_g|fs_bar|fs_free|fs_free_perc|fs_size|fs_used|goto|hddtemp|head|hr|hwmon|i2c|i8k_ac_status|i8k_bios|i8k_buttons_status|i8k_cpu_temp|i8k_cpu_tempf|i8k_left_fan_rpm|i8k_left_fan_status|i8k_right_fan_rpm|i8k_right_fan_status|i8k_serial|i8k_version|if_existing|if_running|if_mounted|kernel|linkstatus|loadavg|machine|mails|mem|membar|memmax|memperc|mpd_album|mpd_artist|mpd_bar|mpd_bitrate|mpd_elapsed|mpd_file|mpd_length|mpd_name|mpd_percent|mpd_smart|mpd_status|mpd_title|mpd_vol|new_mails|nodename|offset|outlinecolor|platform|pre_exec|processes|running_processes|shadecolor|stippled_hr|swap|swapbar|swapmax|swapperc|sysname|tab|tail|tcp_portmon|texeci|time|top|top_mem|totaldown|totalup|tztime|updates|upspeed|upspeedf|upspeedgraph|uptime|uptime_short|voffset|voltage_mv|voltage_v)\>" +color brightblue "\<(acpiacadapter|acpifan|acpitemp|acpitempf|addr|adt746xcpu|adt746xfan|align|alignr|apm_adapter|apm_battery_life|apm_battery_time|audacious_bar|audacious_bitrate|audacious_channels|audacious_filename|audacious_frequency|audacious_length|audacious_length_seconds|audacious_playlist_length|audacious_playlist_position|audacious_position|audacious_position_seconds|audacious_status|audacious_title|battery|battery_time|bmpx_album|bmpx_artist|bmpx_bitrate|bmpx_title|bmpx_track|bmpx_uri|buffers|cached|color|colour|cpu|cpubar|cpugraph|diskio|diskiograph|downspeed|downspeedf|downspeedgraph|else|entropy_avail|entropy_bar|entropy_poolsize|exec|execbar|execgraph|execi|execibar|execigraph|font|freq|freq_dyn|freq_dyn_g|freq_g|fs_bar|fs_free|fs_free_perc|fs_size|fs_used|goto|hddtemp|head|hr|hwmon|i2c|i8k_ac_status|i8k_bios|i8k_buttons_status|i8k_cpu_temp|i8k_cpu_tempf|i8k_left_fan_rpm|i8k_left_fan_status|i8k_right_fan_rpm|i8k_right_fan_status|i8k_serial|i8k_version|if_existing|if_running|if_mounted|kernel|linkstatus|loadavg|machine|mails|mem|membar|memmax|memperc|mpd_album|mpd_artist|mpd_bar|mpd_bitrate|mpd_elapsed|mpd_file|mpd_length|mpd_name|mpd_percent|mpd_smart|mpd_status|mpd_title|mpd_vol|new_mails|nodename|offset|outlinecolor|platform|pre_exec|processes|running_processes|shadecolor|stippled_hr|swap|swapbar|swapmax|swapperc|sysname|tab|tail|tcp_portmon|texeci|time|top|top_mem|totaldown|totalup|tztime|updates|upspeed|upspeedf|upspeedgraph|uptime|uptime_short|voffset|voltage_mv|voltage_v|xmms2_artist|xmms2_album|xmms2_title|xmms2_genre|xmms2_comment|xmms2_url|xmms2_tracknr|xmms2_bitrate|xmms2_id|xmms2_duration|xmms2_elapsed|xmms2_size|xmms2_percent|xmms2_status|xmms2_bar|xmms2_smart|xmms2_date|xmms2_timesplayed|xmms2_playlist)\>" color brightblue "\$\{?[0-9A-Z_!@#$*?-]+\}?" color cyan "(\{|\}|\(|\)|\;|\]|\[|`|\\|\$|<|>|!|=|&|\|)" color brightred "^TEXT$" diff --git a/extras/vim/syntax/conkyrc.vim b/extras/vim/syntax/conkyrc.vim index 74234183..50858850 100644 --- a/extras/vim/syntax/conkyrc.vim +++ b/extras/vim/syntax/conkyrc.vim @@ -236,6 +236,25 @@ syn keyword ConkyrcVarName contained nextgroup=ConkyrcNumber,ConkyrcColour skipw \ voffset \ voltage_mv \ voltage_v + \ xmms2_artist + \ xmms2_album + \ xmms2_title + \ xmms2_genre + \ xmms2_comment + \ xmms2_url + \ xmms2_tracknr + \ xmms2_bitrate + \ xmms2_id + \ xmms2_duration + \ xmms2_elapsed + \ xmms2_date + \ xmms2_size + \ xmms2_percent + \ xmms2_status + \ xmms2_bar + \ xmms2_timesplayed + \ xmms2_playlist + \ xmms2_smart hi def link ConkyrcComment Comment hi def link ConkyrcSetting Keyword diff --git a/src/Makefile.am b/src/Makefile.am index 25979781..958e03c4 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -84,6 +84,10 @@ if BUILD_RSS rss = rss.c prss.c prss.h endif +if BUILD_SMAPI +smapi = smapi.c smapi.h +endif + conky_SOURCES = \ $(audacious) \ $(bmpx) \ @@ -107,7 +111,9 @@ conky_SOURCES = \ mboxscan.c \ mboxscan.h \ $(x11) \ - $(xmms2) + $(xmms2) \ + $(smapi) \ + users.c AM_LDFLAGS = $(PTHREAD_LIBS) -lm @@ -129,6 +135,8 @@ EXTRA_DIST = \ top.h \ diskio.h \ x11.c \ - xmms2.c + xmms2.c \ + smapi.c \ + users.c # vi:set ts=8 sw=8 noet ai nocindent syntax=automake: diff --git a/src/common.c b/src/common.c index 9bda9c67..2893a4fc 100644 --- a/src/common.c +++ b/src/common.c @@ -308,6 +308,9 @@ void update_stuff() if (NEED(INFO_ENTROPY)) { update_entropy(); } + if (NEED(INFO_USERS)) { + update_users(); + } } int round_to_int(float f) diff --git a/src/conky.c b/src/conky.c index da1e71c6..62df2fbe 100644 --- a/src/conky.c +++ b/src/conky.c @@ -117,8 +117,11 @@ static void print_version() #endif /* RSS */ #ifdef HAVE_IWLIB " * wireless\n" -#endif - "", SYSTEM_CONFIG_FILE +#endif /* HAVE_IWLIB */ +#ifdef SMAPI + " * smapi\n" +#endif /* SMAPI */ + "", SYSTEM_CONFIG_FILE ); exit(0); @@ -135,8 +138,12 @@ static int text_width, text_height; enum alignment { TOP_LEFT = 1, TOP_RIGHT, + TOP_MIDDLE, BOTTOM_LEFT, BOTTOM_RIGHT, + BOTTOM_MIDDLE, + MIDDLE_LEFT, + MIDDLE_RIGHT, NONE }; @@ -1031,6 +1038,9 @@ static void human_readable(long long num, char *buf, int size, char *func_name) enum text_object_type { OBJ_addr, +#if defined(__linux__) + OBJ_addrs, +#endif /* __linux__ */ #ifndef __OpenBSD__ OBJ_acpiacadapter, OBJ_adt746xcpu, @@ -1056,6 +1066,9 @@ enum text_object_type { OBJ_color7, OBJ_color8, OBJ_color9, + OBJ_conky_version, + OBJ_conky_build_date, + OBJ_conky_build_arch, OBJ_font, OBJ_cpu, OBJ_cpubar, @@ -1088,6 +1101,7 @@ enum text_object_type { OBJ_fs_free, OBJ_fs_free_perc, OBJ_fs_size, + OBJ_fs_type, OBJ_fs_used, OBJ_fs_used_perc, OBJ_goto, @@ -1116,6 +1130,7 @@ enum text_object_type { OBJ_ibm_temps, OBJ_ibm_volume, OBJ_ibm_brightness, + OBJ_if_up, OBJ_pb_battery, OBJ_voltage_mv, OBJ_voltage_v, @@ -1179,6 +1194,10 @@ enum text_object_type { OBJ_upspeedgraph, OBJ_uptime, OBJ_uptime_short, + OBJ_user_names, + OBJ_user_terms, + OBJ_user_times, + OBJ_user_number, OBJ_imap, OBJ_imap_messages, OBJ_imap_unseen, @@ -1226,8 +1245,6 @@ enum text_object_type { OBJ_xmms2_title, OBJ_xmms2_genre, OBJ_xmms2_comment, - OBJ_xmms2_decoder, - OBJ_xmms2_transport, OBJ_xmms2_url, OBJ_xmms2_date, OBJ_xmms2_tracknr, @@ -1240,6 +1257,8 @@ enum text_object_type { OBJ_xmms2_status, OBJ_xmms2_bar, OBJ_xmms2_smart, + OBJ_xmms2_playlist, + OBJ_xmms2_timesplayed, #endif #ifdef AUDACIOUS OBJ_audacious_status, @@ -1276,6 +1295,12 @@ enum text_object_type { #endif #ifdef HDDTEMP OBJ_hddtemp, +#endif +#ifdef SMAPI + OBJ_smapi, + OBJ_smapi_bat_bar, + OBJ_smapi_bat_perc, + OBJ_if_smapi_bat_installed, #endif OBJ_entropy_avail, OBJ_entropy_poolsize, @@ -2017,6 +2042,12 @@ static void free_text_objects(unsigned int count, struct text_object *objs) free_iconv(); break; #endif +#ifdef __LINUX__ + case OBJ_if_up: + free(objs[i].data.ifblock.s); + free(objs[i].data.ifblock.str); + break; +#endif #ifdef XMMS2 case OBJ_xmms2_artist: if (info.xmms2.artist) { @@ -2048,18 +2079,6 @@ static void free_text_objects(unsigned int count, struct text_object *objs) info.xmms2.comment = 0; } break; - case OBJ_xmms2_decoder: - if (info.xmms2.decoder) { - free(info.xmms2.decoder); - info.xmms2.url = 0; - } - break; - case OBJ_xmms2_transport: - if (info.xmms2.transport) { - free(info.xmms2.transport); - info.xmms2.url = 0; - } - break; case OBJ_xmms2_url: if (info.xmms2.url) { free(info.xmms2.url); @@ -2078,6 +2097,12 @@ static void free_text_objects(unsigned int count, struct text_object *objs) info.xmms2.status = 0; } break; + case OBJ_xmms2_playlist: + if (info.xmms2.playlist) { + free(info.xmms2.playlist); + info.xmms2.playlist = 0; + } + break; case OBJ_xmms2_smart: if (info.xmms2.artist) { free(info.xmms2.artist); @@ -2148,6 +2173,24 @@ static void free_text_objects(unsigned int count, struct text_object *objs) case OBJ_entropy_poolsize: case OBJ_entropy_bar: break; + case OBJ_user_names: + if (info.users.names) { + free(info.users.names); + info.users.names = 0; + } + break; + case OBJ_user_terms: + if (info.users.terms) { + free(info.users.terms); + info.users.terms = 0; + } + break; + case OBJ_user_times: + if (info.users.times) { + free(info.users.times); + info.users.times = 0; + } + break; } } free(objs); @@ -2190,7 +2233,7 @@ static void free_text_objects(unsigned int count, struct text_object *objs) } #endif /* text_objects = NULL; - text_object_count = 0; */ + text_object_count = 0; */ } void scan_mixer_bar(const char *arg, int *a, int *w, int *h) @@ -2404,6 +2447,18 @@ static struct text_object *construct_text_object(const char *s, obj->data.sensor = atoi(&arg[0]); END OBJ(ibm_volume, 0) END OBJ(ibm_brightness, 0) + END OBJ(if_up, 0) + if (blockdepth >= MAX_IF_BLOCK_DEPTH) { + CRIT_ERR("MAX_IF_BLOCK_DEPTH exceeded"); + } + if (!arg) { + ERR("if_up needs an argument"); + obj->data.ifblock.s = 0; + } else + obj->data.ifblock.s = strdup(arg); + blockstart[blockdepth] = object_count; + obj->data.ifblock.pos = object_count + 2; + blockdepth++; END OBJ(pb_battery, 0) if (arg && strcmp(arg, "status") == 0) { obj->data.i = PB_BATT_STATUS; @@ -2566,6 +2621,9 @@ static struct text_object *construct_text_object(const char *s, obj->data.l = color9; END OBJ(font, 0) obj->data.s = scan_font(arg); + END OBJ(conky_version, 0) + END OBJ(conky_build_date, 0) + END OBJ(conky_build_arch, 0) END OBJ(downspeed, INFO_NET) if (arg) { obj->data.net = get_net_stat(arg); @@ -2734,6 +2792,11 @@ static struct text_object *construct_text_object(const char *s, arg = "/"; } obj->data.fs = prepare_fs_stat(arg); + END OBJ(fs_type, INFO_FS) + if (!arg) { + arg = "/"; + } + obj->data.fs = prepare_fs_stat(arg); END OBJ(fs_used, INFO_FS) if (!arg) { arg = "/"; @@ -2920,6 +2983,14 @@ static struct text_object *construct_text_object(const char *s, } else { CRIT_ERR("addr needs argument"); } +#if defined(__linux__) + END OBJ(addrs, INFO_NET) + if (arg) { + obj->data.net = get_net_stat(arg); + } else { + CRIT_ERR("addrs needs argument"); + } +#endif /* __linux__ */ END OBJ(tail, 0) char buf[64]; int n1, n2; @@ -3371,6 +3442,10 @@ static struct text_object *construct_text_object(const char *s, } END OBJ(uptime_short, INFO_UPTIME) END OBJ(uptime, INFO_UPTIME) + END OBJ(user_names, INFO_USERS) + END OBJ(user_times, INFO_USERS) + END OBJ(user_terms, INFO_USERS) + END OBJ(user_number, INFO_USERS) #ifndef __OpenBSD__ END OBJ(adt746xcpu, 0) END OBJ(adt746xfan, 0) @@ -3413,16 +3488,52 @@ static struct text_object *construct_text_object(const char *s, } else { obj->global_mode = 1; } -#ifdef MPD - END OBJ(mpd_artist, INFO_MPD) - END OBJ(mpd_title, INFO_MPD) - if (arg) { - sscanf(arg, "%d", &info.mpd.max_title_len); - if (info.mpd.max_title_len > 0) { - info.mpd.max_title_len++; +#ifdef SMAPI + END OBJ(smapi, 0) + if (arg) + obj->data.s = strdup(arg); + else + ERR("smapi needs an argument"); + END OBJ(if_smapi_bat_installed, 0) + if (blockdepth >= MAX_IF_BLOCK_DEPTH) { + CRIT_ERR("MAX_IF_BLOCK_DEPTH exceeded"); + } + if (!arg) { + ERR("if_smapi_bat_installed needs an argument"); + obj->data.ifblock.s = 0; + } else + obj->data.ifblock.s = strdup(arg); + blockstart[blockdepth] = object_count; + obj->data.ifblock.pos = object_count + 2; + blockdepth++; + END OBJ(smapi_bat_perc, 0) + if (arg) + obj->data.s = strdup(arg); + else + ERR("smapi_bat_perc needs an argument"); + END OBJ(smapi_bat_bar, 0) + if(arg) { + int cnt; + if(sscanf(arg, "%i %n", &obj->data.i, &cnt) <= 0) { + ERR("first argument to smapi_bat_bar must be an integer value"); + obj->data.i = -1; } else { - CRIT_ERR("mpd_title: invalid length argument"); + obj->b = 4; + arg = scan_bar(arg + cnt, &obj->a, &obj->b); } + } else + ERR("if_smapi_bat_bar needs an argument"); +#endif /* SMAPI */ +#ifdef MPD + END OBJ(mpd_artist, INFO_MPD) + END OBJ(mpd_title, INFO_MPD) + if (arg) { + sscanf(arg, "%d", &info.mpd.max_title_len); + if (info.mpd.max_title_len > 0) { + info.mpd.max_title_len++; + } else { + CRIT_ERR("mpd_title: invalid length argument"); + } } else { info.mpd.max_title_len = 0; } @@ -3448,8 +3559,6 @@ static struct text_object *construct_text_object(const char *s, END OBJ(xmms2_title, INFO_XMMS2) END OBJ(xmms2_genre, INFO_XMMS2) END OBJ(xmms2_comment, INFO_XMMS2) - END OBJ(xmms2_decoder, INFO_XMMS2) - END OBJ(xmms2_transport, INFO_XMMS2) END OBJ(xmms2_url, INFO_XMMS2) END OBJ(xmms2_tracknr, INFO_XMMS2) END OBJ(xmms2_bitrate, INFO_XMMS2) @@ -3463,6 +3572,8 @@ static struct text_object *construct_text_object(const char *s, END OBJ(xmms2_bar, INFO_XMMS2) scan_bar(arg, &obj->data.pair.a, &obj->data.pair.b); END OBJ(xmms2_smart, INFO_XMMS2) + END OBJ(xmms2_playlist, INFO_XMMS2) + END OBJ(xmms2_timesplayed, INFO_XMMS2) #endif #ifdef AUDACIOUS END OBJ(audacious_status, INFO_AUDACIOUS) @@ -3994,7 +4105,7 @@ static void generate_text_internal(char *p, int p_max_size, } OBJ(wireless_link_qual_perc) { if (obj->data.net->link_qual_max > 0) { - spaced_print(p, p_max_size, "%.0f%%", 5, + spaced_print(p, p_max_size, "%.0f", 5, "wireless_link_qual_perc", (double) obj->data.net->link_qual / obj->data.net->link_qual_max * 100); @@ -4044,7 +4155,8 @@ static void generate_text_internal(char *p, int p_max_size, get_battery_stuff(p, p_max_size, obj->data.s, BATTERY_TIME); } OBJ(battery_percent) { - snprintf(p, p_max_size, "%d", get_battery_perct(obj->data.s)); + spaced_print(p, p_max_size, "%*d", pad_percents, + "battery_percent", get_battery_perct(obj->data.s)); } OBJ(battery_bar) { new_bar(p, obj->a, obj->b, get_battery_perct_bar(obj->data.s)); @@ -4108,6 +4220,15 @@ static void generate_text_internal(char *p, int p_max_size, OBJ(color9) { new_fg(p, color9); } + OBJ(conky_version) { + snprintf(p, p_max_size, "%s", VERSION); + } + OBJ(conky_build_date) { + snprintf(p, p_max_size, "%s", BUILD_DATE); + } + OBJ(conky_build_arch) { + snprintf(p, p_max_size, "%s", BUILD_ARCH); + } #if defined(__linux__) OBJ(i8k_version) { snprintf(p, p_max_size, "%s", i8k.version); @@ -4191,6 +4312,15 @@ static void generate_text_internal(char *p, int p_max_size, OBJ(ibm_brightness) { get_ibm_acpi_brightness(p, p_max_size); } + OBJ(if_up) { + if ((obj->data.ifblock.s) + && (!interface_up(obj->data.ifblock.s))) { + i = obj->data.ifblock.pos; + if_jumped = 1; + } else { + if_jumped = 0; + } + } OBJ(pb_battery) { get_powerbook_batt_info(p, p_max_size, obj->data.i); } @@ -4316,6 +4446,18 @@ static void generate_text_internal(char *p, int p_max_size, obj->data.net->addr.sa_data[5] & 255); } +#if defined(__linux__) + OBJ(addrs) { + if(NULL != obj->data.net->addrs && strlen(obj->data.net->addrs) > 2) + { + obj->data.net->addrs[strlen(obj->data.net->addrs) - 2] = 0; /* remove ", " from end of string */ + strcpy(p, obj->data.net->addrs); + } + else + strcpy(p, "0.0.0.0"); + } +#endif /* __linux__ */ + #if defined(IMLIB2) && defined(X11) OBJ(image) { if (obj->a < 1) { @@ -4747,8 +4889,8 @@ static void generate_text_internal(char *p, int p_max_size, OBJ(fs_free_perc) { if (obj->data.fs != NULL) { if (obj->data.fs->size) { - snprintf(p, p_max_size, "%*d", pad_percents, - (int) ((obj->data.fs->avail * 100) / + spaced_print(p, p_max_size, "%*d", pad_percents, + "fs_free_perc", (int) ((obj->data.fs->avail * 100) / obj->data.fs->size)); } else { snprintf(p, p_max_size, "0"); @@ -4760,6 +4902,10 @@ static void generate_text_internal(char *p, int p_max_size, human_readable(obj->data.fs->size, p, 255, "fs_size"); } } + OBJ(fs_type) { + if (obj->data.fs != NULL) + snprintf(p, p_max_size, "%s", obj->data.fs->type); + } OBJ(fs_used) { if (obj->data.fs != NULL) { human_readable(obj->data.fs->size - (obj->data.fs->free @@ -4781,8 +4927,8 @@ static void generate_text_internal(char *p, int p_max_size, OBJ(fs_used_perc) { if (obj->data.fs != NULL) { if (obj->data.fs->size) { - snprintf(p, 4, "%d", - 100 - ((int) ((obj->data.fs->avail * 100) / + spaced_print(p, 4, "%*d", pad_percents, + "fs_used_perc", 100 - ((int) ((obj->data.fs->avail * 100) / obj->data.fs->size))); } else { snprintf(p, p_max_size, "0"); @@ -5174,7 +5320,18 @@ static void generate_text_internal(char *p, int p_max_size, OBJ(uptime) { format_seconds(p, p_max_size, (int) cur->uptime); } - + OBJ(user_names) { + snprintf(p, p_max_size, "%s", cur->users.names); + } + OBJ(user_terms) { + snprintf(p, p_max_size, "%s", cur->users.terms); + } + OBJ(user_times) { + snprintf(p, p_max_size, "%s", cur->users.times); + } + OBJ(user_number) { + snprintf(p, p_max_size, "%d", cur->users.number); + } #if (defined(__FreeBSD__) || defined(__FreeBSD_kernel__) \ || defined(__OpenBSD__)) && (defined(i386) || defined(__i386__)) OBJ(apm_adapter) { @@ -5291,7 +5448,8 @@ static void generate_text_internal(char *p, int p_max_size, } } OBJ(mpd_percent) { - snprintf(p, p_max_size, "%2.0f", cur->mpd.progress * 100); + spaced_print(p, p_max_size, "%*d", pad_percents, + "mpd_percent", (int) (cur->mpd.progress * 100)); } OBJ(mpd_bar) { new_bar(p, obj->data.pair.a, obj->data.pair.b, @@ -5331,12 +5489,6 @@ static void generate_text_internal(char *p, int p_max_size, OBJ(xmms2_comment) { snprintf(p, p_max_size, "%s", cur->xmms2.comment); } - OBJ(xmms2_decoder) { - snprintf(p, p_max_size, "%s", cur->xmms2.decoder); - } - OBJ(xmms2_transport) { - snprintf(p, p_max_size, "%s", cur->xmms2.transport); - } OBJ(xmms2_url) { snprintf(p, p_max_size, "%s", cur->xmms2.url); } @@ -5376,6 +5528,12 @@ static void generate_text_internal(char *p, int p_max_size, new_bar(p, obj->data.pair.a, obj->data.pair.b, (int) (cur->xmms2.progress * 255.0f)); } + OBJ(xmms2_playlist) { + snprintf(p, p_max_size, "%s", cur->xmms2.playlist); + } + OBJ(xmms2_timesplayed) { + snprintf(p, p_max_size, "%i", cur->xmms2.timesplayed); + } OBJ(xmms2_smart) { if (strlen(cur->xmms2.title) < 2 && strlen(cur->xmms2.title) < 2) { @@ -5758,6 +5916,43 @@ head: (double) cur->entropy.poolsize; new_bar(p, obj->a, obj->b, (int) (entropy_perc * 255.0f)); } +#ifdef SMAPI + OBJ(smapi) { + char *s; + if(obj->data.s) { + s = smapi_get_val(obj->data.s); + snprintf(p, p_max_size, "%s", s); + free(s); + } + } + OBJ(if_smapi_bat_installed) { + int idx; + if(obj->data.ifblock.s && sscanf(obj->data.ifblock.s, "%i", &idx) == 1) { + if(!smapi_bat_installed(idx)) { + i = obj->data.ifblock.pos; + if_jumped = 1; + } else + if_jumped = 0; + } else + ERR("argument to if_smapi_bat_installed must be an integer"); + } + OBJ(smapi_bat_perc) { + int idx, val; + if(obj->data.s && sscanf(obj->data.s, "%i", &idx) == 1) { + val = smapi_bat_installed(idx) ? + smapi_get_bat_int(idx, "remaining_percent") : 0; + spaced_print(p, p_max_size, "%*d", pad_percents, "smapi_bat_perc", val); + } else + ERR("argument to smapi_bat_perc must be an integer"); + } + OBJ(smapi_bat_bar) { + if(obj->data.i >= 0 && smapi_bat_installed(obj->data.i)) + new_bar(p, obj->a, obj->b, (int) + (255 * smapi_get_bat_int(obj->data.i, "remaining_percent") / 100)); + else + new_bar(p, obj->a, obj->b, 0); + } +#endif /* SMAPI */ break; } @@ -5780,7 +5975,7 @@ head: iconv(*iconv_cd[iconv_selected - 1], NULL, NULL, NULL, NULL); while (dummy1 > 0) { bytes = iconv(*iconv_cd[iconv_selected - 1], &ptr, &dummy1, - &outptr, &dummy2); + &outptr, &dummy2); if (bytes == -1) { ERR("Iconv codeset conversion failed"); break; @@ -5947,6 +6142,11 @@ static void update_text_area() y = gap_y; break; + case TOP_MIDDLE: + x = workarea[2] / 2 - text_width / 2 - gap_x; + y = gap_y; + break; + default: case BOTTOM_LEFT: x = gap_x; @@ -5958,6 +6158,21 @@ static void update_text_area() y = workarea[3] - text_height - gap_y; break; + case BOTTOM_MIDDLE: + x = workarea[2] / 2 - text_width / 2 - gap_x; + y = workarea[3] - text_height - gap_y; + break; + + case MIDDLE_LEFT: + x = gap_x; + y = workarea[3] / 2 - text_height / 2 - gap_y; + break; + + case MIDDLE_RIGHT: + x = workarea[2] - text_width - gap_x; + y = workarea[3] / 2 - text_height / 2 - gap_y; + break; + #ifdef OWN_WINDOW case NONE: // Let the WM manage the window x = window.x; @@ -6981,8 +7196,9 @@ static void main_loop() #endif switch (g_signal_pending) { + case SIGHUP: case SIGUSR1: - ERR("received SIGUSR1. reloading the config file."); + ERR("received SIGHUP or SIGUSR1. reloading the config file."); reload_config(); break; case SIGINT: @@ -7194,18 +7410,34 @@ static enum alignment string_to_alignment(const char *s) return TOP_LEFT; } else if (strcasecmp(s, "top_right") == 0) { return TOP_RIGHT; + } else if (strcasecmp(s, "top_middle") == 0) { + return TOP_MIDDLE; } else if (strcasecmp(s, "bottom_left") == 0) { return BOTTOM_LEFT; } else if (strcasecmp(s, "bottom_right") == 0) { return BOTTOM_RIGHT; + } else if (strcasecmp(s, "bottom_middle") == 0) { + return BOTTOM_MIDDLE; + } else if (strcasecmp(s, "middle_left") == 0) { + return MIDDLE_LEFT; + } else if (strcasecmp(s, "middle_right") == 0) { + return MIDDLE_RIGHT; } else if (strcasecmp(s, "tl") == 0) { return TOP_LEFT; } else if (strcasecmp(s, "tr") == 0) { return TOP_RIGHT; + } else if (strcasecmp(s, "tm") == 0) { + return TOP_MIDDLE; } else if (strcasecmp(s, "bl") == 0) { return BOTTOM_LEFT; } else if (strcasecmp(s, "br") == 0) { return BOTTOM_RIGHT; + } else if (strcasecmp(s, "bm") == 0) { + return BOTTOM_MIDDLE; + } else if (strcasecmp(s, "ml") == 0) { + return MIDDLE_LEFT; + } else if (strcasecmp(s, "mr") == 0) { + return MIDDLE_RIGHT; } else if (strcasecmp(s, "none") == 0) { return NONE; } @@ -7242,10 +7474,9 @@ static void set_default_configurations(void) info.xmms2.title = NULL; info.xmms2.genre = NULL; info.xmms2.comment = NULL; - info.xmms2.decoder = NULL; - info.xmms2.transport = NULL; info.xmms2.url = NULL; info.xmms2.status = NULL; + info.xmms2.playlist = NULL; #endif use_spacer = NO_SPACER; #ifdef X11 @@ -7305,6 +7536,7 @@ static void set_default_configurations(void) update_interval = 3.0; info.music_player_interval = 1.0; stuff_in_upper_case = 0; + info.users.number = 1; #ifdef TCP_PORT_MONITOR tcp_port_monitor_args.max_port_monitor_connections = @@ -8260,9 +8492,15 @@ int main(int argc, char **argv) selected_font = 0; update_text_area(); /* to get initial size of the window */ +#ifdef OWN_WINDOW init_window(own_window, text_width + border_margin * 2 + 1, text_height + border_margin * 2 + 1, set_transparent, background_colour, argv, argc); +#else /* OWN_WINDOW */ + init_window(0, text_width + border_margin * 2 + 1, + text_height + border_margin * 2 + 1, set_transparent, 0, + argv, argc); +#endif /* OWN_WINDOW */ selected_font = 0; update_text_area(); /* to position text/window on screen */ @@ -8294,6 +8532,7 @@ int main(int argc, char **argv) if (sigaction(SIGINT, &act, &oact) < 0 || sigaction(SIGUSR1, &act, &oact) < 0 + || sigaction(SIGHUP,&act,&oact) < 0 || sigaction(SIGTERM, &act, &oact) < 0) { ERR("error setting signal handler: %s", strerror(errno)); } diff --git a/src/conky.h b/src/conky.h index c87ffab4..cb2cd23d 100644 --- a/src/conky.h +++ b/src/conky.h @@ -23,7 +23,9 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . * - * $Id$ */ + * $Id$ + * + */ #ifndef _conky_h_ #define _conky_h_ @@ -70,6 +72,10 @@ #include "prss.h" #endif +#ifdef SMAPI +#include "smapi.h" +#endif + #include "mboxscan.h" #include "timed_thread.h" @@ -119,6 +125,7 @@ struct net_stat { long long recv, trans; double recv_speed, trans_speed; struct sockaddr addr; + char* addrs; double net_rec[15], net_trans[15]; // wireless extensions char essid[32]; @@ -135,6 +142,7 @@ unsigned int diskio_write_value; struct fs_stat { char *path; + char *type; long long size; long long avail; long long free; @@ -195,15 +203,15 @@ struct xmms2_s { char *title; char *genre; char *comment; - char *decoder; - char *transport; char *url; char *date; + char* playlist; int tracknr; int bitrate; unsigned int id; int duration; int elapsed; + int timesplayed; float size; float progress; @@ -237,6 +245,13 @@ struct entropy_s { unsigned int poolsize; }; +struct usr_info { + char *names; + char *times; + char *terms; + int number; +}; + #ifdef TCP_PORT_MONITOR #include "libtcp-portmon.h" #define MAX_PORT_MONITOR_CONNECTIONS_DEFAULT 256 @@ -280,6 +295,10 @@ enum { #ifdef RSS INFO_RSS = 24, #endif +#ifdef SMAPI + INFO_SMAPI = 25, +#endif + INFO_USERS = 26, }; /* get_battery_stuff() item selector */ @@ -341,6 +360,7 @@ struct information { #ifdef BMPX struct bmpx_s bmpx; #endif + struct usr_info users; struct process *cpu[10]; struct process *memu[10]; struct process *first_process; @@ -487,6 +507,7 @@ void format_seconds(char *buf, unsigned int n, long t); void format_seconds_short(char *buf, unsigned int n, long t); struct net_stat *get_net_stat(const char *dev); void clear_net_stats(void); +void update_users(); void update_stuff(); diff --git a/src/fs.c b/src/fs.c index 7851e653..37572f8c 100644 --- a/src/fs.c +++ b/src/fs.c @@ -46,6 +46,10 @@ #include #endif +#ifndef HAVE_STRUCT_STATFS_F_FSTYPENAME +#include +#endif + #define MAX_FS_STATS 64 static struct fs_stat fs_stats_[MAX_FS_STATS]; @@ -53,6 +57,8 @@ struct fs_stat *fs_stats = fs_stats_; static void update_fs_stat(struct fs_stat *fs); +static char* get_fs_type(const char* path); + void update_fs_stats() { unsigned i; @@ -71,6 +77,7 @@ void clear_fs_stats() for (i = 0; i < MAX_FS_STATS; ++i) { if (fs_stats[i].path) { free(fs_stats[i].path); + free(fs_stats[i].type); fs_stats[i].path = NULL; } } @@ -110,10 +117,51 @@ static void update_fs_stat(struct fs_stat *fs) /* bfree (root) or bavail (non-roots) ? */ fs->avail = (long long) s.f_bavail * s.f_bsize; fs->free = (long long) s.f_bfree * s.f_bsize; + fs->type = get_fs_type(fs->path); } else { fs->size = 0; fs->avail = 0; fs->free = 0; + fs->type = "unknown"; ERR("statfs '%s': %s", fs->path, strerror(errno)); } } + +static char* get_fs_type(const char* path) +{ + +#ifdef HAVE_STRUCT_STATFS_F_FSTYPENAME + + struct statfs s; + if(statfs(path, &s) == 0) + return s.f_fstypename; + else + ERR("statfs '%s': %s", path, strerror(errno)); + +#else + + /* TODO: walk up the directory tree so it works on + * on paths that are not actually mount points. */ + + FILE* mtab = setmntent( "/etc/mtab", "r" ); + + if(mtab == NULL) { + ERR("setmntent /etc/mtab: %s", strerror(errno)); + return "unknown"; + } + + struct mntent* me = getmntent(mtab); + + // find our path in the mtab + while(getmntent(mtab) && strcmp(path,me->mnt_dir)); + + endmntent(mtab); + + if(me) + return strdup(me->mnt_type); + +#endif // HAVE_STRUCT_STATFS_F_FSTYPENAME + + return "unknown"; + +} diff --git a/src/linux.c b/src/linux.c index 9dea1ef2..176d8b8b 100644 --- a/src/linux.c +++ b/src/linux.c @@ -166,6 +166,28 @@ void update_meminfo() fclose(meminfo_fp); } +int interface_up(const char *dev) +{ + int fd; + struct ifreq ifr; + + if((fd = socket(PF_INET, SOCK_DGRAM, 0)) < 0) { + CRIT_ERR("could not create sockfd"); + return 0; + } + strncpy(ifr.ifr_name, dev, IFNAMSIZ); + if(ioctl(fd, SIOCGIFFLAGS, &ifr)) { + /* if device does not exist, treat like not up */ + if (errno != ENODEV) + perror("SIOCGIFFLAGS"); + } else { + close(fd); + return (ifr.ifr_flags & IFF_UP); + } + close(fd); + return 0; +} + inline void update_net_stats() { FILE *net_dev_fp; @@ -205,6 +227,7 @@ inline void update_net_stats() for (i2 = 0; i2 < 16; i2++) { struct net_stat *ns; char *s, *p; + char temp_addr[17]; long long r, t, last_recv, last_trans; if (fgets(buf, 255, net_dev_fp) == NULL) { @@ -229,6 +252,12 @@ inline void update_net_stats() ns = get_net_stat(s); ns->up = 1; memset(&(ns->addr.sa_data), 0, 14); + + if(NULL == ns->addrs) + ns->addrs = (char*) malloc(17 * 16); + if(NULL != ns->addrs) + memset(ns->addrs, 0, 17 * 16); /* Up to 17 chars per ip, max 16 interfaces. Nasty memory usage... */ + last_recv = ns->recv; last_trans = ns->trans; @@ -266,6 +295,16 @@ inline void update_net_stats() ns = get_net_stat( ((struct ifreq *) conf.ifc_buf)[k].ifr_ifrn.ifrn_name); ns->addr = ((struct ifreq *) conf.ifc_buf)[k].ifr_ifru.ifru_addr; + if(NULL != ns->addrs) + { + sprintf(temp_addr, "%u.%u.%u.%u, ", + ns->addr.sa_data[2] & 255, + ns->addr.sa_data[3] & 255, + ns->addr.sa_data[4] & 255, + ns->addr.sa_data[5] & 255); + if(NULL == strstr(ns->addrs, temp_addr)) + strncpy(ns->addrs + strlen(ns->addrs), temp_addr, 17); + } } close((long) i); @@ -773,13 +812,16 @@ double get_sysfs_info(int *fd, int div, char *devtype, char *type) /* read integer */ { char buf[64]; - unsigned int n; - + int n; n = read(*fd, buf, 63); /* should read until n == 0 but I doubt that kernel will give these * in multiple pieces. :) */ - buf[n] = '\0'; - val = atoi(buf); + if (n < 0) { + printf("get_sysfs_info(): read from %s failed\n", devtype); + } else { + buf[n] = '\0'; + val = atoi(buf); + } } close(*fd); diff --git a/src/users.c b/src/users.c new file mode 100644 index 00000000..9384c6de --- /dev/null +++ b/src/users.c @@ -0,0 +1,172 @@ +/* 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) 2004, Hannu Saransaari and Lauri Hakkarainen + * Copyright (c) 2005-2007 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 . + * + * $Id: conky.h 1007 2008-02-20 20:30:45Z IQgryn $ + * + */ + +#include "conky.h" +#include +#include +#include +#include +#include + +static void user_name(char **ptr) { + const struct utmp *usr; + char buf[512]; + + setutent(); + while((usr=getutent())!=NULL) { + if (usr->ut_type==USER_PROCESS) { + strncat(buf, usr->ut_name, 9); strcat(buf, "\n"); + } + } + *ptr = buf; +} +static void user_num(int *ptr) { + const struct utmp *usr; + int users_num = 0; + + setutent(); + while ((usr=getutent())!=NULL) { + if (usr->ut_type==USER_PROCESS) { + ++users_num; + } + } + *ptr = users_num; +} +static void user_term(char **ptr) { + const struct utmp *usr; + char buf[512]; + + setutent(); + while((usr=getutent())!=NULL) { + if (usr->ut_type==USER_PROCESS) { + strncat(buf, usr->ut_line, 13); strncat(buf, "\n", 3); + } + } + *ptr = buf; +} +static void user_time(char **ptr) { + const struct utmp *usr; + time_t login, real, diff; + struct tm *dtime; + char buf[512] = ""; + char output[512] = ""; + + setutent(); + while ((usr=getutent())!=NULL) { + if (usr->ut_type==USER_PROCESS) { + login=usr->ut_time; + time(&real); + diff = difftime(real, login); + dtime = localtime(&diff); + dtime->tm_year = dtime->tm_year-70; + dtime->tm_mon = dtime->tm_mon-1; + dtime->tm_mday = dtime->tm_mday-1; + if(dtime->tm_year>0){strftime(buf,512,"%yy %mm %dd %Hh %Mm\n", dtime); goto end;} + else if(dtime->tm_mon>0){strftime(buf,512,"%mm %dd %Hh %Mm\n", dtime); goto end;} + else if(dtime->tm_mday>0){strftime(buf,512,"%dd %Hh %Mm\n", dtime); goto end;} + else if(dtime->tm_hour>0){strftime(buf,512,"%Hh %Mm\n", dtime); goto end;} + else if(dtime->tm_min>0){strftime(buf,512,"%Mm\n", dtime); goto end;} +end: + strncat(output, buf, 512); + } + } + *ptr = output; +} + +static void users_alloc(struct information *ptr) { + if (ptr->users.names == NULL) { + ptr->users.names = malloc(TEXT_BUFFER_SIZE); + + } + if (ptr->users.terms == NULL) { + ptr->users.terms = malloc(TEXT_BUFFER_SIZE); + } + if (ptr->users.times == NULL) { + ptr->users.times = malloc(TEXT_BUFFER_SIZE); + } +} + +void update_users() { + struct information * current_info = &info; + char *temp; + int t; + users_alloc(current_info); + user_name(&temp); + if (temp!=NULL) { + if (current_info->users.names) { + free(current_info->users.names); current_info->users.names = 0; + } + current_info->users.names = malloc(TEXT_BUFFER_SIZE); + strncpy(current_info->users.names, temp, TEXT_BUFFER_SIZE); + } else { + if (current_info->users.names) { + free(current_info->users.names); current_info->users.names = 0; + } + current_info->users.names = malloc(TEXT_BUFFER_SIZE); + strncpy(current_info->users.names, "broken", TEXT_BUFFER_SIZE); + } + user_num(&t); + if (t!=0) { + if (current_info->users.number) { + current_info->users.number = 0; + } + current_info->users.number = t; + } else { + current_info->users.number = 0; + } + temp = "\0"; + user_term(&temp); + if (temp!=NULL) { + if (current_info->users.terms) { + free(current_info->users.terms); current_info->users.terms = 0; + } + current_info->users.terms = malloc(TEXT_BUFFER_SIZE); + strncpy(current_info->users.terms, temp, TEXT_BUFFER_SIZE); + } else { + if (current_info->users.terms) { + free(current_info->users.terms); current_info->users.terms = 0; + } + current_info->users.terms = malloc(TEXT_BUFFER_SIZE); + strncpy(current_info->users.terms, "broken", TEXT_BUFFER_SIZE); + } + user_time(&temp); + if (temp!=NULL) { + if (current_info->users.times) { + free(current_info->users.times); current_info->users.times = 0; + } + current_info->users.times = malloc(TEXT_BUFFER_SIZE); + strncpy(current_info->users.times, temp, TEXT_BUFFER_SIZE); + } else { + if (current_info->users.times) { + free(current_info->users.times); current_info->users.times = 0; + } + current_info->users.times = malloc(TEXT_BUFFER_SIZE); + strncpy(current_info->users.times, "broken", TEXT_BUFFER_SIZE); + } +} diff --git a/src/xmms2.c b/src/xmms2.c index dbf977f3..c6215f43 100644 --- a/src/xmms2.c +++ b/src/xmms2.c @@ -68,16 +68,6 @@ static void xmms_alloc(struct information *ptr) ptr->xmms2.comment[0] = '\0'; } - if (ptr->xmms2.decoder == NULL) { - ptr->xmms2.decoder = malloc(TEXT_BUFFER_SIZE); - ptr->xmms2.decoder[0] = '\0'; - } - - if (ptr->xmms2.transport == NULL) { - ptr->xmms2.transport = malloc(TEXT_BUFFER_SIZE); - ptr->xmms2.transport[0] = '\0'; - } - if (ptr->xmms2.url == NULL) { ptr->xmms2.url = malloc(TEXT_BUFFER_SIZE); ptr->xmms2.url[0] = '\0'; @@ -92,25 +82,14 @@ static void xmms_alloc(struct information *ptr) static void xmms_clear(struct information *ptr) { xmms_alloc(ptr); - ptr->xmms2.status[0] = '\0'; ptr->xmms2.artist[0] = '\0'; ptr->xmms2.album[0] = '\0'; ptr->xmms2.title[0] = '\0'; ptr->xmms2.genre[0] = '\0'; ptr->xmms2.comment[0] = '\0'; - ptr->xmms2.decoder[0] = '\0'; - ptr->xmms2.transport[0] = '\0'; ptr->xmms2.url[0] = '\0'; ptr->xmms2.date[0] = '\0'; -} -void connection_lost(void *p) -{ - struct information *ptr = p; - - ptr->xmms2_conn_state = CONN_NO; - - xmms_clear(ptr); ptr->xmms2.tracknr = 0; ptr->xmms2.id = 0; ptr->xmms2.bitrate = 0; @@ -118,6 +97,19 @@ void connection_lost(void *p) ptr->xmms2.elapsed = 0; ptr->xmms2.size = 0; ptr->xmms2.progress = 0; + ptr->xmms2.timesplayed = -1; +} + +void connection_lost(void *p) +{ + struct information *ptr = p; + ptr->xmms2_conn_state = CONN_NO; + + fprintf(stderr,"Conky: xmms2 connection failed. %s\n", + xmmsc_get_last_error ( ptr->xmms2_conn )); + fflush(stderr); + + xmms_clear(ptr); } void handle_curent_id(xmmsc_result_t *res, void *p) @@ -174,20 +166,6 @@ void handle_curent_id(xmmsc_result_t *res, void *p) strncpy(ptr->xmms2.comment, "", TEXT_BUFFER_SIZE - 1); } - xmmsc_result_get_dict_entry_string(res2, "decoder", &temp); - if (temp != NULL) { - strncpy(ptr->xmms2.decoder, temp, TEXT_BUFFER_SIZE - 1); - } else { - strncpy(ptr->xmms2.decoder, "[Unknown]", TEXT_BUFFER_SIZE - 1); - } - - xmmsc_result_get_dict_entry_string(res2, "transport", &temp); - if (temp != NULL) { - strncpy(ptr->xmms2.transport, temp, TEXT_BUFFER_SIZE - 1); - } else { - strncpy(ptr->xmms2.transport, "[Unknown]", TEXT_BUFFER_SIZE - 1); - } - xmmsc_result_get_dict_entry_string(res2, "url", &temp); if (temp != NULL) { strncpy(ptr->xmms2.url, temp, TEXT_BUFFER_SIZE - 1); @@ -216,6 +194,9 @@ void handle_curent_id(xmmsc_result_t *res, void *p) xmmsc_result_get_dict_entry_int(res2, "size", &itemp); ptr->xmms2.size = (float) itemp / 1048576; + xmmsc_result_get_dict_entry_int( res2, "timesplayed", &itemp ); + ptr->xmms2.timesplayed = itemp; + xmmsc_result_unref(res2); } } @@ -269,6 +250,20 @@ void handle_playback_state_change(xmmsc_result_t *res, void *p) } } +void handle_playlist_loaded(xmmsc_result_t *res, void *p) { + struct information *ptr = p; + + if (ptr->xmms2.playlist == NULL) { + ptr->xmms2.playlist = malloc(TEXT_BUFFER_SIZE); + ptr->xmms2.playlist[0] = '\0'; + } + + if (!xmmsc_result_get_string(res, &ptr->xmms2.playlist)) { + ptr->xmms2.playlist[0] = '\0'; + } + +} + void update_xmms2() { struct information *current_info = &info; @@ -283,7 +278,7 @@ void update_xmms2() /* did init fail? */ if (current_info->xmms2_conn == NULL) { fprintf(stderr, "Conky: xmms2 init failed. %s\n", - xmmsc_get_last_error(current_info->xmms2_conn)); + xmmsc_get_last_error(current_info->xmms2_conn)); fflush(stderr); return; } @@ -294,14 +289,6 @@ void update_xmms2() /* clear all values */ xmms_clear(current_info); - current_info->xmms2.tracknr = 0; - current_info->xmms2.id = 0; - current_info->xmms2.bitrate = 0; - current_info->xmms2.duration = 0; - current_info->xmms2.elapsed = 0; - current_info->xmms2.size = 0; - current_info->xmms2.progress = 0; - /* fprintf(stderr, "Conky: xmms2 init ok.\n"); fflush(stderr); */ } @@ -322,8 +309,6 @@ void update_xmms2() /* set callbacks */ xmmsc_disconnect_callback_set(current_info->xmms2_conn, connection_lost, current_info); - XMMS_CALLBACK_SET(current_info->xmms2_conn, xmmsc_playback_current_id, - handle_curent_id, current_info); XMMS_CALLBACK_SET(current_info->xmms2_conn, xmmsc_broadcast_playback_current_id, handle_curent_id, current_info); @@ -332,32 +317,17 @@ void update_xmms2() XMMS_CALLBACK_SET(current_info->xmms2_conn, xmmsc_broadcast_playback_status, handle_playback_state_change, current_info); + XMMS_CALLBACK_SET(current_info->xmms2_conn, + xmmsc_broadcast_playlist_loaded, handle_playlist_loaded, + current_info); - /* get playback status, it wont be broadcasted untill it chages */ - xmmsc_result_t *res = xmmsc_playback_status(current_info->xmms2_conn); - - xmmsc_result_wait(res); - unsigned int pb_state; - - xmmsc_result_get_uint(res, &pb_state); - switch (pb_state) { - case XMMS_PLAYBACK_STATUS_PLAY: - strncpy(current_info->xmms2.status, "Playing", - TEXT_BUFFER_SIZE - 1); - break; - case XMMS_PLAYBACK_STATUS_PAUSE: - strncpy(current_info->xmms2.status, "Paused", - TEXT_BUFFER_SIZE - 1); - break; - case XMMS_PLAYBACK_STATUS_STOP: - strncpy(current_info->xmms2.status, "Stopped", - TEXT_BUFFER_SIZE - 1); - break; - default: - strncpy(current_info->xmms2.status, "Unknown", - TEXT_BUFFER_SIZE - 1); - } - xmmsc_result_unref(res); + /* get playback status, current id and active playlist */ + XMMS_CALLBACK_SET(current_info->xmms2_conn, + xmmsc_playback_current_id, handle_curent_id, current_info); + XMMS_CALLBACK_SET(current_info->xmms2_conn, + xmmsc_playback_status, handle_playback_state_change, current_info); + XMMS_CALLBACK_SET(current_info->xmms2_conn, + xmmsc_playlist_current_active, handle_playlist_loaded, current_info); /* everything seems to be ok */ current_info->xmms2_conn_state = CONN_OK;