The current loop is a bit awkward for a number of reasons:
* iostat exits after a number of iterations, so to keep the script
going we need to run it in a nested loop;
* we also run iostat concurrently using the |& syntax, which in
addition to being non-portable requires us to set up a cleanup
path so that we don't leave stray processes around when spectrwm
is restarted;
* due to the fact that iostat prints its headers again every 20
records, we have to keep careful track of the number of
iterations - something which has proven to be error-prone.
Once we do away with the idea of iostat driving the update loop, all
of these issues disappear and the code becomes much simpler.
We still cache battery data for 11 seconds, which is the same amount
as before; tweaking it further, if desired, will be trivial now.
This patch is better viewed with 'git show -w'.
If the CPU is throttled to less than 1 GHz, the contents of the
bar will move around a bit; always use 4 digits to print the CPU
frequency so that doesn't happen.
The idea is that it's pointless to collect information about the
battery every single second, so caching has been implemented for
the output of apm; however, the condition has been broken since
3356f1ccd4, which resulted in data being collected every single
second after all.
This fixes the check so that information is collected every 11
seconds, which fits nicely into the 22 second long cycle used to
parse iostat's output.
XftTextExtentsUtf8 computes the pixel extents and stores them in a
XGlyphInfo data type. The true "width" of a Xft glyph is found in the
xOff member of the latter structure.
This fixes the (dis)appearing space when switching workspace (#264).
Starting a tool on OpenBSD from urxvt results in:
$ ncspot
ncspot:/usr/local/lib/libswmhack.so.1.0: undefined symbol 'XKeysymToKeycode'
Linking libswmhack against libX11 fixes this issue.
line 1785 - Wrong type
line 2486 - Division by zero
line 2575 - Uninitialized argument value
line 2583 - Uninitialized argument value
line 2595 - Uninitialized argument value
line 2597 - Uninitialized argument value
line 3468 - Wrong type
line 3730 - Dereference of null pointer
line 6065 - Result of operation is garbage or undefined
line 9374 - Wrong type
line 12446 - Possible null pointer dereference
New conf search order:
1) $XDG_CONFIG_HOME/spectrwm/spectrwm.conf
2) ~/.config/spectrwm/spectrwm.conf
(if $XDG_CONFIG_HOME is either not set or empty)
3) ~/.spectrwm.conf
4) $XDG_CONFIG_DIRS/spectrwm/spectrwm.conf
(each colon-separated directory in $XDG_CONFIG_DIRS)
5) /etc/xdg/spectrwm/spectrwm.conf
(if $XDG_CONFIG_DIRS is either not set or empty)
6) /etc/spectrwm.conf
In get_binding_keycode() a uint8_t loop variable was incremented in a
for loop. The variable would overflow right before the loop's
condition was met. Therefore the loop would never terminate.
To avoid the infinite loop the condition has to be checked before the
increment operation and not afterwards.
xcb_key_symbols_get_keycode() returns a list of keycodes that is ordered
by keycode value instead of keyboard layout order. If a keysym resolves
to multiple keycodes, the first keycode in the returned array may be from
the wrong layout.
For example, if the current keymap has two layouts: 'us, us(dvorak)', 'p'
will resolve to keycode 27 of the secondary 'dvorak' layout instead of
keycode 33 of the primary 'us' layout.
Instead of using xcb_key_symbols_get_keycode() to resolve keysyms to
keycodes, search each keysym column in the key map until there is a hit.
Setting `disable_border = always` removes border from lone tiled
windows, regardless of the bar being enabled/disabled. This is an
addition to an existing feature, and does not change existing behaviour.
We're already installing most supporting data along with the
application itself, but we have been skipping additional
documentation (such as the license and release notes) and most
importantly the default configuration file.