WM

From Things and Stuff Wiki
Revision as of 22:15, 14 March 2021 by Milk (talk | contribs) (→‎Awesome)
Jump to navigation Jump to search


Window Managers

xwm


xnwm

uwm

1985

developed by the Digital Equipment Corporation for their Ultrix operating system. It was released in 1985. Shortly thereafter, it became included as part of the base X Window System distribution, beginning with X10R3. Initially, it was distributed alongside two other window managers (xwm and xnwm).

In 1986, the X Window System switched to version 11 of the protocol. Only uwm was ported, so it became the only window manager for X Window System until X11R4 release, where it was replaced by twm. uwm has never been updated since.

twm

1987

The name originally stood for Tom's Window Manager, but the software was renamed Tab Window Manager by the X Consortium when they adopted it in 1989 (X11R4).

twm is a re-parenting window manager that provides title bars, shaped windows and icon management. It is highly configurable and extensible. twm was a breakthrough achievement in its time, but it has been largely superseded by other window managers which, unlike twm, use a widget toolkit rather than writing directly against Xlib.

Various other window managers—such as vtwm, tvtwm, CTWM, and FVWM—were built on twm's source code.

awm

1988

descended from uwm.

olvm / olvwm

1989 / 1996?

OPEN LOOK Window Manager was the default stacking window manager for OpenWindows, the original desktop environment included with SunOS and Solaris. Its unique characteristic is its implementation of the OPEN LOOK look and feel.

Scott Oaks developed a variant of olwm, called olvwm (the OPEN LOOK Virtual Window Manager), which implements a virtual root window with dimensions greater than those of the video display.

swm

1989

Developed by Tom LaStrange at Solbourne Computer (computer workstations and servers based on the SPARC microprocessor architecture, largely compatible with Sun Microsystems' Sun-4 systems) in 1990. The most important innovation of swm was the introduction of the virtual desktop. It also introduced a primitive form of session management (restoring programs in use at the time of shutdown) to X.

Vtwm

1990

tvtwm

1991

Derived from twm to which it adds the virtual desktop feature from swm. All of these window managers were originally written by Tom LaStrange.

Unlike most more recent virtual window managers, tvtwm models the root window as a single large space, with the physical desktop being a viewport onto that virtual root window. The user can scroll the viewport around the virtual desktop either by pressing certain keys or by clicking into a scaled down representation of the virtual desktop, the so-called panner.

CTWM

1992

Claude Lecommandeur from the source code for twm, which, inspired by HP's vuewm, he extended to allow for virtual desktops ("workspaces" in CTWM's terminology.)

PieWM

1992

tvtwm fork, Has pie menus (circle around the mouse).

mwm

1992

Motif Window Manager

FVWM

1993

Derived from twm, has lots of forks: Afterstep, Xfce, Enlightenment, WindowMaker, Metisse, Bowman, AmiWM, FVWM-XPM (pre-Enlightenment), NWM, MVLWM, SCWM




9wm

1994

ADAM

1995

AmiWM

1996?

wm2 / wmx

1996 / 1998

Window Maker

1997


Blackbox

1997

IceWM

1997


MLVWM

1997

Xfwm

Xfwm - used in Xfce, intially based on fvwm2, itself derived from twm, redesigned to minimize memory consumption, provide a 3-D look to window frames, and provide a simple virtual desktop.

4Dwm

1998?

derived from mwm. uses the Motif widget toolkit, normally used on Silicon Graphics workstations running IRIX.

aewm

1998

AfterStep

1999

Scwm

1999

plwm

1999

PWM

2000

Tiling

Succeeded by Ion

Ion

2000

Tiling

Successor to PWM, development dead

Fork: Notion

Sawfish

2000

  • 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. what i wanted when using litestep

larswm

2000

ratpoison

2000

PLWM

2000

Fluxbox

2001

WindowLab

2001

Fork of aewm. Stacking.

evilwm

2001

Stacking, minimal/small.

Openbox

2002

Metacity

2002

miwm

2002

Hackedbox

2002

Oroborus

2002

NovaWM

2002

Stumpwm

2003

cwm

2004

Calm Window Manager, stacking. was based on evilwm, rewritten as a 9wn fork, then rewritten

wmii

2005

Tiling/stacking, plan9 like interface.

PekWM

2005

Stacking

JWM

2005

Stacking, Windows 98 like.

whimsy

2005

Python, stackable.

dwm

2006

Tiling, configuration in source header file.

spectrwm

2006

  • spectrwm is a small dynamic tiling window manager for X11. It tries to stay out of the way so that valuable screen real estate can be used for much more important stuff. It has sane defaults and does not require one to learn a language to do any configuration. It was written by hackers for hackers and it strives to be small, compact and fast. It was largely inspired by xmonad and dwm.

FLWM

2006?

Stacking, based on the FLTK toolkit

Matchbox

2007

  • Matchbox - an Open Source base environment for the X Window System running on non-desktop embedded platforms such as handhelds, set-top boxes, kiosks and anything else for which screen space, input mechanisms or system resources are limited.Matchbox consists of a number of interchangeable and optional applications that can be tailored to a specific non desktop platform to enhance usability in a ‘constrained’ environment.

xmonad

2007

  • xmonad is a dynamically tiling X11 window manager that is written and configured in Haskell. In a normal WM, you spend half your time aligning and searching for windows. xmonad makes work easier, by automating this.

Config

cabal --recompile
  after changing ~/.xmonad/xmonad.hs

Hotkeys

mod shift enter
  start terminal
mod shift c
  close current window

mod w
  reload xmonad

mod space
  rotate through window layouts
mod shift space
  reset to workspace default
mod tab
  tab through windows
super 2
  switch to workspace 2

Awesome

2007

  • awesome - a highly configurable, next generation framework window manager for X. It is very fast, extensible and licensed under the GNU GPLv2 license.It is primarily targeted at power users, developers and any people dealing with every day computing tasks and who want to have fine-grained control on their graphical environment.






To debug rc.lua changes:

Xephyr :1 -ac -br -noreset -screen 1152x720 &
DISPLAY=:1.0 awesome -c ~/.config/awesome/rc.lua.new


Scripts


  • https://github.com/montagdude/awesome-appmenu - a tool to create a menu of installed applications for the awesome window manager. It searches for and parses .desktop files to find the name, execution command, and icon of installed applications. These are then grouped into categories, sorted, and written to a lua script ($HOME/.config/awesome/appmenu.lua) that can be used in your awesome WM configuration script.




Hotkeys





  • https://github.com/jcrd/awesome-ez -a library for Awesome window manager that aims to simplify the creation of key and button bindings. It is based on code from the old Awesome wiki.





Multihead


Freedesktop menu


Notifications


Tags







Layouts











  • https://github.com/notnew/awesome-frames - Divides the workarea into 3 frames, which are like emacs windows. Each frame may be associated with a client window to show in the frame. Functions are provided to switch between frames and to pull windows unassociated windows into the current frame.This is similar (though less flexible than) the layout used by stumpwm or emacs' windows and buffers.


Wibox



Widgets










  • https://github.com/pltanton/net_widgets -If you use netctl or another network manager which doesn't provide any good tray icon or if you want something more native than nm-applet, this is for you.




Media

Hints


Revelation


Radical


Text format

You can use Pango markup in a text string. This allows formatting the text rendered inside widgets. Pango markup documentation can be found in the Pango documentation at http://library.gnome.org/devel/pango/stable/PangoMarkupFormat.html.

A Pango markup example: .

Helpers






  • :carrot: - Carrot awesomeWM personalization application







  • https://github.com/grandchild/autohidewibox -Auto-hide the awesome-wibox/taskbarIf you ever wanted to squeeze out that last bit of screen real estate in awesome and only show the wibox when needed (i.e when pressing the ModKey), this is for you.Since awesome doesn't allow easy access to the states of the Super/Mod-Key itself in rc.lua, one cannot simply show the wibox while the ModKey is pressed and hide it again on release. This little python daemon will sit in the background and do just that.


  • https://github.com/vladimir-g/awpwkb -a simple per-window keyboard layout switcher for Awesome WM.It uses awesome XKB functions, so awesome 4 is required. Layouts stored in X property awpwkb_layout and they are persistent between awesome restarts.



Themes and configs

The color format in awesome is either a standard X color name (blue, darkblue, lightred, etc) or a hexadecimal formatted color (#rrggbb or #rrggbbaa). By using the hexadecimal format, you can also specify an alpha channel: that means that #00ff00 will draw pure green, but #00ff00aa will set the alpha channel to ‘aa’ and will blend the green with the color under it.


If xdg/awesome default config loads instead of .config/awesome, this is due to error in the rc.lua.







subtle

2007

  • subtle is a manual tiling window manager with a rather uncommon approach of tiling: Instead of relying on predefined layouts, subtle divides the screen into a grid with customizeable slots (called gravities). For better understanding, the default config uses a 3x3 grid and maps each gravity to one key of the numpad. With those keys, windows can be moved directly to the desired gravity - the same can be done with tagging rules in the config. Another unique concept is the strict tagging: Unlike other tiling window managers, subtle doesn't allow weak tagging and always maps windows to virtual desktops (called views) with matching tags, regardless of the current active view.

Echinus

2007

Tritium

2007?

  • https://github.com/stew/tritium - a tabbed/tiling window manager. tritium is a tiling/tabbed window manager for the X Window System inspired by the ion3 window manager. It was written completely from scratch in python and shares no actual code with ion3. tritium is implemented in python using the plwm ("pointless window manager") library

SithWM

2007

wmfs

2008

CLFSWM

2008

Lucca WM

2008?

i3

2009

Based on wmii, tiling/floating.






i3-msg exec application
  # start your application on the workspace where it was called



  • https://github.com/greshake/i3status-rust - a feature-rich and resource-friendly replacement for i3status, written in pure Rust. It provides a way to display "blocks" of system information (time, battery status, volume, etc) on the i3 bar. It is also compatible with sway.





bindsym $mod+n exec i3-msg move to container workspace $(($(wmctrl -d | wc -l) + 1))
  # move to next numbered workspace whether existing or empty



  • https://github.com/joepestro/i3session - remembers what's running in your i3 workspaces by saving a session file (in ~/.i3/session). It is then able to restore the running processes (and their simple orientation) to one or more workspaces. Since i3session executes i3 commands sequentially (tree traversal), changing focus during restore will affect where clients open. By default, the i3-nagbar will appear during restore with a message to remind you of this.
  • https://github.com/pitkley/i3nator - Tmuxinator for the i3 window manager. It allows you to manage what are called "projects", which are used to easily restore saved i3 layouts (see Layout saving in i3) and extending i3's base functionality by allowing you to automatically start applications too.



jq:

.[].num

.[] | select(.visible and .focused).num+1)

if ([(.[][] | select(.visible == true) | select(.focused == true).num)+1] as $desk | [.[][].num] as $array | $array | contains($desk)) == true then "one" else "two" end


TinyWM

  • tinywm - a tiny window manager that I created as an exercise in minimalism. It is also maybe helpful in learning some of the very basics of creating a window manager. It is only around 50 lines of C. There is also a Python version using python-xlib. It lets you do four basic things: Move windows interactively with Alt+Button1 drag (left mouse button), Resize windows interactively with Alt+Button3 drag (right mouse button), Raise windows with Alt+F1 (not high on usability I know, but I needed a keybinding in there somewhere), Focus windows with the mouse pointer (X does this on its own) [4]

Notion

2010

Tiling, tabbed



Fork of Ion

Musca

2009

Bluetile

2010

  • Bluetile is a tiling window manager for Linux, designed to integrate with the GNOME desktop environment. It provides both a traditional, stacking layout mode as well as tiling layouts where windows are arranged to use the entire screen without overlapping. Bluetile tries to make the tiling paradigm easily accessible to users coming from traditional window managers by drawing on known conventions and providing both mouse and keyboard access for all features. based on Xmonad

mcwm

2010

catwm

2010

euclid-wm

2010

wind

2010

Wind is a window manager for the X Window System. It supports virtual desktops, optional Xft font rendering, and is pretty standards compliant. It provides overlapping window management with click-to-type focus. Unlike most window managers, Wind does not have the concept of minimized or hidden windows. Instead of hiding and unhiding windows, the virtual desktops abstraction makes it easy to group similar tasks and switch between these groups instantly using convenient key bindings. Standards compliancy is a prominent goal of the project, and Wind supports almost all mandatory parts of the ICCCM and the Extended Window Manager Hints specifications. Full compliancy is expected in the next major release.

marco

2011

Fork of metacity, used by MATE.

i5

2011

Tiling, fork of i3 with touchscreen features.

herbstluftwm

2011

  • herbstluftwm is a manual tiling window manager for X11 using Xlib and Glib. Its main features can be described with: the layout is based on splitting frames into subframes which can be split again or can be filled with windows (similar to i3/ musca). tags (or workspaces or virtual desktops or …) can be added/removed at runtime. Each tag contains an own layout. exactly one tag is viewed on each monitor. The tags are monitor independent (similar to xmonad). it is configured at runtime via ipc calls from herbstclient. So the configuration file is just a script which is run on startup. (similar to wmii/ musca)

monsterwm

2011

  • monsterwm is a minimal, lightweight, tiny but monstrous dynamic tiling window manager. It will try to stay as small as possible. Currently under 700 lines with the config file included. It provides a set of four different layout modes (vertical stack, bottom stack, grid and monocle/fullscreen) by default, and has floating mode support. Each virtual desktop has its own properties, unaffected by other desktops' settings. Finally monsterwm supports multiple monitors setups.

tilenol

2011

nwm

2011

  • nwm - A dynamic window manager for X11 written with Node.js

Mer

2011

dminiwm / snapwm

2011

Minimal and lightweight dynamic tiling window manager. Fork of catwm.

wingo

2011

Floating and tiling, per monitor desktops. Written in Go.

no-wm

2011

Foo-Wm

Aura

TTWM / Alopex

2012

  • https://github.com/TrilbyWhite/alopex
  • https://wiki.archlinux.org/index.php/Alopex
  • TTWM is a minimal tiling window manager combining concepts or elements from TinyWM, DWM, and i3wm. Inspiration has also been drawn from other great tilers like MonserWM. TinyTiler is currently under 650 lines of code. In contrast to other tilers, TinyTiler does not have modes nor does have window rules. TinyTiler has only two layouts: right stack and bottom stack. These choices were by design. TinyTiler instead provides two screen sections, the master and the stack. In TinyTiler only one stack window is visibile at a time, the others have tabs in the statusbar.

Qtile

2012

Goomwwm

2012

bspwm

2012

Very nice and atomic.

bspc set focused_border_color '#ff0000'
bspc set border_width '3px'
bspc set window_gap 0
bspc set focus_follows_pointer true








external rules

Deep Space Window Manager

2012

Piwm

2013

  • Piwm is a very small window manager written in Bash. Following are the 5 task it performs : 1) Ctrl + t : Opens xterm, 2) Ctrl + f : Makes current window full screen, 3) Alt + Mouseleft : Moves the window, 4) Alt + Mouseright : Rescales the window, 5) Ctrl + F1 : Refocus the window

Guile-WM

2013

2bwm

swc

2013

  • https://github.com/michaelforney/swc - a small Wayland compositor implemented as a library.It has been designed primary with tiling window managers in mind. Additionally, notable features include:Easy to follow code baseXWayland supportCan place borders around windows

velox

2014

  • https://github.com/michaelforney/velox - a simple window manager based on swc. It is inspired by dwm and xmonad. velox uses tag-based window management similar to dwm. This allows you to construct your workspace by selecting a set of tags to work with. However, in contrast with dwm, windows do not have any screen associated with them; they are shown on whichever screen has their tag selected, allowing you to easily move windows between screens by selecting their tag on a different screen. This is similar to the multi-monitor workspace switching in xmonad.To ensure that we never attempt to show a window in two places at once, we have to impose several constraints. First, each window must have exactly one tag. In practice, I've found that I rarely intentionally mark a window with more than one tag anyway. Second, when you select a tag that is currently display on a different screen, the tag is first deselected from that screen.

FrankenWM

2014

dynamic tiling WM featuring the v-stack, b-stack, grid, fibonacci, dualstack, equal and monocle layouts out of the box. If you want to, you can add gaps between the windows as well. monsterwm-xcb fork, thus coming from monsterwm, thus coming from dminiwm, thus coming from catwm.

howm

2014

wtftw

2014

written in rust

adwm

2014

  • https://github.com/bbidulock/adwm - originally a fork of Echinus which in turn was a fork of dwm, and borrows concepts from velox, awesome and spectrwm. What it includes is a full rewrite with significant updates and additions resulting in full EWMH (NetwM), WMH (WinWM), MWMH (CDE/Motif), ICCCM 2.0 compliance and support.

See also the XDE apps.

eggwm

2014

swm

2014

Moksha

exwm

2015

katriawm

2015

non-reparenting, tiling window manager with window decorations. It’s a learning project started in December 2015.

Lunchbox Window Manager

2015


aphelia

Petronia

2016

LeftWM

  • LeftWM - a tiling window manager written in rust for stability and performance. The core of left is designed to do one thing and one thing well. Be a window manager. Because you probably want more than just a black screen LeftWM is built around the concept of theming. With themes you can choose between different bar / compositor / background / colors, whatever makes you happy. LeftWM has been built from the very beginning to support multiple screens and has been built around ultrawide monitors. You will see this with the default key bindings.


chamferwm

2018


dovetail

Twindy

  • Twindy - a window manager for linux (and possibly any system running an X server?) inspired byTracktion, the multitrack audio editor/sequencer for Windows and OS X. Twindy tries to apply Tracktion's workflow, where everything is on screen at once, to a window manager. As such, there are two panels, a main panel where new windows/programs open by default and may be selected using tabs, and a lower panel, which can only hold one window/program at a time.The idea is that you'll do your main work in the top panel, and use the bottom panel for a terminal, or a file manager you'd want to keep open.

berry

Xlambda

karuiwm

Wmderland

sowm

nimdow

  • https://github.com/avahe-kellenberger/nimdow - written in Nim. NOTE: This is a WIP and currently only usable on single monitor setups. I am using this project to learn Nim, x11, and to replace my build of dwm (written in C).

LeftWM

  • LeftWM - a tiling window manager written in rust for stability and performance. The core of left is designed to do one thing and one thing well. Be a window manager. Because you probably want more than just a black screen LeftWM is built around the concept of theming. With themes you can choose between different bar / compositor / background / colors, whatever makes you happy.LeftWM has been built from the very beginning to support multiple screens and has been built around ultrawide monitors. You will see this with the default key bindings.

instantWM

dylwm?

InfiniteGlass

xwm

Other tiling

See also Wayland


  • https://github.com/jjttjj/wm - a clojure(script) library which provides an immutable datastructure that's useful for implementing a tiling window manager.