Sawfish Logo (Alternative)Saw­fish is an exten­si­ble win­dow man­ager using a Lisp-based script­ing lan­guage. Its pol­icy is very min­i­mal com­pared to most win­dow man­agers. Its aim is sim­ply to man­age win­dows in the most flex­i­ble and attrac­tive man­ner pos­si­ble. All high-level WM func­tions are imple­mented in Lisp for future exten­si­bil­ity or redefinition.

These are some of the fea­tures that set Saw­fish apart from other win­dow managers:

  • Pow­er­ful key-binding: Vir­tu­ally every func­tion­al­ity pro­vided by Saw­fish can be bound to keys (or mouse buttons).
  • Event hook­ing: For many events (mov­ing win­dows etc.) you can cus­tomize the way Saw­fish will respond.
  • Win­dow match­ing: When win­dows are cre­ated you can match them to a set of rules and auto­mat­i­cally per­form actions on them.
  • Flex­i­ble them­ing: Saw­fish allows for very dif­fer­ent themes to be cre­ated and a vari­ety of third-party themes are read­ily available.

Saw­fish was for­merly known as Sawmill but then renamed to Saw­fish due to pend­ing patents on the name Sawmill. It’s orig­i­nal Author is John Harper who got employed by Apple which pro­hib­ited him to con­tinue work­ing on Saw­fish (and librep/rep-gtk). In Mid 2007 Janek ‘The Re-Animator’ Koz­icki over­took the devel­op­ment of Saw­fish. In mid 2008 I over­took devel­op­ment of librep and rep-gtk, fol­lowed by Saw­fish and Saw­fish­Pager in Decem­ber 2008.

License: GPL2+

Down­load: Tar/BZ2 (SHA1 SUM)

Down­load: Tar/XZ (SHA1 SUM)

ChangeLog:

1.6.3.1 “Acid Folk“
===================

* Fixed a pos­si­ble compilation-error in prompt.jl [Har­ald van Dijk]

If Saw­fish 1.6.3 com­piled with­out error, then you don’t have to
update.

1.6.3 “Hava Nag­ila“
===================

* Bug­fixes
– In tabbed-windows the left/right end is no longer out­side the
win­dow, if that is too small [Fuchur]

- Unsup­ported option ‘ignore-window-input-hint’ is deleted
which has been invalid for long. [Teika kazura]

- Honor the user option ‘maximize-raises’ in
‘maximize-window-fullscreen’ and
‘maximize-window-fullxinerama’, too, not just in
maximize-window [Nolan Leake]

- More robust­ness in appli­ca­tions menu [Teika Kazura, Matthew
Love]

Before it broke for ‘R’ (sta­tis­tics soft­ware), and white­space
han­dling didn’t fol­low the specification.

Some *.desk­top files are not ignored any more either, i.e.,
lead­ing empty lines and com­ments are allowed.

- Allow com­pi­la­tion with –DDEBUG flag passed [Alexey I. Froloff]

* New Fea­tures
– XRandR events (eg res­o­lu­tion changes) call the new hook
‘randr-changed-notify-hook’ [Daniel M. Ger­man]
See *Note RandR and Xinerama::.

- Tabbed win­dow­ing sys­tem improve­ments [Fuchur]
+ Sup­port for tran­sient tab-frames

+ New frame classes:
x tab-s (side tab)

x tab-ls (side tab, left/bottom end)

x tab-rs (side tab, right/top end)

+ Tab­groups now sup­port a set of new prop­er­ties and
actions: ‘type’, ‘set-frame-style’, ‘fixed-position’,
‘iconify’. In addi­tion, new tabs gain those prop­er­ties
from their par­ent window.

- New com­mand ‘display-window-position’ [Teika kazura]

User chooses a win­dow by cur­sor and click, and it prints its
posi­tion and size in a popup. Also avail­able as a func­tion,
defined in ‘sawfish.wm.util.display-wininfo’.

- New func­tion ‘window-pid’ [Teika kazura]

It returns the process ID of a win­dow. (*note Win­dow
Attributes::

- Win­dow instance name is now acces­si­ble [Teika kazura]

Tech­ni­cally, the win­dow class con­sists of “instance” and
“class”, but only the lat­ter was returned pre­vi­ously by the
func­tion ‘window-class’. Now with the new optional argu­ment,
the instance is returned too. (*note Win­dow Attributes::)

- Cus­tomiz­able lisp direc­tory [Teika kazura]

User can add lisp direc­to­ries to be read with the
envi­ron­men­tal vari­able ‘SAWFISH_USER_LISP_DIR’. Its value is
direc­to­ries sep­a­rated by colon, like ‘PATH’, and prepended to
‘load-path’. If not set, ‘~/.sawfish/lisp’ is assumed.  For
exam­ple, if you define a mod­ule ‘sawfish.wm.super-hack’, then
it can be read from
‘~/.sawfish/lisp/sawfish/wm/super-hack.jl’.

User can over­ride sys­tem lisp files, too. For exam­ple, if
there is ‘~/.sawfish/lisp/sawfish/wm/windows.jl’, then it
defines ‘sawfish.wm.windows’, instead of the installed one.
(But this can eas­ily break your Saw­fish startup.) In fact, it
was pos­si­ble for some lisp files, but now it’s guar­an­teed for
all files.

* Other Changes
– Info improve­ments [Teika kazura]
+ “Win­dows” chap­ter is partly revised. Func­tion
‘display-window’ is doc­u­mented. Dif­fer­ence between
‘window-wants-input-p’ and ‘window-really-wants-input-p’
is described. Short descrip­tion on the root window.

+ In past few ver­sions we made more changes which were not
described in the news, includ­ing clar­i­fi­ca­tion in
view­port, work­space and event, and win­dow match­ing lisp
functions.

+ Added a faq item on multi-head and workspace.

+ Edi­tion num­ber and the date of last change are dropped
from the info.  We now edit the info often, so they are
not so much meaningful.

- Press­ing the lock-button does the state-change of the win­dow
accord­ingly. [Fuchur]
No theme shipped with Saw­fish does have the lock-button yet,
though.

- Make xin­erama an optional depen­dency [orig­i­nal patch from
Gentoo]