[xmonad] darcs patch: Add Stoppable layout for power saving (and 1 more)

Anton Vorontsov anton at enomsg.org
Mon Sep 1 08:02:57 UTC 2014


In this version I addressed further comments by Paul Fertser, plus
implemented the remote/local clients identification scheme that I was
talking about: it is in XMonad.Util.RemoteWindows module with
documentation and all.

I split the work into two logical changes, for easier review and so that
the first patch won't depend on the second.

Thanks,

Anton


2 patches for repository http://code.haskell.org/XMonadContrib:

Mon Sep  1 00:21:41 PDT 2014  Anton Vorontsov <anton at enomsg.org>
  * Add Stoppable layout for power saving
  
  This module implements a special kind of layout modifier, which when
  applied to a layout, causes xmonad to stop all non-visible processes. In a
  way, this is a sledge-hammer for applications that drain power. For
  example, given a web browser on a stoppable workspace, once the workspace
  is hidden the web browser will be stopped.
  
  Note that the stopped application won't be able to communicate with X11
  clipboard. For this, the module actually stops applications after a
  certain delay, giving a chance for a user to complete copy-paste sequence.
  By default, the delay equals to 15 seconds, it is configurable via
  'Stoppable' constructor.
  
  The stoppable modifier prepends a mark (by default equals to "Stoppable")
  to the layout description (alternatively, you can choose your own mark and
  use it with 'Stoppable' constructor). The stoppable layout (identified by
  a mark) spans to multiple workspaces, letting you to create groups of
  stoppable workspaces that only stop processes when none of the workspaces
  are visible, and conversely, unfreezing all processes even if one of the
  stoppable workspaces are visible.
  
  To stop the process we use signals, which works for most cases. For
  processes that tinker with signal handling (debuggers), another
  (Linux-centric) approach may be used. See
  https://www.kernel.org/doc/Documentation/cgroups/freezer-subsystem.txt

Mon Sep  1 00:21:58 PDT 2014  Anton Vorontsov <anton at enomsg.org>
  * Implement proper handling of dynamically changing hostname
  
  The module implements a proper way of finding out whether the window is
  remote or local.
  
  Just checking for a hostname and WM_CLIENT_MACHINE being equal is often
  not enough because the hostname is a changing subject (without any
  established notification mechanisms), and thus WM_CLIENT_MACHINE and the
  hostname can diverge even for a local window.
  
  This module solves the problem. As soon as there is a new window created,
  we check the hostname and WM_CLIENT_MACHINE, and then we cache the result
  into the XMONAD_REMOTE property.
  
  Notice that XMonad itself does not know anything about hostnames, nor does
  it have any dependency on Network.* modules. For this module it is not a
  problem: you can provide a mean to get the hostname through your config
  file (see usage). Or, if you don't like the hassle of handling dynamic
  hostnames (suppose your hostname never changes), it is also fine: this
  module will fallback to using environment variables.

-------------- next part --------------
A non-text attachment was scrubbed...
Name: patch-preview.txt
Type: text/x-darcs-patch
Size: 13780 bytes
Desc: Patch preview
URL: <http://www.haskell.org/pipermail/xmonad/attachments/20140901/9dc0ba57/attachment.bin>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: add-stoppable-layout-for-power-saving.dpatch
Type: application/x-darcs-patch
Size: 30521 bytes
Desc: A darcs patch for your repository!
URL: <http://www.haskell.org/pipermail/xmonad/attachments/20140901/9dc0ba57/attachment-0001.bin>


More information about the xmonad mailing list