cwm is one of those minimalist window managers - no window decorations, but good key binding control. Configured in the $HOME/.cwmrc file; good man pages for cwm and cwmrc. The default window manager for OpenBSD, I believe:
(http://s9.postimg.org/y8h12wz9n/2013_07_02_scrot.jpg) (http://postimg.org/image/y8h12wz9n/)
it's pretty good if you like minimalism - just under 100 MB memory idling on VSIDO, or for those occasions when you don't want to be distracted by eye candy.
get the source code from git:
git clone git://github.com/chneukirchen/cwm.git
I haven't used it in a couple years because the aesthetic can be easily duplicated in fluxbox, fvwm, openbox, or tiling wm's like i3 and dwm - all of which have much more functionality, but I'll confess this is the wm I used to train myself to use key bindings for window management instead of the mouse.
You can use a mouse - the default mouse bindings for window movement/resize are the same as fluxbox, and it is conky and panel friendly - tint2 anyway:
(http://s14.postimg.org/sc9yltcjh/July_1372798885_1366x768.jpg) (http://postimg.org/image/sc9yltcjh/)
that is conky piped to dzen2 - similar to dwm or spectrwm in the first scrot, regular conky window in the second.
Thanks Rat Man, I will give it a go...
Has anything changed in the 2 years. Or better, has there been development in that 2 years?
I believe so. It is actively developed by the OpenBSD developers/maintainers and the git repo for the linux port is tied to that release now so it is a simple compile as long as you have a few dependencies -
make
sudo make install
prior to that, it was a real pain in the ass to get it compiled - there were 3-4 linux ports of.
I don't think it supports virtual desktops natively, so tilers like dwm, spectrwm, and i3 really - IMO - blow it away as far as functionality goes. But if you only need the one desktop, or prefer a wm on your server it's really good.
my ~/.cwmrc which is pretty much taken from the man page - add an ignore rule for tint2 and/or conky windows:
borderwidth 1
color activeborder rgb:E1/CA/5A
color inactiveborder rgb:BC/BE/B3
gap 20 4 4 4
moveamount 10
# Set default Xft(3) font
fontname "terminus:pixelsize=12:regular"
# Turn on sticky-group mode
sticky yes
# Any entry here is shown in the application menu
command dmenu dmenu_run
command terminal urxvtc
command tmux "uxterm -e tmux"
command thunar thunar
command editor geany
command firefox firefox
command thunderbird thunderbird
command gimp gimp
# Autogroup definitions
autogroup 3 "aterm,XTerm"
autogroup 3 "xterm,XTerm"
# Ignore programs by that name by not drawing borders around them.
ignore XMMS
ignore xwi
ignore xapm
ignore xclock
ignore conky
ignore dzen2
ignore dmenu
# Keybindings
bind CM-r label
bind CS-Return "xterm -e top"
bind 4-o unmap
bind CM-equal unmap
bind CMS-equal unmap
#bind M-F7 vmaximize
#bind M-F8 hmaximize
bind M-1 grouponly1
bind M-2 grouponly2
bind M-3 grouponly3
bind MS-1 movetogroup1
bind MS-2 movetogroup2
bind MS-3 movetogroup3
# user bindings
bind M-F1 "urxvtc"
bind M-F2 "dmenu_run"
bind M-F3 "urxvtc -e tmux"
bind M-F4 delete
bind M-F5 raise
bind M-F6 lower
bind M-F7 vmaximize
bind M-F8 hmaximize
bind M-F10 maximize
bind XF86HomePage firefox
bind Menu thunar
bind 4-F14 thunderbird
bind C4-l geany
bind C4-g gimp
# Mousebindings
mousebind M-2 window_lower
mousebind M-3 window_resize
#BIND COMMAND LIST
# restart Restart the running cwm(1).
bind 4-q restart
# quit Quit cwm(1).
bind 4S-q quit
# terminal Spawn a new terminal.
# lock Lock the screen.
# search Launch window search menu.
# menusearch Launch application search menu.
# exec Launch "exec program" menu.
# exec_wm Launch "exec WindowManager" menu.
# ssh Launch "ssh" menu.
# group[n] Select group n, where n is 1-9.
# grouponly[n] Like group[n] but also hides the other groups.
# nogroup Select all groups.
# grouptoggle Toggle group membership of current window.
# movetogroup[n] Hide current window from display and move to group n, where n is 1-9.
# cyclegroup Forward cycle through groups.
# rcyclegroup Reverse cycle through groups.
# cycle Forward cycle through windows.
# rcycle Reverse cycle through windows.
# cycleingroup Forward cycle through windows in current group.
# rcycleingroup Reverse cycle through windows in current group.
# delete Delete current window.
# hide Hide current window.
# lower Lower current window.
# raise Raise current window.
# label Label current window.
# freeze Freeze current window geometry.
# maximize Maximize current window full-screen.
# vmaximize Maximize current window vertically.
# hmaximize Maximize current window horizontally.
# moveup Move window moveamount pixels up.
bind MS-Up moveup
# movedown Move window moveamount pixels down.
bind MS-Down movedown
# moveright Move window moveamount pixels right.
bind MS-Left moveleft
# moveleft Move window moveamount pixels left.
bind MS-Right moveright
# bigmoveup Move window 10 times moveamount pixels up.
# bigmovedown Move window 10 times moveamount pixels down.
# bigmoveright Move window 10 times moveamount pixels right.
# bigmoveleft Move window 10 times moveamount pixels left.
# resizeup Resize window moveamount pixels up.
bind C4-Up resizeup
bind C4-Down resizedown
bind C4-Left resizeleft
bind C4-Right resizeright
# resizedown Resize window moveamount pixels down.
# resizeright Resize window moveamount pixels right.
# resizeleft Resize window moveamount pixels left.
# bigresizeup Resize window 10 times moveamount pixels up.
# bigresizedown Resize window 10 times moveamount pixels down.
# bigresizeright Resize window 10 times moveamount pixels right.
# bigresizeleft Resize window 10 times moveamount pixels left.
# ptrmoveup Move pointer moveamount pixels up.
# ptrmovedown Move pointer moveamount pixels down.
# ptrmoveright Move pointer moveamount pixels right.
# ptrmoveleft Move pointer moveamount pixels left.
# bigptrmoveup Move pointer 10 times moveamount pixels up.
# bigptrmovedown Move pointer 10 times moveamount pixels down.
# bigptrmoveright Move pointer 10 times moveamount pixels right.
# bigptrmoveleft Move pointer 10 times moveamount pixels left.
# htile Current window is placed at the top of the screen and maximized horizontally, other windows in its group share remaining screen space.
# vtile Current window is placed on the left of the screen and maximized vertically, other windows in its group share remaining screen space.
# MOUSEBIND COMMAND LIST
# window_move Move current window.
# window_resize Resize current window.
# window_lower Lower current window.
# window_raise Raise current window.
# window_hide Hide current window.
# window_grouptoggle Toggle group membership of current window.
# menu_group Launch group list.
# menu_unhide Launch hidden window list.
# menu_cmd Launch command list.
and my startcwm file - mine resides in /usr/local/bin - I use it in the /usr/share/xsessions/cwm.desktop file to make it available to lightdm
#!/bin/sh
# Change your keymap:
xmodmap "$HOME/.Xmodmap" &
xrdb -l "$HOME/.Xdefaults" &
xsetroot -mod 1 1 -fg mediumslateblue -bg lightslategray &
urxvtd -q -f -o &
fbsetbg -c -r "$HOME/wallpaper/" &
conky | dzen2 -fn "xft:terminus:pixelsize=12:antialias=true:hinting=slight" &
exec cwm
Didn't know there was basic tiling native to cwm, tiling is always handy:
(http://s18.postimg.org/5if4j7n91/September_1379423512_1366x768.jpg) (http://postimg.org/image/5if4j7n91/)
just add key bindings in .cwmrc for htile and vtile.
Re-visiting cwm paying closer attention to cwm groups. This comment:
QuoteI don't think it supports virtual desktops natively
is not entirely accurate. Groups in cwm is a way to simulate virtual desktops. This page gives a short summary:
Getting started with cwm (http://undeadly.org/cgi?action=article&sid=20090502141551)
I modified my ~/.cwmrc to add the following:
# Autogroup definitions - note: group visibility functions as virtual desktops
autogroup 1 "sakura,Sakura"
autogroup 1 "xterm,UXTerm"
autogroup 1 "xterm,XTerm"
autogroup 1 "geany,Geany"
autogroup 1 "medit,medit"
autogroup 2 "Navigator,Firefox"
autogroup 2 "Mail,Thunderbird"
autogroup 3 "xchat,Xchat"
autogroup 3 "filezilla,Filezilla"
autogroup 4 "gimp,Gimp"
Sets up 4 groups (there are 9 total built into cwm); use xprop to get the class names to use in the group definition.
By default, all groups are visible, but once the user starts to cycle through the groups with ALT-Right or ALT-Left, all but the active group become hidden as if they are on different desktops. By default CTRL-ALT-0 (zero) brings all the groups back into view.