Differences

This shows you the differences between two versions of the page.

Link to this comparison view

linux:fluxbox [2008/04/09 05:09]
127.0.0.1 external edit
linux:fluxbox [2013/09/19 16:40]
Line 1: Line 1:
-====== Fluxbox ====== 
- 
-Fluxbox is a very light window manager, highly customizable (look, shortcuts, etc). 
- 
-===== Links ===== 
- 
-Installation guide for Gentoo :\\ 
-[EN] [[http://www.gentoo.org/doc/en/fluxbox-config.xml]]\\ 
-[FR] [[http://www.gentoo.org/doc/fr/fluxbox-config.xml]] 
- 
-===== 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 : 
- 
-<code> 
-# 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 
-</code> 
- 
-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. 
- 
-===== Configure TwinView/Xinerama/DualScreen ===== 
- 
-First, emerge fluxbox with the ''xinerama''  USE flag (and you should compile everything with this flag, so set it in ''/etc/make.conf''). 
- 
-It will work fine, except that your toolbar could be spread on both screens, then change in ''~/.fluxbox/init'' : 
-<code> 
-screen0.toolbar.onhead : 2 
-</code> 
- 
-If you want to have different settings for the two screens, you can copy all ''screen0'' properties to have ''screen1'' properties too. 
- 
- 
- 
-===== 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 ([[gentoo-portage#emerge_step-by-step_for_modifying_source|here]] is explained how to emerge a package and modify sources). 
- 
-But you just have to modify two lines in ''Window.cc'' : 
-<code C++> 
-Window.cc:3954 
-+    CommandRef maximize_cmd(new WindowCmd(*this, &FluxboxWindow::maximizeFull)); 
-     CommandRef shade_cmd(new WindowCmd(*this, &FluxboxWindow::shade)); 
-Window.cc:4021 
--    frame().setOnClickTitlebar(shade_cmd, 1, true); // doubleclick with button 1 
-+    frame().setOnClickTitlebar(maximize_cmd, 1, true); // doubleclick with button 1 
-</code> 
- 
-===== Make Meta-Tab switch between all windows ===== 
- 
-NOTE: This is fixed in Fluxbox 1.0, this tip is useless now. 
- 
-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 : 
-<code cpp> 
-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() &&*/ 
-</code> 
- 
- 
- 
-===== Reduce flickering ===== 
- 
-... during workspace switch. 
- 
-Fluxbox deals with workspaces in a quite simple manner: when switching workspace, it hides all windows of the old workspace, and then draw all windows of the new workspace. 
- 
-Most of the time when we switch workspace, we can see the background image, and then all new workspace windows displayed one after the other, what is very nasty. 
- 
-First thing, show new workspace's windows before hiding old workspace's ones: 
-<code cpp> 
-Screen.cc:1208 
--    currentWorkspace()->hideAll(false); 
-Screen.cc:1223 
-     currentWorkspace()->showAll(); 
-+    wksp->hideAll(false); 
-</code> 
- 
-Second thing, draw windows in their focusing order, in order to draw the front window first: 
-<code cpp> 
- void Workspace::showAll() { 
--    Windows::iterator it = m_windowlist.begin(); 
--    Windows::iterator it_end = m_windowlist.end(); 
--    for (; it != it_end; ++it) 
--        (*it)->unwithdraw(); 
- 
-+    FocusControl::FocusedWindows::iterator it = m_screen.focusControl().focusedOrderList().begin(); 
-+    FocusControl::FocusedWindows::iterator it_end = m_screen.focusControl().focusedOrderList().end(); 
-+    int workspace = m_screen.currentWorkspaceID(); 
-+  
-+    for (; it != it_end; ++it) { 
-+       if ((*it)->fbwindow() && !(*it)->fbwindow()->isIconic() && 
-+            (int)(*it)->fbwindow()->workspaceNumber() == workspace) 
-+            (*it)->fbwindow()->unwithdraw(); 
-+    } 
- } 
-</code> 
- 
-Third thing, only redraw what is necessary (seems to be faster, but I'm not completely sure, and I hope it doesn't break anything) by replacing the deiconify function by a unwithdraw function which does only a fraction of what deiconify does: 
- 
-<code cpp> 
-Workspace.cc:228 
--        (*it)->deiconify(false, false); 
-+        (*it)->unwithdraw(); 
-Window.hh:201 
-     void deiconify(bool reassoc = true, bool do_raise = true); 
-+    void unwithdraw(); 
-Window.cc:1522  
-+void FluxboxWindow::unwithdraw() { 
-+    if (numClients() == 0) 
-+        return; 
-+ 
-+    if (oplock) return; 
-+    oplock = true; 
-+ 
-+    bool was_iconic = iconic; 
-+ 
-+    m_blackbox_attrib.flags &= ~ATTRIB_HIDDEN; 
-+ 
-+    setState(NormalState, false); 
-+ 
-+    show(); 
-+ 
-+    oplock = false; 
-+} 
-</code> 
- 
-I have also tried to draw and clear windows in their general order of focusing, in replacement of the 2 first enhancements, but surprisingly it's less convincing: 
-<code cpp> 
-Screen.cc:1211 
--    currentWorkspace()->hideAll(false); 
- 
-+    int workspace = currentWorkspaceID(); 
- 
-     // set new workspace 
-     m_current_workspace = getWorkspace(id); 
-     
-+    FocusControl::FocusedWindows::iterator it2 = focusControl().focusedOrderList().begin(); 
-+    FocusControl::FocusedWindows::iterator it2_end = focusControl().focusedOrderList().end(); 
-+  
-+    for (; it2 != it2_end; ++it2) { 
-+        if ((*it2)->fbwindow() && !(*it2)->fbwindow()->isIconic() && !(*it2)->fbwindow()->isStuck()) 
-+ { 
-+            if ((int)(*it2)->fbwindow()->workspaceNumber() == id) 
-+         (*it2)->fbwindow()->unwithdraw();  
-+            if ((int)(*it2)->fbwindow()->workspaceNumber() == workspace) 
-+         (*it2)->fbwindow()->withdraw(false);  
-+ } 
-+    } 
- 
--    currentWorkspace()->showAll(win->fbwindow()); 
-</code> 
- 
-===== Full patch for previous tips ===== 
- 
-ie double click maximizes and reducing flickering. 
- 
-To apply the {{fluxbox.patch|patch}}, copy it in the parent of the ''src'' folder, and enter : 
-<code>patch -p0 < fluxbox.patch</code> 
- 
  
linux/fluxbox.txt ยท Last modified: 2013/09/19 16:40 (external edit)
CC Attribution-Share Alike 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0