This is an old revision of the document!
Table of Contents
Fluxbox
Fluxbox is a very light window manager, highly customizable (look, shortcuts, etc).
Control your sound card with the keyboard and xosd
amixer
enables you to control your sound card, and the xosd
package with osd_cat
command enables you to print some stuff to the screen, even with a bar graph for the volume :
# mute Master and PCM Mod4 m :MacroCmd {ExecCommand amixer sset Master toggle} {ExecCommand amixer sset PCM toggle} {Exec sleep .1s} {Exec echo "Sound `amixer sget Master volume | grep Left: | cut -f 8 -d " "`" | osd_cat -d 1 -p middle -A center -s 1 -u blue -O5} Mod4 Shift m :MacroCmd {ExecCommand amixer sset PCM toggle} {Exec sleep .1s} {Exec echo "Sound PCM `amixer sget Master volume | grep Left: | cut -f 8 -d " "`" | osd_cat -d 1 -p middle -A center -s 1 -u blue -O5} #volume Master Mod4 o :MacroCmd {ExecCommand amixer sset Master 1+} {Exec sleep .1s} {Exec osd_cat -d 1 -p middle -A center -s 1 -u blue -O 6 -b percentage -P `amixer sget Master volume | grep Left: | cut -f 7 -d " " | cut -c 2-4` -T "Master: `amixer sget Master volume | grep Left: | cut -c 24-50`"} Mod4 i :MacroCmd {ExecCommand amixer sset Master 1-} {Exec sleep .1s} {Exec osd_cat -d 1 -p middle -A center -s 1 -u blue -O 6 -b percentage -P `amixer sget Master volume | grep Left: | cut -f 7 -d " " | cut -c 2-4` -T "Master: `amixer sget Master volume | grep Left: | cut -c 24-50`"} #volume PCM Mod4 Shift o :MacroCmd {ExecCommand amixer sset PCM 1+} {Exec sleep .1s} {Exec osd_cat -d 1 -p middle -A center -s 1 -u blue -O 6 -b percentage -P `amixer sget PCM volume | grep Left: | cut -f 7 -d " " | cut -c 2-4` -T "PCM: `amixer sget PCM volume | grep Left: | cut -c 24-50`"} Mod4 Shift i :MacroCmd {ExecCommand amixer sset PCM 1-} {Exec sleep .1s} {Exec osd_cat -d 1 -p middle -A center -s 1 -u blue -O 6 -b percentage -P `amixer sget PCM volume | grep Left: | cut -f 7 -d " " | cut -c 2-4` -T "PCM: `amixer sget PCM volume | grep Left: | cut -c 24-50`"} Mod4 p :ExecCommand xmms -t
The sleep
command is just used to print the new value after the change. cut
is used to extract the value of the volume for the bar graph.
Make double-click titlebar maximize the window
Instead of shading the window.
For that, you have to modify the source code of fluxbox. Of course, it is easier if you use a source distribution such as Gentoo (here is explained how to emerge a package and modify sources).
But you just have to modify one line in Window.cc
:
Window.cc:4084 - frame().setOnClickTitlebar(shade_cmd, 1, true); // doubleclick with button 1 + frame().setOnClickTitlebar(maximize_cmd, 1, true); // doubleclick with button 1
Make Meta-Tab switch between all windows
Instead of only switching between visible windows (not minimized).
One more time, you have to modify the source code, this time there are two lines :
FocusControl.cc:71 - (opts & FocusControl::CYCLESKIPSHADED) != 0 && win->isShaded() || - win->isFocusHidden() + (opts & FocusControl::CYCLESKIPSHADED) != 0 && win->isShaded() //|| + //win->isFocusHidden() FocusControl.cc:122 - if (fbwin && !fbwin->isIconic() && + if (fbwin && /*!fbwin->isIconic() &&*/
Patch for double-click maximize and meta-tab
I've written to make the modifications for the two previous tips automatic. To apply the patch, copy it in the parent of the src
folder, and enter :
patch -p0 < fluxbox.maximize.patch
The patch :
diff -r -U 3 src.orig/FocusControl.cc src/FocusControl.cc --- src.orig/FocusControl.cc 2006-07-08 01:00:05.000000000 +0200 +++ src/FocusControl.cc 2006-07-08 00:58:21.000000000 +0200 @@ -71,9 +71,9 @@ // skip if not active client (i.e. only visit each fbwin once) (opts & FocusControl::CYCLEGROUPS) != 0 && win->winClient().window() != winclient.window() || // skip if shaded - (opts & FocusControl::CYCLESKIPSHADED) != 0 && win->isShaded() || + (opts & FocusControl::CYCLESKIPSHADED) != 0 && win->isShaded() //|| // skip if hidden - win->isFocusHidden() + // win->isFocusHidden() ); } @@ -122,7 +122,7 @@ break; FluxboxWindow *fbwin = (*it)->fbwindow(); - if (fbwin && !fbwin->isIconic() && + if (fbwin && /*!fbwin->isIconic() &&*/ (fbwin->isStuck() || fbwin->workspaceNumber() == m_screen.currentWorkspaceID())) { // either on this workspace, or stuck diff -r -U 3 src.orig/Window.cc src/Window.cc --- src.orig/Window.cc 2006-07-08 01:00:06.000000000 +0200 +++ src/Window.cc 2006-07-08 00:58:21.000000000 +0200 @@ -4084,7 +4084,7 @@ // setup titlebar frame().setOnClickTitlebar(raise_and_focus_cmd, 1, false, true); // on press with button 1 - frame().setOnClickTitlebar(shade_cmd, 1, true); // doubleclick with button 1 + frame().setOnClickTitlebar(maximize_cmd, 1, true); // doubleclick with button 1 frame().setOnClickTitlebar(show_menu_cmd, 3); // on release with button 3 frame().setOnClickTitlebar(lower_cmd, 2); // on release with button 2