A pager is a map of your desktop.  As maps go, it shows not only the visible
part (your current viewport), but, if you are so configured, also the parts
that extend beyond the sides of your screen.  Also, if you have more than one
workspace, the pager will follow you to where you are, or optionally show all
workspaces at once.  Of course you can select viewports and windows, and also
move or raise/lower the latter.


Version 0.6 (2002-12-21, Nicolae Ceausescu - Ultima cuvintarea 1989)

    * Moving windows in pager immediately affects real window.

    * Sticky windows can no longer be dragged off-screen where sawfish can't
      get them back.

    * Can now act as a Gtk plugin, by supplying the id of the window to plug
      to.  (Thanks to Andreas Bsching)

    * Simpler installation.  The pager executable is now also found by default
      in ~/.sawfish.

    * Sawfish version now recognized automatically, including fake Read Hat
      2.0.pre1.  (Thanks to Juho Snellman)

    * Three more late display updates removed.  Late display when sliding
      however is a sawfish bug (upto 1.2 inclusive), fixed with an included
      patch not yet applied to sawfish CVS.

    * Pager is again restartable.

    * The stop argument to pager is now moved to second position.


Version 0.5a (2002-11-20, Nrnberg anti-Nazi trials 1945)

    * Handles new colour scheme when compiled for sawfish 1.2.  (Thanks to Tim
      Lee)

    * Eliminated "late display" when some things change.  Late display when
      (un-)shading however is a sawfish bug (upto 1.2 inclusive), fixed with
      an included patch not yet applied to sawfish CVS.

    * Moving and resizing of windows gets displayed as it happens.

    * Buffered input saves many system calls and lookahead reading eliminates
      multiple susccessive window redraws.

    * Require GNU make.  Automatically detect GTK2 (make GTK1=1 to override.)
      Free choice of compiler and options.

    * Don't hog CPU when sawfish crashes.


Version 0.4a (2002-09-11, who the hell are Osama and George?)

    * Optionally paint your own pager.

    * Optionally support GTK2.  (Thanks to Rui Miguel Seabra)

    * Make pager be skipped on taskbar as soon as corresponding GTK2 bug is fixed.

    * Don't frame over current viewport if you have only one.


Version 0.3 (2002-07-14, mourning the end of pluralism in France)

    * Two bugfixes (pager size and phantom window on empty pager) relevant if
      you only display the current workspace in the pager.



Version 0.2 (2002-07-11)

    * Workspace boundaries are now drawn between workspaces, rather than
      inside the left and top.  Hence they no longer react to the mouse.  This
      makes window positions and sizes more consistent.

    * Viewport (if you use this neat feature) boundaries are now drawn as
      light frames inside each viewport, as there is conceptually no space
      between viewports where a line could be drawn.  Since GDK's dashed lines
      are a bit heavy when you have two side by side, a one pixel border is
      left around the frames.

    * When dragging a window onto a workspace boundary, it goes to the
      workspace on which the mouse button is released, not where its top left
      corner is.

    * If windows extend beyond the workspace, through clipping they now have
      no frame on that side.  This also allows dragging windows with a frame
      of their actual size, rather than only the visible portion.

    * Redundant commands are identified through caching, reducing interprocess
      communication and redrawing.

    * Remove -DFRAMEOVER from the Makefile to eliminate the dashed line frame
      that goes above the windows.


Version 0.1 (2002-04-12)

This is a complete reimplementation of spager 0.16, without the bugs, and with new features:

    * Current viewport gets framed over all else, so you can see it even when
      it's fully covered.  (Satyaki, author of spager, feels this should be a
      user option.  Anybody else for that?)

    * viewport gets displayed properly even when it's not aligned to multiple
      of screen dimensions (as is easily achieved with my move-viewport
      patch.)

    * ignoreds are by default omitted

    * viewports are by default proportional to your screen

    * copies are, and stickies can be shown on every workspace and/or viewport

    * pager-show-all-workspaces works properly

    * click on window will focus that by default

    * click anywhere can optionally warp pointer to corresponding spot

    * last row and column are as big as others

    * Result of "Send window to/Copy to previous or next" now gets shown
      immediately

    * pager-executable defaults to be in sawfish-exec-directory

    * replaced merlin/fancy-message with standard tooltips

    * also show button bindings when generally enabled

    * avoid tooltip flicker

    * streamlined code (lisp is only 1/2 and C 3/4 the size of spager's)

    * use define-structure, keeping most symbols out of the global namespace

    * make dependencies between customization options explicit




Todo

    * Integrate new workspace grid.

    * Tooltip for workspace name.

    * Write small name into windows.

    * Allow dragging one of multiple window copies to a different workspace,
      eliminating it if already present on destination.

    * Implement own viewport frame dashing, such that it alternates on
      neighbouring lines.

    * Use better graphics library to highlight the viewport by making it n%
      lighter (negative: darker).

    * Scroll viewports and workspaces with mouse wheel(s).  Maybe viewport
      columns top to bottom, then left to right, then on to next workspace in
      same order?




Download

http://dapfy.bei.t-online.de/sawfish/pager/



Installation

Unpack the archive with:

$ tar xvzf path-to-this-file/pager-0.6.tgz

Build and install it to ~/.sawfish:

$ gmake private-install

Note that this installs both the source and the byte-compiled forms of the
module.  Sawfish 1.0 - 1.2 have a bug whereby the configuration GUI cannot
display strings from byte-compiled modules.  In that case you must call
sawfish-client and enter:

user> (pager nil t) ; in case the pager is already running
user> (load-file "~/.sawfish/lisp/sawfish/wm/ext/pager.jl")



Activation

Versions are not intercompatible with older ones!  Make sure you reload both
the lisp module and the external program, for example by restarting sawfish.

In your resource file you could add something like:

(require 'sawfish.wm.ext.pager)
(add-hook 'after-initialization-hook pager t)

