See also http:://sawfish.wikia.com/wiki/Tips.
This is exactly what it’s supposed to do, but first try middle-click (by default) on the background. This invokes the menu. (If you have a two-button mouse, try clicking both buttons simultaneously).
Why this is so? Because Sawfish is minimal - Sawfish is a window manager and as such is not responsible for setting the background, starting programs or displaying a pager — these can all be done using separate applications (e.g. by using a desktop environment such as GNOME).
There’re two ways, by the configurator GUI and by preparing lisp code. The GUI can be run by middle-clicking background -> “Customize”. Most customizations similar to other window managers can be done through GUI.
For customizations by lisp, first understand that in the startup, files ~/.sawfish/custom, .sawfishrc are read in this order.
This file is created and edited by the configurator GUI, and stores customizations. It shouldn’t really be edited manually.
This is the file you edit. It is a hand written lisp code, and almost all explicit customizations should be done here.
Choose the filename either ~/.sawfish/rc or ~/.sawfishrc. The former is recommended, because the directory ~/.sawfish is anyway created to store custom, and you can also put other lisp scripts, like user-contributed codes there.
Sawfish < 1.6 reads sawfish-defaults by default only if ~/.sawfishrc lacks, but now it is always read.
systeminvokes a shell. Don’t forget to add “&” not to block the Sawfish execution.
(system "firefox doodle.com &")
Bind the event Button1-Click1 in the
window-keymap to the
See the ‘Popup Menus’ node in the Info manual (see Popup Menus)
Use the shell command:
sawfish --batch -l compiler -f compile-batch files…
where files… are the names of the files you want to compile. They will normally have .jl suffixes, the compiler will create associated files with .jlc suffixes containing the compiled Lisp code.
Remember that always the latest code is read, i.e., if the source is newer than the byte compiled file, the source is used, unlike emacs.
See the ‘Window Frames’ node of the Info manual (see Window Frames)
Basically though, create a directory ~/.sawfish/themes/foo where foo is the name of your theme. Then copy any images into this directory and create a file theme.jl that will be loaded to initialize the theme
There’s no automatic translation available. Get the images used in the window border, then write a theme.jl file telling the window manager how they are used to form a window frame
See the themes/brushed-metal directory for an example, and the Info manual for the documentation
Yes, there are plenty actually. Most of them reside over at freshmeat: http://themes.freshmeat.net/browse/926/. You can also take a look at the Themes section on the Sawfish website: http://sawfish.wikia.com/wiki/Themes.
There was a problem with older versions of the
package preventing engine based themes working with several interpreted
languages. Get the latest
Here we explain sound support which can’t be set via Configurator.
You can add sound files under ~/.sawfish/sounds/. This path can
be changed with
audio-load-path variable. See the file
OPTIONS for the format.
The program to play sounds is set by
you want to pass arguments or redirect the output, prepare a wrapper script,
for example something like following:
#!/bin/sh # No need of backgrounding. mplayer -volume 30 "$1" &>/dev/null
This allows you to connect to a window manager process and evaluate arbitrary Lisp forms. Do ‘sawfish-client -?’ for more details (‘sawfish-client -’ for a read-eval-print loop)
By default you can only connect from the host running the wm (through a
unix-domain socket). To enable the network based server, evaluate the
Note however that this connects through the X server, meaning that anyone who can open windows on your display can also execute any Lisp code on the host running the window manager (and by extension, execute any program).
So don’t run the net server with X access control disabled (unless you’re not connected to a network).
From a shell lauch the following command:
sawfish-client -q -f restart
The Sawfish root-menu has a “session” sub-menu which allows you to
shutdown your machine. If you use GNOME or KDE, no additional work is
required. But if you use Sawfish standalone, the user needs the
privilege to execute
You can do it, for example, with
sudo combined with user group
$ groupadd shutdown # add a new group called "shutdown" $ adduser john shutdown # add user "john" to the "shutdown" group $ visudo # add the group "shutdown" to sudoers # add the following: %shutdown ALL=(root) NOPASSWD: /sbin/shutdown
That’s it, now everyone in the
shutdown group can do it!
You have to devise a trick, because the strict answer is no. There’s “sticky-head” script which partly achives it on the wiki, but it’s still incomplete: http://sawfish.wikia.com/wiki/Sticky-head
Technically, Sawfish’s workspace implements “virtual desktop” specified in the window manager standard (ewmh), which has to be at least the size of the X screen, so the workspace has to containt all heads. “Per head workspace” has to be implemented as a new mechanism on top of workspace.
(Current Sawfish community’s attitude.)
We can’t afford it. We’re understaffed.
(Written by John Harper.)
Mainly because I’m lazy; I had already written rep, and therefore understood it completely, whereas I have never used GUILE. Also, rep has some features not available in GUILE (byte-code compilation, autoloading, built-in event-loop, …)
But before you flame me: yes I do think scheme is a more elegant language.
Possibly. But only if it can be written in Lisp, or doesn’t conflict with the overall design aims.
These aims are to build a lightweight, generally applicable, set of core window management functions, then write all high-level functionality as Lisp extensions
No. This can easily be done by a separate application (e.g. with the
GNOME hints, simply monitor property
_WIN_WORKSPACE on the root
Sawfish works stably on Solaris, but you may need to do two things:
imlib_config, the MIT-SHM option is on the ‘Rendering’ page)
Because that window doesn’t accept it. Technically, windows ask to receive focus by setting their WM_HINTS property appropriately; for example if I xprop a gnome-terminal:
WM_HINTS(WM_HINTS): Client accepts input or input focus: True Initial state is Normal State. window id # of group leader: 0x5c00001
It seems that there is a problem with these applets that only occurs after restarting Sawfish - they seem to lose track of the current window states.
The simplest way to correct this is to execute the following shell commands:
$ save-session $ killall panel
(assuming you have a session manager to restart the panel afterwards!)
It means that you’re trying to execute Lisp code that was compiled for an outdated version of the Lisp virtual machine. Recompile any Lisp files that you have installed locally.
Because the old name (‘Sawmill’) was already being used by another company, who were in the process of registering it as a trademark.
The rename should be mostly painless, all old binaries still work for the time being, but will be phased out over time (final phasing out started around 1.5.0). Where before you would execute a program called sawmill*, replace it by sawfish*. E.g. sawmill becomes sawfish, and sawmill-client becomes sawfish-client.
Your ~/.sawmill directory will automatically be renamed ~/.sawfish unless it would overwrite an existing file. Only user configuration ~/.sawfish[/]rc will be checked currently, ~/.sawmillrc is not used anymore (it was also read up to version 1.3.5).
My apologies for any inconvenience caused.
Well I had to choose something! And hopefully it satisfies the main requirements:
Incidentally, there was no meaning to the name “Sawmill”, the author grepped /usr/dict/words for something containing “wm”.