SEARCH

Enter your search query in the box above ^, or use the forum search tool.

You are not logged in.

#526 2012-03-29 13:28:05

2ManyDogs
dv#!
From: elsewhere
Registered: 2011-11-22
Posts: 1,346

Re: 30 Window Managers in 30 days

Day 25 -- today we are going to look at herbstluftwm. I know some people have been waiting for this review, and I hope I don't disappoint them. I think it's good that I waited this long before reviewing herbstluftwm, because it builds on some concepts used in other WMs and makes a lot more sense to me now that I have used musca, ratpoison, and even euclid-wm.

From our own gutterslob:

hlwm is basically bash copulating with more bash till you get something resembling window management. It's quite solid despite being a young project, at least according to the people that use it on a regular basis.

You'll see what he means about bash-on-bash when we get to the configuration section.

And another quote, from el_koraco:

It's called Mod4!

And I'm happy to call it that. Mod1 is the alt key, mod4 is the "win" key. I will use the generic term "mod key" to mean whatever key has been defined as the "hold it down and press another" key.  Done; on to the review.

"Herbstluft" is german for "autumn air." Herbstluftwm is in the testing and sid repos, but not in stable. Apt-get install works, and herbstluftwm creates its own .desktop file, so it shows up in the GDM sessions list.

Like musca and ratpoison, herbstluftwm uses "frames" and "windows." An app runs in a window, and a frame can be empty or contain one or more windows. Unlike ratpoison and musca, in herbstluftwm more than one window can be visible in a frame at the same time. Frames can have one of four layouts: vertical (windows are arranged in a stack, on top of each other), horizontal (windows are arranged in a row, next to each other), grid (windows are arranged in a grid according to the number of windows), and max (only one window is visible at a time, other windows in the frame are hidden).

When you start herbstluftwm, the workspace contains one large frame with a vertical layout. By default, the mod key is mod1, and mod+return starts a terminal. If we start three apps, we see three windows, one on top of the other:

2012_03_28_091932_1280x1024_scrot.jpg

Mod+(h,j,k,l) moves the focus to the left, down, up, or right, and you can also focus windows with a left mouse click. Mod+c and mod+p cycle the focus through the windows in the active frame, and mod+tab cycles the focus through all windows on the screen (in all frames).

As with musca and ratpoison, we can split the frame along the horizontal or vertical axis and create new frames. Mod+o splits the frame along the horizontal axis:

2012_03_28_092119_1280x1024_scrot.jpg

We can then either start another app in the new frame, or move one of the existing windows into the new frame. Mod+shift+(h,j,k,l) moves a window, and if we focus the thunar window and press mod+shift+l, the window moves into the frame on the right:

2012_03_28_092136_1280x1024_scrot.jpg

The new frame still has a vertical layout, so new windows will be added below the active window. We can also resize frames with the mod+control+(h,j,k,l) keys, so if we add two more windows and resize the frame a little, it looks like this:

2012_03_28_092410_1280x1024_scrot.jpg

We can make more splits and more frames. If we go back over to the left frame and split it along the vertical axis (mod+u), it looks like this:

2012_03_28_093155_1280x1024_scrot.jpg

Frames on the same screen can have different layouts. Mod+space cycles through the layouts, and if we change the layout in the left-hand frame to horizontal, the windows in the frame move to be side-by-side, like this:

2012_03_28_093213_1280x1024_scrot.jpg

Mod+r removes a frame and merges its contents with an adjacent frame. Remaining frames on the workspace resize themselves to fill the space. Mod+f toggles a single window into and out of full-screen mode, and mod+s toggles all the windows in the current workspace into and out of floating mode.

Herbstluftwm calls a workspace a "tag" and by default it has nine tags. Mod+<n> (where n is a number from one to nine) activates the tag, mod+shift+<n> moves the active window to the numbered tag, but does not activate the tag. Tags can also be named.

Herbstluftwm can also be controlled using commands. Herbstluftwm "listens" for commands from an app called herbstclient, which is started with herbstluftwm. Commands sent to herbstclient are passed to herbstluftwm and the window manager makes the appropriate changes. All of the window-control functions have corresponding commands, and there are also commands for tag manipulation and for setting parameters like window border size and color. The man page has a complete list of commands and their arguments. Commands can be simply sent to herbstclient from a command prompt in a terminal. This command sets the gap between frames to 5 pixels:

herbstclient set window_gap 5

Mod+q quits herbstluftwm.

Configuration

Herbstluftwm uses a single text file for its configuration. The file is called "autostart" and it is actually a bash script that makes command calls to herbstclient. Copy the default file to your home folder before modifying it:

mkdir ~/.config/herbstluftwm
copy /etc/xdg/herbstluftwm/autostart ~/.config/herbstluftwm

Because the autostart file is actually run as a script, any commands you want run when herbstluftwm starts (such as calls to nitrogen or conky) may be placed in this file. You can also make changes while herbstluftwm is running and reload the script with mod+shift+r.

The default file sets the root-window color. I changed this to use a background image, set some padding at the top of the screen for conky, and ran conky

#xsetroot -solid '#5A8E3A'
nitrogen --restore
hc pad 0 15 0 0 0
conky -c conkyrc-herbst

"hc" is a function defined in the autostart file to call herbstclient with arguments.

I changed the mod key to mod4, changed the terminal from xterm to sakura, and added some bound keys for apps and for showing and hiding conky:

Mod=Mod4
hc keybind $Mod-t spawn sakura
hc keybind $Mod-Shift-w spawn luakit
hc keybind $Mod-F3 spawn dmenu_run
hc keybind $Mod-b pad 0 0 0 0 0
hc keybind $Mod-Shift-b pad 0 15 0 0 0

I changed the horizontal and vertical split commands so they make more sense to me, and added split 1/3 commands:

hc keybind $Mod-v split vertical 0.5
hc keybind $Mod-Shift-v split vertical 0.3
hc keybind $Mod-h split horizontal 0.5
hc keybind $Mod+Shift+h split horizontal 0.3

I changed the move and shift commands to use the direction keys:

hc keybind $Mod-Left focus left
hc keybind $Mod-Down focus down
hc keybind $Mod-Up focus up
hc keybind $Mod-Right focus right
hc keybind $Mod-Shift-Left shift left
hc keybind $Mod-Shift-Down shift down
hc keybind $Mod-Shift-Up shift up
hc keybind $Mod-Shift-Right shift right

And changed the focus behavior to give focus to new clients (by default this is off):

hc rule focus=on

Other rules can be specified in the autostart file, such as rules to start apps on particular tags.

Finally, I changed some of the gaps and colors, and I took some code from doomicide's herbstluftwm thread and added it to conky so conky shows the workspace name. Here's what it looks like now:

2012_03_28_105138_1280x1024_scrot.jpg

And with the same windows floating:

2012_03_28_110528_1280x1024_scrot.jpg

What I Liked About It

It uses some of the best concepts from other tiling window managers. It's a combination of manual and automatic tiling. It can use different layouts in different frames on the same workspace. It uses a simple bash script for configuration and can be reconfigured from the command line while it is running.

What I Didn't Like About It

Not much, especially when I found out it had an option to focus new clients. The default colors are painfully bright.

Links

"man herbstluftwm"
"man herbstclient"
herbstluftwm home page
herbstluftwm thread on #! forum
herbstluftwm in the Arch wiki
herbstluftwm thread on the Arch forum

tomorrow: dvtm
back to the top

Last edited by 2ManyDogs (2012-03-30 12:52:31)


Be eggsalad to each other.

Offline

Be excellent to each other!

#527 2012-03-29 15:02:37

mahatman2
#! Die Hard
From: Chattanooga TN
Registered: 2009-09-13
Posts: 550

Re: 30 Window Managers in 30 days

^ wow, just based on this review I'm going to take the plunge! Funny how a silly name can keep you from trying a window manager roll tongue


Punch all your friends.

Offline

#528 2012-03-29 15:18:42

ivanovnegro
Ivan #000000
From: unstable madness
Registered: 2011-06-02
Posts: 5,426

Re: 30 Window Managers in 30 days

^ I for one find the name really cool, maybe because I speak German. smile

Offline

#529 2012-03-29 15:31:54

el_koraco
#!/loony/bun
From: inside Ed
Registered: 2011-07-25
Posts: 4,749

Re: 30 Window Managers in 30 days

2ManyDogs wrote:

What I Didn't Like About It

Not much, especially when I found out it had an option to focus new clients. The default colors are painfully bright.

And it's used and promoted by ninjaaron, one of the nastiest guys in the FOSS world.

Offline

#530 2012-03-29 16:21:46

gensym
#! Junkie
Registered: 2011-10-17
Posts: 447

Re: 30 Window Managers in 30 days

@2Many
I have been looking forward for this! Good job. I will give this one a go at the w/e.


'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind.', {Eric}

Offline

#531 2012-03-29 20:17:56

m5
#! CrunchBanger
From: 200 years ago.
Registered: 2011-12-08
Posts: 221

Re: 30 Window Managers in 30 days

@2ManyDogs : No probs man,I`ll read evilwm review.great work.  smile

Last edited by m5 (2012-03-29 20:18:46)


Keep digging.
Linux beginner.

Offline

#532 2012-03-29 21:35:09

gutterslob
#! Resident Bum
Registered: 2009-11-03
Posts: 3,044

Re: 30 Window Managers in 30 days

@2MD
Great write-ups these past few days. Sorry for not being around to compliment you sooner.


Unia wrote:

And as Alt is Mod1, what actually is Mod2 and Mod3?

I've never been sure on Mod3, but Mod2 is usually meant for the Apple/Option key on Macs. At least that's what I used for SpectralScrotumWM and Xmonad on my OSX setups between Tiger to Snow Leopard. Lion is a turd and doesn't even wanna run either WM.


el_koraco wrote:

And it's used and promoted by ninjaaron, one of the nastiest guys in the FOSS world.

lol


tenkainen wrote:

I went even further: Running Windows 3.1 in dosbox in Win 3.1 look-a-like Icewm theme.
screenshot-26022012-161620.png

Excellent!!
3.1 was one of the better installments of windows, if only for the fact you could kill it and escape to the (relative) safety of DOS lol

Last edited by gutterslob (2012-03-29 21:39:24)


Point & Squirt

Offline

#533 2012-03-29 23:32:01

2ManyDogs
dv#!
From: elsewhere
Registered: 2011-11-22
Posts: 1,346

Re: 30 Window Managers in 30 days

m5 wrote:

@2ManyDogs : No probs man,I`ll read evilwm review.great work.  smile

check your private messages


Be eggsalad to each other.

Offline

#534 2012-03-30 01:11:23

2ManyDogs
dv#!
From: elsewhere
Registered: 2011-11-22
Posts: 1,346

Re: 30 Window Managers in 30 days

gutterslob wrote:

@2MD
Great write-ups these past few days. Sorry for not being around to compliment you sooner.

thanks gs...

Last edited by 2ManyDogs (2012-03-30 01:11:38)


Be eggsalad to each other.

Offline

#535 2012-03-30 12:49:22

2ManyDogs
dv#!
From: elsewhere
Registered: 2011-11-22
Posts: 1,346

Re: 30 Window Managers in 30 days

Day 26. Another short review today so I have more time to play with xmonad and awesome and to decide if I can write even a basic review for either of them.

We're looking at another console window manager today, dvtm, or the dynamic virtual terminal manager. It's a little like tmux, but it's different.

Dvtm is in the repos, so apt-get install works. You can either start dvtm from a terminal prompt or add this code to .bash_profile (to start dvtm only at the console) or to .bashrc (to start dvtm with all shells):

[[ $TERM != "screen" ]] && dvtm && exit

Like tmux, dvtm uses a two-key sequence for commands. The default "mod" sequence is control+g, and mod+c opens a new window. Here's where you see the big difference between dvtm and tmux -- you don't have to split the screen, dvtm does it for you, in one of four layouts: side stack, bottom stack, grid, and full screen. In side and bottom stack modes, the larger area is the "master" area and windows can be swapped into and out of the master area. The size of the master area can be changed. All this should sound very familiar.

Another difference between dvtm and tmux is that dvtm can minimize windows and return them to their original size. Mod+. sends a window back and forth between the screen and a list of minimized windows at the bottom of the screen (something like the "stack" of minimized windows we saw in euclid-wm). Mod+j and mod+k cycle focus forward and backward through the list of all windows on the screen, including minimized windows. Mod+u and mod+i cycle focus only through the non-minimized windows.

Here's a list of the commonly used commands:

Mod-c  Create a new shell window.
Mod-x  Close focused window.
Mod-l  Increases the master area width about 5% (all except grid and fullscreen layout).
Mod-h  Decreases the master area width about 5% (all except grid and fullscreen layout).
Mod-j  Focus next window.
Mod-k  Focus previous window.
Mod-[1..n] Focus the nth window.
Mod-.  Toggle minimization of current window.
Mod-u  Focus next non minimized window.
Mod-i  Focus prev non minimized window.
Mod-m  Maximize current window (change to fullscreen layout).
Mod-Space  Toggle between defined layouts (affects all windows).
Mod-Enter  Zooms/cycles current window to/from master area.
Mod-t  Change to vertical stack tiling layout.
Mod-b  Change to bottom stack tiling layout.
Mod-g  Change to grid layout.
Mod-q  Quit dvtm.

Dvtm also has a few command-line options, including an option to change the mod sequence. Any other modifications must be made by modifying config.h and rebuilding. The code is available with apt-get source, and the config.h file is very straightforward.

If dvtm is running in an X session, the mouse can be used to select windows and maximize or minimize them. This does not work in a console, even with GPM (the general purpose mouse) running.

Button1 click: Select window.
Button1 double click: Select window and toggle maximization.
Button2 click: Zooms/cycles current window to/from master area.
Button3 click: Toggle minimization of current window.

Another difference between dvtm and tmux is that dvtm does not manage more than one virtual desktop. If you need this capability in a console you can combine dvtm with screen or tmux. Dvtm also does not have the detach and reattach capability that tmux has, but this can be added with the dtach app.

Grid:

dg8.jpg

Side stack:

dg7.jpg

Bottom stack:

dg9.jpg

Bottom stack with two minimized windows (note the list at the bottom of the screen):

dg10.jpg

What I Like About It

It takes some of the work out of managing multiple terminals in a console. It's a little easier to use than tmux.

What I Don't Like About It

It doesn't manage more than one desktop. The default color for highlighted windows (blue) is hard to see.

Links

"man dvtm"
dvtm home page

tomorrow: sapphire and cwm
back to the top

Last edited by 2ManyDogs (2012-03-31 12:39:46)


Be eggsalad to each other.

Offline

#536 2012-03-30 14:23:12

dkeg
#! Die Hard
From: Mid-Atlantic Grill
Registered: 2011-12-05
Posts: 716

Re: 30 Window Managers in 30 days

sweet, I may give this a shot.  I've been liking tmux but this too seems interesting.   I just learned in tmux that you can Ctrl-b t to display a nice looking clock.   cool.  Thanks for including the console window managers in your reviews.


grill it | the rocky path may just be the best path

Offline

#537 2012-03-30 15:19:09

gutterslob
#! Resident Bum
Registered: 2009-11-03
Posts: 3,044

Re: 30 Window Managers in 30 days

2ManyDogs wrote:

The default color for highlighted windows (blue) is hard to see.

Like dwm, you can create a custom config.h and recompile to change colours or keybindings.

Example that uses yellow for highlighted windows:

/* curses attributes for the currently focused window */
/* valid curses attributes are listed below they can be ORed
 *
 * A_NORMAL        Normal display (no highlight)
 * A_STANDOUT      Best highlighting mode of the terminal.
 * A_UNDERLINE     Underlining
 * A_REVERSE       Reverse video
 * A_BLINK         Blinking
 * A_DIM           Half bright
 * A_BOLD          Extra bright or bold
 * A_PROTECT       Protected mode
 * A_INVIS         Invisible or blank mode
 *
 */
#define SELECTED_ATTR   A_NORMAL
#define SELECTED_FG     COLOR_YELLOW
#define SELECTED_BG     -1
/* curses attributes for normal (not selected) windows */
#define NORMAL_ATTR     A_NORMAL
#define NORMAL_FG       -1
#define NORMAL_BG       -1
/* curses attributes for not selected windows, in which bell rung */
#define HIGHLIGHT_ATTR  A_NORMAL
#define HIGHLIGHT_FG    COLOR_RED
#define HIGHLIGHT_BG    -1
/* status bar (command line option -s) position */
#define BAR_POS              BAR_BOTTOM /* BAR_BOTTOM, BAR_OFF */
/* curses attributes for the status bar */
#define BAR_ATTR        A_NORMAL
#define BAR_FG          COLOR_BLACK
#define BAR_BG          COLOR_GREEN
/* determines whether the statusbar text should be right or left aligned */
#define BAR_ALIGN       ALIGN_RIGHT
/* separator between window title and window number */
#define SEPARATOR " | "
/* printf format string for the window title:
 * 1st specification (%d) is replaced by the window number,
 * 2nd specification (%s) is replaced by the SEPARATOR,
 * 3rd specification (%s) stands for the window title */
#define TITLE           "[#%d%s%s]"
/* master width factor [0.1 .. 0.9] */
#define MFACT           0.55
/* scroll back buffer size in lines */
#define SCROLL_HISTORY  500

#include "tile.c"
#include "grid.c"
#include "bstack.c"
#include "fullscreen.c"

/* by default the first layout entry is used */
Layout layouts[] = {
    { "[]=", tile },
    { "+++", grid },
    { "TTT", bstack },
    { "[ ]", fullscreen },
};

#define MOD CTRL('a')

/* you can at most specifiy MAX_ARGS (2) number of arguments */
Key keys[] = {
    { MOD, 'c',       { create,         { NULL } } },
    { MOD, 'x',       { killclient,     { NULL } } },
    { MOD, 'j',       { focusnext,      { NULL } } },
    { MOD, 'k',       { focusprev,      { NULL } } },
    { MOD, 'J',       { focusnextnm,    { NULL } } },
    { MOD, 'K',       { focusprevnm,    { NULL } } },
    { MOD, 't',       { setlayout,      { "[]=" } } },
    { MOD, 'g',       { setlayout,      { "+++" } } },
    { MOD, 's',       { setlayout,      { "TTT" } } },
    { MOD, 'm',       { setlayout,      { "[ ]" } } },
    { MOD, ' ',       { setlayout,      { NULL } } },
    { MOD, 'h',       { setmfact,       { "-0.05" } } },
    { MOD, 'l',       { setmfact,       { "+0.05" } } },
    { MOD, '.',       { toggleminimize, { NULL } } },
    { MOD, 'b',       { togglebar,      { NULL } } },
    { MOD, 'M',       { togglemouse,    { NULL } } },
    { MOD, '\n',      { zoom ,          { NULL } } },
    { MOD, '1',       { focusn,         { "1" } } },
    { MOD, '2',       { focusn,         { "2" } } },
    { MOD, '3',       { focusn,         { "3" } } },
    { MOD, '4',       { focusn,         { "4" } } },
    { MOD, '5',       { focusn,         { "5" } } },
    { MOD, '6',       { focusn,         { "6" } } },
    { MOD, '7',       { focusn,         { "7" } } },
    { MOD, '8',       { focusn,         { "8" } } },
    { MOD, '9',       { focusn,         { "9" } } },
    { MOD, 'Q',       { quit,           { NULL } } },
    { MOD, CTRL('a'), { escapekey,      { NULL } } },
    { MOD, 'A',       { togglerunall,   { NULL } } },
    { MOD, 'r',       { redraw,         { NULL } } },
    { MOD, 'X',       { lock,           { NULL } } },
    { MOD, 'B',       { togglebell,     { NULL } } },
    { MOD, 'p',       { scrollback,     { "-1" } } },
    { MOD, 'n',       { scrollback,     { "1"  } } },
};

static const ColorRule colorrules[] = {
    /* title attrs     fgcolor      bgcolor */
};

/* possible values for the mouse buttons are listed below:
 *
 * BUTTON1_PRESSED          mouse button 1 down
 * BUTTON1_RELEASED         mouse button 1 up
 * BUTTON1_CLICKED          mouse button 1 clicked
 * BUTTON1_DOUBLE_CLICKED   mouse button 1 double clicked
 * BUTTON1_TRIPLE_CLICKED   mouse button 1 triple clicked
 * BUTTON2_PRESSED          mouse button 2 down
 * BUTTON2_RELEASED         mouse button 2 up
 * BUTTON2_CLICKED          mouse button 2 clicked
 * BUTTON2_DOUBLE_CLICKED   mouse button 2 double clicked
 * BUTTON2_TRIPLE_CLICKED   mouse button 2 triple clicked
 * BUTTON3_PRESSED          mouse button 3 down
 * BUTTON3_RELEASED         mouse button 3 up
 * BUTTON3_CLICKED          mouse button 3 clicked
 * BUTTON3_DOUBLE_CLICKED   mouse button 3 double clicked
 * BUTTON3_TRIPLE_CLICKED   mouse button 3 triple clicked
 * BUTTON4_PRESSED          mouse button 4 down
 * BUTTON4_RELEASED         mouse button 4 up
 * BUTTON4_CLICKED          mouse button 4 clicked
 * BUTTON4_DOUBLE_CLICKED   mouse button 4 double clicked
 * BUTTON4_TRIPLE_CLICKED   mouse button 4 triple clicked
 * BUTTON_SHIFT             shift was down during button state change
 * BUTTON_CTRL              control was down during button state change
 * BUTTON_ALT               alt was down during button state change
 * ALL_MOUSE_EVENTS         report all button state changes
 * REPORT_MOUSE_POSITION    report mouse movement
 */

#ifdef NCURSES_MOUSE_VERSION
# define CONFIG_MOUSE /* compile in mouse support if we build against ncurses */
#endif

#define ENABLE_MOUSE false /* whether to enable mouse events by default */

#ifdef CONFIG_MOUSE
Button buttons[] = {
    { BUTTON1_CLICKED,        { mouse_focus,      { NULL  } } },
    { BUTTON1_DOUBLE_CLICKED, { mouse_fullscreen, { "[ ]" } } },
    { BUTTON2_CLICKED,        { mouse_zoom,       { NULL  } } },
    { BUTTON3_CLICKED,        { mouse_minimize,   { NULL  } } },
};
#endif /* CONFIG_MOUSE */

Cmd commands[] = {
    { "create", { create,    { NULL } } },
};

/* gets executed when dvtm is started */
Action actions[] = {
    { create, { NULL } },
};

Edit:
There's also dvtm-mod which I used to run in the past, but I I think much of it has already been incorporated into standard dvtm via patches; http://waxandwane.org/dvtm.html

Last edited by gutterslob (2012-03-30 15:26:05)


Point & Squirt

Offline

#538 2012-03-30 15:28:57

2ManyDogs
dv#!
From: elsewhere
Registered: 2011-11-22
Posts: 1,346

Re: 30 Window Managers in 30 days

gutterslob wrote:
2ManyDogs wrote:

The default color for highlighted windows (blue) is hard to see.

Like dwm, you can create a custom config.h and recompile to change colours or keybindings

Thanks gs. I knew someone would catch that -- I guess I'm not as careful as I could be as I get close to the end of the series...

I should have said "...is hard to see, and I'm too lazy to change the config file and rebuild." smile


Be eggsalad to each other.

Offline

#539 2012-03-31 12:32:59

2ManyDogs
dv#!
From: elsewhere
Registered: 2011-11-22
Posts: 1,346

Re: 30 Window Managers in 30 days

Day 27. Today we are going to look at two more stackers. These will be shorter reviews, as these two window managers are based on some we've already looked at, but they are different enough that I thought they deserved short reviews. I'll try to just highlight the differences so you can decide if you'd like to try them for yourself.

Sapphire

First up is sapphire. This one is in the repos, and it creates its own .desktop file. You don't absolutely need xbindkeys, but it's still useful if you have it. When you start sapphire and start some apps, it looks like this:

2012_03_30_053805_1280x1024_scrot.jpg

If you're thinking that it looks a little like aewm, you're right. It was based on aewm, but right away we see some big differences. It's got a panel at the bottom, and if we right click the desktop, we get a menu. By default, it's the auto-generated Debian menu with some extra stuff (themes, restart, exit) added to it:

2012_03_30_053855_1280x1024_scrot.jpg

Sapphire works better with the mouse than aewm. Left click and drag on a window title bar moves the window. Left-click and drag on the little box at the lower-right corner of the window resizes it. Middle click on the title bar shades and unshades the window. Windows have close, shade, minimize and maximize buttons.

Middle-click on the root window shows an "icon" menu listing all minimized (hidden) windows. This menu allows you to select minimized windows and return them to their original size:

2012_03_30_054222_1280x1024_scrot.jpg

The root menu and icon menu menu can also be accessed by left-click on the arrow at the far left side of the panel.

Mouse focus follows the pointer but focused windows are not automatically raised to the top of the stack. Windows can be raised by left-click on their titlebar or by using the up arrow directly to the right of the menu button on the panel. The down button on the panel lowers the window currently at the top of the stack. These two buttons can be used to cycle through all the visible windows.

Sapphire does not support multiple workspaces. It does have five built-in themes; the definitions for these themes are contained in files at /usr/share/sapphire/themes. Menu definition files are at /usr/share/sapphire/menu. If you create a ~/.sapphire folder, sapphire will place a small config file (called wmconf) in this folder when it starts. This file controls whether the panel is visible, its position on the screen, the current theme, and the clock format.

Sapphire works with conky, but does not work with any of the panels I tried (including aepanel). Here's what it looked like after I added a background, conky, and edited the menu:

2012_03_30_085559_1280x1024_scrot.jpg

What I Liked About It

It's like a friendlier version of aewm. It works well with a normal mouse. It works with xbindkeys and dmenu, and it has a right-click desktop menu. It has themes and its default theme is not ugly.

What I Didn't Like About It

It really doesn't have any keyboard control. I would like at least to be able to use alt+tab to cycle through the visible windows.

Links

"man sapphire"
(if you find any more docs for this one please let me know)


CWM

Next is cwm, or calmwm. From wkipedia:

cwm is generally positively received in software minimalist communities and is totally ignored by most other computer users.

Note: this review is of a version of cwm before it was incorporated into OpenBSD and extensively re-written. The BSD version has several new features not found in the version I review here.

Cwm is not in the repos, but it's not hard to build. You will want to read the man page and have xbindkeys running for this one (although xbindkeys is not absolutely necessary). You will also need to create a .desktop file for it. Start it up and use the built-in sequence ctrl+alt+enter to start a terminal, and it looks like this:

2012_03_30_063224_1280x1024_scrot.jpg

With a few more windows running:

2012_03_29_103006_1280x1024_scrot.jpg

It looks like sithwm and evilwm because it was based on evilwm. Windows can be moved and resized with the mouse: alt+left-click anywhere in a window raises it to the top of the stack, alt+left-click and drag moves the window. Alt+right-click anywhere lowers the window. Alt+middle-click and drag resizes the window. This did not work well with my wireless mouse, so I found where this was coded in the source and changed it so alt+right-click and drag resizes the window and alt+middle-click lowers it.

Windows can also be raised and lowered with the alt+up and alt+down arrow keys. Alt+tab cycles through the visible windows. Alt+enter minimizes (hides) the active window, ctrl+alt+f toggles the window to full screen and back, and ctrl+alt+= maximizes the window vertically. There is no maximize horizontally sequence, and there are no key sequences for moving windows.

Focus follows the mouse pointer, but focused windows are not automatically raised to the top of the stack. Cwm does not support multiple desktops. Instead, it allows you to assign windows to groups, and then show or hide an entire group of windows.

Cwm also has menus. If there are hidden windows, left-click on the root window shows a menu containing all the hidden windows and allows you to select and restore one:

2012_03_29_103330_1280x1024_scrot.jpg

Alt+/ starts a "search for window" menu showing all the currently active windows and their status:

2012_03_30_080051_1280x1024_scrot.jpg

You can refine the window search by typing part of the window name in the search dialog. Similarly, ctrl+/ starts a "search for application" menu that allows you to search for running applications by name.

Finally, cwm has a right-click root window application menu. This menu is built from the contents of the ~/.calwm folder. Cwm will attempt to run anything in the folder from the menu, so the folder can contain binaries, symlinks, or scripts. Cwm does not create submenus, even if the .calmwm folder contains subfolders. Here is the right-click menu and the folder it was built from:

2012_03_30_083147_1280x1024_scrot.jpg

Cwm also has two command-line switches; -s causes cwm to place all newly created windows in the same group, and -f allows you to specify the font used for the menus (I changed the menu font before I took the screen shot of the root menu). Cwm works with conky, but does not work with any of the panels I tried.

One more screen shot:

2012_03_30_080325_1280x1024_scrot.jpg

What I Like About It

It has menus. It doesn't have titlebars or buttons. I got it to resize windows with right-click and drag. Alt+tab works.

What I Didn't Like About It

I'd like to have more keyboard control for moving windows (the BSD version of cwm has more keyboard options and an "ssh to" dialog box, along with a run-time key-binding config file, but the version I built did not have these features). I wish its right-click menu could do submenus.

Links

"man cwm"
cwm home page
cwm hacks
cwm on wikipedia
cwm in OpenBSD journal
OpenBSD fork of cwm in the Arch AUR

tomorrow: echinus and larswm
back to the top

Last edited by 2ManyDogs (2012-04-01 13:34:30)


Be eggsalad to each other.

Offline

#540 2012-03-31 19:06:49

m5
#! CrunchBanger
From: 200 years ago.
Registered: 2011-12-08
Posts: 221

Re: 30 Window Managers in 30 days

Nice review,
Lately I started using tilling WM,interesting stuff there,
but I think I`m going to settle with one of minimal stackers,
Do you know where can I find latest cwm soure code?

Last edited by m5 (2012-03-31 19:07:55)


Keep digging.
Linux beginner.

Offline

#541 2012-03-31 21:06:27

2ManyDogs
dv#!
From: elsewhere
Registered: 2011-11-22
Posts: 1,346

Re: 30 Window Managers in 30 days

m5 wrote:

Do you know where can I find latest cwm soure code?

I think about the best you're going to be able to do for cwm after the BSD fork is either use OpenBSD or try the Arch AUR version (link at the end of the post).

You could also try sithwm or evilwm -- code for those is readily available.

Last edited by 2ManyDogs (2012-03-31 21:12:23)


Be eggsalad to each other.

Offline

#542 2012-04-01 03:59:04

PackRat
#! Die Hard
From: USA
Registered: 2011-03-03
Posts: 1,291

Re: 30 Window Managers in 30 days

m5 wrote:

Nice review,
Lately I started using tilling WM,interesting stuff there,
but I think I`m going to settle with one of minimal stackers,
Do you know where can I find latest cwm soure code?

This works on Debian testing:

http://tamentis.com/hacks/cwm/

aac8lIdQ.jpg

Good stuff 2ManyDogs.

Last edited by PackRat (2012-04-01 10:15:16)


"It does not require many words to speak the truth." - Chief Joseph, Nez Perce tribe

Offline

#543 2012-04-01 10:01:44

m5
#! CrunchBanger
From: 200 years ago.
Registered: 2011-12-08
Posts: 221

Re: 30 Window Managers in 30 days

^ The latest source code there is dated 2005,  sad
it seems it hasn`t been developed for linux after that.
Arch one is updated though.


Keep digging.
Linux beginner.

Offline

#544 2012-04-01 10:16:38

PackRat
#! Die Hard
From: USA
Registered: 2011-03-03
Posts: 1,291

Re: 30 Window Managers in 30 days

@m5 -

Fixed the link; now goes to the version I was using with the OpenBSD features. It compiles, but still 2010 is latest. There is a README file that has the information for getting sources using cvs; I've never attempted it.

Last edited by PackRat (2012-04-01 10:33:39)


"It does not require many words to speak the truth." - Chief Joseph, Nez Perce tribe

Offline

#545 2012-04-01 13:22:23

2ManyDogs
dv#!
From: elsewhere
Registered: 2011-11-22
Posts: 1,346

Re: 30 Window Managers in 30 days

^ thanks PackRat


Be eggsalad to each other.

Offline

#546 2012-04-01 13:23:45

2ManyDogs
dv#!
From: elsewhere
Registered: 2011-11-22
Posts: 1,346

Re: 30 Window Managers in 30 days

Day 28. Two more short reviews today, other window managers that are interesting but don't really warrant an entire day's review space.

Echinus

First up is echinus. Echinus is basically dwm with a run-time config file, and a few subtle differences. The man page says:

echinus is a lightweight window manager for X based on dwm's source code.

Echinus is not in the repos, so you have to build it and create a .desktop file for it. You will want to take a look at the man page before you start it, and might want to have xbindkeys running, although by default alt+t starts a terminal and you can work from there.

Echinus can tile windows with a bottom stack:

2012_03_30_120148_1280x1024_scrot.jpg

A side stack:

2012_03_30_120221_1280x1024_scrot.jpg

And it can float windows (notice that floating windows have titlebars, but no buttons):

2012_03_30_120326_1280x1024_scrot.jpg

Windows can be floated on top of tiles :

2012_03_31_072655_1280x1024_scrot.jpg

Windows can also be maximized. Echinus supports multiple desktops (6 by default) and each desktop can have a separate layout.

The config file (echinusrc) is pretty straightforward (you can see parts of it in the screenshots) and it allows you to change the bound keys and other aspects of the window manager's behavior. The source comes with a copy of the default echinusrc so you can just copy it to ~/.echinus/echinusrc and modify it. There are bound keys for all the usual things, including moving focus and resizing windows. The echinusrc file also specifies the colors for most user interface elements. The man page is very complete and if you've used any tiling window manager before you will not have any problems with echinus.

One big difference is that echinus can use panels (lxpanel, tint2, etc). If you start a panel, echinus makes room for it on the screen, and communicates with the panel so that the panel's pager and launcher work. Here's echinus with lxpanel running:

2012_03_29_171957_1280x1024_scrot.jpg

What I Like About It

It has a runtime config file. It can work with panels.

What I Didn't Like About It

It doesn't have a status bar. New windows are placed in the master area in tiling mode, and I could not figure out how to change this (I prefer to have new windows start in the stack).

Links

"man echinus"
echinus home page
echinus in the Arch wiki


Larswm

Next is larswm. This one tiles and stacks, and it has some very interesting differences. It's in the repos, so apt-get install works, and it creates its own .desktop file. You will definitely want to read the man page for this one before you start it.

Larswm has four virtual desktops by default, and each has a floating layer and a tiled layer. Unlike most tiling window managers where you must create "quirks" for apps you do not want tiled, larswm only tiles apps you specifiy, and it floats everything else. Larswm also has unique methods for moving and resizing floating windows with the mouse. With a window active, you hold down shift+alt with the mouse pointer on the status bar (not on the window) -- the upper left corner of the window turns into an arrow and you can drag the window around the screen by moving the mouse. To resize, you hold down ctrl+shift+alt and with the mouse pointer on the status bar (again, not on the window), the lower right corner of the window changes to an arrow, and the window may be resized by moving the mouse.

There are a lot of interesting bound keys, which are very well documented in the man page (you can see parts of it in the screen shots). I won't detail many of them here, but you can move and resize windows, and "set aside" windows (move them almost off the screen to make room for others) with a few keystrokes.

Here is larswm running with a bunch of floating windows:

2012_03_31_064002_1280x1024_scrot.jpg

And with the same windows after I "set aside" everything except the large central window:

2012_03_31_064136_1280x1024_scrot.jpg

The set aside windows can be returned to their original position with a key sequence or by left mouse click. You can see that larswm has a status bar that tells you what desktop is currently active and other information.

I mentioned that larswm has a floating layer and a tiled layer on each desktop (larswm calls each layer a "subdesktop"). The tiled layer has a left-side master area and a right-side stack. If the tiled layer is full, you may not be able to see the floating layer. Ctrl+shift+backspace switches the view between the floating and tiled layer. Shift+alt+space moves the active window from one layer to the other.

Here is larswm after I told it to tile sakura and viewnior, but to allow luakit to float, with the floating layer active:

2012_03_31_064610_1280x1024_scrot.jpg

And here I have switched the view to the tiled layer:

2012_03_31_064627_1280x1024_scrot.jpg

Another interesting feature of the tiled layer is that left-click to activate a window in the stack makes it move immediately to the master area. Ctrl+left click activates the stack window but makes the window stay where it is. This behavior can be changed in the run-time config file.

Larswm also has menus, accessed with alt+return and alt+escape and built from lists in the config file. Alt+return activates a "start" menu:

2012_03_31_073749_1280x1024_scrot.jpg

Alt+escape activates a "larswm" menu:

2012_03_31_073720_1280x1024_scrot.jpg

Many of the commands and behaviors are controlled by a run-time config file, called ~/.larswmrc. Even this file has a unique format, but it is also well documented in the larswm man page. You can see some of it in the menu screen shots.

There are too many other unique features of this window manager to explain all of them, and honestly I don't know how many of you will even want to try it (if you do, read the man page and check out "octo's guide to larswm" in the links below). Larswm is interesting, if only as an example of a completely different approach to tiling and stacking, not to mention its extensive list of keyboard commands and unique mouse behavior.

What I Like About It

It's different. It can be almost completely controlled from the keyboard. The man page is excellent.

What I Didn't Like About It

It's a little too different. The list of key commands is long and complex.

Links

"man larswm"
larswm home page
octo's guide to larswm

tomorrow: brief looks at xmonad and awesome
back to the top

Last edited by 2ManyDogs (2012-04-02 16:51:00)


Be eggsalad to each other.

Offline

#547 2012-04-01 23:40:51

2ManyDogs
dv#!
From: elsewhere
Registered: 2011-11-22
Posts: 1,346

Re: 30 Window Managers in 30 days

Anybody used either of these? ...


Be eggsalad to each other.

Offline

#548 2012-04-02 00:07:51

wuxmedia
wookiee madclaw
From: Back in Blighty
Registered: 2012-03-09
Posts: 1,472
Website

Re: 30 Window Managers in 30 days

you are blazing a trail here i haven't yet the courage to change from openbox, nor yet tackle your immense efforts here.
thanks good work fella

Offline

#549 2012-04-02 00:33:29

ivanovnegro
Ivan #000000
From: unstable madness
Registered: 2011-06-02
Posts: 5,426

Re: 30 Window Managers in 30 days

@TooMany: Nope but AFAIK @Slobbers is the one that used also CWM.

Offline

Help fund CrunchBang, donate to the project!

#550 2012-04-02 00:52:05

gensym
#! Junkie
Registered: 2011-10-17
Posts: 447

Re: 30 Window Managers in 30 days

I once tried using larswm for a while... it came too alien to me.

Last edited by gensym (2012-04-02 00:52:26)


'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind.', {Eric}

Offline

Board footer

Powered by FluxBB

Copyright © 2012 CrunchBang Linux.
Proudly powered by Debian. Hosted by Linode.
Debian is a registered trademark of Software in the Public Interest, Inc.

Debian Logo