Snapwm has an emphasis on easy configurability and choice. It's primarily keyboard driven but has some mouse support also.

Snapwm has an emphasis on easy configurability and choice. It's primarily keyboard driven but has some mouse support also.

−

== '''Installation''' ==

+

== Installation ==

−

+

=== Using the AUR ===

=== Using the AUR ===

−

Download {{AUR|snapwm-git}} from the [[Arch User Repository|AUR]]. Then, as a non-root user, run:

+

[[pacman|Install]] {{AUR|snapwm-git}} from the [[AUR]].

−

$ makepkg -i

+

−

while in the saved PKGBUILD's directory. The files will be retrieved, built and installed.

+

The sample configuration files will be installed in {{ic|/usr/share/snapwm-git/}}. Create the directory {{ic|~/.config/snapwm/}}:

The sample configuration files will be installed in {{ic|/usr/share/snapwm-git/}}. Create the directory {{ic|~/.config/snapwm/}}:

−

$ mkdir -p ~/.config/snapwm/

+

$ mkdir -p ~/.config/snapwm

Copy the three sample files to {{ic|~/.config/snapwm/{rc.conf, key.conf, apps.conf} }} and edit to suit.

Copy the three sample files to {{ic|~/.config/snapwm/{rc.conf, key.conf, apps.conf} }} and edit to suit.

Line 20:

Line 17:

The latest version can be downloaded using [[Git]]. Initially, you can do:

The latest version can be downloaded using [[Git]]. Initially, you can do:

−

git clone https://github.com/moetunes/Nextwm

+

git clone https://github.com/moetunes/Nextwm

−

and then update with {{ic|git pull}}. See the [[Git]] wiki page or man git for more info.

+

and then update with {{ic|git pull}}.

{{Note|While the official name of the window manager and executable is snapwm, you will notice that in moetunes' GitHub, the directory is named Nextwm which may cause some confusion.}}

{{Note|While the official name of the window manager and executable is snapwm, you will notice that in moetunes' GitHub, the directory is named Nextwm which may cause some confusion.}}

Line 27:

Line 24:

Xlib is all that is required. To install it, do:

Xlib is all that is required. To install it, do:

−

$make

+

$ make

−

#make install

+

# make install

−

$make clean

+

$ make clean

+

+

=== Alternative method ===

−

=== Alternative Method ===

+

Instead of actually installing it system-wide as above, you can simply run make and then copy the executable to somewhere in your path, like {{ic|~/bin}} for example. You can then run it the same way ({{ic|exec snapwm}}) on a per user basis.

−

Instead of actually installing it system-wide as above, you can simply run make and then copy the executable to somewhere in your path, like {{ic|~/bin}} for example. You can then run it the same way(exec snapwm) on a per user basis.

+

=== Dmenu ===

=== Dmenu ===

−

Most users will want this. As the name implies, [http://tools.suckless.org/dmenu dmenu] is a menu that acts like an auto-complete for typing the name of binaries. It integrates well with tiling window managers like snapwm. See the [[dmenu]] wiki page or man dmenu for more info. To install it, do:

+

Most users will want this. As the name implies, [http://tools.suckless.org/dmenu dmenu] is a menu that acts like an auto-complete for typing the name of binaries. It integrates well with tiling window managers like snapwm. See the [[dmenu]] wiki page or man dmenu for more info.

−

pacman -S dmenu

+

−

The sample.rc.conf file comes with a command to start demenu_run, which will search $PATH for a matching executable as soon as you start typing.

The label is passed to a KEY with spawn as the function and the label as the variable

KEY takes the form of :

KEY takes the form of :

KEY<space><Modifier>;<key>;<function>;<variable>;

KEY<space><Modifier>;<key>;<function>;<variable>;

−

There are seven modifying keys available :

+

There are nine modifying keys available :

−

Alt CtrlAlt ShftAlt Super ShftSuper CtrlSuper ALTSuper

+

Alt CtrlAlt ShftAlt Super ShftSuper Control CtrlSuper ALTSuper NULL

An example for setting Alt+x to open xterm. The terminal command would be

An example for setting Alt+x to open xterm. The terminal command would be

Line 80:

Line 80:

To make the command and the keyboard shortcut.

To make the command and the keyboard shortcut.

−

CMD xtermcmd;xterm;-bg;black;-fg;white;NULL;

+

CMD xtermcmd;xterm;-bg;black;-fg;white;NULL;

−

KEY Alt;x;spawn;xtermcmd;

+

KEY Alt;x;spawn;xtermcmd;

−

===APPS.CONF===

+

=== apps.conf ===

−

There are two options DESKTOP and POSITION . Order isn't important.

+

There are two options DESKTOP and POSITION. Order isn't important.

DESKTOP is used to set the desktop that an app will open on and whether to change to that desktop when the app opens.

DESKTOP is used to set the desktop that an app will open on and whether to change to that desktop when the app opens.

Line 98:

Line 98:

POSITION<space><window class>;<x>;<y>;<width>;<height>;

POSITION<space><window class>;<x>;<y>;<width>;<height>;

−

+

== The Bar ==

−

== '''The Bar''' ==

+

Snapwm has an integrated bar that has a clickable desktop switcher, shows the tiling mode, shows the focused window's name and has space to display some external text.

Snapwm has an integrated bar that has a clickable desktop switcher, shows the tiling mode, shows the focused window's name and has space to display some external text.

Line 108:

Line 107:

For example, with conky, you could use something like:

For example, with conky, you could use something like:

−

conky | while read -r; do xsetroot -name "$REPLY"; done &

+

$ conky | while read -r; do xsetroot -name "$REPLY"; done &

You can toggle the bars' visibility.

You can toggle the bars' visibility.

Default keyboard shortcut : Super+b

Default keyboard shortcut : Super+b

−

There's options in the rc file to have the bar shown at the top, the bottom. The bars' position is changeable in the running wm by editing the rc file.

+

There's options in the rc file to have the bar shown at the top or the bottom. The bars' position is changeable in the running wm by editing the rc file.

=== Colors ===

=== Colors ===

Line 144:

Line 143:

&B2&1${time %I:%M}&B0

&B2&1${time %I:%M}&B0

−

+

The colors in the running wm are changeable by editing the rc file and updating.

−

The colors in the running wm are changeable by editing the rc file.

+

=== Icons ===

=== Icons ===

−

The bar does not support icons but you can draw "icons" into a font and use those. You can find more info on that in the [https://bbs.archlinux.org/viewtopic.php?id=92895&p=1 dwm hacking thread] on the forum. There are a few fonts in the [https://aur.archlinux.org/ AUR], such as [https://aur.archlinux.org/packages.php?ID=49117 terminusmod], [https://aur.archlinux.org/packages.php?ID=53507 tamsynmod], [https://aur.archlinux.org/packages.php?ID=54304 termsyn], and [https://aur.archlinux.org/packages.php?ID=54124 ohsnap] that have some icons. To have them shown in the bar print them in a terminal then copy/paste them in rc.conf or your script/conky. You can also use a font like [https://aur.archlinux.org/packages.php?ID=58930 stlarch_font] that just contains icons. You can use it in combination with another font using a comma to seperate them in your rc.conf:

+

The bar does not support icons but you can draw "icons" into a font and use those. You can find more info on that in the [https://bbs.archlinux.org/viewtopic.php?id=92895&p=1 dwm hacking thread] on the forum. There are a few fonts in the [[AUR]], such as {{AUR|terminusmod}}, {{AUR|tamsynmod}}, {{AUR|termsyn}}, and {{ic|ohsnap}} that have some icons. To have them shown in the bar print them in a terminal then copy/paste them in rc.conf or your script/conky. You can also use a font like {{ic|stlarch_font}} that just contains icons. You can use it in combination with another font using a comma to separate them in your {{ic|rc.conf}}:

Snapwm has five layout modes: vertical, fullscreen, horizontal, grid and center stacking. The tiling mode for each desktop is set in {{ic|rc.conf}}, and can be changed in the running wm.

−

Snapwm has five layout modes: vertical, horizontal, grid, fullscreen and center stacking. The tiling mode for each desktop is set in rc.conf, and can be changed in the running wm.

+

It allows the "normal" method of tiling window managers, with the new window as the master, or with the new window opened at the top or bottom of the stack (attach aside). The default tiling method for all layout modes is set in rc.conf, and can be changed in the running wm.

−

+

−

It allows the "normal" method of tiling window managers, with the new window as the master, or with the new window opened at the top or bottom of the stack(attach aside). The default tiling method for all layout modes is set in rc.conf, and can be changed in the running wm.

+

=== Vertical ===

=== Vertical ===

Line 164:

Line 161:

| | W |

| | W |

| |___|

| |___|

−

| Master | |

+

| M | |

| |___|

| |___|

| | |

| | |

--------------

--------------

−

Default keyboard shortcut : Alt+Shift+v

+

Default keyboard shortcut: {{ic|Alt+Shift+v}}.

−

+

+

Windows can be added/removed from the master area with a keyboard shortcut.

=== Fullscreen ===

=== Fullscreen ===

Line 177:

Line 174:

Takes up all the screen less the bar.

Takes up all the screen less the bar.

−

Default keyboard shortcut : Alt+Shift+f

+

Default keyboard shortcut: {{ic|Alt+Shift+f}}.

−

There are no borders in fullscreen mode or if there is only one open window.

+

There are no borders in fullscreen mode or if there is only one open window.

Line 186:

Line 183:

-------------

-------------

| |

| |

−

| Master |

+

| M |

|-----------|

|-----------|

| W | | |

| W | | |

-------------

-------------

−

Default keyboard shortcut : Alt+Shift+h

+

Default keyboard shortcut: {{ic|Alt+Shift+h}}.

+

Windows can be added/removed from the master area with a keyboard shortcut.

=== Grid ===

=== Grid ===

−

-------------

+

--------------

−

| | W |

+

| | |

−

|Master| |

+

| M | |

−

|------|----|

+

|-------|----|

−

| | |

+

| w | |

−

-------------

+

--------------

−

+

−

Default keyboard shortcut : Alt+Shift+g

+

+

Default keyboard shortcut: {{ic|Alt+Shift+g}}.

−

=== Center Stacking ===

+

=== Stacking ===

___________

___________

| ______ |

| ______ |

−

| | ____ | |

+

| _|__ | |

−

| ||____|| |

+

|| | | |

−

| |______| |

+

||____|___| |

|___________|

|___________|

−

Default keyboard shortcut : Alt+Shift+c

+

Default keyboard shortcut: {{ic|Alt+Shift+c}}.

+

+

Window placement strategy is set in rc.conf

+

CENTER_STACK 0 all windows open centered on screen

+

CENTER_STACK 1 windows set their preferred position

Windows can be moved up/down

Windows can be moved up/down

Line 226:

Line 227:

Default keyboard shortcut : Alt+p/o

Default keyboard shortcut : Alt+p/o

−

+

* Changing the layout mode or resizing windows on one desktop doesn't affect the other desktops.

−

*Changing the layout mode or resizing windows on one desktop doesn't affect the other desktops.

+

* The Master window can be resized.

−

*The Master window can be resized.

+

* Windows can be added/removed to/from the master area with keyboard shortcuts Alt+Shift+m/l

−

*Windows can be added/removed to/from the master area with keyboard shortcuts Alt+Shift+m/l

+

* The window *W* at the top of the stack can be resized with keyboard shortcuts Alt+o/p.

−

*The window *W* at the top of the stack can be resized with keyboard shortcuts Alt+o/p.

+

* In stacking mode the windows can be resized/moved with Alt+right/left mouse button and

−

*In stacking mode the windows can be resized/moved with Alt+right/left mouse button and

+

* the size and position is remembered when the mode is changed

* the size and position is remembered when the mode is changed

+

== Window manager functions ==

−

==''' Window Manager Functions '''==

+

The functions available to the user are:

+

{{bc|

+

next_win

+

Default keyboard shortcut: Alt + j

−

The functions available to the user are :

+

prev_win

−

next_win

+

Default keyboard shortcut: Alt + k

−

Default keyboard shortcut : Alt + j

+

−

prev_win

+

move_up

−

Default keyboard shortcut : Alt + k

+

Default keyboard shortcut: Alt + Shift + j

+

move the current window up the stack

−

move_up

+

move_down

−

Default keyboard shortcut : Alt + Shift + j

+

Default keyboard shortcut: Alt + Shift + k

−

move the current window up the stack

+

move the current window down the stack

−

move_down

+

swap_master

−

Default keyboard shortcut : Alt + Shift + k

+

Default keyboard shortcut: Alt + Shift + Return

−

move the current window down the stack

+

move the current window to the master area

−

swap_master

+

change_desktop

−

Default keyboard shortcut : Alt + Shift + Return

+

Default keyboard shortcut: Alt + [number]

−

move the current window to the master area

+

−

change_desktop

+

last_desktop

−

Default keyboard shortcut : Alt + [number]

+

Default keyboard shortcut: Alt + Tab

−

last_desktop

+

rotate_desktop

−

Default keyboard shortcut : Alt + Tab

+

Default keyboard shortcut: Super + Right/Left

−

rotate_desktop

+

follow_client_to_desktop

−

Default keyboard shortcut : Super + Right/Left

+

Default keyboard shortcut: Alt + Shift + [number]

+

send the current window to another desktop and open that desktop

−

follow_client_to_desktop

+

client_to_desktop

−

Default keyboard shortcut : Alt + Shift + [number]

+

Default keyboard shortcut: Super + Shift + [number]

−

send the current window to another desktop and open that desktop

+

send the current window to another desktop

−

client_to_desktop

+

switch_mode

−

Default keyboard shortcut : Super + Shift + [number]

+

Default keyboard shortcut: Alt + Shift + v/f/h/g/c

−

send the current window to another desktop

+

−

switch_mode

+

rotate_mode

−

Default keyboard shortcut : Alt + Shift + v/f/h/g/c

+

Default keyboard shortcut: Alt + a

+

order is vertical, fullscreen, horizontal, grid, stacking

−

rotate_mode

+

resize_master

−

Default keyboard shortcut : Alt + a

+

Default keyboard shortcut: Alt + h/l

−

order is vertical, fullscreen, horizontal, grid, stacking

+

−

resize_master

+

more_master

−

Default keyboard shortcut : Alt + h/l

+

Default keyboard shortcut: Alt + Shift + m/l

+

add/remove window from the master area in vert or horiz mode

−

more_master

+

resize_stack

−

Default keyboard shortcut : Alt + Shift + m/l

+

Default keyboard shortcut: Alt + p/o

−

add/remove window from the master area in vert or horiz mode

+

increase/decrease the size of the window at the top of the stack

−

resize_stack

+

kill_client

−

Default keyboard shortcut : Alt + p/o

+

Default keyboard shortcut: Alt + c

−

increase/decrease the size of the window at the top of the stack

+

−

kill_client

+

quit

−

Default keyboard shortcut : Alt + c

+

Default keyboard shortcut: Control + Alt + q

−

quit

+

spawn

−

Default keyboard shortcut : Control + Alt + q

+

Default keyboard shortcut: User defined for each application

−

spawn

+

toggle_bar

−

Default keyboard shortcut : User defined for each application

+

Default keyboard shortcut: Super + b

−

toggle_bar

+

update_config

−

Default keyboard shortcut : Super + b

+

Default keyboard shortcut: Alt + u

+

}}

−

update_config

+

== Transparency ==

−

Default keyboard shortcut : Alt + u

+

−

+

Unfocused windows have an alpha value and can be transparent if used with a compositing manager (like cairo-compmgr).

−

==''' Transparency '''==

+

−

+

−

Unfocused windows have an alpha value and can be transparent if used with a compositing manager(like cairo-compmgr).

+

The value is a percent and can be changed in the running wm by editing the rc file, 100 is opaque.

The value is a percent and can be changed in the running wm by editing the rc file, 100 is opaque.

−

+

== Multi monitor support ==

−

==''' Multi Monitor Support '''==

+

With X aware of multiple connected monitors, snapwm will place different desktops on each monitor.

With X aware of multiple connected monitors, snapwm will place different desktops on each monitor.

Line 323:

Line 322:

Using two monitors and four desktops as an example:

Using two monitors and four desktops as an example:

−

desktops 1 & 3 will show on monitor 1, the last focused one always visible

+

desktops 1 & 3 will show on monitor 1, the last focused one always visible

−

desktops 2 & 4 will show on monitor 2, the last focused one always visible

+

desktops 2 & 4 will show on monitor 2, the last focused one always visible

To move an application to the other monitor, send it to the desktop showing on that monitor

To move an application to the other monitor, send it to the desktop showing on that monitor

with the follow_/client_to_desktop functions.

with the follow_/client_to_desktop functions.

+

== Desktop Managers ==

+

+

Most desktop managers will need a file in {{ic|/usr/share/xsessions}} to have snapwm as a choice at login.

Using Git

Note: While the official name of the window manager and executable is snapwm, you will notice that in moetunes' GitHub, the directory is named Nextwm which may cause some confusion.

Xlib is all that is required. To install it, do:

$ make
# make install
$ make clean

Alternative method

Instead of actually installing it system-wide as above, you can simply run make and then copy the executable to somewhere in your path, like ~/bin for example. You can then run it the same way (exec snapwm) on a per user basis.

Dmenu

Most users will want this. As the name implies, dmenu is a menu that acts like an auto-complete for typing the name of binaries. It integrates well with tiling window managers like snapwm. See the dmenu wiki page or man dmenu for more info.

The sample.key.conf file comes with a command to start demenu_run, which will search $PATH for a matching executable as soon as you start typing.

apps.conf

DESKTOP is used to set the desktop that an app will open on and whether to change to that desktop when the app opens.

POSITION is used to set the geometry of an app in stacking mode.

DESKTOP takes the form of :

DESKTOP<space><window class>;<desktop to open on>;<zero to change to that desktop>;

<window class> is found by using xprop on the app and reading the WM_CLASS value.

POSITION takes the form of :

POSITION<space><window class>;<x>;<y>;<width>;<height>;

The Bar

Snapwm has an integrated bar that has a clickable desktop switcher, shows the tiling mode, shows the focused window's name and has space to display some external text.

The desktop switcher can optionally show the number of windows open on unfocused desktops and in fullscreen mode. Clicking on the current desktop in the switcher will focus the next window. Clicking elsewhere in the bar will change to the last desktop.

The bar uses the root window's name to display colored external text, which can be changed with xsetroot -name.

For example, with conky, you could use something like:

$ conky | while read -r; do xsetroot -name "$REPLY"; done &

You can toggle the bars' visibility.

Default keyboard shortcut : Super+b

There's options in the rc file to have the bar shown at the top or the bottom. The bars' position is changeable in the running wm by editing the rc file.

Colors

The colors for the desktop switcher are defined in SWITCHERTHEME in rc.conf.

Color 0 : focused desktop in switcher.

Color 1 : unfocused desktop in switcher.

Color 2 : unfocused desktop in switcher with open windows.

Color 3 : the bar's border.

The colors for the rest of the bar and text in the bar are defined in STATUSTHEME in rc.conf.

Color 0 : the default background colour for the bar

Color 1 : the current desktop font in the switcher and also for external text.

Color 2 : the unfocused desktops font in the switcher and also for external text.

Color 3 : the unfocused desktops with opened windows font in the switcher and also for external text.

Color 4 : the focused window name font and also the for external text.

Colors 5 - 9 : are for external text.

The colors for the windows are defined in WINDOWTHEME in rc.conf.

Color 0 : focused window border.

Color 1 : unfocused window border.

The colors for external text can be displayed by placing & in front of the number of the color in your script. For example, using conky, you could do something like this for displaying the time using the second color for external text:

&1${time %I:%M}

The background colour in the bar can be changed by placing &B in front of the number of the wanted colour in your script.
For example, using conky, you could do something like this for displaying the time using the third colour for the background and the second color for external text:

&B2&1${time %I:%M}&B0

The colors in the running wm are changeable by editing the rc file and updating.

Icons

The bar does not support icons but you can draw "icons" into a font and use those. You can find more info on that in the dwm hacking thread on the forum. There are a few fonts in the AUR, such as terminusmodAUR, tamsynmodAUR, termsynAUR, and ohsnap that have some icons. To have them shown in the bar print them in a terminal then copy/paste them in rc.conf or your script/conky. You can also use a font like stlarch_font that just contains icons. You can use it in combination with another font using a comma to separate them in your rc.conf:

Layout modes

Snapwm has five layout modes: vertical, fullscreen, horizontal, grid and center stacking. The tiling mode for each desktop is set in rc.conf, and can be changed in the running wm.

It allows the "normal" method of tiling window managers, with the new window as the master, or with the new window opened at the top or bottom of the stack (attach aside). The default tiling method for all layout modes is set in rc.conf, and can be changed in the running wm.

Vertical

--------------
| | W |
| |___|
| M | |
| |___|
| | |
--------------

Default keyboard shortcut: Alt+Shift+v.

Windows can be added/removed from the master area with a keyboard shortcut.

Fullscreen

Takes up all the screen less the bar.

Default keyboard shortcut: Alt+Shift+f.

There are no borders in fullscreen mode or if there is only one open window.

Horizontal

-------------
| |
| M |
|-----------|
| W | | |
-------------

Default keyboard shortcut: Alt+Shift+h.

Windows can be added/removed from the master area with a keyboard shortcut.