· v0.6
  · v0.5a
  · v0.4a
  · v0.3
  · v0.2
  · v0.1
  · todo
  · download
  · installation
  · activation


make.pl Opera utilities
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 Ceauşescu - 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 Büsching)
  • 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, Nürnberg 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.  The first screenshot in the example above uses a copy of an empty pager with only the background coloured.  The second uses my scaled down wallpapers (that's me with my daughter :-) and blended viewport boundaries.  These will tile if you have more workspaces than you paint, but if you display only the current workspace, it'll always be shown with the first background.
  • 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)

Three different alignments of a pager showing a setup of 4 workspaces.  Each workspace is 2×3 viewports big.  The pager itself, being ignored, is not shown.

The tall one highlights a workspace sticky window, the stout one a viewport sticky window and the wide one is aligned to an arbitrary viewport.
  • 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 ½ and C ¾ the size of spager's)
  • use define-structure, keeping most symbols out of the global namespace
  • make dependencies between customization options explicit


  • 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?


pager-0.6.tgz (13kB)
pager-0.5a.tgz (13kB)
pager-0.4a.tgz (12kB)
pager-0.3.tgz (11kB)
pager-0.2.tgz (11kB)
pager-0.1.tgz (10kB)


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")


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)
(Last modified 2002-12-21)