Sawfish Logo (Alternative)Sawfish is an extensible window manager using a Lisp-based scripting language. Its policy is very minimal compared to most window managers. Its aim is simply to manage windows in the most flexible and attractive manner possible. All high-level WM functions are implemented in Lisp for future extensibility or redefinition.

These are some of the features that set Sawfish apart from other window managers:

  • Powerful key-binding: Virtually every functionality provided by Sawfish can be bound to keys (or mouse buttons).
  • Event hooking: For many events (moving windows etc.) you can customize the way Sawfish will respond.
  • Window matching: When windows are created you can match them to a set of rules and automatically perform actions on them.
  • Flexible theming: Sawfish allows for very different themes to be created and a variety of third-party themes are readily available.

Sawfish was formerly known as Sawmill but then renamed to Sawfish due to pending patents on the name Sawmill. It’s original Author is John Harper who got employed by Apple which prohibited him to continue working on Sawfish (and librep/rep-gtk). In Mid 2007 Janek ‘The Re-Animator’ Kozicki overtook the development of Sawfish. In mid 2008 I overtook development of librep and rep-gtk, followed by Sawfish and SawfishPager in December 2008.

 

License: GNU GPL v2

 

Downloads

git

ChangeLog:

1.9.91 “Steam Train”
======================

   * Updated or New dependencies
        - PangoX: no longer required

   * Bug Fixes
        - Always rebuild the list of marked winows in tabs when closing
          a marked window.  [fuchur]

        - In 'sawfish-config' fix the 'make-choice-item' to properly
          support settings for the 'Crux' theme.  [Vedat Hallac]

        - Only allow a window to be tabbed, if the parent window's
          framestyle has support for tabs.  (Note that in Sawfish
          different windows can have diffrent framestyles) [fuchur]

        - 'window-ops-menu' was still calling
          'resize-window-to-dimension' that didn't exist anymore since
          Sawfish 1.7.  Use 'resize-window-prompt' instead.
          [Christopher Bratusek]

        - Make "Sawfish Rootmenu" label an insensitive menu-item, so
          that clicking it while the root-menu pops-up doesn't make the
          menu dissapear immediately.  [Christopher Bratusek]

        - In SawfishConfig you can select different cursor shapes for
          different buttons.  Some of the definitions have been wrong
          and could crash Sawfish when choosing them.  This is fixed
          now.  [fuchur]

        - When a windows 'max-width' or 'max-height' would exceed 32767
          (X11's maximum) it would result in odd window-behaviour (for
          example: no maximization button), this is fixed by capping the
          value at 32767.  Originally reported with Firefox and
          Thunderbird 17.0 [Michael Panteleit]

        - Fixed grabbing key-bindings in SawfishConfig.  [Christopher
          Bratusek]

        - Fixed non-working '$height-content' and '$width-content' in
          the mxflat theme [Robert Zenz]

   * New Features
        - Tiling.  [Jose A. Ortega Ruiz] [Christopher Bratusek]
          Currently this module is under testing.  There are still minor
          hickups, but both 'tall-tile' and 'col-tile' are working (see
          also 'lisp/sawfish/wm/tile/readme.org'):

          'tall-tile': one big window on the left, small windows on the
          right 'col-tile': tile windows as columns (recommended for
          multi-head configurations)

               ;; Tiling
               (require 'sawfish.wm.tile.tile)
               (tall-tiling 0 #:width 1.75 #:top 0 #:bottom 0 #:gap 3 #:max 3 #:right nil #:resize t)
               (col-tiling 0 #:top 0 #:bottom 0 #:gap 3 #:cols 3 #:resize t)
               (bind-keys global-keymap
                      "C-S-KP_Add" 'increase-max-windows
                      "C-S-KP_Subtract" 'decrease-max-windows
                      "C-M-KP_Add" 'increase-cols
                      "C-M-KP_Subtract" 'decrease-cols
                      "C-M-Right" 'tall-rotate-right
                      "C-M-Left" 'tall-rotate-left
                      "C-F11" 'next-tiling)

        - Completeley revised 'resize-window-prompt'.  Now display
          window's name and old width (respectively old height) when
          prompt for new values.  Shows an information, if one of the
          given values is not actually a number.  [Christopher Bratusek]

        - External Application modules.  Those modules allow handling,
          setting-up external application during a sawfish session.  See
          'AUTOSTART' for additional notes on them.
             ++ 'trayer' module.  Handles a 'trayer' (a system-tray)
               instance during a sawfish session.  [Christopher
               Bratusek]

             ++ 'xmobar' module.  Handles a 'xmobar' (an on-screen, very
               flexible bar, monitoring whatever you like) instance
               during a sawfish session.  [Christopher Bratusek]

             ++ 'xmodmap' module.  Allows reading '~/.Xmodmap' on
               startup of Sawfish.  [Christopher Bratusek]

             ++ 'xsettingsd' module.  Handles a 'xsettingsd' (a daemon
               implementing XSettings to provide GTK+ application with
               information like what theme to use))instance during a
               sawfish session.  [Christopher Bratusek]

             ++ 'xgamma' module.  Allows changing display's gamma
               settings on startup of Sawfish.  [Christopher Bratusek]

             ++ 'fehlstart' module.  Handles a 'fehlstart' (a simple,
               but yet flexible application launcher) instance during a
               sawfish session.  [Christopher Bratusek]

             ++ 'pancake' module.  Handles a 'pancake' (a simple desktop
               panel with pager, window-list, taskbar, tray) instance
               during a sawfish session [Christopher Bratusek]

   * Removed Features
        - Removed 'sawfish.wm.ext.expose' in favour of much more
          advanced tiling-functions.  [Christopher Bratusek]

   * Miscellaneous Changes
        - Updated 'Elberg-tabbed' and 'gradient-tabbed' for tab-system
          as of Sawfish 1.9.1 [fuchur]

        - Wallpaper setter now has an option for setting wallpaper on
          startup.  Image widget is now more robust.  [Christopher
          Bratusek]

        - Improved default keymap for 'titlebar' and 'tabbar'.  [fuchur]

        - Revived 'decorate-transients', 'menus-include-shortcuts' and
          'customize-show-symbols' defcustoms.  These options are now
          adjustable from 'sawfish-config' again.  [Christopher
          Bratusek]

        - Give the 'root-window' the property ''WINDOW_MANAGER' on
          startup with value 'sawfish'.  [Christopher Bratusek]

        - Updated 'ru' and 'pt_BR' translations via transifex.