i3-compatible Wayland compositor
Go to file
Ryan Dwyer 3b0c26d149 Overhaul criteria implementation
The criteria struct now uses properties for each token type rather than
the list_t list of tokens. The reason for this is that different token
types have different data types: pcre, string and number to name a few.
This solution should be more flexible moving forward. A bonus of this is
that criteria is now easier to understand when looking at the struct
definition.

The criteria parser has been rewritten because the previous one didn't
support valueless pairs (eg. [class="foo" floating]).

Criteria now has types. Types at the moment are CT_COMMAND,
CT_ASSIGN_WORKSPACE and CT_ASSIGN_OUTPUT. i3 uses types as well.
Previously the assign command was creating a criteria with 'move to
workspace <name>' as its command, but this caused the window to appear
briefly on the focused workspace before being moved to the assigned
workspace. It now creates the view directly in the assigned workspace.

Each view will only execute a given criteria once. This is achieved by
storing a list of executed criteria in the view. This is the same
strategy used by i3.

Escaping now works properly. Previously you could do things like
[class="Fire\"fox"] and the stored value would be 'Fire\"fox', but it
should be (and now is) 'Fire"fox'.

The public functions in criteria.c are now all prefixed with criteria_.

Xwayland views now listen to the set_title, set_class and
set_window_type events and criteria will be run when these happen. XDG
shell has none of these events so it continues to update the title in
handle_commit.

Each view type's get_prop function has been split into get_string_prop
and get_int_prop because some properties like the X11 window ID and
window type are numeric.

The following new criteria tokens are now supported:

* id (X11 window ID)
* instance
* tiling
* workspace
2018-05-11 09:38:53 +10:00
assets Recompressed PNG files 2017-01-05 21:49:28 -05:00
client Handle output removal on swaybar 2018-04-05 16:04:30 -04:00
common Fix gcc string truncation warnings 2018-04-13 22:47:27 +09:00
completions/zsh remove relevant CMakeLists.txt 2017-11-30 11:54:01 -05:00
contrib Move awesome config to contrib/ 2017-01-14 16:03:41 -05:00
include Overhaul criteria implementation 2018-05-11 09:38:53 +10:00
protocols Update layer-shell protocol 2018-05-07 17:28:42 +01:00
security.d Revert "security.d: Update install paths for swaybar and swaybg" 2018-05-06 00:19:12 +01:00
sway Overhaul criteria implementation 2018-05-11 09:38:53 +10:00
swaybar Swaybar: Respect pango_markup config 2018-05-09 14:54:22 +10:00
swaybg swaybg: remove assertions with side-effects 2018-05-07 17:26:21 +01:00
swaygrab remove the rest of cmake 2017-12-01 05:21:03 -05:00
swaylock Improved key handling in swaylock 2018-04-24 15:40:30 +02:00
swaymsg swaymsg: Fix spelling in error message 2018-05-05 20:40:34 +02:00
.build.yml Remove wlc-git from .build.yml 2018-04-05 23:25:42 -04:00
.clang-format Update .clang-format - not entirely usable yet 2017-01-10 23:30:34 -05:00
.editorconfig Create .editorconfig 2016-07-04 14:12:32 +02:00
.gitignore Add subprojects to gitignore 2018-03-28 12:22:28 -04:00
config.in Implement resize command 2018-04-05 00:03:20 -04:00
CONTRIBUTING.md Update README et al with new links 2017-10-02 22:26:37 -04:00
HACKING.md update hacking for meson 2017-12-01 05:23:53 -05:00
LICENSE MIT license 2017-01-06 13:45:48 -05:00
meson.build meson.build: Look for '-lpam', not '-llibpam'. 2018-05-06 14:10:09 +02:00
meson_options.txt Revert "Make the LIBDIR path configurable" 2018-05-06 00:19:52 +01:00
README.de.md Merge branch 'master' of github.com:swaywm/sway 2018-04-12 20:22:59 -04:00
README.el.md Fix json-c version dependency 2018-04-07 11:08:39 +02:00
README.fr.md Fix json-c version dependency 2018-04-07 11:08:39 +02:00
README.it.md Fix json-c version dependency 2018-04-07 11:08:39 +02:00
README.ja.md Fix json-c version dependency 2018-04-07 11:08:39 +02:00
README.md Add README.md 2018-04-12 20:22:27 -04:00
README.pt.md Fix json-c version dependency 2018-04-07 11:08:39 +02:00
README.ru.md Merge branch 'wlroots' 2018-04-12 20:19:54 -04:00
README.uk.md Fix json-c version dependency 2018-04-07 11:08:39 +02:00
sway.desktop Add Wayland and Xorg session files 2015-08-20 23:12:34 +02:00

sway

English - 日本語 - Deutsch - Ελληνικά - Français - Українська - Italiano - Português - Русский

"SirCmpwn's Wayland compositor" is a work in progress i3-compatible Wayland compositor. Read the FAQ. Join the IRC channel (#sway on irc.freenode.net).

Notice: You are viewing the unstable and unsupported master branch of sway, where work is ongoing to port it to wlroots. The supported branch is the 0.15 branch, and end users are encouraged to use the stable releases cut from it.

If you'd like to support sway development, please contribute to SirCmpwn's Patreon page.

Release Signatures

Releases are signed with B22DA89A and published on GitHub.

Status

Installation

From Packages

Sway is available in many distributions. Try installing the "sway" package for yours. If it's not available, check out this wiki page for information on installation for your distributions.

If you're interested in packaging sway for your distribution, stop by the IRC channel or shoot an email to sir@cmpwn.com for advice.

Compiling from Source

Install dependencies:

  • meson
  • wlroots
  • wayland
  • xwayland
  • libinput >= 1.6.0
  • libcap
  • asciidoc
  • pcre
  • json-c >= 0.13
  • pango
  • cairo
  • gdk-pixbuf2 *
  • pam **
  • dbus >= 1.10 ***
  • imagemagick (required for image capture with swaygrab)
  • ffmpeg (required for video capture with swaygrab)

*Only required for swaybar, swaybg, and swaylock

**Only required for swaylock

***Only required for tray support

Run these commands:

meson build
ninja -C build
sudo ninja -C build install

On systems with logind, you need to set a few caps on the binary:

sudo setcap "cap_sys_ptrace,cap_sys_tty_config=eip" /usr/local/bin/sway

On systems without logind, you need to suid the sway binary:

sudo chmod a+s /usr/local/bin/sway

Configuration

If you already use i3, then copy your i3 config to ~/.config/sway/config and it'll work out of the box. Otherwise, copy the sample configuration file to ~/.config/sway/config. It is usually located at /etc/sway/config. Run man 5 sway for information on the configuration.

Running

Run sway from a TTY. Some display managers may work but are not supported by sway (gdm is known to work fairly well).