aboutsummaryrefslogtreecommitdiff
path: root/sway/sway-ipc.7.scd
diff options
context:
space:
mode:
authorDrew DeVault <sir@cmpwn.com>2019-02-27 16:01:55 -0500
committerGitHub <noreply@github.com>2019-02-27 16:01:55 -0500
commit9f58b27d860a6353d8e4ca9a9676498e2fe77144 (patch)
treee3fa41e01566518a28784322a7e2ccd202fede84 /sway/sway-ipc.7.scd
parent51d27d154950824228e91eb1af0374a21fe4e1c5 (diff)
parentf876009c7f5c332af5d60b19ccbf8d991b972ffa (diff)
Merge pull request #3766 from RedSoxFan/sway-ipc-scdoc
Add sway-ipc.7.scd to document IPC protocol
Diffstat (limited to 'sway/sway-ipc.7.scd')
-rw-r--r--sway/sway-ipc.7.scd1578
1 files changed, 1578 insertions, 0 deletions
diff --git a/sway/sway-ipc.7.scd b/sway/sway-ipc.7.scd
new file mode 100644
index 00000000..63fbacc7
--- /dev/null
+++ b/sway/sway-ipc.7.scd
@@ -0,0 +1,1578 @@
+sway-ipc(7)
+
+# NAME
+
+sway-ipc - IPC protocol for sway
+
+# DESCRIPTION
+
+This details the interprocess communication (IPC) protocol for *sway*(1). This
+IPC protocol can be used to control or obtain information from a sway process.
+
+The IPC protocol uses a UNIX socket as the method of communication. The path
+to the socket is stored in the environment variable _SWAYSOCK_ and, for
+backwards compatibility with i3, _I3SOCK_. You can also retrieve the socket
+path by calling _sway --get-socketpath_.
+
+# MESSAGE AND REPLY FORMAT
+
+The format for messages and replies is:
+ <magic-string> <payload-length> <payload-type> <payload>
+Where++
+ <magic-string> is _i3-ipc_, for compatibility with i3++
+ <payload-length> is a 32-bit integer in native byte order++
+ <payload-type> is a 32-bit integer in native byte order
+
+For example, sending the _exit_ command would look like the following hexdump:
+```
+00000000 | 69 33 2d 69 70 63 04 00 00 00 00 00 00 00 65 78 |i3-ipc........ex|
+00000010 | 69 74 |it |
+```
+
+The payload for replies will be a valid serialized JSON data structure.
+
+# MESSAGES AND REPLIES
+
+The following message types and their corresponding reply types are currently
+supported. *For all replies, any properties not listed are subject to removal.*
+
+[- *TYPE NUMBER*
+:- *MESSAGE NAME*
+:- *PURPOSE*
+|- 0
+: RUN_COMMAND
+:[ Runs the payload as sway commands
+|- 1
+: GET_WORKSPACES
+: Get the list of current workspaces
+|- 2
+: SUBSCRIBE
+: Subscribe the IPC connection to the events listed in the payload
+|- 3
+: GET_OUTPUTS
+: Get the list of current outputs
+|- 4
+: GET_TREE
+: Get the node layout tree
+|- 5
+: GET_MARKS
+: Get the names of all the marks currently set
+|- 6
+: GET_BAR_CONFIG
+: Get the specified bar config or a list of bar config names
+|- 7
+: GET_VERSION
+: Get the version of sway that owns the IPC socket
+|- 8
+: GET_BINDING_MODES
+: Get the list of binding mode names
+|- 9
+: GET_CONFIG
+: Returns the config that was last loaded
+|- 10
+: SEND_TICK
+: Sends a tick event with the specified payload
+|- 11
+: SYNC
+: Replies failure object for i3 compatibility
+|- 100
+: GET_INPUTS
+: Get the list of input devices
+|- 101
+: GET_SEATS
+: Get the list of seats
+
+## 0. RUN_COMMAND
+
+*MESSAGE*++
+Parses and runs the payload as sway commands
+
+*REPLY*++
+An array of objects corresponding to each command that was parsed. Each object
+has the property _success_, which is a boolean indicating whether the command
+was successful. The object may also contain the property _error_, which is a
+human readable error message.
+
+*Example Reply:*
+```
+[
+ {
+ "success": true
+ },
+ {
+ "success": false,
+ "error": "Invalid/unknown command"
+ }
+]
+```
+
+## 1. GET_WORKSPACES
+
+*MESSAGE*++
+Retrieves the list of workspaces.
+
+*REPLY*++
+The reply is an array of objects corresponding to each workspace. Each object
+has the following properties:
+
+[- *PROPERTY*
+:- *DATA TYPE*
+:- *DESCRIPTION*
+|- num
+: integer
+:[ The workspace number or -1 for workspaces that do not start with a number
+|- name
+: string
+: The name of the workspace
+|- visible
+: boolean
+: Whether the workspace is currently visible on any output
+|- focused
+: boolean
+: Whether the workspace is currently focused by the default seat (_seat0_)
+|- urgent
+: boolean
+: Whether a view on the workspace has the urgent flag set
+|- rect
+: object
+: The bounds of the workspace. It consists of _x_, _y_, _width_, and _height_
+|- output
+: string
+: The name of the output that the workspace is on
+
+
+*Example Reply:*
+```
+[
+ {
+ "num": 1,
+ "name": "1",
+ "visible": true,
+ "focused": true,
+ "rect": {
+ "x": 0,
+ "y": 23,
+ "width": 1920,
+ "height": 1057
+ },
+ "output": "eDP-1"
+ },
+]
+```
+
+## 2. SUBSCRIBE
+
+*MESSAGE*++
+Subscribe this IPC connection to the event types specified in the message
+payload. The payload should be a valid JSON array of events. See the _EVENTS_
+section for the list of supported events.
+
+*REPLY*++
+A single object that contains the property _success_, which is a boolean value
+indicating whether the subscription was successful or not.
+
+*Example Reply:*
+```
+{
+ "success": true
+}
+```
+
+## 3. GET_OUTPUTS
+
+*MESSAGE*++
+Retrieve the list of outputs
+
+*REPLY*++
+An array of objects corresponding to each output. Each object has the
+following properties:
+
+[- *PROPERTY*
+:- *DATA TYPE*
+:- *DESCRIPTION*
+|- name
+: string
+:[ The name of the output. On DRM, this is the connector
+|- make
+: string
+: The make of the output
+|- model
+: string
+: The model of the output
+|- serial
+: string
+: The output's serial number as a hexadecimal string
+|- active
+: boolean
+: Whether this output is active/enabled
+|- primary
+: boolean
+: For i3 compatibility, this will be false. It does not make sense in Wayland
+|- scale
+: float
+: The scale currently in use on the output or _-1_ for disabled outputs
+|- transform
+: string
+: The transform currently in use for the output. This can be _normal_, _90_,
+ _180_, _270_, _flipped-90_, _flipped-180_, or _flipped-270_
+|- current_workspace
+: string
+: The workspace currently visible on the output or _null_ for disabled outputs
+|- modes
+: array
+: An array of supported mode objects. Each object contains _width_, _height_,
+ and _refresh_
+|- current_mode
+: object
+: An object representing the current mode containing _width_, _height_, and
+ _refresh_
+|- rect
+: object
+: The bounds for the output consisting of _x_, _y_, _width_, and _height_
+
+
+*Example Reply:*
+```
+[
+ {
+ "name": "HDMI-A-2",
+ "make": "Unknown",
+ "model": "NS-19E310A13",
+ "serial": "0x00000001",
+ "active": true,
+ "primary": false,
+ "scale": 1.0,
+ "transform": "normal",
+ "current_workspace": "1",
+ "modes": [
+ {
+ "width": 640,
+ "height": 480,
+ "refresh": 59940
+ },
+ {
+ "width": 800,
+ "height": 600,
+ "refresh": 60317
+ },
+ {
+ "width": 1024,
+ "height": 768,
+ "refresh": 60004
+ },
+ {
+ "width": 1920,
+ "height": 1080,
+ "refresh": 60000
+ }
+ ],
+ "current_mode": {
+ "width": 1920,
+ "height": 1080,
+ "refresh": 60000
+ }
+ }
+]
+```
+
+## 4. GET_TREE
+
+*MESSAGE*++
+Retrieve a JSON representation of the tree
+
+*REPLY*++
+An array of object the represent the current tree. Each object represents one
+node and will have the following properties:
+
+[- *PROPERTY*
+:- *DATA TYPE*
+:- *DESCRIPTION*
+|- id
+: integer
+:[ The internal unique ID for this node
+|- name
+: string
+: The name of the node such as the output name or window title. For the
+ scratchpad, this will be _\_\_i3\_scratch_ for compatibility with i3.
+|- type
+: string
+: The node type. It can be _root_, _output_, _workspace_, _con_, or
+ _floating\_con_
+|- border
+: string
+: The border style for the node. It can be _normal_, _none_, _pixel_, or _csd_
+|- current_border_width
+: integer
+: Number of pixels used for the border width
+|- layout
+: string
+: The node's layout. It can either be _splith_, _splitv_, _stacked_,
+ _tabbed_, or _output_
+|- percent
+: float
+: The percentage of the node's parent that it takes up or _null_ for the root
+ and other special nodes such as the scratchpad
+|- rect
+: object
+: The absolute geometry of the node
+|- window_rect
+: object
+: The geometry of the contents inside the node
+|- deco_rect
+: object
+: The geometry of the decorations inside the node
+|- geometry
+: object
+: The natural geometry of the contents if it were to size itself
+|- urgent
+: boolean
+: Whether the node or any of its descendants has the urgent hint set. Note:
+ This may not exist when compiled without _xwayland_ support
+|- focused
+: boolean
+: Whether the node is currently focused by the default seat (_seat0_)
+|- focus
+: array
+: Array of child node IDs in the current focus order
+|- node
+: array
+: The tiling children nodes for the node
+|- floating_nodes
+: array
+: The floating children nodes for the node
+|- representation
+: string
+: (Only workspaces) A string representation of the layout of the workspace
+ that can be used as an aid in submitting reproduction steps for bug reports
+|- app_id
+: string
+: (Only views) For an xdg-shell view, the name of the application, if set.
+ Otherwise, _null_
+|- pid
+: integer
+: (Only views) The PID of the application that owns the view
+|- window
+: integer
+: (Only xwayland views) The X11 window ID for the xwayland view
+|- window_properties
+: object
+: (Only xwayland views) An object containing the _title_, _class_, _instance_,
+ _window\_role_, and _transient\_for_ for the view
+
+
+*Example Reply:*
+```
+{
+ "id": 1,
+ "name": "root",
+ "rect": {
+ "x": 0,
+ "y": 0,
+ "width": 1920,
+ "height": 1080
+ },
+ "focused": false,
+ "focus": [
+ 3
+ ],
+ "border": "none",
+ "current_border_width": 0,
+ "layout": "splith",
+ "percent": null,
+ "window_rect": {
+ "x": 0,
+ "y": 0,
+ "width": 0,
+ "height": 0
+ },
+ "deco_rect": {
+ "x": 0,
+ "y": 0,
+ "width": 0,
+ "height": 0
+ },
+ "geometry": {
+ "x": 0,
+ "y": 0,
+ "width": 0,
+ "height": 0
+ },
+ "window": null,
+ "urgent": false,
+ "floating_nodes": [
+ ],
+ "type": "root",
+ "nodes": [
+ {
+ "id": 2147483647,
+ "name": "__i3",
+ "rect": {
+ "x": 0,
+ "y": 0,
+ "width": 1920,
+ "height": 1080
+ },
+ "focused": false,
+ "focus": [
+ 2147483646
+ ],
+ "border": "none",
+ "current_border_width": 0,
+ "layout": "output",
+ "percent": null,
+ "window_rect": {
+ "x": 0,
+ "y": 0,
+ "width": 0,
+ "height": 0
+ },
+ "deco_rect": {
+ "x": 0,
+ "y": 0,
+ "width": 0,
+ "height": 0
+ },
+ "geometry": {
+ "x": 0,
+ "y": 0,
+ "width": 0,
+ "height": 0
+ },
+ "window": null,
+ "urgent": false,
+ "floating_nodes": [
+ ],
+ "type": "output",
+ "nodes": [
+ {
+ "id": 2147483646,
+ "name": "__i3_scratch",
+ "rect": {
+ "x": 0,
+ "y": 0,
+ "width": 1920,
+ "height": 1080
+ },
+ "focused": false,
+ "focus": [
+ ],
+ "border": "none",
+ "current_border_width": 0,
+ "layout": "splith",
+ "percent": null,
+ "window_rect": {
+ "x": 0,
+ "y": 0,
+ "width": 0,
+ "height": 0
+ },
+ "deco_rect": {
+ "x": 0,
+ "y": 0,
+ "width": 0,
+ "height": 0
+ },
+ "geometry": {
+ "x": 0,
+ "y": 0,
+ "width": 0,
+ "height": 0
+ },
+ "window": null,
+ "urgent": false,
+ "floating_nodes": [
+ ],
+ "type": "workspace"
+ }
+ ]
+ },
+ {
+ "id": 3,
+ "name": "eDP-1",
+ "rect": {
+ "x": 0,
+ "y": 0,
+ "width": 1920,
+ "height": 1080
+ },
+ "focused": false,
+ "focus": [
+ 4
+ ],
+ "border": "none",
+ "current_border_width": 0,
+ "layout": "output",
+ "percent": 1.0,
+ "window_rect": {
+ "x": 0,
+ "y": 0,
+ "width": 0,
+ "height": 0
+ },
+ "deco_rect": {
+ "x": 0,
+ "y": 0,
+ "width": 0,
+ "height": 0
+ },
+ "geometry": {
+ "x": 0,
+ "y": 0,
+ "width": 0,
+ "height": 0
+ },
+ "window": null,
+ "urgent": false,
+ "floating_nodes": [
+ ],
+ "type": "output",
+ "active": true,
+ "primary": false,
+ "make": "Unknown",
+ "model": "0x38ED",
+ "serial": "0x00000000",
+ "scale": 1.0,
+ "transform": "normal",
+ "current_workspace": "1",
+ "modes": [
+ {
+ "width": 1920,
+ "height": 1080,
+ "refresh": 60052
+ }
+ ],
+ "current_mode": {
+ "width": 1920,
+ "height": 1080,
+ "refresh": 60052
+ },
+ "nodes": [
+ {
+ "id": 4,
+ "name": "1",
+ "rect": {
+ "x": 0,
+ "y": 23,
+ "width": 1920,
+ "height": 1057
+ },
+ "focused": false,
+ "focus": [
+ 6,
+ 5
+ ],
+ "border": "none",
+ "current_border_width": 0,
+ "layout": "splith",
+ "percent": null,
+ "window_rect": {
+ "x": 0,
+ "y": 0,
+ "width": 0,
+ "height": 0
+ },
+ "deco_rect": {
+ "x": 0,
+ "y": 0,
+ "width": 0,
+ "height": 0
+ },
+ "geometry": {
+ "x": 0,
+ "y": 0,
+ "width": 0,
+ "height": 0
+ },
+ "window": null,
+ "urgent": false,
+ "floating_nodes": [
+ ],
+ "num": 1,
+ "output": "eDP-1",
+ "type": "workspace",
+ "representation": "H[URxvt termite]",
+ "nodes": [
+ {
+ "id": 5,
+ "name": "urxvt",
+ "rect": {
+ "x": 0,
+ "y": 23,
+ "width": 960,
+ "height": 1057
+ },
+ "focused": false,
+ "focus": [
+ ],
+ "border": "normal",
+ "current_border_width": 2,
+ "layout": "none",
+ "percent": 0.5,
+ "window_rect": {
+ "x": 2,
+ "y": 0,
+ "width": 956,
+ "height": 1030
+ },
+ "deco_rect": {
+ "x": 0,
+ "y": 0,
+ "width": 960,
+ "height": 25
+ },
+ "geometry": {
+ "x": 0,
+ "y": 0,
+ "width": 1124,
+ "height": 422
+ },
+ "window": 4194313,
+ "urgent": false,
+ "floating_nodes": [
+ ],
+ "type": "con",
+ "pid": 23959,
+ "app_id": null,
+ "window_properties": {
+ "class": "URxvt",
+ "instance": "urxvt",
+ "title": "urxvt",
+ "transient_for": null
+ },
+ "nodes": [
+ ]
+ },
+ {
+ "id": 6,
+ "name": "",
+ "rect": {
+ "x": 960,
+ "y": 23,
+ "width": 960,
+ "height": 1057
+ },
+ "focused": true,
+ "focus": [
+ ],
+ "border": "normal",
+ "current_border_width": 2,
+ "layout": "none",
+ "percent": 0.5,
+ "window_rect": {
+ "x": 2,
+ "y": 0,
+ "width": 956,
+ "height": 1030
+ },
+ "deco_rect": {
+ "x": 0,
+ "y": 0,
+ "width": 960,
+ "height": 25
+ },
+ "geometry": {
+ "x": 0,
+ "y": 0,
+ "width": 817,
+ "height": 458
+ },
+ "window": null,
+ "urgent": false,
+ "floating_nodes": [
+ ],
+ "type": "con",
+ "pid": 25370,
+ "app_id": "termite",
+ "nodes": [
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ]
+}
+```
+
+## 5. GET_MARKS
+
+*MESSAGE*++
+Retrieve the currently set marks
+
+*REPLY*++
+An array of marks current set. Since each mark can only be set for one
+container, this is a set so each value is unique and the order is undefined.
+
+*Example Reply:*
+```
+[
+ "one",
+ "test"
+]
+```
+
+## 6. GET_BAR_CONFIG (WITHOUT A PAYLOAD)
+
+*MESSAGE*++
+When sending without a payload, this retrieves the list of configured bar IDs
+
+*REPLY*++
+An array of bar IDs, which are strings
+
+*Example Reply:*
+```
+[
+ "bar-0",
+ "bar-1"
+]
+```
+
+## 6. GET_BAR_CONFIG (WITH A PAYLOAD)
+
+*MESSAGE*++
+When sent with a bar ID as the payload, this retrieves the config associated
+with the specified by the bar ID in the payload. This is used by swaybar, but
+could also be used for third party bars
+
+*REPLY*++
+An object that represents the configuration for the bar with the bar ID sent as
+the payload. The following properties exists and more information about what
+their value mean can be found in *sway-bar*(5):
+
+[- *PROPERTY*
+:- *DATA TYPE*
+:- *DESCRIPTION*
+|- id
+: string
+:[ The bar ID
+|- mode
+: string
+: The mode for the bar. It can be _dock_, _hide_, or _invisible_
+|- position
+: string
+: The bar's position. It can currently either be _bottom_ or _top_
+|- status_command
+: string
+: The command which should be run to generate the status line
+|- font
+: string
+: The font to use for the text on the bar
+|- workspace_buttons
+: boolean
+: Whether to display the workspace buttons on the bar
+|- binding_mode_indicator
+: boolean
+: Whether to display the current binding mode on the bar
+|- verbose
+: boolean
+: For i3 compatibility, this will be the boolean value _false_.
+|- colors
+: object
+: An object containing the _#RRGGBBAA_ colors to use for the bar. See below
+ for more information
+|- gaps
+: object
+: An object representing the gaps for the bar consisting of _top_, _right_,
+ _bottom_, and _left_.
+|- bar_height
+: integer
+: The absolute height to use for the bar or _0_ to automatically size based
+ on the font
+|- status_padding
+: integer
+: The vertical padding to use for the status line
+|- status_edge_padding
+: integer
+: The horizontal padding to use for the status line when at the end of an
+ output
+
+
+The colors object contains the following properties, which are all strings
+containing the _#RRGGBBAA_ representation of the color:
+[- *PROPERTY*
+:- *DESCRIPTION*
+|- background
+:[ The color to use for the bar background on unfocused outputs
+|- statusline
+: The color to use for the status line text on unfocused outputs
+|- separator
+: The color to use for the separator text on unfocused outputs
+|- focused_background
+: The color to use for the background of the bar on the focused output
+|- focused_statusline
+: The color to use for the status line text on the focused output
+|- focused_separator
+: The color to use for the separator text on the focused output
+|- focused_workspace_text
+: The color to use for the text of the focused workspace button
+|- focused_workspace_bg
+: The color to use for the background of the focused workspace button
+|- focused_workspace_border
+: The color to use for the border of the focused workspace button
+|- active_workspace_text
+: The color to use for the text of the workspace buttons for the visible
+ workspaces on unfocused outputs
+|- active_workspace_bg
+: The color to use for the background of the workspace buttons for the visible
+ workspaces on unfocused outputs
+|- active_workspace_border
+: The color to use for the border of the workspace buttons for the visible
+ workspaces on unfocused outputs
+|- inactive_workspace_text
+: The color to use for the text of the workspace buttons for workspaces that
+ are not visible
+|- inactive_workspace_bg
+: The color to use for the background of the workspace buttons for workspaces
+ that are not visible
+|- inactive_workspace_border
+: The color to use for the border of the workspace buttons for workspaces
+ that are not visible
+|- urgent_workspace_text
+: The color to use for the text of the workspace buttons for workspaces that
+ contain an urgent view
+|- urgent_workspace_bg
+: The color to use for the background of the workspace buttons for workspaces
+ that contain an urgent view
+|- urgent_workspace_border
+: The color to use for the border of the workspace buttons for workspaces that
+ contain an urgent view
+|- binding_mode_text
+: The color to use for the text of the binding mode indicator
+|- binding_mode_bg
+: The color to use for the background of the binding mode indicator
+|- binding_mode_border
+: The color to use for the border of the binding mode indicator
+
+
+*Example Reply:*
+```
+{
+ "id": "bar-0",
+ "mode": "dock",
+ "position": "top",
+ "status_command": "while date +'%Y-%m-%d %l:%M:%S %p'; do sleep 1; done",
+ "font": "monospace 10",
+ "gaps": {
+ "top": 0,
+ "right": 0,
+ "bottom": 0,
+ "left": 0
+ },
+ "bar_height": 0,
+ "status_padding": 1,
+ "status_edge_padding": 3,
+ "workspace_buttons": true,
+ "binding_mode_indicator": true,
+ "verbose": false,
+ "pango_markup": false,
+ "colors": {
+ "background": "#323232ff",
+ "statusline": "#ffffffff",
+ "separator": "#666666ff",
+ "focused_background": "#323232ff",
+ "focused_statusline": "#ffffffff",
+ "focused_separator": "#666666ff",
+ "focused_workspace_border": "#4c7899ff",
+ "focused_workspace_bg": "#285577ff",
+ "focused_workspace_text": "#ffffffff",
+ "inactive_workspace_border": "#32323200",
+ "inactive_workspace_bg": "#32323200",
+ "inactive_workspace_text": "#5c5c5cff",
+ "active_workspace_border": "#333333ff",
+ "active_workspace_bg": "#5f676aff",
+ "active_workspace_text": "#ffffffff",
+ "urgent_workspace_border": "#2f343aff",
+ "urgent_workspace_bg": "#900000ff",
+ "urgent_workspace_text": "#ffffffff",
+ "binding_mode_border": "#2f343aff",
+ "binding_mode_bg": "#900000ff",
+ "binding_mode_text": "#ffffffff"
+ },
+}
+```
+
+## 7. GET_VERSION
+
+*MESSAGE*++
+Retrieve version information about the sway process
+
+*REPLY*++
+An object containing the following properties:
+
+[- *PROPERTY*
+:- *DATA TYPE*
+:- *DESCRIPTION*
+|- major
+: integer
+:[ The major version of the sway process
+|- minor
+: integer
+: The minor version of the sway process
+|- patch
+: integer
+: The patch version of the sway process
+|- human_readable
+: string
+: A human readable version string that will likely contain more useful
+ information such as the git commit short hash and git branch
+|- loaded_config_file_name
+: string
+: The path to the loaded config file
+
+
+*Example Reply:*
+```
+{
+ "human_readable": "1.0-rc1-117-g2f7247e0 (Feb 24 2019, branch 'master')",
+ "major": 1,
+ "minor": 0,
+ "patch": 0,
+ "loaded_config_file_name": "/home/redsoxfan/.config/sway/config"
+}
+```
+
+## 8. GET_BINDING_MODES
+
+*MESSAGE*++
+Retrieve the list of binding modes that currently configured
+
+*REPLY*++
+An array of strings, with each string being the name of a binding mode. This
+will always contain at least one mode (currently _default_), which is the
+default binding mode
+
+*Example Reply:*
+```
+[
+ "default",
+ "resize",
+]
+```
+
+## 9. GET_CONFIG
+
+*MESSAGE*++
+Retrieve the contents of the config that was last loaded
+
+*REPLY*++
+An object with a single string property containing the contents of the config
+
+*Example Reply:*
+```
+{
+ "config": "set $mod Mod4\nbindsym $mod+q exit\n"
+}
+```
+
+## 10. SEND_TICK
+
+*MESSAGE*++
+Issues a _TICK_ event to all clients subscribing to the event to ensure that
+all events prior to the tick were received. If a payload is given, it will be
+included in the _TICK_ event
+
+*REPLY*++
+A single object contains the property _success_, which is a boolean value
+indicating whether the _TICK_ event was sent.
+
+*Example Reply:*
+```
+{
+ "success": true
+}
+```
+
+## 11. SYNC
+
+*MESSAGE*++
+For i3 compatibility, this command will just return a failure object since it
+does not make sense to implement in sway due to the X11 nature of the command.
+If you are curious about what this IPC command does in i3, refer to the i3
+documentation.
+
+*REPLY*++
+A single object that contains the property _success_, which is set to the
+boolean value _false_.
+
+*Exact Reply:*
+```
+{
+ "success": false
+}
+```
+
+## 100. GET_INPUTS
+
+*MESSAGE*++
+Retrieve a list of the input devices currently available
+
+*REPLY*++
+An array of objects corresponding to each input device. Each object has the
+following properties:
+
+[- *PROPERTY*
+:- *DATA TYPE*
+:- *DESCRIPTION*
+|- identifier
+: string
+:[ The identifier for the input device
+|- name
+: string
+: The human readable name for the device
+|- vendor
+: integer
+: The vendor code for the input device
+|- product
+: integer
+: The product code for the input device
+|- type
+: string
+: The device type. Currently this can be _keyboard_, _pointer_, _touch_,
+ _tablet\_tool_, _tablet\_pad_, or _switch_
+|- xkb_active_layout_name
+: string
+: (Only keyboards) The active keyboard layout in use
+|- libinput_send_events
+: string
+: (Only libinput devices) The send events value in use by libinput for this
+ device. It can be _enabled_, _disabled_, or _disabled\_on\_external\_mouse_
+
+
+*Example Reply:*
+```
+[
+ {
+ "identifier": "1:1:AT_Translated_Set_2_keyboard",
+ "name": "AT Translated Set 2 keyboard",
+ "vendor": 1,
+ "product": 1,
+ "type": "keyboard",
+ "xkb_active_layout_name": "English (US)",
+ "libinput_send_events": "enabled"
+ },
+ {
+ "identifier": "1267:5:Elan_Touchpad",
+ "name": "Elan Touchpad",
+ "vendor": 1267,
+ "product": 5,
+ "type": "pointer",
+ "libinput_send_events": "enabled"
+ },
+ {
+ "identifier": "3034:22494:USB2.0_VGA_UVC_WebCam:_USB2.0_V",
+ "name": "USB2.0 VGA UVC WebCam: USB2.0 V",
+ "vendor": 3034,
+ "product": 22494,
+ "type": "keyboard",
+ "xkb_active_layout_name": "English (US)",
+ "libinput_send_events": "enabled"
+ },
+ {
+ "identifier": "0:3:Sleep_Button",
+ "name": "Sleep Button",
+ "vendor": 0,
+ "product": 3,
+ "type": "keyboard",
+ "xkb_active_layout_name": "English (US)",
+ "libinput_send_events": "enabled"
+ },
+ {
+ "identifier": "0:5:Lid_Switch",
+ "name": "Lid Switch",
+ "vendor": 0,
+ "product": 5,
+ "type": "switch",
+ "libinput_send_events": "enabled"
+ {
+ "identifier": "0:6:Video_Bus",
+ "name": "Video Bus",
+ "vendor": 0,
+ "product": 6,
+ "type": "keyboard",
+ "xkb_active_layout_name": "English (US)",
+ "libinput_send_events": "enabled"
+ },
+ {
+ "identifier": "0:1:Power_Button",
+ "name": "Power Button",
+ "vendor": 0,
+ "product": 1,
+ "type": "keyboard",
+ "xkb_active_layout_name": "English (US)",
+ "libinput_send_events": "enabled"
+ }
+]
+```
+
+## 101. GET_SEATS
+
+*MESSAGE*++
+Retrieve a list of the seats currently configured
+
+*REPLY*++
+An array of objects corresponding to each seat. There will always be at least
+one seat. Each object has the following properties:
+
+[- *PROPERTY*
+:- *DATA TYPE*
+:- *DESCRIPTION*
+|- name
+: string
+:] The unique name for the seat
+|- capabilities
+: integer
+: The number of capabilities that the seat has
+|- focus
+: integer
+: The id of the node currently focused by the seat or _0_ when the seat is
+ not currently focused by a node (i.e. a surface layer or xwayland unmanaged
+ has focus)
+|- devices
+: array
+: An array of input devices that are attached to the seat. Currently, this
+ is an array of objects that are identical to those returned by _GET\_INPUTS_
+
+
+*Example Reply:*
+```
+[
+ {
+ "name": "seat0",
+ "capabilities": 3,
+ "focus": 7,
+ "devices": [
+ {
+ "identifier": "1:1:AT_Translated_Set_2_keyboard",
+ "name": "AT Translated Set 2 keyboard",
+ "vendor": 1,
+ "product": 1,
+ "type": "keyboard",
+ "xkb_active_layout_name": "English (US)",
+ "libinput_send_events": "enabled"
+ },
+ {
+ "identifier": "1267:5:Elan_Touchpad",
+ "name": "Elan Touchpad",
+ "vendor": 1267,
+ "product": 5,
+ "type": "pointer",
+ "libinput_send_events": "enabled"
+ },
+ {
+ "identifier": "3034:22494:USB2.0_VGA_UVC_WebCam:_USB2.0_V",
+ "name": "USB2.0 VGA UVC WebCam: USB2.0 V",
+ "vendor": 3034,
+ "product": 22494,
+ "type": "keyboard",
+ "xkb_active_layout_name": "English (US)",
+ "libinput_send_events": "enabled"
+ },
+ {
+ "identifier": "0:3:Sleep_Button",
+ "name": "Sleep Button",
+ "vendor": 0,
+ "product": 3,
+ "type": "keyboard",
+ "xkb_active_layout_name": "English (US)",
+ "libinput_send_events": "enabled"
+ },
+ {
+ "identifier": "0:5:Lid_Switch",
+ "name": "Lid Switch",
+ "vendor": 0,
+ "product": 5,
+ "type": "switch",
+ "libinput_send_events": "enabled"
+ {
+ "identifier": "0:6:Video_Bus",
+ "name": "Video Bus",
+ "vendor": 0,
+ "product": 6,
+ "type": "keyboard",
+ "xkb_active_layout_name": "English (US)",
+ "libinput_send_events": "enabled"
+ },
+ {
+ "identifier": "0:1:Power_Button",
+ "name": "Power Button",
+ "vendor": 0,
+ "product": 1,
+ "type": "keyboard",
+ "xkb_active_layout_name": "English (US)",
+ "libinput_send_events": "enabled"
+ }
+ ]
+ }
+]
+```
+
+# EVENTS
+
+Events are a way for client to get notified of changes to sway. A client can
+subscribe to any events it wants to be notified of changes for. The event is
+sent in the same format as a reply. The following events are currently
+available:
+
+[- *EVENT TYPE*
+:- *NAME*
+:- *DESCRIPTION*
+|- 0x80000000
+: workspace
+:[ Sent whenever an event involving a workspace occurs such as initialization
+ of a new workspace or a different workspace gains focus
+|- 0x80000002
+: mode
+: Sent whenever the binding mode changes
+|- 0x80000003
+: window
+: Sent whenever an event involving a view occurs such as being reparented,
+ focused, or closed
+|- 0x80000004
+: barconfig_update
+: Sent whenever a bar config changes
+|- 0x80000005
+: binding
+: Sent when a configured binding is executed
+|- 0x80000006
+: shutdown
+: Sent when the ipc shuts down because sway is exiting
+|- 0x80000007
+: tick
+: Sent when an ipc client sends a _SEND\_TICK_ message
+|- 0x80000014
+: bar_status_update
+: Send when the visibility of a bar should change due to a modifier
+
+
+## 0x80000000. WORKSPACE
+
+Sent whenever a change involving a workspace occurs. The event consists of a
+single object with the following properties:
+
+[- *PROPERTY*
+:- *DATA TYPE*
+:- *DESCRIPTION*
+|- change
+: string
+:[ The type of change that occurred. See below for more information
+|- current
+: object
+: An object representing the workspace effected or _null_ for _reload_ changes
+|- old
+: object
+: For a _focus_ change, this is will be an object representing the workspace
+ being switched from. Otherwise, it is _null_
+
+
+The following change types are currently available:
+[- *TYPE*
+:- *DESCRIPTION*
+|- init
+:[ The workspace was created
+|- empty
+: The workspace is empty and is being destroyed since it is not visible
+|- focus
+: The workspace was focused. See the _old_ property for the previous focus
+|- move
+: The workspace was moved to a different output
+|- rename
+: The workspace was renamed
+|- urgent
+: A view on the workspace has had their urgency hint set or all urgency hints
+ for views on the workspace have been cleared
+|- reload
+: The configuration file has been reloaded
+
+
+*Example Event:*
+```
+{
+ "change": "init",
+ "old": null,
+ "current": {
+ "id": 10,
+ "name": "2",
+ "rect": {
+ "x": 0,
+ "y": 0,
+ "width": 0,
+ "height": 0
+ },
+ "focused": false,
+ "focus": [
+ ],
+ "border": "none",
+ "current_border_width": 0,
+ "layout": "splith",
+ "percent": null,
+ "window_rect": {
+ "x": 0,
+ "y": 0,
+ "width": 0,
+ "height": 0
+ },
+ "deco_rect": {
+ "x": 0,
+ "y": 0,
+ "width": 0,
+ "height": 0
+ },
+ "geometry": {
+ "x": 0,
+ "y": 0,
+ "width": 0,
+ "height": 0
+ },
+ "window": null,
+ "urgent": false,
+ "floating_nodes": [
+ ],
+ "num": 2,
+ "output": "eDP-1",
+ "type": "workspace",
+ "representation": null,
+ "nodes": [
+ ]
+ }
+}
+```
+
+## 0x80000002. MODE
+
+Sent whenever the binding mode changes. The event consists of a single object
+with the following properties:
+
+[- *PROPERTY*
+:- *DATA TYPE*
+:- *DESCRIPTION*
+|- change
+: string
+:[ The binding mode that became active
+|- pango_markup
+: boolean
+: Whether the mode should be parsed as pango markup
+
+
+*Example Event:*
+```
+{
+ "change": "default",
+ "pango_markup": false
+}
+```
+
+## 0x80000003. WINDOW
+
+Sent whenever a change involving a view occurs. The event consists of a single
+object with the following properties:
+
+[- *PROPERTY*
+:- *DATA TYPE*
+:- *DESCRIPTION*
+|- change
+: string
+:[ The type of change that occurred. See below for more information
+|- container
+: object
+: An object representing the view effected
+
+
+The following change types are currently available:
+[- *TYPE*
+:- *DESCRIPTION*
+|- new
+:[ The view was created
+|- close
+: The view was closed
+|- focus
+: The view was focused
+|- title
+: The view's title has changed
+|- fullscreen_mode
+: The view's fullscreen mode has changed
+|- move
+: The view has been reparented in the tree
+|- floating
+: The view has become floating or is no longer floating
+|- urgent
+: The view's urgency hint has changed status
+|- mark
+: A mark has been added or removed from the view
+
+
+*Example Event:*
+```
+{
+ "change": "new",
+ "container": {
+ "id": 12,
+ "name": null,
+ "rect": {
+ "x": 0,
+ "y": 0,
+ "width": 0,
+ "height": 0
+ },
+ "focused": false,
+ "focus": [
+ ],
+ "border": "none",
+ "current_border_width": 0,
+ "layout": "none",
+ "percent": 0.0,
+ "window_rect": {
+ "x": 0,
+ "y": 0,
+ "width": 0,
+ "height": 0
+ },
+ "deco_rect": {
+ "x": 0,
+ "y": 0,
+ "width": 0,
+ "height": 0
+ },
+ "geometry": {
+ "x": 0,
+ "y": 0,
+ "width": 1124,
+ "height": 422
+ },
+ "window": 4194313,
+ "urgent": false,
+ "floating_nodes": [
+ ],
+ "type": "con",
+ "pid": 19787,
+ "app_id": null,
+ "window_properties": {
+ "class": "URxvt",
+ "instance": "urxvt",
+ "transient_for": null
+ },
+ "nodes": [
+ ]
+ }
+}
+```
+
+## 0x80000004. BARCONFIG_UPDATE
+
+Sent whenever a config for a bar changes. The event is identical to that of
+_GET_BAR_CONFIG_ when a bar ID is given as a payload. See _6. GET\_BAR\_CONFIG
+(WITH A PAYLOAD)_ above for more information.
+
+## 0x80000005. BINDING
+
+Sent whenever a binding is executed. The event is a single object with the
+following properties:
+
+[- *PROPERTY*
+:- *DATA TYPE*
+:- *DESCRIPTION*
+|- change
+: string
+:[ The change that occurred for the binding. Currently this will only be _run_
+|- command
+: string
+: The command associated with the binding
+|- event_state_mask
+: array
+: An array of strings that correspond to each modifier key for the binding
+|- input_code
+: integer
+: For keyboard bindcodes, this is the key code for the binding. For mouse
+ bindings, this is the X11 button number, if there is an equivalent. In all
+ other cases, this will be _0_.
+|- symbol
+: string
+: For keyboard bindsyms, this is the bindsym for the binding. Otherwise, this
+ will be _null_
+|- input_type
+: string
+: The input type that triggered the binding. This is either _keyboard_ or
+ _mouse_
+
+
+*Example Event:*
+```
+{
+ "change": "run",
+ "binding": {
+ "command": "workspace 2",
+ "event_state_mask": [
+ "Mod4"
+ ],
+ "input_code": 0,
+ "symbol": "2",
+ "input_type": "keyboard"
+ }
+}
+```
+
+## 0x80000006. SHUTDOWN
+
+Sent whenever the IPC is shutting down. The event is a single object with the
+property _change_, which is a string containing the reason for the shutdown.
+Currently, the only value for _change_ is _exit_, which is issued when sway is
+exiting.
+
+*Example Event:*
+```
+{
+ "change": "exit"
+}
+```
+
+## 0x80000007. TICK
+
+Sent when first subscribing to tick events or by a _SEND\_TICK_ message. The
+event is a single object with the following properties:
+
+[- *PROPERTY*
+:- *DATA TYPE*
+:- *DESCRIPTION*
+|- first
+: boolean
+: Whether this event was triggered by subscribing to the tick events
+|- payload
+: string
+: The payload given with a _SEND\_TICK_ message, if any. Otherwise, an empty
+ string
+
+
+*Example Event:*
+```
+{
+ "first": true
+ "payload": ""
+}
+```
+
+## 0x80000014. BAR_STATUS_UPDATE
+
+Sent when the visibility of a bar changes due to a modifier being pressed. The
+event is a single object with the following properties:
+
+[- *PROPERTY*
+:- *DATA TYPE*
+:- *DESCRIPTION*
+|- id
+: string
+:[ The bar ID effected
+|- visible_by_modifier
+: boolean
+: Whether the bar should be made visible due to a modifier being pressed
+
+
+*Example Event:*
+```
+{
+ "id": "bar-0",
+ "visible_by_modifier": true
+}
+```
+
+# SEE ALSO
+
+*sway*(1) *sway*(5) *sway-bar*(5) *swaymsg*(1) *sway-input*(5) *sway-output*(5)