Difference between revisions of "Monsterwm"

From ArchWiki
Jump to navigation Jump to search
m (improve link)
(redirect old AUR WM, see Talk:Window_manager)
(29 intermediate revisions by 9 users not shown)
Line 1: Line 1:
[[Category:Dynamic WMs]]
#REDIRECT: [[Window_manager]]
[https://github.com/c00kiemon5ter/monsterwm Monsterwm] is a minimal, lightweight, ''tiny but monsterous'' dynamic tiling window manager. It will try to stay as small as possible. Currently under 750 lines with the config file included. It provides a set of four different layout modes (vertical stack, bottom stack, grid and monocle/fullscreen), and has floating mode support. Each virtual desktop has its own properties, unaffected by other desktops' settings.
Monsterwm is writen with '''{{ic|Xlib}}''' but there is also an '''{{ic|XCB}}''' fork available. You can find it in the [[#Resources|Resources]]
== Installation ==
=== Method 1 ===
Using AUR
Download the {{AUR|monsterwm-git}} package from the [[Arch User Repository|AUR]]. Then, as a non-root user, run:
$ makepkg -i
while in the directory of the saved PKGBUILD. All the files will be retrieved, the package will be built and installed.
=== Method 2 ===
Using git (recommended by monsterwm's author).
Clone the [https://github.com/c00kiemon5ter/monsterwm official github repository] from github.
$ git clone git://github.com/c00kiemon5ter/monsterwm.git
$ cd monsterwm
To build monsterwm, run the following as a non-root user:
$ make
To install monsterwm, run the following as root:
# make clean install
Before you build monsterwm, you may want to skip to the [[#Configuration|Configuration]] section and [[#Customization|Customization]] to change the default configuration.
== Configuration ==
Monsterwm uses it's config.h file for configuration. By default, some hotkeys are already set.
'''Note''': the default MOD1 key is the Alt key.
<li>MOD + h (decrease the size of a current window)</li>
<li>MOD + l (increase the size of a current window)</li>
<li>MOD + Shift + c (close current window)</li>
<li>MOD + Tab (move to last desktop)</li>
<li>MOD + k (change to previous window)</li>
<li>MOD + j (change to next window)</li>
<li>MOD + Shift + k (move current window up)</li>
<li>MOD + Shift + j (move current window down)</li>
<li>MOD + Enter (change master to current window)</li>
<li>MOD + t (switch to tile mode)</li>
<li>MOD + b (switch to bottomstack mode)</li>
<li>MOD + g (switch to grid mode)</li>
<li>MOD + m (switch to monocle mode)</li>
<li>MOD4 + v (open dmenu - requires dmenu)</li>
<li>MOD + Shift + Return (open xterm)</li>
<li>MOD + Left (previous desktop)</li>
<li>MOD + Right (next desktop)</li>
<li>MOD + F1-4 (change to desktop #)</li>
<li>MOD + Control + q (quit monsterwm with exit value 1)</li>
<li>MOD + Control + r (quit monsterwm with exit value 0)</li>
you can find more information in the man page
$ man monsterwm
==Floating Mode==
In floating mode one can freely move and resize windows in the screen space.
Changing desktops, adding or removing floating windows, does not affect the floating status of the windows.
Windows will revert to their tiling mode position once the user re-selects the current tiling mode.
Note, that one cannot "select" the floating mode,
but it will be enabled for any window if one tries to move or resize that window with the mouse.
The window is then marked, as being in floating mode.
The user can define an empty space on the bottom or top of the screen, to be used by a panel.
The panel is toggleable, but will be visible if no windows are on the screen.
Monsterwm does not provide a panel and/or statusbar itself.
Instead it adheres to the UNIX philosophy
and outputs information about the existing desktops
suchs as the number of windows and the tiling mode/layout of each desktop,
the current desktop and urgent hints whenever needed.
The user can use whatever tool or panel suits him best
({{ic|dzen2}}, {{ic|conky}}, {{ic|[https://github.com/moetunes/Some_sorta_bar some-sorta-bar]}}, w/e),
to process and display that information.
You can find an example of how to achieve this [https://gist.github.com/1905427 here].
You can actually parse that information with any language you want,
build anything you want,
and display the information as you'd like.
Do not be limited to that example.
There are several patches that extend monsterwm's functionality.
* fib - adds fibonacci layout
* monocleborders - adds borders to the monocle layout
* showhide - adds a function to show and hide all windows on all desktops
* uselessgaps - adds gaps around every window on screen
* warpcursor - cursors follows and is placed in the center of the current window
* bloat : bloat is merge of all patches with the current master, just for fun
* core  : core is is a very minimal subset of monsterwm, it's essentially its core, fully usuable at 610 loc
To install monsterwm with a patch simply change the {{bc|1=_gitbranch=}} line on the PKGBUILD to the name of the patch.
If you installed monsterwm with [[#Method_2|method 2 - using git]], you can change to the desired branch with
$ git checkout <branch>
and then continue normally. For example to build monsterwm with the fibonacci layout one would do:
$ git checkout fib
$ make
# make clean install
That way you can also combine patches. To do that one would {{ic|merge}} another branch to the current one. For example to build monsterwm with uselessgaps, warpcursor and showhide, one would do:
$ git config user.email <mailaddress>
$ git config user.name <name>
$ git checkout uselessgaps
$ git checkout warpcursor
$ git checkout showhide
$ git checkout master
$ git merge -m merge uselessgaps warpcursor showhide
$ make
# make install
== Customization ==
=== Application Rules ===
One can define rules for a specific application, which will be applied once the application spawns.
A rule is composed of four parts.
{ "MPlayer",    3,    True,  False },
* the class or instance name of the application
* the desktop in which the application should appear - index starts from zero/0
* whether that desktop should be focused when the application is started
* whether the application should start in floating mode
So the above rule, would place [[MPlayer|this]] to desktop {{keypress|3}} and change from the current desktop to that desktop, because {{ic|follow}} is {{ic|True}}. MPlayer will be tiled as every other window.
To get the application class or instance name you can use {{ic|xprop | grep "WM_CLASS"}}.
If the desktop is set to a 'negative' number then the window spawns in the current desktop.
If we change the above rule to this one:
{ "MPlayer",    -1,    True,  True },
then MPlayer will be spawned in the current desktop, floating.
=== Add Custom Keybinds ===
To add custom keybindings, you must edit config.h and recompile monsterwm.
That's why it is important to set them up on the initial installation to avoid having to do this again.
I'll show you a scenario in which you would need to add a keybinding to open the thunar filemanager with {{keypress|MOD+t}}.
First, you must add a line such as the following underneath the already-defined {{ic|const char*}}'s
(Note: You can name it whatever you want. In this case, I named it {{ic|thunarcmd}}):
const char* thunarcmd[] = {"thunar", NULL&#125;&#125;;
{{ic|thunarcmd}} is just a title for the command you want to construct and run.
Inside the curly brackets {{ic|{}} and {{ic|}}} is where you define the command to be executed.
Each command fragment that is seperated by a space is it's own value.
What I mean by that is that the command sequence {{ic|ncmpcpp next}}
would be entered as {{ic|{"ncmpcpp", "next", NULL&#125;&#125;}.
The ''{{ic|NULL}}'' value ''must'' be included at the end of each hotkey.
To actually register the hotkey with the window manager, you must look below that at the struct named ''{{ic|keys[]''.
This is where monsterwm stores all of it's keybindings.
An example entry for the {{ic|thunarcmd}} we made above would be:
{ MOD,    XK_t,    spawn,    {.com &#61; thunarcmd&#125;&#125;,
* The first element specifies the first sequence that is pressed
** {{keypress|MOD}} for the modkey only,
** {{keypress|MOD&#124;SHIFT}} for the modkey and then the shift key,
** {{keypress|MOD&#124;CONTROL}} for the modkey and then the control key,
** {{keypress|0}} for no key at all.
You can also use {{keypress|WINKEY}} which is the {{keypress|super}} or ''windows'' key instead of MOD.
* The second element specifies the actual key that is pressed to differenciate it from other similar hotkeys.
In this case, we set it to {{keypress|t}},
which has {{ic|XK_}} in front of it because that's how Xorg reads key presses.
Just remember to include {{ic|XK_}} in front of it and you'll be fine.
Some examples of these include {{keypress|XK_a}} for the {{keypress|a key}},
{{keypress|XK_Space}} for the {{ic|space bar}},
and {{keypress|XK_1}} for the {{Keypress|1 key}}.
Note that these are case-sensitive, so {{keypress|XK_a}} is not the same as {{keypress|XK_A}}.
So for this example, the entire hotkey senquence that needs to be pressed is {{keypress|MOD+t}}.
* The third element just specifies the function {{ic|spawn}}, which has been written to be passed a command to execute.
Whenever you need to start an application or do anything that is not related to the internals of monsterwm {{ic|spawn}} will be used.
* The final element inside the brackets specifies which command that was previously defined will be run.
In our case, it is {{ic|thunarcmd[]}},
so we would do {{ic|{.com &#61; thunarcmd&#125;}}.
The {{ic|.com}} stands for command.
You can do the same with the {{ic|buttons[]}} struct.
The buttons struct, uses the ''mouse'' instead of the keyboard.
* Button1 is the left button
* Button2 is the middle click
* Button3 is the right button
After this, recompile, hope for no errors, and install.
==See also==
* [https://bbs.archlinux.org/viewtopic.php?id=132122 monsterwm thread on the forums]
* [https://github.com/c00kiemon5ter/monsterwm monsterwm repository on github]
* [https://github.com/Cloudef/monsterwm-xcb monsterwm-xcb repository on github]

Latest revision as of 18:48, 15 December 2015

Redirect to: