summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2017-03-21libvmon: style cleanupsVito Caputo
Bring libvmon code inline with the direction vwm has headed in terms of coding style. Entirely mechanical changes with one exception replacing a free()/=NULL idiom with try_free().
2017-03-21vmon: introduce vmon utilityVito Caputo
vmon exposes the monitoring overlays of vwm through a standalone commandline utility by creating dedicated window for presenting the overlay. At this time a single preexisting PID may be specified, forming the root of a recursively monitored heirarchy. Alternatively, a command may specified which vmon will then fork and execute on your behalf, automatically monitoring the child and its descendants for you, in a style similar to strace. Examples: Monitor a linux kernel build in fullscreen mode, note the --: `vmon --fullscreen -- make -C /usr/src/linux -j8` Monitor the entire system: `vmon --fullscreen --pid 1` For convenience, omitting --pid and a command to run assumes PID 1: `vmon --fullscreen` is analogous to `vmon --fullscreen --pid 1` Monitor a linux kernel build fullscreen at 50Hz: `vmon --fullscreen --hertz 50 -- make -C /usr/src/linux -j8` Do the same thing but don't exit when the make completes: `vmon --linger --fullscreen --hertz 50 -- make -C /usr/src/linux -j8` Help is provided via `vmon --help`, where you'll find all flags described with their short and long forms. Some important TODO items include: - Support for specifying multiple top-level processes - Support for mixing --pid and running a command (useful for watching specific system processes while you're running something specific) - Support for scrolling within the window. The overlays in general need to evolve a bit to better support the vmon use case. In vwm there wasn't any intention of accomodating the entire space if it exceeded what was naturally available in the existing window's dimensions. That makes sense for vwm, but vmon not so much. You can achieve the same thing more or less by resizing the window to be larger than the screen (easy to do in vwm using a combination of Mod1-Right-Click to resize, then Mod1-Left-Click to drag the window, repeatedly. Then just Mod1-Left-Click to grab the window and "scroll" it by moving the desired part on-screen, repeatedly. Cumbersome, but works fine in a pinch. Not all window managers can do this though... Of course it would be less costly to only render what's visible, like a scrollable window would achieve. This is probably the top priority TODO. - Support for monitoring of memory use, files, per-process IO activity. libvmon supports substantially more than is being visualized currently. - Support for changing the font.
2017-03-20overlays: add ability to explicitly set rateVito Caputo
In vwm it was only necessary to relatively increase/decrease the sample rate. With vmon being primarily a cli tool, explicit setting of the rate is desirable. This commit reworks things a little de-specializing the zero value of overlays->sampling_interval, while switching this to instead of being an index into the intervals table simply contain the float interval itself. The math.h INFINITY macro becomes the new paused/zero value, and simply gets an entry of its own in the intervals table as the lowest one.
2017-03-15overlays: paramize vwm_overlay_render() Render opVito Caputo
In vwm we were always doing a transparent overlay to preserve underlying window visibility. With vmon this is undesirable and we just want to copy the currently cached composited contents to the window, which is also substantially less costly to perform. Parameterize the operation so vwm and vmon can specify what's appropriate.
2017-03-14*: trivial code formatting cleanupsVito Caputo
I'm no longer fond of combining one-line conditional statements on the same line as their conditional expression.
2017-03-14overlays: extricate overlays from vwm internalsVito Caputo
- Move vmon_proc_t under vwm_overlay_t. - Privatize vwm_overlay_t. - Update xwindow.c to dynamically create and destroy overlays. - Cease supplying vwm_t to vwm_overlays_create(), now just pass in the bare vwm_xserver_t. - Update all vwm_overlay_* functions to operate on vwm_overlays_t and vwm_overlay_t. Only vwm_overlays_create() receives the xserver, which it then embeds within the returned vwm_overlay_t. - Eliminate _xwin_ flavors of overlay functions, largely mechanical rename eliminating the _xwin_ from the names during the previous pass of switching from vwm_t & vwm_xwindow_t to vwm_overlays_t & vwm_overlay_t parameters. - Change vwm_overlay_compose() to store damage in supplied pointer, the caller is expected to make use of the damage information now because the overlay code doesn't know about the window its coordinate space.
2017-03-14xwindow: use calloc in vwm_xwindow_create()Vito Caputo
Eliminate some initialization cruft.
2017-03-14xwindow: add vwm_xwin_get_pid() helperVito Caputo
2017-03-14vwm: minor tidying of vwm.hVito Caputo
2017-03-14overlays: encapsulate global overlays stateVito Caputo
Introduce vwm_overlays_t and create/destroy functions, use in vwm_startup() and vwm_shutdown(). Supply to methods operating on the global overlays state vwm_overlays_update(), vwm_overlays_rate_increase(), vwm_overlays_rate_decrease(). This is a fairly minimal adoption of these changes with vwm_t still being supplyed to the overlay functions. A future commit will further cleanup the interactions and cease all knowledge of vwm_t in overlays.c, but for now everything overlay-oriented still accesses the overlays_t instance via vwm_t. Instead of supplying the vwm_t to vwm_overlays_create() the bare vwm_xserver_t will be supplied, as this is the future shared component across vmon and vwm (in addition to overlays).
2017-03-14overlay: rename overlay.[ch] -> overlays.[ch]Vito Caputo
In preparation for vwm_overlays_* encapsulation of overlay global state and general cleanup therein.
2017-03-14libvmon: add "sys-wide" arg for sample callbacksVito Caputo
We need to eventually plumb an vwm_overlays_t reference back to sample_cb, for now we'll just obviate the need for the vwm_ptr global by plumbing the vwm_t through.
2017-03-14vwm: utilize vwm_xserver_t, minor refactorVito Caputo
2017-03-14xserver: introduce isolated core xserver apiVito Caputo
In preparation for monitoring overlays being shared across vwm and vmon, adding a common xserver abstraction for both to use and overlay to depend on.
2017-03-14*: add some missing string.h includesVito Caputo
2017-03-14vwm: split out helper macros into util.hVito Caputo
In preparation for separating out the monitoring overlay code from being vwm-coupled, moving these into an independent header since they'll be used throughout.
2017-03-14overlay: fix heirarchy tee/cap drawing bugVito Caputo
If walking ancestors never entered the loop, bar_y isn't set. Set the bar_y once per row, and independent of ancestors. This is obviously more correct and fixes a situation where the siblings have children but there are no ancestors (siblings under the root). Surprisingly this isn't generally observed in vwm, but was noticed in vmon development.
2017-02-22Trivial cleanup and small (but continuous) memory leak fixVito Caputo
Tidy up vwm exit handling and stop leaking an X Region on every clean vwm_composite_paint_all(). If you noticed very long-running vwm instances hogging memory like a web browser, this is the culprit, vwm doesn't typically need much memory.
2017-02-22composite: fix occluded region leakVito Caputo
When vwm_composite_paint_all() short-circuited, occluded wasn't destroyed. Defer the occluded region create to its time of need, which is after the short-circuit, and followed immediately by its destruction.
2017-02-22vwm: use vwm.done to signal quitVito Caputo
This moves the console teardown back to vwm.c, trivial cleanup.
2017-02-02configure: don't generate config.hVito Caputo
it's not being used for anything as of now.
2017-02-02.gitignore: suppress more autotools junkVito Caputo
2017-02-02build: add autotools bootstrap scriptVito Caputo
2017-02-02libvmon: use readdir() instead of readdir_r()Vito Caputo
readdir_r() has been deprecated in glibc
2017-02-02launchers: s/iceweasel/firefox/gVito Caputo
2016-12-19xevent: implicitly manage window in MapNotify handlerVito Caputo
Sometimes `mplayer -fs` would result in an unmanaged window. It seems to be due to an unexpected ordering of events on the window: create notify 0x1000001 creating 0x1000001 map request 0x1000001 managing 0x1000001 configure request 0x1000001 unmap notify 0x1000001 from configure 0 unmanaging 0x1000001 configure notify 0x1000001 map notify 0x1000001 <----- this happens after the window has been unmanaged! configure notify 0x1000001 configure request 0x1000001 configure request 0x1000001 configure request 0x1000001 configure request 0x1000001 configure notify 0x1000001 So in handling MapNotify, if the window is !managed && !override_redirect, manage it. This is confirmed to fix the occasionally unmanaged `mplayer -fs` window.
2016-12-18overlay: fix bug with extraordinarily long argvsVito Caputo
This was a known bug, there's a TODO sitting right there noting it. The items array was sized very large so it never triggered and was forgotten about. Running `make tags` in the linux kernel source steps on it though, because it constructs a massive argv. This just adds a bounds check so no crash occurs in argv2xtext(). I don't see the point of allocating memory for this as the TODO's suggested, since any such argv is unlikely to fit in the overlay anyways. Also shrunk the max from 1024 to 512, which is still quite large.
2016-11-10Merge pull request #8 from vcaputo/decrement_key_is_grabbedVito Caputo
key: decrement key_is_grabbed release of multi-Alt
2016-11-10key: decrement key_is_grabbed release of multi-AltVito Caputo
Upon releasing all keys concluding a grab the counter gets reset so this isn't generally observed as being a problem. Sometimes the second Alt is released by itself, restoring the origin, and the original grabbing single Alt persists for subsequent window management operations. It's in this situation when the bug manifests. If the final Alt release occurred with a focused window/desktop differing from the origin, on the final Alt release an unexpected restore to the origin occurred. Usually this goes unnoticed, because typically the lone Alt release occurs immediately following the other one, and the second restore to origin happens to be idempotent.
2016-09-09Merge pull request #6 from vcaputo/clean_houseVito Caputo
House cleaning
2016-09-09overlay: short-circuit draw_heirarchy_row() if unchangedVito Caputo
If vmon hasn't seen any heirarchical changes, and we aren't forcing a redraw, and the process information being shown isn't changed, don't bother re-rendering the same thing the overlay already contains. This can be further improved, like if only wchan changed and nothing else, only redraw the wchan column for the relevant row. It gets tricky quickly though, because a new wchan could be wider than the column currently permits for example, then we'd need to go render all the rows to the new wchan column width... It's simpler to just redraw it all if anything has changed, and this stuff doesn't generally change that frequently in practice so it's pretty effective as-is.
2016-09-09libvmon: clear {children,threads}_changed when samplingVito Caputo
The samplers may set these, but we need to clear them on every vmon_sample().
2016-09-09overlay: move heirarchy row drawing to functionVito Caputo
2016-09-09overlay: introduce overlay.redraw_neededVito Caputo
Set on window resize, clear on draw_overlay() return. Used in combination with sample_interval check to gate HZ redraw. Will be used to gate redraw of process monitors heirarchy as well, in a subsequent commit.
2016-09-09overlay: split IOWait/Idle from rest of recursive draw_overlayVito Caputo
Also moved vertical graph bars drawing to helper function
2016-09-09overlay: use XTextWidth instead of XTextExtentsVito Caputo
We currently only use the width, and XTextExtents does substantially more crap per character in Xorg's xlib. XTextWidth is not just a wrapper around it, it's a specialized subset implementation.
2016-09-09build: Adopt GNU automake (and thus autotools)Vito Caputo
Trying this out now that there's a pile of files... sigh. Note this spuriously duplicates list.h @ src/libvmon/list.h, the old Makefile shared list.h between vwm and libvmon, but I'm letting them have their own instances with autotools. Libvmon was always an independent project I just pulled in for vwm's use, and will likely continue to be developed independent of vwm with occasional syncs.
2016-09-09*: refactor all the thingsVito Caputo
Long overdue house cleaning. The addition of compositing/monitoring overlays in vwm3 pushed vwm well past what is a reasonable size for a simple thousand line file. This is a first step towards restoring sanity in the code, but no behavioral differences are intended, this is mostly just shuffling around and organizing code. I expect some performance regressions initially, follow-on commits will make more improvements to that end as the dust settles.
2016-08-14Merge pull request #5 from vcaputo/spacesVito Caputo
I've warmed up to space after control flow keywords
2016-08-14I've warmed up to space after control flow keywordsVito Caputo
Approximately: s/if(/if (/g s/switch(/switch (/g s/do(/do (/g s/while(/while (/g s/for(/for (/g Macro use continues to be spaceless, even when used as control flow primitives (i.e. list_for_each()), as do function calls.
2016-08-14Merge pull request #4 from vcaputo/fix_focus_of_unmapped_winsVito Caputo
Fix handling of non-visible focus switches
2016-08-14Set input focus in vwm_win_focus() when is_mapped()Vito Caputo
It's inappropriate to assume the window being focused is in the visible context. This caused the input focus to spuriously vanish if a window on another desktop went away causing the next one, also invisible, to get focused. I'm surprised how long I went without ever noticing this bug! My workflow basically never has windows vanishing that aren't in the focused context.
2016-08-14Discard context arg from vwm_win_focus_next()Vito Caputo
This can just be derived from the state of the basis window, I think originally I had intended to implement context switching via this function. Also changes the implementation to stop comparing against focused_(shelf,desktop) which prevented doing transitions on invisible contexts. It's not usually an issue, but windows can go away at any time, and we must be able to focus next when they do, even if their context isn't the visible one.
2016-08-14s/vwm_xwin_is_visible/vwm_xwin_is_mapped/Vito Caputo
Renaming to better describe what this actually checks. Initially I was leaning towards adding a data structure for actual visibility checks rather than just assuming all vwm-mapped windows are visible. But there's a need for knowing just if windows are currently mapped as well, so this function can stay implemented this way with the appropriate name.
2016-06-28Clear the mapping bit when swallowing vwm-triggered MapNotify events.Vito Caputo
I didn't experience any bug in particular which brought this to my attention, but it's an obvious omission, though apparently quite ignorable.
2016-01-03Cleanup random stray whitespace charactersVito Caputo
2016-01-03Fix missed keyboard ungrab when alt was released with others still pressedVito Caputo
2016-01-03Trivial cleanup: s/Mod1Mask/WM_GRAB_MODIFIER/gVito Caputo
2015-05-16Minor reformatting cleanupsVito Caputo
2015-02-21Introduced a 'refocus original window' operationVito Caputo
See changes to README, but basically if you're holding down Alt and doing some window management operations, while still pressing Alt hit the other Alt key to return focus to the starting window+desktop. Nothing is undone, focus is simply returned to the starting window+desktop.
© All Rights Reserved