Rewrote timed_thread library in C++ using fancy new C++0x features. The
main reason for this is to phase out poor encapsulation and C-style
function pointers.
It seems that closing xft fonts on reload is a bad idea, but this seems
to result in a memory leak. As far as I can tell, the leak doesn't grow
beyond the initial allocation however.
This patch adds the possibility to use a argb visual for the conky
window. Adding a boolean configuration entry 'own_window_argb_visual'.
the 'set_transparent_background' method sets the alpha bytes of the argb
color for transparency, instead of pseudo transparency. This patch
would close following feature request:
https://sourceforge.net/tracker/?func=detail&aid=1563931&group_id=143975&at
id=757311 and would be a workaround for some reported transparency bugs
(https://sourceforge.net/tracker/?func=detail&aid=1968923&group_id=143975&a
tid=757308 for example)
Signed-off-by: Brenden Matthews <brenden@diddyinc.com>
This fixes $scroll to only scroll when the text length is greater than
the specified length; hopefully without breaking anything.
Signed-off-by: Brenden Matthews <brenden@diddyinc.com>
Some drives are unable to return their temperature when in standby mode.
If there is more than one drive installed then other drives may not be
able to get parsed. This patch will skip over the unparsable output for
the current drive and let others get parsed.
Signed-off-by: Brenden Matthews <brenden@diddyinc.com>
This should close sf #2850092.
Basically, before this change, for strings which includes
SECRIT_MULTILINE_CHAR the computed maximum substring width was getting
summed to the width of the last substring.
The old behaviour is kept but for the case of strings including
SECRIT_MULTILINE_CHAR, for which now the maximum width of all substrings
is taken.
I don't think this will break anything else but blame me if it does ...
- kill trailing whitespace (grep -n ' $' src/*.{c,cc,h})
- eliminate space before tab (grep -n ' ' src/*.{c,cc,h})
(insert tab by pressing CTRL-v first)
- little indenting fixup in configure.ac.in (we indent using tabs, not
spaces)
note: this should not change the actual code at all - if it does, feel
free to blame me personally ;)
After some minor rewrite of the top parser (which was in fact the only
real user of the obj->type field left since introduction of text object
callbacks), there is no need for the obj->type field anymore.
Also, replaced #define _GNU_SOURCE (in config.h) with -D_GNU_SOURCE command-line parameter
because, for some reason g++ defines it implicitly and then complains about multiple definitions.
Also, removed -Winline from C(XX)FLAGS because it causes a lot of warnings for c++ code that
can't be easily removed and are not very significant.
This operation is a lot faster, but depends on the hash table size
be a power of 2 (so HTABSIZE - 1 is a row of 1's). Also a define for the
magic value cleans things up a bit.
This patch already implements complete auto-scaling for bars and gauges,
therefore introducing a flags field in order to signal whether
auto-scaling is enabled (and the scale field contains just the max value
seen so far).
This is the more generic way, although I doubt this is really error
preventing. To me, it's not totally clear as to when
substitute_newlines() is forbidden and when not. Maybe someone (the
author?) can shed light on the internal algorithm of this feature.
This is tricky: there is no such thing as $text. In fact, everything
below TEXT in the conkyrc which is NOT a text object will become one of
type OBJ_text.
To make life easy, introduce a function obj_be_plain_text() converting a
given object to the given plain text.
instead:
- call XDefaultScreen() and XScreenCount() directly from the print
callback
- have no update callback at all for the desktop objects (seems to work
well without)
While here, also drop those calls to memset, as the whole info object is
being zeroed at the beginning of main(). (Probably this is useful upon
config reload, too.)
Also add a little hack to $scroll to omit the need to call new_fg() from
inside print_scroll(). Instead of inserting a new special after printing
the scrolled text, insert a new object after the scroll object when
parsing text objects to handle the color reset.
The callback functions are:
print - to be called from generate_text_internal()
iftest - same as print for ifblock objects (triggers jumping)
barval - same as above for bar objects (returns current bar value)
gaugeval - same as above for gauge objects
graphval - same as above for graph objects
percentage - for percentage objects, returns actual percentage
free - called in free_text_objects()
Until conversion is complete, if the function pointer is NULL the old
lookup by type is being done.
Note that it's possible to assign both 'print' and 'iftest' callbacks.
In this case, the code simply ignores the 'iftest' callback, though this
could easily be changed (always calling DO_JUMP at last, of course) in
order to allow ifblock objects to print something in addition to jumping
somewhere (or not).
The decision about whether to print ASCII or X11 bar is done from within
specials.c, so all those #ifdef + if () blocks can be dropped. This also
implicitly enables the ASCII bar for some bar printing objects which where
forgotten before.
In order to make life a bit easier, the struct mpd_s field "volume" has
been renamed to just "vol" to match the object's name (mpd_vol).
Although format_media_player_time() is probably meant to be used by all
supported media players, it's currently being used by mpd only. So for
now this function can reside statically in mpd.c
The IOError happens every time I close conky's normal own window, so I
guess the situation is not as abnormal as abort() indicates. Calling
exit() instead should really suffice and give the process a chance to
clean up (by calling destructor routines for instance).
Murphy hit me again: in my naive attempt to fix the clash between
ifblocks and objects parsing text objects due to the double use of the
'sub' field, I overlooked this problem with reusing the 'special_data'
field. So here comes the real thing (TM), donating ifblocks their own
field for pointing to the jump target.
In theory, this may fail to compile on ancient systems that don't have IPv6 types (struct
sockaddr_in6 et al.) available. If it turns out that such systems are still in use, the best way
to solve it would be to provide dummy declarations via configure tests.
The problem with the original commit was that some session-managers set
stdin to /dev/null for the processes they launch, therefore the variable
wasn't very effective.
This commit change the variable conky_user_time to user_time.
This variable has a mandatory argument, a console identifier
(eg. tty7, pts/0, etc.).
Once called, this will list how long the user for the given console has been
logged in for.
This commit also allows multiple user_time to be specified for different
consoles, as well as correctly handle a conky restart.
The bug reporter asks if it is possible to add a variable giving the "current
user time" only, since the variable user_times reports the times for ALL
logged users.
AFAIK, the only info one can gather inside conky, is the login time for the
tty connected to conky's standard input.
This commit adds support for it (it should work on any posix compliant *nix).
Note that in coherence with the definition, the variable is called
conky_user_time (for a single user stand-alone machine used as a desktop
this would be the "current" user time).
This was really creepy stuff. Last updated in April, 2006 to work with
kernels > 2.6.12. I consider this "fobar" (fscking obsolete beyond all
recognition) and doubt anyone still uses this. If you do, blame me. :)
This patch ought to be small and simple ...
The reason why it's not is me wanting the entropy data out of struct
information. This means update_entropy() can not be used anymore, as it
uses this globally available object.
The solution I am presenting here is quite messy regarding header
includes. Hopefully this will go away soon as I plan on creating some
sort of "OS library" containing all OS specific routines and defining
macros for easier capability checking in the non-specific code. This on
the other hand means we'll need "wrappers" around OS specific objects,
but that's not as bad as it seems - having non-specific text objects
only will definitely clean up the code, and capabilities can be checked
where they should be.
When dropping the ifblock field of struct text_object, I short-sightedly
reused the sub field for holding the pointer to the matching else/endif.
This however doesn't work for objects parsing their own object list, as
they need the sub field for themselfs.
Since we have it, simply reuse the special_data field instead and hope
there won't ever be an object which is both special and ifblock. ;)
This is more or less a temporary fix to restore the former behaviour. In
the long term objects will define a max value, which will be of use for
all kinds of meters.
The field totalmem was formerly used to hold the percentage of used mem
by a process. So at update time, the field info.memmax was being
addressed, which is potentially being updated at the same time, As all
updating routines potentially run in parallel. Though there is an
(quite) easy fix for this: calculate the percentage upon object
printing. This works because conky synchronises all update routines
right before printing the result. (To omit locking on it's own.)
Note that the code does not only use a pre-processor generator for
defining the print functions, but also for their prototypes. Sadly, this
generated a conflict in mboxscan.c which this patch resolves, too.
In the linux kernel 2.6.31 and above, device data can either be in
/sys/class/hwmon/hwmonDEV or /sys/class/hwmon/hwmonDEV/device.
Just stat'ing for the latter doesn't work since it can exist but not contain
the required data (see https://bugs.launchpad.net/bugs/435571 for details).
The patch could be improved to keep in memory the right location of the data
on the user's system instead of trying each time, but, is it worth doing it?
A cleaner but more ugly solution would be to include text_object.h in
every header containing struct text_object definitions. But this
apparently triggers a big mess, since text_object.h itself includes
custom headers. Forward defining struct text_object is obviously the
mostly simple solution until there is a bigger header include review
cleaning it all up.
* minimise core code hooks
* drop useless exporting of private functions (and make them static)
* reorder functions in eve.c so no prototypes are needed
* drop massive header include and add double include barrier in eve.h
While testing, I found two already existing bugs:
* the variable 'a' passed to iconv_convert() needs to be passed by
reference in order to allow for the desired side effect.
* Somehow the trailing junk after an iconv_conversion to a shorter
string messes things up (and gets printed!). I couldn't exactly find
out why this happens, but setting (*p) = 0; solves this problem.
-d was broken because fork-to-background was done after the update thread creation, so the
threads ended up in the wrong process. This delays the thread creation until after the fork.
Originally, I was experiencing sporadic lockups when reading inotify_fd;
which is strange, since it is protected by select(). This should fix it
despite of the original problem.
Create each thread upon registration of the callback function, then use
semaphores to signal when it's time to update and when updating is
finished.
Many thanks to pavelo who originally came up with the idea for this.
Yes, I also thought these are monotonic counters. But it seems like they
are not, at least sometimes the value decreases by 1 leading to a very
very high cpu usage percentage being printed.
These macros can be used just like their OBJ() and OBJ_IF()
counterparts, just that they bail out hard when arg is unset. While
here, also cleanup the macro definition by using __* macros and fully
cleanup the macro namespace when the job is done.
Although this makes conky kind of less robust when it comes to
configuration errors, aborting is the right thing to do to avoid
ambiguity between unknown text objects.
Normally, this is not enough reason to remove code, but in this case it
means that either the tester always had $nvidia (if enabled) or $combine
also in her setup, or it was working without (which I guess, since there
is duplicate code in update_apcupsd()).
There are no INFO_* variables any more, so the argument passed to OBJ()
is always a function pointer or zero. By checking the argument passed in
add_update_callback(), the branch in the OBJ() macro can be dropped,
too.
* Remove leftover INFO_* values from object definitions which didn't
trigger anything.
* Drop the whole INFO_* enum as it's values are not used anymore.
* Drop all need_mask alterations (no idea why there were here at all,
but surely not sane since they are missing in the non-linux
functions).
* Drop the update delay for update_meminfo(), as parsing /proc should
not lead to abnormal overhead.
* Check for x_initialised from inside update_x11info(), so we can call
it unconditionally.
Besides improving performance when updating stuff, we ideally have no
text object specific code in update_stuff() anymore (aside some
leftovers).
The macros in construct_text_object() have gotten a bit crazier than
they were before:
* using CALLBACK(&func) instead of an INFO_* parameter to OBJ() will
make it add the given callback to the list of callbacks to be iterated
over at each update interval.
* BEWARE: the above assumes function pointer values to be > 0!
* This implicitly fixes a bug in the code: passing 0 as INFO_* value
led to selecting INFO_MAIL (1 << 0 == 1).
* Now it would select INFO_CPU (== 0), which got unused and therefore is
not a problem at all (the 0 value should be unused in enums anyway).
This needs some more work, then we should be able to drop the whole
INFO_* enum. Then CALLBACK() can die again and with it goes the ugly
casting stuff done to distinguish callbacks from INFO_* values.
The headerfile used globally should be used instead of one in the local dir.
If conky can't find it, it should be fixed in configure.ac.in or Makefile.am,
and not in the code.
All ERR()'s are renamed to NORM_ERR() and box to mbox so that they don't
clash with things in ncurses.h .
Ncurses is enabled by default when building conky but can be disabled with
--disable-ncurses .
At the moment configure doesn't check if ncurses is actually available.
I'm adding support for ncurses so that we can make as much things as possible
that are only available in X11 also available in console in the future.
The alias option was broken by fb8ccd7a05,
and it seems like trying to make it work again will only result in
breakage for env var substitution anyway.
Added conky_set_update_interval() API call, which allows you to change
Conky's update interval from a Lua script. Added the 'conky_info' table
to global Lua context, which still needs populating with stuff (right
now it only contains the current update interval and the system uptime).
Conky now kills the program when it should start the next update, this makes using things like tail with
the -f option possible in a \$exec.
I am not pushing this to 1.7.2 because this is a pretty big change in the code and it is not really
a bugfix but more a usability-problem-fix (if that term would exist).
Added support for X alignment across multi-lined objects (i.e., using
$alignr with $exec). This may be a bit buggy. Disabled OpenMP code
until GCC's implementation stabilizes (it's causing too many problems).
A couple Lua API changes.
First of all, we may or may not agree, but I consider reverting my
commits without prior discussion as a minimum unpolite.
I also don't like sites that oblige to register, thats the very reason
why I went with noaa first (and why I use that myself).
Howver, weather.com has a couple of nice features forom an user
viewpoint:
1. Their icons can be used to add a visual quality to the weather
report.
2. They have forecast data, which is not possible to have with noaa
(using TAF its an option, but its going to be very difficult and will
be limited in time and scope).
Nobody is obliged to do anything, people who likes noaa will use noaa,
people that don't mind register or wants the additional benefit will use
weather.com.
Having libxms2 as a dragged depends is, first of all, also with other
options (rss and eve), second we can try to work around it with an
additional compilation flag if really deemed necessary.
This reverts commit d872562942.
I am not really comfortable with adding support to the conky-code
for sites that only work when you register, that's more something
for in a script.
But the biggest reason I undid the commits is that it is now
impossible to compile conky with support for weather if you don't
have the xml libs installed. Users used to be able to compile with
support for weather (using the other site) without xml2.
If you really want to include this other site in the conky code
then split WEATHER in WEATHERCOM and WEATHERNOAA (altough my personal
opinion is that weather.com should only be supported with scripts)
the default config should now run without memleaks, valgrind will
still report memleaks caused by the own_window-lines and the xft-lines
(in some cases) but those are caused by code that's not part of conky
I moved the weather stuff into its own thread, and also fixed up some
abuse of <simplelist> formatting throughout the docs. Hopefully we can
keep things a little more uniform from now on.
Should work with any window manager that supports the
freedesktop.org Window Manager Specification
(see http://www.freedesktop.org/wiki/Specifications/wm-spec).
I have tested succesfully with openbox but some more testing with other
wm would be needed!
Support is built-in; if it is not acceptable to loose cpu cycles for this
at every conky refresh step than it should be conditionally compiled.
Improved Lua API (lua_read_parse has been removed in favour of the
conky_parse() Lua API call). The docs have been improved to reflect the
recent Lua API stuff as well. Introduced new Lua Cairo and Imlib2
bindings, which require the tolua++ tool. Fixed some other
miscellaneous doc related things.
Download, parse and display METAR data from the NWS.
icao must be a valid icao for the required location
(see for instance https://pilotweb.nas.faa.gov/qryhtml/icao/).
data_type must be one of the following:
last_update : display the date (yyyy/mm/dd) and time (UTC)
of the last update.
temperature_C : display air temperature in degree Celsius.
temperature_F : display air temperature in degree Fahrenheit.
cloud_cover : display the highest cloud cover status.
pressure : display air pressure in millibar.
wind_speed : display wind speed in km/hour.
wind_dir : display wind direction.
wind_dir_DEG : display compass wind direction.
humidity : display relative humidity in %.
weather : display any relevant weather event (rain, snow, etc.).
delay_in_minutes (optional, default 30) cannot be lower than 30 min.
Up to 3 stations can be simultaneously queried.
Use --enable-weather to compile this in.
Most MPD clients read the MPD_HOST and MPD_PORT
environment variables. Now, conky will too.
MPD_HOST can be either "hostname" or "password@hostname".
If a user specifies a host in the configuration, the
password set in MPD_HOST will be ignored. This is to
prevent the password from being sent to the wrong host.
In other words, if the host is specified in the conky
configuration, the password must be too (if there is
one).
Signed-off-by: Brenden Matthews <brenden@rty.ca>
The panel type reserves space along the edge of the
screen, just like regular DE panels, taskbars and the
like. I have tested it for several hours now with lots
of different settings, and it seems to be working fine.
Works especially well with alignment top_??? or
bottom_??? and single-line output. Something like
this:
own_window yes
own_window_type panel
alignment bottom_left
maximum_width 1680
minimum_size 1680
gap_x 0
gap_y 0
stippled_borders 1
draw_borders yes
update_interval 3.0
TEXT
$nodename $tab $freq_g ${color grey}GHz$color $tab $memperc% ${color grey}RAM$color $tab $cpu% ${color grey}CPU $tab etc...etc...$alignr${time %F %R}
The line after TEXT is supposed to be on one line,
just in case some channel has messed it up.
Signed-off-by: Brenden Matthews <brenden@rty.ca>
One useless "if (own_window)" check was removed. It is already inside another
identical check, and so will always evaluate to true.
One strncmp against the word "dock" was limited to four characters instead of
seven, for consistency with the other checks in the configuration parsing code.
Signed-off-by: Brenden Matthews <brenden@rty.ca>
Basically, I just added three new process properties (io_read, io_write, io_perc - representing
the amount of I/O done by the process during the update interval) and $top_io, that sorts
processes based on io_perc.
Atm, it's completely #ifdef'd, since it requires kernel support. But that creates some wierd
looking syntax at some places, so it may be better to remove some ifdefs. It even may be
possible to completely remove the ifdefs (ie. convert them to #ifdef linux) since the code will
compile just fine even if the kernel doesn't support I/O accounting. I'll leave that for someone
else to decide.
When a '#' is found in TEXT, section remove_comments() is called. However, that function doesn't
limit itself to removing that particular comment. Instead, it greedily removes all "comments" from
the string, including those in ${color $abcdef} constructs. This, obviously, makes a mess of
things.
Solution: I added a new function, remove_comment(), that only removes the current comment.
Note: Atm, the function doesn't delete the newline, since that was the current behavior, and is
the natural one for the config section. However, for the TEXT it seems better to delete the \n
too, to avoid blank lines.
Note2: this also fixes the bug in strfold(), which incorectly copied the string, truncating it by
one byte.
Signed-off-by: Brenden Matthews <brenden@rty.ca>
We need this on FreeBSD as some of the constants used in ucred.h and
mount.h are defined there.
Signed-off-by: Nikos Ntarmos <ntarmos@cs.uoi.gr>
Signed-off-by: Brenden Matthews <brenden@rty.ca>
This should fix bug #2802529. I've also revamped the X-Mozilla-Status
header handling which was kind of fishy till now.
Disclaimer: I have no mbox folders around to test it.
Signed-off-by: Nikos Ntarmos <ntarmos@cs.uoi.gr>
Signed-off-by: Brenden Matthews <brenden@rty.ca>
Closing the X display on reload caused some weirdness. We can just
leave it open between reloads. For whatever reason we had a macro
inside quotes for the default net device.
Changed llua_getinteger() to llua_getnumber() returning a double, so
that you can use floating point values in graphs etc. Lua graph will
scale like other graphs (except execgraph) by default now, and you can
manually set a scale with the scale argument.
In general, initialising last_update_time to next_update_time upon
startup doesn't make sense, as some update functions check for the
distance between the two being higher than a given epsilon to prevent
updating too often. This means that they won't trigger when
update_stuff() is being run for the first time.
When you started "$updates|${addr eth0}" displayed "0|No Address",
after the first update you got something normal like "1|192.168.0.1"
This patch should fix this.
part of the template-handling code was in #ifdef X11, which caused conky to dump core when
compiled without x11.
as a bonus, I changed tests !=' ' to !isspace in two places as it was causing strange effects
Signed-off-by: Brenden Matthews <brenden@rty.ca>
Conky would dump core when encountering templates with no parameters (both $templateX and
${templateX}) and when the line contained improperly nested {}.
Signed-off-by: Brenden Matthews <brenden@rty.ca>
When getaddrinfo() returns an IPv6 address, connect() fails since mpd
does not support IPv6. Reproduced by adding the name "localhost" to the
"::1" entry in /etc/hosts.
Signed-off-by: Brenden Matthews <brenden@rty.ca>
The if_existing with 2 arguments checking whether a file contains a specified
string did not work. This is fixed by this patch.
Signed-off-by: Brenden Matthews <brenden@rty.ca>
If the first for-loop succedds in finding the desired interface, it will return to its caller. The only way we drop to the second for-loop is if nothing is found thus far, so no need to check for (i == 16).
Signed-off-by: Nikos Ntarmos <ntarmos@cs.uoi.gr>
Signed-off-by: Brenden Matthews <brenden@rty.ca>
See docs for more details on 'temperature gradients', which can be
turned on with the -t switch on graphs. Also improved parsing of
options with $execgraph and $execigraph, but may cause some breakage.
This diff moves Linux-specific parts of diskio.c into linux.c and uses
the remaining diskio functions to correctly implement this functionality
for FreeBSD. It also hooks diskio.c to the FreeBSD build.
Signed-off-by: Brenden Matthews <brenden@rty.ca>
Altough the following configuration is wrong, it should only produce a error
about a missing $endif but instead it also produced a segmentation fault:
TEXT
$if_gw$gw_ip$else
All lines behind a comment line were also removed, comments should also be able
to start in the middle of line, \# shouldn't be replaced if it's in a comment
Also undid the last change because sony.h was not included, feel free to submit
it again if you include this file and other sourcefiles needed (there is also
no definition of get_sony_fanspeed). If sony systems already have this file and
a definition of this function, please update the configure file so that support
for this is disabled by default and can be enabled by sony owners.
Added the (incomplete) check_docs.py, to 'synchronize' the docs with the
code, as well as vim/nano syntax stuff.
Removed some unused OBJ_* stuff from text_objects.h, and updated docs
with some missing things. Also removed a couple deprecated objects
which were still documented.
The inconsistent naming of the cpu parameter in the docs led me to this,
so I also simplified parsing by introducing the macro SCAN_CPU(). Note
that this introduces a syntactical change to the config: the cpuN
argument now has to be passed at first position to $cpugraph.
Moved interface_up(...) from linux.{c.h} to common.{c,h} and taught it
to check for ENXIO as well to make it work on FreeBSD.
Signed-off-by: Nikos Ntarmos <ntarmos@cs.uoi.gr>
Several things were broken after the switch to 1.7-rc branches. This
diff fixes all compilations issues and updates some functions that were
left empty previously.
Signed-off-by: Nikos Ntarmos <ntarmos@cs.uoi.gr>
Moving sysfs-related functions and defs out of common.h and into
linux.h, as sysfs exists only on Linux, and updating openbsd.c,
netbsd.c, and freebsd.c accordingly.
Signed-off-by: Nikos Ntarmos <ntarmos@cs.uoi.gr>
Typo: __LINUX__ was used in a conditional code block, while the rest of
the code uses __linux__
data: free_text_objects(...) #define's 'data' to be 'obj->data' to make
the code more compact. The linux-specific parts of the code still
used obj->data, which should expand to obj->obj->data, which is
wrong.
Signed-off-by: Nikos Ntarmos <ntarmos@cs.uoi.gr>
This object makes use of the possibility to escape dollar signs in TEXT.
Take the following example in the conkyrc:
| $${downspeed ${gw_iface}}
will be evaluated to (assuming the gw_iface is eth0):
| ${downspeed eth0}
and finally interpreted to print the gateway interface's downspeed rate.
The idea found in the code is any double dollar ($$) is being treated as
explicit dollar sign ($) instead of the start of a text object
reference. Due to missing update of the 's' variable, when creating a
text object for the text following the second dollar sign, the later was
prepended, leading to a double dollar in the output.
Use dynamic allocated memory for skey and svalue,
allocate the length of value so that there are no limits,
but don't use the %a gnu extension to maintain compatibility
This patch is written by a anonymous author, see patch on sf.net
id #2663691 . I changed it a bit so that it can't overwrite
existing environment variables and updated the docs and syntaxfiles
As a side effect, font and colour specific stuff got outsourced, too.
This is because the apropriate functions are used by conky.c as well as
specials.c, so they should be kept on their own.
In the long term I hope for positive impact on the X11 integration mess.
(Take e.g. the mass of X11 ifdefs cluttering conky.c.) Though this
commit contains no optimisations in this direction, just plain
outsourcing, to ensure minimised (intended: none) changes to conky's
interface behaviour.
In fact these two objects share a lot of code, so the bigger plan is to
merge them into a single file to share equal code.
This should not change anything to the code flow, besides making conky
startup a bit more robust due to less use of CRIT_ERR.
Well, not really. I don't dare putting it all together into a single
source file, as that would just not make sense. Instead, this patch
eliminates the --enable-smapi configure option and all related checks,
replacing them with the equivalents from --enable-ibm.
Despite this is actually not much code and could stay inside linux.c as
well, this makes sense as I want to combine smapi and ibm-acpi
functionality. Virtually every user of a notebook made by IBM/Lenovo
will want both, so this should be a feature not a bug.
Besides making the ibm-acpi objects being built optionally, this should
not change anything to the code flow.
Instead of using a hardcoded maximum number of slots for
stats of different disks, use a linked list. Also since the algorithm to
update each device's counters is the same for updating the totals, share
equal code, which in my eyes not only saves a bunch of LoC, but also
drastically increases readability.
The segfault can be triggered by using any diskio object with a
non-existent device, as prepare_diskio_stat() then returns 0 and the
call to obj->data.diskio->current in conky.c:4050 pulls the trigger.
In fact, it's not a problem when the device doesn't exist, as
update_diskio() simply won't fill in any values. So skip the check and
upon device node appearance everything goes it's normal way.
While there, also eliminate double readout of the last line of
/proc/diskstats: after the last line has been read, FEOF is not yet set.
BUT fgets() will return NULL when trying to read the next line. So
better check for fgets()'s return value instead of using feof().
Also strncmp() is useless here, since we really want to compare the full
paths. Besides, text_buffer_size also should be big enough to not make a
difference here.
Also, note that free() does not zero the passed pointer. So conditional
freeing always needs to look like this:
| if (var) {
| free(var);
| var = 0;
| }
* change the height of execbar and execibar to be the same as other
bars have by default (6 pixels)
* treat mixer values as percentages as they're usually 0-100 (switch
to spaced_print() with pad_percents)
* change temp_print() from snprintf() to spaced_print()
* remove decimals from temp_print() as none of the current sources can
supply values smaller than 1 degree (C or F, doesn't matter)
* add a space between number and the unit in human_readable()
* fix number printing in human_readable()
* network $upspeed and $downspeed now use human_readable()
This makes it possible for the compiler to do better optimizations by
adding "static" to functions which do not need to be exported.
Since some of them (e.g. the compare_*() functions) are called very
often, this may decrease conky's need of resources a bit.
Since there is no choice of which moc player to get information from,
all moc objects' data source can be identical. Also hide some internal
data (the thread e.g.). Since from now on there can only be one moc
thread (not highlander ;), we don't need to treat the thread object
specially.
While here, fix indenting.
All objects parsing text into objects formerly parsed and evaluated
their arguments each update interval. This does only make sense when the
parsed text could change between updates, which is the case for execp
and execpi objects, but none of the others. So have them parse the text
when creating them, so each update interval only the output has to be
re-extracted.
In fact, this should give a performance boost when using any of the
affected objects, as parsing the input text is quite expensive since
we're evaluating templates.
Using a global ifblock stack for all parsed ifblock objects causes
problems when doing sub-parsing in objects taking other objects as
parameters, because the possibly non-empty stack at startup leads to
false alarm when checking for stack emptiness after parsing the objects.
Use a void ** as the object to pass around, so callers don't need to
know struct ifblock_stack_obj.
In fact, they are. But we don't want to treat them as those, because
the rewrite made the only situation when threaded objects matter
uncritical, i.e. when an object calls calling parse_conky_vars().
In general, argument types should match, but for combined long and
double usage the long is being converted to double before evaluation.
A few examples:
${if_match ${cpu} < 30}
${if_match "asdf" != "qwer"}
${if_match 0.5 < 0.50001}
${if_match 49.999 < 50}
The crux is to split args between those for scan_graph() on one hand and
prepare_diskio_stat() on the other hand. To make the code working with
minimal changes, move the yet optional devicename to the end.
General note on graphs:
- for all graphs there exist the optional arguments for scan_graph()
which come first and are optional (intended duplicate)
- all other args are object specific, and may be optional as well
Handle mpd internal information inside mpd.c. Use a refcounter to check
if the mpd-information can be freed (maybe useless). Remove the now
useless "full" flag of free_text_objects.
This was a bug, not a feature. From the FreeBSD manpage rtentry(9):
| Vt struct sockaddr *rt_gateway;
|
| The "target" of the route, which can either represent a destination in
| its own right (some protocols will put a link-layer address here), or
| some intermediate stop on the way to that destination (if the
| RTF_GATEWAY flag is set).
So for a default route with "dest" and "mask" both zero, either
RTF_GATEWAY is present, or "gate" is zero.
The only change of behaviour occurs when adjusting the unit of positive
values. For some reason 1000LL was used, which has now been replaced by
1024LL. Usage of abs() and MAX() might be OS dependent, but it should
not be too hard to implement them by hand if they're missing somewhere.
It was a static int before, holding the (already defined) enum's value,
which doesn't make sense. Also it's used only inside conky.c. Since
enums can't be assigned other values than what are defined, we can skip
checking for illegal spacer value at each invocation of spaced_print,
and then also drop the function name argument, which apparently didn't
make sense at all, because use_spacer is a global option.
Instead of splitting information, use diskio_stats[0] in diskio.c for
the totals. This saves a few branches, and frees some data from struct
information.
Some statics are now defined by configure.ac.in, conky.h got a lot
smaller, which I see as a positive sign.
This patch should not change any functionality, just change what's
defined where. Some features I did/could not test are probably broken,
also compiling for any other OS surely won't complete now. Though I
think fixing these problems is as easy as including some missing
headers.
I've done compile checks with the following configure options:
./configure --enable-eve --enable-rss --enable-smapi
--enable-wlan --enable-debug --enable-testing
So what needs to be tested is:
- audacious
- BMPx
- xmms2
- nvidia
Using a macro is not possible anymore, so have a function dev_name() do
the job. Functionality is the same as the old DEV_NAME, unless the
specified path is a symlink in which case it's being dereferenced first.
To save callers from having to free the returned string, a static local
buffer is used (effectively rendering the function non-reentrant).
This patch makes Conky print a sample config when being called with the
'-C' flag.
A short test showed an increase of ~10kbytes of the conky binary's size.
From strdup(3):
| If s is longer than n, only n characters are copied, and a
| terminating null byte ('\0') is added.
So allocate at most n+1 bytes and make sure the last one is zero, as
strncpy() doesn't add it itself.
So in fact to allow a maximum space for string dup of 23, strndup() has
to be called like this:
| dup = strndup(src, 23 - 1);
FIXME: Find the critical points in code this change touches and make
sure the invocation there is correct.
Two things that pissed me off about the old one:
* only limited support for nesting templates
* totally broken output when using conditionals inside a template
The later one was the hard one to fix. ;)
It requires to already have the full text substituted before the text
objects are being created from it. Generating only the contained objects
broke, because the conditionals got wrong offsets to jump to.
After that was fixed, full nesting support is realised by simply
repeating the replacement until no more template objects are found.
Withdrawn windows are those you get from applications supporting the
'-w' flag, like e.g. gkrellm or all those sweet WindowMaker dockapps
(wmcpu and Co.). In Fluxbox, these windows are drawn into the slit. Most
other window managers put them into their "taskbar", AFAIK.
This patch makes Conky act exactly the same if the following settings
are selected:
| own_window yes
| own_window_type dock
This introduces a new configuration variable called "temperature_unit",
specifying the unit of all temperature sensors. To achieve this, each
object outputting a temperature has to call temp_print() like so:
| temp_print(p, p_max_size, <temp val as double>, <unit of val>);
to specify the input temperature unit, either one of the constants
TEMP_CELSIUS or TEMP_FAHRENHEIT.
The new command line option '-D' ('--debug') increases debugging level by one.
For debugging output a user could be interested in, use the macros DEBUG() and
DEBUG2(). Functionality is equal to the ERR() macro. DEBUG2() prints stuff only
if debugging level is greater one, which means that '--debug' has been
specified more than once. This patch also includes usage of the macros for the
new template object (as debugging syntax errors in templates is one thing a
user potentially needs to do).
git-svn-id: https://conky.svn.sourceforge.net/svnroot/conky/trunk/conky1@1273 7f574dfc-610e-0410-a909-a81674777703
* handle escaped characters in parameters to the template object, too
* add samples to the documentation
* do some code cleanup by outsourcing the string substitution into it's
own function
git-svn-id: https://conky.svn.sourceforge.net/svnroot/conky/trunk/conky1@1271 7f574dfc-610e-0410-a909-a81674777703
Basically you can define a template like this:
| template0 \1:\n ${fs_free \2} / ${fs_used \2}
and use it later like this:
| ${template0 root /}
| ${template0 boot /boot}
which is exactly the same as the following:
| root:
| ${fs_free /} / ${fs_used /}
| boot:
| ${fs_free /boot} / ${fs_used /boot}
hope you like it, I do already. :)
git-svn-id: https://conky.svn.sourceforge.net/svnroot/conky/trunk/conky1@1270 7f574dfc-610e-0410-a909-a81674777703
* happened when passing wrong arguments to ${scroll}, particularly with only
one instead of the mandatory two unsigned ints
* as it's not clear whether %n will change the value returned by sscanf or not,
use a solution that works in both situations (%n incrementing the return
value or not)
git-svn-id: https://conky.svn.sourceforge.net/svnroot/conky/trunk/conky1@1268 7f574dfc-610e-0410-a909-a81674777703
* reproduce with a config displaying stuff for BAT0 and BAT1
while only BAT0 is installed: the call to get_battery_stuff()
for the existent BAT0 will reset the static variable rep and
the errors for BAT1 will be reported over and over again
* this fix is not perfect: if both batteries are missing, only
the first errors will be reported; but better than flooding the
terminal
git-svn-id: https://conky.svn.sourceforge.net/svnroot/conky/trunk/conky1@1243 7f574dfc-610e-0410-a909-a81674777703
code right before the release. This time, somebody refactored
the code to use freebsd.h, but forgot to include
freebsd.h to EXTRA_DIST, so the resulting tarball was
missing it and non-buildable on FreeBSD, thank you, kind man,
for doing it, please keep up breaking FreeBSD port, it's a
great pleasure for me to fix it all the time, and don't
even think to drop me email or ask me on IRC, I like
surprises very much.
git-svn-id: https://conky.svn.sourceforge.net/svnroot/conky/trunk/conky1@1235 7f574dfc-610e-0410-a909-a81674777703
* check only the unique part of the argument
* print temperatures like all others (%.1f)
* do argument parsing in nvidia.c (so all specific stuff is at one place)
* little header cleanup
git-svn-id: https://conky.svn.sourceforge.net/svnroot/conky/trunk/conky1@1231 7f574dfc-610e-0410-a909-a81674777703