commit 867190e0828a139fa4529cde60d033a9389df42c
parent 51b0b25587d69593eb77e3337e3fa459c1024f5c
Author: Drew DeVault <sir@cmpwn.com>
Date: Sat, 12 May 2018 09:27:24 -0400
Merge pull request #1958 from swaywm/scdoc
Port man pages to scdoc
Diffstat:
25 files changed, 1137 insertions(+), 1705 deletions(-)
diff --git a/.build.yml b/.build.yml
@@ -12,6 +12,7 @@ packages:
- gdk-pixbuf2
- libinput
- libxkbcommon
+ - scdoc
sources:
- https://github.com/swaywm/sway
- https://github.com/swaywm/wlroots
diff --git a/README.de.md b/README.de.md
@@ -58,7 +58,6 @@ Abhängigkeiten:
* xwayland
* libinput >= 1.6.0
* libcap
-* asciidoc
* pcre
* json-c >= 0.13
* pango
@@ -67,6 +66,7 @@ Abhängigkeiten:
* pam **
* imagemagick (erforderlich für Bildaufnahme mit swaygrab)
* ffmpeg (erforderlich für Videoaufnahme swaygrab)
+* [scdoc](https://git.sr.ht/~sircmpwn/scdoc) (erforderlich für man pages)
_\*Nur erforderlich für swaybar, swaybg, und swaylock_
diff --git a/README.el.md b/README.el.md
@@ -51,7 +51,6 @@ To username μου στο Freenode είναι kon14 και θα με βρείτ
* xwayland
* libinput >= 1.6.0
* libcap
-* asciidoc
* pcre
* json-c >= 0.13
* pango
@@ -60,6 +59,7 @@ To username μου στο Freenode είναι kon14 και θα με βρείτ
* pam **
* imagemagick (αναγκαίο για καταγραφή εικόνας μέσω του swaygrab)
* ffmpeg (αναγκαίο για καταγραφή video μέσω του swaygrab)
+* [scdoc](https://git.sr.ht/~sircmpwn/scdoc) (required for man pages)
_\*Απαιτείται μόνο για swaybar, swaybg, and swaylock_
diff --git a/README.fr.md b/README.fr.md
@@ -53,7 +53,6 @@ Installez les dépendances :
* xwayland
* libinput >= 1.6.0
* libcap
-* asciidoc
* pcre
* json-c >= 0.13
* pango
@@ -62,6 +61,7 @@ Installez les dépendances :
* pam **
* imagemagick (requis pour la capture d'image avec swaygrab)
* ffmpeg (requis pour la capture vidéo avec swaygrab)
+* [scdoc](https://git.sr.ht/~sircmpwn/scdoc) (requis pour les pages man)
_\*Uniquement requis pour swaybar, swaybg, and swaylock_
diff --git a/README.it.md b/README.it.md
@@ -54,7 +54,6 @@ Installa queste dipendenze:
* xwayland
* libinput >= 1.6.0
* libcap
-* asciidoc
* pcre
* json-c >= 0.13
* pango
@@ -63,6 +62,7 @@ Installa queste dipendenze:
* pam **
* imagemagick (richiesto per catturare immagini con swaygrab)
* ffmpeg (rrichiesto per catturare video con swaygrab)
+* [scdoc](https://git.sr.ht/~sircmpwn/scdoc) (rrichiesto per man pages)
_\*Richiesto solo per swaybar, swaybg, e swaylock_
diff --git a/README.ja.md b/README.ja.md
@@ -44,7 +44,6 @@ Swayは沢山のディストリビューションで提供されています。"
* xwayland
* libinput >= 1.6.0
* libcap
-* asciidoc
* pcre
* json-c >= 0.13
* pango
@@ -53,6 +52,7 @@ Swayは沢山のディストリビューションで提供されています。"
* pam **
* imagemagick (swaygrabでスクリーンショットを撮るのに必要です)
* ffmpeg (swaygrabで画面を録画するのに必要です)
+* [scdoc](https://git.sr.ht/~sircmpwn/scdoc) (manで必要です)
_\*swaybar,swaybg,swaylockでのみ必要です_
diff --git a/README.md b/README.md
@@ -51,7 +51,6 @@ Install dependencies:
* xwayland
* libinput >= 1.6.0
* libcap
-* asciidoc
* pcre
* json-c >= 0.13
* pango
@@ -61,6 +60,7 @@ Install dependencies:
* dbus >= 1.10 ***
* imagemagick (required for image capture with swaygrab)
* ffmpeg (required for video capture with swaygrab)
+* [scdoc](https://git.sr.ht/~sircmpwn/scdoc) (required for man pages)
_\*Only required for swaybar, swaybg, and swaylock_
diff --git a/README.pt.md b/README.pt.md
@@ -60,7 +60,6 @@ Antes de iniciar a compilação, instale as dependências:
* xwayland
* libinput >= 1.6.0
* libcap
-* asciidoc
* pcre
* json-c >= 0.13
* pango
@@ -69,6 +68,7 @@ Antes de iniciar a compilação, instale as dependências:
* pam **
* imagemagick (capturar imagem com o swaygrab)
* ffmpeg (capturar vídeo com o swaygrab)
+* [scdoc](https://git.sr.ht/~sircmpwn/scdoc) (man pages)
_\*Dependência apenas de swaybar, swaybg, e swaylock_
diff --git a/README.ru.md b/README.ru.md
@@ -55,7 +55,6 @@ Sway доступен во многих дистрибутивах и наход
* xwayland
* libinput >= 1.6.0
* libcap
-* asciidoc
* pcre
* json-c >= 0.13
* pango
@@ -65,6 +64,7 @@ Sway доступен во многих дистрибутивах и наход
* dbus >= 1.10 ***
* imagemagick (требуется для захвата изображений через swaygrab)
* ffmpeg (требуется для захвата видео через swaygrab)
+* [scdoc](https://git.sr.ht/~sircmpwn/scdoc) (required for man pages)
_\*Требуется только для swaybar, swaybg и swaylock_
diff --git a/README.uk.md b/README.uk.md
@@ -60,7 +60,6 @@ Sway доступний у багатьох дистрибутивах Linux (а
* xwayland
* libinput >= 1.6.0
* libcap
-* asciidoc
* pcre
* json-c >= 0.13
* pango
@@ -69,6 +68,7 @@ Sway доступний у багатьох дистрибутивах Linux (а
* pam **
* imagemagick (для захоплення зображень за допомогою swaygrab)
* ffmpeg (для захоплення відео за допомогою swaygrab)
+* [scdoc](https://git.sr.ht/~sircmpwn/scdoc) (required for man pages)
_\*Лише для swaybar, swaybg та swaylock_
diff --git a/meson.build b/meson.build
@@ -40,7 +40,6 @@ libpam = cc.find_library('pam')
math = cc.find_library('m')
rt = cc.find_library('rt')
git = find_program('git', required: false)
-a2x = find_program('a2x', required: false)
conf_data = configuration_data()
@@ -48,31 +47,30 @@ if gdk_pixbuf.found()
conf_data.set('HAVE_GDK_PIXBUF', true)
endif
-if a2x.found()
+scdoc = find_program('scdoc', required: false)
+
+if scdoc.found()
+ sh = find_program('sh')
mandir = get_option('mandir')
man_files = [
- 'sway/sway.1.txt',
- 'sway/sway.5.txt',
- 'sway/sway-bar.5.txt',
- 'sway/sway-input.5.txt',
- 'sway/sway-security.7.txt',
- 'swaymsg/swaymsg.1.txt',
+ 'sway/sway.1.scd',
+ 'sway/sway.5.scd',
+ 'sway/sway-bar.5.scd',
+ 'sway/sway-input.5.scd',
+ 'swaylock/swaylock.1.scd',
+ 'swaymsg/swaymsg.1.scd',
]
foreach filename : man_files
topic = filename.split('.')[-3].split('/')[-1]
section = filename.split('.')[-2]
+ output = '@0@.@1@'.format(topic, section)
custom_target(
- 'man-@0@-@1@'.format(topic, section),
+ output,
input: filename,
- output: '@BASENAME@',
+ output: output,
command: [
- a2x,
- '--no-xmllint',
- '--doctype', 'manpage',
- '--format', 'manpage',
- '--destination-dir', meson.current_build_dir(),
- '@INPUT@'
+ sh, '-c', '@0@ < @INPUT@ > @1@'.format(scdoc.path(), output)
],
install: true,
install_dir: '@0@/man@1@'.format(mandir, section)
diff --git a/sway/sway-bar.5.scd b/sway/sway-bar.5.scd
@@ -0,0 +1,147 @@
+sway-bar(5)
+
+# NAME
+
+sway-bar - bar configuration file and commands
+
+# DESCRIPTION
+
+Sway allows configuring swaybar in the sway configuration file. Swaybar
+commands must be used inside a _bar { }_ block in the config file.
+
+# COMMANDS
+
+*status\_command* <status command>
+ Executes the bar _status command_ with _sh -c_. Each line of text printed
+ to stdout from this command will be displayed in the status area of the
+ bar. You may also use the i3bar JSON protocol:
+
+ https://i3wm.org/docs/i3bar-protocol.html
+
+*pango\_markup* enabled|disabled
+ Enables or disables pango markup for status lines. This has no effect on
+ status lines using the i3bar JSON protocol.
+
+*id* <bar\_id>
+ Sets the ID of the bar.
+
+*position* top|bottom
+ Sets position of the bar. Default is _bottom_.
+
+*output* <output>
+ Restrict the bar to a certain output, can be specified multiple times. If
+ the output command is omitted, the bar will be displayed on all outputs.
+
+*swaybar\_command* <command>
+ Executes custom bar command. Default is _swaybar_.
+
+*font* <font>
+ Specifies the font to be used in the bar.
+
+*separator\_symbol* <symbol>
+ Specifies the separator symbol to separate blocks on the bar.
+
+*wrap\_scroll* yes|no
+ Enables or disables wrapping when scrolling through workspaces with the
+ scroll wheel. Default is _no_.
+
+*workspace\_buttons* yes|no
+ Enables or disables workspace buttons on the bar. Default is _yes_.
+
+*strip\_workspace\_numbers* yes|no
+ If set to _yes_, then workspace numbers will be omitted from the workspace
+ button and only the custom name will be shown. Default is _no_.
+
+*binding\_mode\_indicator* yes|no
+ Enable or disable binding mode indicator. Default is _yes_.
+
+*height* <height>
+ Sets the height of the bar. Default height will match the font size.
+
+## TRAY
+
+Swaybar provides a system tray where third-party applications may place icons.
+The following commands configure the tray.
+
+The _button_ argument in all cases is a platform-specific button code. On Linux
+you can find a list of these at linux/input-event-codes.h.
+
+*activate\_button* <button>
+ Sets the button to be used for the _activate_ (primary click) tray item
+ event. The default is BTN\_LEFT (0x110).
+
+*context\_button* <button>
+ Sets the button to be used for the _context menu_ (right click) tray item
+ event. The default is BTN\_RIGHT (0x111).
+
+*secondary\_button* <button>
+ Sets the button to be used for the _secondary_ (middle click) tray item
+ event. The default is BTN\_MIDDLE (0x112).
+
+*tray\_output* none|all|<output>
+ Sets the output that the tray will appear on or none. Unlike i3bar, swaybar
+ is able to show icons on any number of bars and outputs without races.
+ The default is _all_.
+
+*tray\_padding* <px> [px]
+ Sets the pixel padding of the system tray. This padding will surround the
+ tray on all sides and between each item. The default value for _px_ is 2.
+
+*icon\_theme* <name>
+ Sets the icon theme that sway will look for item icons in. This option has
+ no default value, because sway will always default to the fallback theme,
+ hicolor.
+
+## COLORS
+
+Colors are defined within a _colors { }_ block inside a _bar { }_ block. Colors
+must be defined in hex: _#RRGGBB_ or _#RRGGBBAA_.
+
+*background* <color>
+ Background color of the bar.
+
+*statusline* <color>
+ Text color to be used for the statusline.
+
+*separator* <color>
+ Text color to be used for the separator.
+
+*focused\_background* <color>
+ Background color of the bar on the currently focused monitor output. If not
+ used, the color will be taken from _background_.
+
+*focused\_statusline* <color>
+ Text color to be used for the statusline on the currently focused monitor
+ output. If not used, the color will be taken from _statusline_.
+
+*focused\_separator* <color>
+ Text color to be used for the separator on the currently focused monitor
+ output. If not used, the color will be taken from _separator_.
+
+*focused\_workspace* <border> <background> <text>
+ Border, background and text color for a workspace button when the workspace
+ has focus.
+
+*active\_workspace* <border> <background> <text>
+ Border, background and text color for a workspace button when the workspace
+ is active (visible) on some output, but the focus is on another one. You
+ can only tell this apart from the focused workspace when you are using
+ multiple monitors.
+
+*inactive\_workspace* <border> <background> <text>
+ Border, background and text color for a workspace button when the workspace
+ does not have focus and is not active (visible) on any output. This will be
+ the case for most workspaces.
+
+*urgent\_workspace* <border> <background> <text>
+ Border, background and text color for a workspace button when the workspace
+ contains a window with the urgency hint set.
+
+*binding\_mode* <border> <background> <text>
+ Border, background and text color for the binding mode indicator. If not used,
+ the colors will be taken from _urgent\_workspace_.
+
+# SEE ALSO
+
+*sway*(5)
+
diff --git a/sway/sway-bar.5.txt b/sway/sway-bar.5.txt
@@ -1,159 +0,0 @@
-/////
-vim:set ts=4 sw=4 tw=82 noet:
-/////
-sway-bar (5)
-============
-
-Name
-----
-sway-bar - bar configuration file and commands
-
-Description
------------
-
-Sway allows configuring swaybar in the sway configuration file.
-Swaybar commands must be used inside a _bar { }_ block in the config file.
-
-
-Commands
---------
-
-**status_command** <status command>::
- Executes the bar _status command_ with _sh -c_. Each line of text printed to
- stdout from this command will be displayed in the status area of the bar. You
- may also use the i3bar JSON protocol:
- +
- https://i3wm.org/docs/i3bar-protocol.html
-
-**pango_markup** <enabled|disabled>::
- Enables or disables pango markup for status lines. This has no effect on
- status lines using the i3bar JSON protocol.
-
-**id** <bar_id>::
- Sets the ID of the bar.
-
-**position** <top|bottom>::
- Sets position of the bar. Default is _bottom_.
-
-**output** <output>::
- Restrict the bar to a certain output, can be specified multiple times. If the
- output command is omitted, the bar will be displayed on all outputs.
-
-**swaybar_command** <command>::
- Executes custom bar command, default is _swaybar_.
-
-**font** <font>::
- Specifies the font to be used in the bar.
-
-**separator_symbol** <symbol>::
- Specifies the separator symbol to separate blocks on the bar.
-
-**wrap_scroll** <yes|no>::
- Enables or disables wrapping when scrolling through workspaces with the
- scroll wheel. Default is _no_.
-
-**workspace_buttons** <yes|no>::
- Enables or disables workspace buttons on the bar. Default is _yes_.
-
-**strip_workspace_numbers** <yes|no>::
- If set to _yes_, then workspace numbers will be omitted from the workspace
- button and only the custom name will be shown. Default is _no_.
-
-**binding_mode_indicator** <yes|no>::
- Enable or disable binding mode indicator. Default is _yes_.
-
-**height** <height>::
- Sets the height of the bar. Default height will match the font size.
-
-Tray
-----
-
-Swaybar provides a system tray where programs such as NetworkManager, VLC,
-Pidgin, etc. can place little icons. The following commands configure
-interaction with the tray or individual icons.
-The _button_ argument in all following commands is a Linux input event code as
-defined in linux/input-event-codes.h. This is because wayland defines button
-codes in this manner.
-
-**activate_button** <button>::
- Sets the button to be used for the _activate_ (primary click) tray item
- event. The default is BTN_LEFT (0x110).
-
-**context_button** <button>::
- Sets the button to be used for the _context menu_ (right click) tray item
- event. The default is BTN_RIGHT (0x111).
-
-**secondary_button** <button>::
- Sets the button to be used for the _secondary_ (middle click) tray item
- event. The default is BTN_MIDDLE (0x112).
-
-**tray_output** none|all|<name>::
- Sets the output that the tray will appear on or none. Unlike i3bar, swaybar
- should be able to show icons on any number of bars and outputs without
- races. Because of this, the default value for this is _all_.
-
-**tray_padding** <px> [px]::
- Sets the pixel padding of the system tray. This padding will surround the
- tray on all sides and between each item. The default value for _px_ is 2.
-
-**icon_theme** <name>::
- Sets the icon theme that sway will look for item icons in. This option has
- no default value, because sway will always default to the fallback theme,
- hicolor.
-
-Colors
-------
-
-Colors are defined within a _colors { }_ block inside a _bar { }_ block. Colors
-must be defined in hex. i.e. _#rrggbb_ or _#rrggbbaa_ when including the alpha
-channel.
-
-**background** <color>::
- Background color of the bar.
-
-**statusline** <color>::
- Text color to be used for the statusline.
-
-**separator** <color>::
- Text color to be used for the separator.
-
-**focused_background** <color>::
- Background color of the bar on the currently focused monitor output. If not
- used, the color will be taken from _background_.
-
-**focused_statusline** <color>::
- Text color to be used for the statusline on the currently focused monitor
- output. If not used, the color will be taken from _statusline_.
-
-**focused_separator** <color>::
- Text color to be used for the separator on the currently focused monitor
- output. If not used, the color will be taken from _separator_.
-
-**focused_workspace** <border> <background> <text>::
- Border, background and text color for a workspace button when the workspace
- has focus.
-
-**active_workspace** <border> <background> <text>::
- Border, background and text color for a workspace button when the workspace is
- active (visible) on some output, but the focus is on another one. You can only
- tell this apart from the focused workspace when you are using multiple
- monitors.
-
-**inactive_workspace** <border> <background> <text>::
- Border, background and text color for a workspace button when the workspace
- does not have focus and is not active (visible) on any output. This will be
- the case for most workspaces.
-
-**urgent_workspace** <border> <background> <text>::
- Border, background and text color for a workspace button when the workspace
- contains a window with the urgency hint set.
-
-**binding_mode** <border> <background> <text>::
- Border, background and text color for the binding mode indicator. If not used,
- the colors will be taken from _urgent_workspace_.
-
-
-See Also
---------
-
-**sway**(5)
diff --git a/sway/sway-input.5.scd b/sway/sway-input.5.scd
@@ -0,0 +1,120 @@
+sway-input(5)
+
+# NAME
+
+sway-input - input configuration file and commands
+
+# DESCRIPTION
+
+Sway allows for configuration of devices within the sway configuration file.
+sway-input commands must be used inside an _input { }_ block in the config.
+To obtain a list of available device identifiers, run *swaymsg -t get\_inputs*.
+
+# INPUT COMMANDS
+
+## KEYBOARD CONFIGURATION
+
+For more information on these xkb configuration options, see
+*xkeyboard-config*(7).
+
+*input* <identifier> xkb\_layout <layout\_name>
+ Sets the layout of the keyboard like _us_ or _de_.
+
+*input* <identifier> xkb\_model <model\_name>
+ Sets the model of the keyboard. This has an influence for some extra keys
+ your keyboard might have.
+
+*input* <identifier> xkb\_options <options>
+ Sets extra xkb configuration options for the keyboard.
+
+*input* <identifier> xkb\_rules <rules>
+ Sets files of rules to be used for keyboard mapping composition.
+
+*input* <identifier> xkb\_variant <variant>
+ Sets the variant of the keyboard like _dvorak_ or _colemak_.
+
+## MAPPING CONFIGURATION
+
+*input* <identifier> map\_to\_output <identifier>
+ Maps inputs from this device to the specified output. Only meaningful if the
+ device is a pointer, touch, or drawing tablet device.
+
+*input* <identifier> map\_to\_region <WxH@X,Y>
+ Maps inputs from this device to the specified region of the global output
+ layout. Only meaningful if the device is a pointer, touch, or drawing tablet
+ device.
+
+*input* <identifier> map\_from\_region <X1xY1> <X2xY2>
+ Ignores inputs from this device that do not occur within the specified
+ region. Can be in millimeters (e.g. 10x20mm 20x40mm) or in terms of 0..1
+ (e.g. 0.5x0.5 0.7x0.7). Not all devices support millimeters. Only meaningful
+ if the device is not a keyboard an provides events in absolute terms (such
+ as a drawing tablet or touch screen - most pointers provide events relative
+ to the previous frame).
+
+## LIBINPUT CONFIGURATION
+
+*input* <identifier> accel\_profile adaptive|flat
+ Sets the pointer acceleration profile for the specified input device.
+
+*input* <identifier> click\_method none|button\_areas|clickfinger
+ Changes the click method for the specified device.
+
+*input* <identifier> drag\_lock enabled|disabled
+ Enables or disables drag lock for specified input device.
+
+*input* <identifier> dwt enabled|disabled
+ Enables or disables disable-while-typing for the specified input device.
+
+*input* <identifier> events enabled|disabled|disabled\_on\_external\_mouse
+ Enables or disables send_events for specified input device. (Disabling
+ send_events disables the input device)
+
+*input* <identifier> left\_handed enabled|disabled
+ Enables or disables left handed mode for specified input device.
+
+*input* <identifier> middle\_emulation enabled|disabled
+ Enables or disables middle click emulation.
+
+*input* <identifier> natural\_scroll enabled|disabled
+ Enables or disables natural (inverted) scrolling for the specified input
+ device.
+
+*input* <identifier> pointer\_accel [<-1|1>]
+ Changes the pointer acceleration for the specified input device.
+
+*input* <identifier> repeat\_delay <milliseconds>
+ Sets the amount of time a key must be held before it starts repeating.
+
+*input* <identifier> repeat\_rate <characters per second>
+ Sets the frequency of key repeats once the repeat\_delay has passed.
+
+*input* <identifier> scroll\_method none|two\_finger|edge|on\_button\_down
+ Changes the scroll method for the specified input device.
+
+*input* <identifier> tap enabled|disabled
+ Enables or disables tap for specified input device.
+
+## SEAT CONFIGURATION
+
+Configure options for multiseat mode. sway-seat commands must be used inside a
+_seat { }_ block in the config.
+
+A *seat* is a collection of input devices that act independently of each other.
+Seats are identified by name and the default seat is _seat0_ if no seats are
+configured. Each seat has an independent keyboard focus and a separate cursor that
+is controlled by the pointer devices of the seat. This is useful for multiple
+people using the desktop at the same time with their own devices (each sitting
+in their own "seat").
+
+*seat* <name> attach <input\_identifier>
+ Attach an input device to this seat by its input identifier. A special
+ value of "\*" will attach all devices to the seat.
+
+*seat* <name> fallback true|false
+ Set this seat as the fallback seat. A fallback seat will attach any device
+ not explicitly attached to another seat (similar to a "default" seat).
+
+# SEE ALSO
+
+*sway*(5)
diff --git a/sway/sway-input.5.txt b/sway/sway-input.5.txt
@@ -1,131 +0,0 @@
-/////
-vim:set ft=asciidoc ts=4 sw=4 tw=82 noet:
-/////
-sway-input (5)
-==============
-
-Name
-----
-sway-input - input configuration file and commands
-
-Description
------------
-
-Sway allows for configuration of devices within the sway configuration file.
-sway-input commands must be used inside an _input { }_ block in the config.
-To obtain a list of available device identifiers, run **swaymsg -t get_inputs**.
-
-Input Commands
---------------
-
-Keyboard Configuration
-~~~~~~~~~~~~~~~~~~~~~~
-
-For more information on these xkb configuration options, see
-**xkeyboard-config**(7).
-
-**input** <identifier> xkb_layout <layout_name>::
- Sets the layout of the keyboard like _us_ or _de_.
-
-**input** <identifier> xkb_model <model_name>::
- Sets the model of the keyboard. This has an influence for some extra keys your
- keyboard might have.
-
-**input** <identifier> xkb_options <options>::
- Sets extra xkb configuration options for the keyboard.
-
-**input** <identifier> xkb_rules <rules>::
- Sets files of rules to be used for keyboard mapping composition.
-
-**input** <identifier> xkb_variant <variant>::
- Sets the variant of the keyboard like _dvorak_ or _colemak_.
-
-Mapping Configuration
----------------------
-
-**input** <identifier> map_to_output <identifier>::
- Maps inputs from this device to the specified output. Only meaningful if the
- device is a pointer, touch, or drawing tablet device.
-
-**input** <identifier> map_to_region <WxH\@X,Y>::
- Maps inputs from this device to the specified region of the global output
- layout. Only meaningful if the device is a pointer, touch, or drawing tablet
- device.
-
-**input** <identifier> map_from_region <X1xY1> <X2xY2>::
- Ignores inputs from this device that do not occur within the specified
- region. Can be in millimeters (e.g. 10x20mm 20x40mm) or in terms of 0..1
- (e.g. 0.5x0.5 0.7x0.7). Not all devices support millimeters. Only meaningful
- if the device is not a keyboard an provides events in absolute terms (such
- as a drawing tablet or touch screen - most pointers provide events relative
- to the previous frame).
-
-Libinput Configuration
-~~~~~~~~~~~~~~~~~~~~~~
-
-**input** <identifier> accel_profile <adaptive|flat>::
- Sets the pointer acceleration profile for the specified input device.
-
-**input** <identifier> click_method <none|button_areas|clickfinger>::
- Changes the click method for the specified device.
-
-**input** <identifier> drag_lock <enabled|disabled>::
- Enables or disables drag lock for specified input device.
-
-**input** <identifier> dwt <enabled|disabled>::
- Enables or disables disable-while-typing for the specified input device.
-
-**input** <identifier> events <enabled|disabled|disabled_on_external_mouse>::
- Enables or disables send_events for specified input device.
- (Disabling send_events disables the input device)
-
-**input** <identifier> left_handed <enabled|disabled>::
- Enables or disables left handed mode for specified input device.
-
-**input** <identifier> middle_emulation <enabled|disabled>::
- Enables or disables middle click emulation.
-
-**input** <identifier> natural_scroll <enabled|disabled>::
- Enables or disables natural (inverted) scrolling for the specified input
- device.
-
-**input** <identifier> pointer_accel <[-1,1]>::
- Changes the pointer acceleration for the specified input device.
-
-**input** <identifier> repeat_delay <milliseconds>::
- Sets the amount of time a key must be held before it starts repeating.
-
-**input** <identifier> repeat_rate <characters per second>::
- Sets the frequency of key repeats once the repeat_delay has passed.
-
-**input** <identifier> scroll_method <none|two_finger|edge|on_button_down>::
- Changes the scroll method for the specified input device.
-
-**input** <identifier> tap <enabled|disabled>::
- Enables or disables tap for specified input device.
-
-Seat Configuration
-------------------
-
-Configure options for multiseat mode. sway-seat commands must be used inside a
-_seat { }_ block in the config.
-
-A _seat_ is a collection of input devices that act independently of each other.
-Seats are identified by name and the default seat is _seat0_ if no seats are
-configured. Each seat has an independent keyboard focus and a separate cursor that
-is controlled by the pointer devices of the seat. This is useful for multiple
-people using the desktop at the same time with their own devices (each sitting in
-their own "seat").
-
-**seat** <name> attach <input_identifier>::
- Attach an input device to this seat by its input identifier. A special value
- of _*_ will attach all devices to the seat.
-
-**seat** <name> fallback <true|false>::
- Set this seat as the fallback seat. A fallback seat will attach any device not
- explicitly attached to another seat (similar to a "default" seat).
-
-See Also
---------
-
-**sway**(5)
diff --git a/sway/sway-security.7.txt b/sway/sway-security.7.txt
@@ -1,242 +0,0 @@
-/////
-vim:set ts=4 sw=4 tw=82 noet:
-/////
-sway-security (7)
-=================
-
-Name
-----
-sway-security - Guidelines for securing your sway install
-
-Security Overview
------------------
-
-**Sway is NOT secure**. We are working on it but do not trust that we have it all
-figured out yet. The following man page is provisional.
-
-Securing sway requires careful configuration of your environment, the sort that's
-usually best suited to a distribution maintainer who wants to ship a secure sway
-environment in their distribution. Sway provides a number of means of securing it but
-you must make a few changes external to sway first.
-
-Configuration of security features is limited to files in the security directory
-(this is likely /etc/sway/security.d/*, but depends on your installation prefix).
-Files in this directory must be owned by root:root and chmod 644 or 444. The default
-security configuration is installed to /etc/sway/security.d/00-defaults, and
-should not be modified - it will be updated with the latest recommended security
-defaults between releases. To override the defaults, you should add more files to
-this directory.
-
-Environment security
---------------------
-
-LD_PRELOAD is a mechanism designed to ruin the security of your system. There are
-a number of strategies for dealing with this, but they all suck a little. In order
-of most practical to least practical:
-
-1. Only run important programs via exec. Sway's exec command will ensure that
- LD_PRELOAD is unset when running programs.
-
-2. Remove LD_PRELOAD support from your dynamic loader (requires patching libc).
- This may break programs that rely on LD_PRELOAD for legitimate functionality,
- but this is the most effective solution.
-
-3. Use static linking for important programs. Of course statically linked programs
- are unaffected by the dynamic linking security dumpster fire.
-
-Note that should you choose method 1, you MUST ensure that sway itself isn't
-compromised by LD_PRELOAD. It probably isn't, but you can be sure by setting
-/usr/bin/sway to a+s (setuid), which will instruct the dynamic linker not to
-permit LD_PRELOAD for it (and will also run it as root, which sway will shortly
-drop). You could also statically link sway itself.
-
-Note that LD_LIBRARY_PATH has all of these problems, and the same solutions.
-
-Read your log
--------------
-
-Sway does sanity checks and prints big red warnings to stderr if they fail. Read
-them.
-
-Feature policies
-----------------
-
-Certain sway features are security sensitive and may be configured with security
-policies. These features are:
-
-**background**::
- Permission for a program to become the background.
-
-**fullscreen**::
- Permission to become fullscreen. Note that users can always make a window
- fullscreen themselves with the fullscreen command.
-
-**ipc**::
- Permission to connect to sway's IPC socket.
-
-**keyboard**::
- Permission to receive keyboard events (only while they are focused).
-
-**lock**::
- Permission for a program to act as a screen locker. This involves becoming
- fullscreen (on all outputs) and receiving _all_ keyboard and mouse input for
- the duration of the process.
-
-**mouse**::
- Permission to receive mouse events (only while the mouse is over them).
-
-**panel**::
- Permission for a program to stick its windows to the sides of the screen.
-
-**screenshot**::
- Permission to take screenshots or record the screen.
-
-By default, no permissions are granted (though saner defaults are provided in
-/etc/sway/config.d/security). You can use the following configuration options to control
-a program's access:
-
-**permit** <executable> <features...>::
- Permits <executable> to use <features> (each feature separated by a space).
- <executable> may be * to affect the default policy, or the full path to the
- executable file.
-
-**reject** <executable> <features...>::
- Disallows <executable> from using <features> (each feature separated by a space).
- <executable> may be * to affect the default policy, or the full path to the
- executable file.
-
-Note that policy enforcement requires procfs to be mounted at /proc and the sway
-process to be able to access _/proc/[pid]/exe_ (see **procfs(5)** for details on
-this access - setcap cap_sys_ptrace=eip /usr/bin/sway should do the trick). If
-sway is unable to read _/proc/[pid]/exe_, it will apply the default policy.
-
-To work correctly, sway's own programs require the following permissions:
-
-- swaybg: background
-- swaylock: lock, keyboard
-- swaybar: panel, mouse, ipc
-- swaygrab: screenshot, ipc
-
-When you first declare a policy for an executable, it will inherit the default
-policy. Further changes to the default policy will not retroactively affect which
-permissions an earlier policy inherits. You must explicitly reject any features
-from the default policy that you do not want an executable to receive permission
-for.
-
-Command policies
-----------------
-
-You can also control the context from which a command may execute. The different
-contexts you can control are:
-
-**config**::
- Can be run from your config file.
-
-**binding**::
- Can be run from bindsym or bindcode commands.
-
-**ipc**::
- Can be run by IPC clients.
-
-**criteria**::
- Can be run when evaluating window criteria.
-
-**all**::
- Shorthand for granting permission in all contexts.
-
-By default a command is allowed to execute in any context. To configure this, open
-a commands block and fill it with policies:
-
- commands {
- <name> <contexts...>
- ...
- }
-
-For example, you could do this to limit the use of the focus command to just
-binding and criteria:
-
- commands {
- focus binding criteria
- }
-
-Setting a command policy overwrites any previous policy that was in place.
-
-IPC policies
-------------
-
-Disabling IPC access via swaymsg is encouraged if you intend to secure the IPC
-socket, because any program that can execute swaymsg could circumvent its own
-security policy by simply invoking swaymsg.
-
-You can configure which features of IPC are available for particular clients:
-
- ipc <executable> {
- ...
- }
-
-You may use * for <executable> to configure the default policy for all clients.
-Configuring IPC policies for specific executables is not supported on FreeBSD, and
-the default policy will be applied to all IPC connections.
-
-The following commands are available within this block:
-
-**bar-config** <enabled|disabled>::
- Controls GET_BAR_CONFIG (required for swaybar to work at all).
-
-**command** <enabled|disabled>::
- Controls executing sway commands via IPC.
-
-**inputs** <enabled|disabled>::
- Controls GET_INPUTS (input device information).
-
-**marks** <enabled|disabled>::
- Controls GET_MARKS.
-
-**outputs** <enabled|disabled>::
- Controls GET_OUTPUTS.
-
-**seats** <enabled|disabled>::
- Controls GET_SEATS.
-
-**tree** <enabled|disabled>::
- Controls GET_TREE.
-
-**workspaces** <enabled|disabled>::
- Controls GET_WORKSPACES.
-
-You can also control which IPC events can be raised with an events block:
-
- ipc <executable> {
- events {
- ...
- }
- }
-
-The following commands are valid within an IPC events block:
-
-**binding** <enabled|disabled>::
- Controls keybinding notifications (disabled by default).
-
-**input** <enabled|disabled>::
- Controls input device hotplugging notifications.
-
-**mode** <enabled|disabled>::
- Controls output hotplugging notifications.
-
-**output** <enabled|disabled>::
- Controls output hotplugging notifications.
-
-**window** <enabled|disabled>::
- Controls window event notifications.
-
-**workspace** <enabled|disabled>::
- Controls workspace notifications.
-
-In each of these blocks, you may use * (as in "* enabled" or "* disabled") to
-control access to every feature at once.
-
-Authors
--------
-Maintained by Drew DeVault <sir@cmpwn.com>, who is assisted by other open
-source contributors. For more information about sway development, see
-<https://github.com/swaywm/sway>.
diff --git a/sway/sway.1.scd b/sway/sway.1.scd
@@ -0,0 +1,95 @@
+sway(1)
+
+# NAME
+
+sway - SirCmpwn's Wayland window manager
+
+# SYNOPSIS
+
+*sway* [options...] [command]
+
+# OPTIONS
+
+*-h, --help*
+ Show help message and quit.
+
+*-c, --config* <config>
+ Specifies a config file.
+
+*-C, --validate*
+ Check the validity of the config file, then exit.
+
+*-d, --debug*
+ Enables full logging, including debug information.
+
+*-v, --version*
+ Show the version number and quit.
+
+*-V, --verbose*
+ Enables more verbose logging.
+
+*--get-socketpath*
+ Gets the IPC socket path and prints it, then exits.
+
+# DESCRIPTION
+
+sway was created to fill the need of an i3-like window manager for Wayland. The
+upstream i3 developers have no intention of porting i3 to Wayland, and projects
+proposed by others ended up as vaporware. Many thanks to the i3 folks for
+providing such a great piece of software, so good that your users would rather
+write an entirely new window manager from scratch that behaved _exactly_ like i3
+rather than switch to something else.
+
+You can run sway directly from a tty, or via a Wayland-compatible login manager.
+
+# CONFIGURATION
+
+sway searches for a config file in the following locations, in this order:
+
+. ~/.sway/config
+. $XDG\_CONFIG\_HOME/sway/config (suggested location)
+. ~/.i3/config
+. $XDG\_CONFIG\_HOME/i3/config
+. /etc/sway/config
+. /etc/i3/config
+
+If unset, $XDG\_CONFIG\_HOME defaults to *~/.config*.
+
+An error is raised when no config file is found. The recommended default
+configuration is usually installed to */etc/sway/config*; you are encouraged to
+copy this to *~/.config/sway/config* and edit it from there.
+
+For information on the config file format, see *sway*(5).
+
+# IPC COMMANDS
+
+Though *swaymsg*(1) is generally preferred, you may run *sway* _command_ to
+send _command_ to the running instance of sway. You can also issue commands
+with *i3-msg*(1) or even with *i3*(1).
+
+# ENVIRONMENT
+
+The following environment variables have an effect on sway:
+
+_SWAY\_CURSOR\_THEME_
+ Specifies the name of the cursor theme to use.
+
+_SWAY\_CURSOR\_SIZE_
+ Specifies the size of the cursor to use.
+
+_SWAYSOCK_
+ Specifies the path to the sway IPC socket.
+
+_XKB\_DEFAULT\_RULES_, _XKB\_DEFAULT\_MODEL_, _XKB\_DEFAULT\_LAYOUT_,
+_XKB\_DEFAULT\_VARIANT_, _XKB\_DEFAULT\_OPTIONS_
+ Configures the xkb keyboard settings. See *xkeyboard-config*(7).
+
+# AUTHORS
+
+Maintained by Drew DeVault <sir@cmpwn.com>, who is assisted by other open
+source contributors. For more information about sway development, see
+<https://github.com/swaywm/sway>.
+
+# SEE ALSO
+
+*sway*(5) *swaymsg*(1) *swaygrab*(1) *sway-input*(5) *sway-bar*(5)
diff --git a/sway/sway.1.txt b/sway/sway.1.txt
@@ -1,109 +0,0 @@
-/////
-vim:set ft=asciidoc ts=4 sw=4 tw=82 noet:
-/////
-:quotes.~:
-
-sway (1)
-========
-
-Name
-----
-sway - SirCmpwn's Wayland window manager
-
-Synopsis
---------
-'sway' [options] [command]
-
-Options
--------
-
-*-h, --help*::
- Show help message and quit.
-
-*-c, \--config* <config>::
- Specifies a config file.
-
-*-C, \--validate*::
- Check the validity of the config file, then exit.
-
-*-d, --debug*::
- Enables full logging, including debug information.
-
-*-v, \--version*::
- Show the version number and quit.
-
-*-V, --verbose*::
- Enables more verbose logging.
-
-*--get-socketpath*::
- Gets the IPC socket path and prints it, then exits.
-
-Description
------------
-
-sway was created to fill the need of an i3-like window manager for Wayland. The
-upstream i3 developers have no intention of porting i3 to Wayland, and projects
-proposed by others ended up as vaporware. Many thanks to the i3 folks for
-providing such a great piece of software, so good that your users would rather
-write an entirely new window manager from scratch that behaved _exactly_ like i3
-rather than switch to something else.
-
-Launch sway directly from a tty or via your favorite Wayland-compatible login
-manager.
-
-Commands
---------
-
-If sway is currently running, you may run _sway [command]_ to send _command_ to
-the running instance of sway. The same commands you would use in the config file
-are valid here (see **sway**(5)). For compatibility reasons, you may also issue
-commands with **swaymsg**(1) or **i3-msg**(1) (or even with **i3**(1), probably).
-
-Configuration
--------------
-
-The path to a config file can be given via the _-c_ parameter, else
-sway searches for it in the following locations:
-- ~/.sway/config
-- $XDG_CONFIG_HOME/sway/config (suggested location)
-- ~/.i3/config
-- $XDG_CONFIG_HOME/i3/config (XDG_HOME )
-- /etc/sway/config
-- /etc/i3/config
-
-In /etc/sway/config the standard config file is installed.
-An error is raised when no config file is found.
-
-To write your own configuration, it's suggested that you copy the default config file to
-the location of your choosing and start there.
-
-For information on the config file format, see **sway**(5).
-
-Environment
------------
-
-The following environment variables have an effect on sway:
-
-*SWAY_CURSOR_THEME*::
- Specifies the name of the cursor theme to use.
-
-*SWAY_CURSOR_SIZE*::
- Specifies the size of the cursor to use.
-
-*SWAYSOCK*::
- Specifies the path to the sway IPC socket.
-
-*XKB_DEFAULT_RULES*, *XKB_DEFAULT_MODEL*, *XKB_DEFAULT_LAYOUT*, *XKB_DEFAULT_VARIANT*, *XKB_DEFAULT_OPTIONS*::
- Configures the xkb keyboard settings. See xkeyboard-config(7).
-
-Authors
--------
-
-Maintained by Drew DeVault <sir@cmpwn.com>, who is assisted by other open
-source contributors. For more information about sway development, see
-<https://github.com/swaywm/sway>.
-
-See Also
---------
-
-**sway**(5) **swaymsg**(1) **swaygrab**(1) **sway-input**(5) **sway-bar**(5)
diff --git a/sway/sway.5.scd b/sway/sway.5.scd
@@ -0,0 +1,582 @@
+sway(5)
+
+# NAME
+
+sway - configuration file and commands
+
+# DESCRIPTION
+
+A sway configuration file is a list of sway commands that are executed by sway
+on startup. These commands usually consist of setting your preferences and
+setting key bindings. An example config is likely present in /etc/sway/config
+for you to check out.
+
+Lines in the configuration file might be extended through multiple lines by
+adding a '\\' character at the end of line. e.g.:
+
+```
+bindsym Shift+XF86AudioRaiseVolume exec \\
+ pactl set-sink-volume @DEFAULT_SINK@ -1%
+```
+
+These commands can be executed in your config file, via *swaymsg*(1), or via
+the bindsym command.
+
+# COMMAND CONVENTIONS
+
+Commands are split into several arguments using spaces. You can enclose
+arguments with quotation marks (*"..."* or *'...'*) to add spaces to a single
+argument. You may also run several commands in order by separating each with
+*,* or *;*.
+
+Throughout the documentation, *|* is used to distinguish between arguments for
+which you may only select one. *[...]* is used for optional arguments, and
+*<...>* for arguments where you are expected to supply some value.
+
+# COMMANDS
+
+The following commands may only be used in the configuration file.
+
+*bar {* <commands...> *}*
+ _commands..._ after *{* will be interpreted as bar commands. For
+ details, see *sway-bar*(5). A newline is required between *{* and the
+ first command, and *}* must be alone on a line.
+
+*default\_orientation* horizontal|vertical|auto
+ Sets the default container layout for tiled containers.
+
+*include* <path>
+ Includes another file from _path_. _path_ can be either a full path or a
+ path relative to the parent config, and expands shell syntax (see
+ *wordexp*(3) for details). The same include file can only be included once;
+ subsequent attempts will be ignored.
+
+*set* <name> <value>
+ Sets variable $_name_ to _value_. You can use the new variable in the
+ arguments of future commands.
+
+*swaybg\_command* <command>
+ Executes custom background _command_. Default is _swaybg_. Refer to
+ *output* below for more information.
+
+The following commands cannot be used directly in the configuration file.
+They are expected to be used with *bindsym* or at runtime through *swaymsg*(1).
+
+*border* normal|pixel [<n>]
+ Set border style for focused window. _normal_ includes a border of
+ thickness _n_ and a title bar. _pixel_ is a border without title bar _n_
+ pixels thick. Default is _normal_ with border thickness 2.
+
+*border* none|toggle
+ Set border style for focused window to _none_ or _toggle_ between the
+ available border styles: _normal_, _pixel_, _none_.
+
+*exit*
+ Exit sway and end your Wayland session.
+
+*floating* enable|disable|toggle
+ Make focused view floating, non-floating, or the opposite of what it is now.
+
+*focus* up|right|down|left
+ Moves focus to the next container in the specified direction.
+
+*focus* child
+ Moves focus to the last-focused child of the focused container.
+
+*focus* parent
+ Moves focus to the parent of the focused container.
+
+*focus* output up|right|down|left
+ Moves focus to the next output in the specified direction.
+
+*focus* output <name>
+ Moves focus to the named output.
+
+*focus* mode\_toggle
+ Moves focus between the floating and tiled layers.
+
+*fullscreen*
+ Toggles fullscreen for the focused view.
+
+*layout* splith|splitv|stacking|tabbed
+ Sets the layout mode of the focused container.
+
+*layout* toggle split
+ Switches the focused container between the splitv and splith layouts.
+
+*move* left|right|up|down [<px>]
+ Moves the focused container in the direction specified. If the container,
+ the optional _px_ argument specifies how many pixels to move the container.
+ If unspecified, the default is 10 pixels. Pixels are ignored when moving
+ tiled containers.
+
+*move* container|window to workspace <name>
+ Moves the focused container to the specified workspace.
+
+*move* container|window to workspace prev|next
+ Moves the focused container to the previous or next workspace on this
+ output, or if no workspaces remain, the previous or next output.
+
+*move* container|window to workspace prev\_on\_output|next\_on\_output
+ Moves the focused container to the previous or next workspace on this
+ output, wrapping around if already at the first or last workspace.
+
+*move* container|window|workspace to output <name>
+ Moves the focused container or workspace to the specified output.
+
+*move* container|window|workspace to output up|right|down|left
+ Moves the focused container or workspace to next output in the specified
+ direction.
+
+*move* [to] scratchpad
+ Moves the focused window to the scratchpad.
+
+*reload*
+ Reloads the sway config file and applies any changes.
+
+*resize* shrink|grow width|height [<amount>] [px|ppt]
+ Resizes the currently focused container by _amount_, specified in pixels or
+ percentage points. If omitted, floating containers are resized in px and
+ tiled containers by ppt. If omitted, the default _amount_ is 10.
+
+*resize set* <width> [px] <height> [px]
+ Sets the width and height of the currently focused container to _width_
+ pixels and _height_ pixels. The [px] parameters are optional and have no
+ effect. This command only accepts a size in pixels. Width and height may be
+ specified in either order.
+
+*scratchpad show*
+ Shows a window from the scratchpad. Repeatedly using this command will
+ cycle through the windows in the scratchpad.
+
+*split* vertical|v|horizontal|h|toggle|t
+ Splits the current container, vertically or horizontally. When _toggle_ is
+ specified, the current container is split opposite to the parent
+ container's layout.
+
+*splith*
+ Equivalent to *split horizontal*
+
+*splitv*
+ Equivalent to *split vertical*
+
+*splitt*
+ Equivalent to *split toggle*
+
+*sticky* enable|disable|toggle
+ "Sticks" a floating window to the current output so that it shows up on all
+ workspaces.
+
+The following commands may be used either in the configuration file or at
+runtime.
+
+*assign* <criteria> [→] <workspace>
+ Assigns views matching _criteria_ (see *CRITERIA* for details) to
+ _workspace_. The → (U+2192) is optional and cosmetic. This command is
+ equivalent to:
+
+ for\_window <criteria> move container to workspace <workspace>
+
+*bindsym* <key combo> <command>
+ Binds _key combo_ to execute the sway command _command_ when pressed. You
+ may use XKB key names here (*xev*(1) is a good tool for discovering these).
+
+ Example:
+
+ # Execute firefox when alt, shift, and f are pressed together
+ bindsym Mod1+Shift+f exec firefox
+
+ *bindcode* <code> <command> is also available for binding with key codes
+ instead of key names.
+
+*client.<class>* <border> <background> <text> <indicator> <child\_border>
+ Configures the color of window borders and title bars. All 5 colors are
+ required, with the exception of *client.background*, which requires exactly
+ one. Colors may be specified in hex, either as _#RRGGBB_ or _#RRGGBBAA_.
+
+ The available classes are:
+
+ *client.background*
+ Ignored (present for i3 compatibility).
+
+ *client.focused*
+ The window that has focus.
+
+ *client.focused\_inactive*
+ The most recently focused view within a container which is not focused.
+
+ *client.placeholder*
+ Ignored (present for i3 compatibility).
+
+ *client.unfocused*
+ A view that does not have focus.
+
+ *client.urgent*
+ A view with an urgency hint. *Note*: This is not currently implemented.
+
+ The meaning of each color is:
+
+ _border_
+ The border around the title bar.
+
+ _background_
+ The background of the title bar.
+
+ _text_
+ The text color of the title bar.
+
+ _indicator_
+ The color used to indicate where a new view will open. In a tiled
+ container, this would paint the right border of the current view if a
+ new view would be opened to the right.
+
+ _child\_border_
+ The border around the view itself.
+
+The default colors are:
+
+[- *class*
+:[ _border_
+:[ _background_
+:[ _text_
+:[ _indicator_
+:[ _child\_border_
+|[ *background*
+: n/a
+: #ffffff
+: n/a
+: n/a
+: n/a
+| *focused*
+: #4c7899
+: #285577
+: #ffffff
+: #2e9ef4
+: #285577
+| *focused\_inactive*
+: #333333
+: #5f676a
+: #ffffff
+: #484e50
+: #5f676a
+| *unfocused*
+: #333333
+: #222222
+: #888888
+: #292d2e
+: #222222
+| *urgent*
+: #2f343a
+: #900000
+: #ffffff
+: #900000
+: #900000
+| *placeholder*
+: #000000
+: #0c0c0c
+: #ffffff
+: #000000
+: #0c0c0c
+
+*debuglog* on|off|toggle
+ Enables, disables or toggles debug logging. _toggle_ cannot be used in the
+ configuration file.
+
+*default\_border* normal|none|pixel [<n>]
+ Set default border style for new tiled windows.
+
+*default\_floating\_border* normal|none|pixel [<n>]
+ Set default border style for new floating windows. This only applies to
+ windows that are spawned in floating mode, not windows that become floating
+ afterwards.
+
+*exec* <shell command>
+ Executes _shell command_ with sh.
+
+*exec\_always* <shell command>
+ Like *exec*, but the shell command will be executed _again_ after *reload*.
+
+*floating\_maximum\_size* <width> x <height>
+ Specifies the maximum size of floating windows. -1 x -1 removes the upper
+ limit.
+
+*floating\_minimum\_size* <width> x <height>
+ Specifies the minimum size of floating windows. The default is 75 x 50.
+
+*floating\_modifier* <modifier> [normal|inverse]
+ When the _modifier_ key is held down, you may hold left click to move
+ windows, and right click to resize them. If _inverse_ is specified, left
+ click is used for resizing and right click for moving.
+
+*floating\_scroll* up|right|down|left [command]
+ Sets a command to be executed when the mouse wheel is scrolled in the
+ specified direction while holding the floating modifier. Resets the
+ command, when given no arguments.
+
+*focus\_follows\_mouse* yes|no
+ If set to _yes_, moving your mouse over a window will focus that window.
+
+*font* <font>
+ Sets font for use in title bars in Pango format.
+
+*for\_window* <criteria> <command>
+ Whenever a window that matches _criteria_ appears, run list of commands.
+ See *CRITERIA* for more details.
+
+*gaps* edge\_gaps on|off|toggle
+ When _on_, gaps will be added between windows and workspace edges if the
+ inner gap is nonzero. When _off_, gaps will only be added between views.
+ _toggle_ cannot be used in the configuration file.
+
+*gaps* <amount>
+ Sets _amount_ pixels of gap between windows and around each workspace.
+
+*gaps* inner|outer <amount>
+ Sets default _amount_ pixels of _inner_ or _outer_ gap, where the former
+ affects spacing between views and the latter affects the space around each
+ workspace.
+
+*gaps* inner|outer all|workspace|current set|plus|minus <amount>
+ Changes the gaps for the _inner_ or _outer_ gap. _all_ changes the gaps for
+ all views or workspace, _workspace_ changes gaps for all views in current
+ workspace (or current workspace), and _current_ changes gaps for the current
+ view or workspace.
+
+*hide\_edge\_borders* none|vertical|horizontal|both|smart
+ Hides window borders adjacent to the screen edges. Default is _none_.
+
+*input* <input\_device> *{* <commands...> *}*
+ _commands..._ after *{* will be interpreted as input commands applying to
+ the specified input device. For details, see *sway-input*(5). A newline is
+ required between *{* and the first command, and *}* must be alone on a
+ line.
+
+ \* may be used in lieu of a specific device name to configure all input
+ devices. A list of input device names may be obtained via *swaymsg -t
+ get\_inputs*.
+
+*seat* <seat> *{* <commands...> *}*
+ _commands..._ after *{* will be interpreted as seat commands applying to
+ the specified seat. For details, see *sway-input*(5). A newline is required
+ between *{* and the first command, and *}* must be alone on a line.
+
+*seat* <seat> cursor move|set <x> <y>
+ Move specified seat's cursor relative to current position or wrap to
+ absolute coordinates (with respect to the global coordinate space).
+ Specifying either value as 0 will not update that coordinate.
+
+*seat* <seat> cursor press|release left|right|1|2|3...
+ Simulate pressing (or releasing) the specified mouse button on the
+ specified seat.
+
+*kill*
+ Kills (closes) the currently focused container and all of its children.
+
+*smart\_gaps* on|off
+ If smart\_gaps are _on_ gaps will only be enabled if a workspace has more
+ than one child.
+
+*mark* --add|--replace [--toggle] <identifier>
+ Marks are arbitrary labels that can be used to identify certain windows and
+ then jump to them at a later time. By default, *mark* sets _identifier_ as
+ the only mark on a window. _--add_ will instead add _identifier_ to the
+ list of current marks. If _--toggle_ is specified mark will remove
+ _identifier_ if it is already marked.
+
+*mode* <mode>
+ Switches to the specified mode. The default mode _default_.
+
+*mode* <mode> *{* <commands...> *}*
+ _commands..._ after *{* will be added to the specified mode. A newline is
+ required between *{* and the first command, and *}* must be alone on a
+ line. Only *bindsym* and *bindcode* commands are permitted in mode blocks.
+
+*mouse\_warping* output|none
+ If _output_ is specified, the mouse will be moved to new outputs as you
+ move focus between them. Default is _output_.
+
+*no\_focus* <criteria>
+ Prevents windows matching <criteria> from being focused automatically when
+ they're created. This has no effect on the first window in a workspace.
+
+*output* <name> mode|resolution|res <WIDTHxHEIGHT>[@<RATE>[Hz]]
+ Configures the specified output to use the given mode. Modes are a
+ combination of width and height (in pixels) and a refresh rate that your
+ display can be configured to use. For a list of available modes for each
+ output, use *swaymsg -t get\_outputs*.
+
+ Examples:
+
+ output HDMI-A-1 mode 1920x1080
+
+ output HDMI-A-1 mode 1920x1080@60Hz
+
+*output* <name> position|pos <X,Y>
+ Places the specified output at the specific position in the global
+ coordinate space.
+
+*output* <name> scale <factor>
+ Scales the specified output by the specified scale _factor_. An integer is
+ recommended, but fractional values are also supported. If a fractional
+ value are specified, be warned that it is not possible to faithfully
+ represent the contents of your windows - they will be rendered at the next
+ highest integral scale factor and downscaled. You may be better served by
+ setting an integral scale factor and adjusting the font size of your
+ applications to taste.
+
+*output* <name> background|bg <file> <mode>
+ Sets the wallpaper for the given output to the specified file, using the
+ given scaling mode (one of "stretch", "fill", "fit", "center", "tile").
+
+**output** <name> background|bg <color> solid\_color
+ Sets the background of the given output to the specified color. _color_
+ should be specified as _#RRGGBB_. Alpha is not supported.
+
+**output** <name> transform <transform>
+ Sets the background transform to the given value. Can be one of "90", "180",
+ "270" for rotation; or "flipped", "flipped-90", "flipped-180", "flipped-270"
+ to apply a rotation and flip, or "normal" to apply no transform.
+
+*output* <name> disable|enable
+ Enables or disables the specified output (all outputs are enabled by
+ default).
+
+*NOTES FOR THE OUTPUT COMMANDS*
+
+You may combine output commands into one, like so:
+
+ output HDMI-A-1 mode 1920x1080 pos 1920,0 bg ~/wallpaper.png stretch
+
+You can get a list of output names with *swaymsg -t get\_outputs*. You may also
+match any output by using the output name "\*". Be sure to add this output
+config after the others, or it will be matched instead of the others.
+
+*show\_marks* on|off
+ If *show\_marks* is on, marks will be displayed in the window borders.
+ Any mark that starts with an underscore will not be drawn even if the
+ option is on. The default is _on_.
+
+*opacity* <value>
+ Set the opacity of the window between 0 (completely transparent) and 1
+ (completely opaque).
+
+*unmark* [<identifier>]
+ *unmark* will remove _identifier_ from the list of current marks on a
+ window. If _identifier_ is omitted, all marks are removed.
+
+*workspace* [number] <name>
+ Switches to the specified workspace. The string "number" is optional and is
+ used to sort workspaces.
+
+*workspace* prev|next
+ Switches to the next workspace on the current output or on the next output
+ if currently on the last workspace.
+
+*workspace* prev\_on\_output|next\_on\_output
+ Switches to the next workspace on the current output.
+
+*workspace* <name> output <output>
+ Specifies that workspace _name_ should be shown on the specified _output_.
+
+*workspace\_auto\_back\_and\_forth* yes|no
+ When _yes_, repeating a workspace switch command will switch back to the
+ prior workspace. For example, if you are currently on workspace 1,
+ switch to workspace 2, then invoke the "workspace 2" command again, you
+ will be returned to workspace 1. Default is _no_.
+
+*workspace\_layout* default|stacking|tabbed
+ Specifies the initial layout for new workspaces.
+
+# CRITERIA
+
+A criteria is a string in the form of, for example:
+
+```
+[class="[Rr]egex.*" title="some title"]
+```
+
+The string contains one or more (space separated) attribute/value pairs. They
+are used by some commands to choose which views to execute actions on. All
+attributes must match for the criteria to match.
+
+Criteria may be used with either the *for\_window* or *assign* commands to
+specify operations to perform on new views. A criteria may also be used to
+perform specific commands (ones that normally act upon one window) on all views
+that match that criteria. For example:
+
+Focus on a window with the mark "IRC":
+
+```
+[con_mark="IRC"] focus
+```
+
+Kill all windows with the title "Emacs":
+
+```
+[class="Emacs"] kill
+```
+
+Mark all Firefox windows with "Browser":
+
+```
+[class="Firefox"] mark Browser
+```
+
+The following attributes may be matched with:
+
+*app\_id*
+ Compare value against the app id. Can be a regular expression. If value is
+ \_\_focused\_\_, then the app id must be the same as that of the currently
+ focused window.
+
+*class*
+ Compare value against the window class. Can be a regular expression. If
+ value is \_\_focused\_\_, then the window class must be the same as that of
+ the currently focused window.
+
+*con\_id*
+ Compare against the internal container ID, which you can find via IPC.
+
+*con\_mark*
+ Compare against the window marks. Can be a regular expression.
+
+*floating*
+ Matches floating windows.
+
+*id*
+ Compare value against the X11 window ID. Must be numeric.
+
+*instance*
+ Compare value against the window instance. Can be a regular expression. If
+ value is \_\_focused\_\_, then the window instance must be the same as that
+ of the currently focused window.
+
+*tiling*
+ Matches tiling windows.
+
+*title*
+ Compare against the window title. Can be a regular expression. If value is
+ \_\_focused\_\_, then the window title must be the same as that of the
+ currently focused window.
+
+*urgent*
+ Compares the urgent state of the window. Can be "latest" or "oldest".
+
+*window\_role*
+ Compare against the window role (WM\_WINDOW\_ROLE). Can be a regular
+ expression. If value is \_\_focused\_\_, then the window role must be the
+ same as that of the currently focused window.
+
+*window\_type*
+ Compare against the window type (\_NET\_WM\_WINDOW\_TYPE). Possible values
+ are normal, dialog, utility, toolbar, splash, menu, dropdown\_menu,
+ popup\_menu, tooltip and notification.
+
+*workspace*
+ Compare against the workspace name for this view. Can be a regular
+ expression. If the value is \_\_focused\_\_, then all the views on the
+ currently focused workspace matches.
+
+# SEE ALSO
+
+*sway*(1) *sway-input*(5) *sway-bar*(5)
diff --git a/sway/sway.5.txt b/sway/sway.5.txt
@@ -1,521 +0,0 @@
-/////
-vim:set ts=4 sw=4 tw=82 noet:
-/////
-sway (5)
-========
-
-Name
-----
-sway - configuration file and commands
-
-Description
------------
-
-A sway configuration file is a list of sway commands that are executed by sway
-on startup. These commands usually consist of setting your preferences and
-setting key bindings. An example config is likely present in /etc/sway/config
-for you to check out.
-
-Lines in the configuration file might be extended through multiple lines by
-adding a '\' character at the end of line. e.g.:
-
- bindsym Shift+XF86AudioRaiseVolume exec pactl set-sink-volume \
- $(pactl list sinks | grep -B 1 RUNNING | sed '1q;d' | sed 's/[^0-9]\+//g') +5%
-
-These commands can be executed in your config file, via **swaymsg**(1), or via
-the bindsym command.
-
-Commands
---------
-
-The following commands may only be used in the configuration file.
-
-**bar** <block of commands>::
- Append _{_ to this command, the following lines will be commands that
- configure **swaybar**, and _}_ on its own line to close the block.
- +
- See **sway-bar**(5) for details.
-
-**default_orientation** <horizontal|vertical|auto>::
- Sets the default container layout for tiled containers.
-
-**set** <name> <value>::
- Sets variable $name to _value_. You can use the new variable in the arguments
- of future commands.
-
-**swaybg_command** <command>::
- Executes custom bg command, default is _swaybg_.
-
-The following commands cannot be used directly in the configuration file.
-They are expected to be used with **bindsym** or at runtime through **swaymsg**(1).
-
-**border** <normal|pixel> [<n>]::
- Set border style for focused window. _normal_ includes a border of thickness
- _n_ and a title bar. _pixel_ is a border without title bar _n_ pixels thick.
- Default is _normal_ with border thickness 2.
-
-**border** <none|toggle>::
- Set border style for focused window to _none_ or _toggle_ between the
- available border styles: _normal_, _pixel_, _none_.
-
-**exit**::
- Exit sway and end your Wayland session.
-
-**floating** <enable|disable|toggle>::
- Make focused view floating, non-floating, or the opposite of what it is now.
-
-**focus** <direction>::
- Direction may be one of _up_, _down_, _left_, _right_, _next_, _prev_,
- _parent_, or _child_. The directional focus commands will move the focus
- in that direction. The _next_ and _prev_ directions will focus the next,
- respectively previous, element in the current container. The parent
- focus command will change the focus to the parent of the currently
- focused container, which is useful, for example, to open a sibling of
- the parent container, or to move the entire container around.
-
-**focus** output <direction|name>::
- Direction may be one of _up_, _down_, _left_, _right_. The directional focus
- commands will move the focus to the output in that direction. When name is
- given, the focus is changed to the output with that name.
-
-**focus** mode_toggle::
- Toggles focus between floating view and tiled view.
-
-**fullscreen**::
- Toggles fullscreen status for the focused view.
-
-**layout** <mode>::
- Sets the layout mode of the focused container. _mode_ can be one of _splith_,
- _splitv_, _toggle split_, _stacking_, _tabbed_.
-
-**layout** auto <mode>::
- Sets layout to one of the auto modes, i.e. one of _left_, _right_, _top_,
- or _bottom_.
-
-**layout** auto <next|prev>::
- Cycles between available auto layouts.
-
-**layout** auto [master|ncol] [inc|set] <n>::
- Modify the number of master elements, respectively slave columns, in the
- focused container. <n> can be a positive or negative integer. These commands
- only have an effect if the focused container uses one of the "auto" layouts.
-
-**layout** toggle split::
- Cycles between available split layouts.
-
-**move** <left|right|up|down> <[px]>::
- Moves the focused container _left_, _right_, _up_, or _down_. If the window
- is floating it moves it _px_ in that direction, defaulting to 10. Tiled
- containers are moved the same regardless of the _px_ argument.
-
-**move** <next|prev|first>::
- Moving to _prev_ or _next_ swaps the container with its sibling in the same
- container. Move _first_ exchanges the focused element in an auto layout with
- the first element, i.e. promotes the focused element to master position.
-
-**move** <container|window> to workspace <name>::
- Moves the focused container to the workspace identified by _name_.
- _name_ may be a special workspace name. See **workspace**.
-
-**move** <container|window|workspace> to output <name|direction>::
- Moves the focused container or workspace to the output identified by _name_ or
- _direction_. _direction_ may be one of _up_, _down_, _left_, _right_.
-
-**move** [to] scratchpad::
- Moves the focused window to the scratchpad.
-
-**reload**::
- Reloads the sway config file without restarting sway.
-
-**resize** <shrink|grow> <width|height> [<amount>] [px|ppt]::
- Resizes the currently focused container or view by _amount_. _amount_ is
- optional: the default value is 10 (either px or ppt depending on the view type).
- The [px|ppt] parameter is optional. _px_ specifies that _amount_ refers to pixels;
- _ppt_ specifies that _amount_ refers to percentage points of the current
- size. Floating views use px by default (but can use ppt if specified); tiled
- views use ppt by default (but can use px if specified).
-
-**resize set** <width> [px] <height> [px]::
- Sets the width and height of the currently focused container to _width_ pixels
- and _height_ pixels. The [px] parameters are optional and have no effect. This
- command only accepts a size in pixels.
-
-**resize set** <width|height> <amount> [px] [<width|height> <amount> [px]]::
- Sets the _width_ and/or _height_ of the currently focused container to
- _amount_. The [px] parameters are optional and have no effect. This command
- only accepts a size in pixels.
-
-**scratchpad show**::
- Shows a window from the scratchpad. Repeatedly using this command will cycle
- through the windows in the scratchpad.
-
-**split** <vertical|v|horizontal|h|toggle|t>::
- Splits the current container, vertically or horizontally. If toggled, then the
- current container is split opposite to the parent container.
-
-**splith**::
- Equivalent to **split horizontal**.
-
-**splitv**::
- Equivalent to **split vertical**.
-
-**splitt**::
- Equivalent to **split toggle**.
-
-**sticky** <enable|disable|toggle>::
- "Sticks" a floating window to the current output so that it shows up on all
- workspaces.
-
-The following commands may be used either in the configuration file
-or triggered at runtime.
-
-**assign** <criteria> [→] <workspace>::
- Assigns views matching _criteria_ (see **Criteria** section below) to
- _workspace_. The → (U+2192) is optional and purely for aesthetics. This
- command is exactly equivalent to "for_window <criteria> move container to
- workspace <workspace>".
-
-**bindsym** <key combo> <command>::
- Binds _key combo_ to execute _command_ when pressed. You may use XKB key
- names here (**xev**(1) is a good tool for discovering them). An example
- bindsym command would be **bindsym Mod1+Shift+f exec firefox**, which would
- execute Firefox if the alt, shift, and F keys are pressed together. Any
- valid sway command is eligible to be bound to a key combo.
- +
- **bindcode** <code> <command> is also available for binding with key codes
- instead of key names.
-
-**client**.<color_class> <border> <background> <text> <indicator> <child_border>::
- The client commands control the colors of the view borders and title bars. All
- client commands _require_ five color values. (The one exception is
- **client.background** which _requires_ one color value.) If you only want to
- specify a subset, supply default colors for all the others. Colors must be
- defined in hex. i.e. _#rrggbb_ or _#rrggbbaa_, when including the alpha
- channel.
- +
- The command tokens are:
- **color_class**::: Specifies the view to which the colors apply.
- **client.background**:::: The color a view will be painted, underneath the
- client itself. This will only be visible if a client does not fully
- cover its allocated view space. This command only requires one color. _Note_:
- This is not currently implemented.
- **client.focused**:::: The view that has focus.
- **client.focused_inactive**:::: A view that has focus within its
- container, but the container is not focused.
- **client.placeholder**:::: Used when drawing placeholder view contents.
- Only background and text colors are used. _Note_: This is not
- currently implemented.
- **client.unfocused**:::: A view that does not have focus.
- **client.urgent**:::: A view with an urgency hint. _Note_: This is not
- currently implemented.
- **border**::: The border around the title bar.
- **background**::: The background of the title bar.
- **text**::: The text color of the title bar.
- **indicator**::: The color used to indicate where a new view will open. In a
- tiled container, this would paint the right border of the current view if
- a new view would be opened to the right.
- **child_border**::: The border around the view itself.
-
-+
-The default colors are:
-+
---
-[options="header"]
-|===========================================================================
-|color_class |border |background |text |indicator |child_border
-|background |n/a |#ffffff |n/a |n/a |n/a
-|focused |#4c7899 |#285577 |#ffffff |#2e9ef4 |#285577
-|focused_inactive |#333333 |#5f676a |#ffffff |#484e50 |#5f676a
-|unfocused |#333333 |#222222 |#888888 |#292d2e |#222222
-|urgent |#2f343a |#900000 |#ffffff |#900000 |#900000
-|placeholder |#000000 |#0c0c0c |#ffffff |#000000 |#0c0c0c
-|===========================================================================
---
-
-**debuglog** <on|off|toggle>::
- Enables, disables or toggles debug logging. The toggle argument cannot be used
- in the configuration file.
-
-**default_border** <normal|none|pixel> [<n>]::
- Set default border style for new windows. This command was previously called
- **new_window**. While **new_window** still works, it is considered deprecated
- and support for it will be removed in the future.
-
-**default_floating_border** <normal|none|pixel> [<n>]::
- Set default border style for new floating windows. This only applies to
- windows that are spawned in floating mode, not windows that become floating
- after the fact. This command was previously called **new_float**. While
- **new_float** still works, it is considered deprecated and support for it will
- be removed in the future.
-
-**exec** <shell command>::
- Executes _shell command_ with sh.
-
-**exec_always** <shell command>::
- Like exec, but the shell command will be executed _again_ after *reload* or
- *restart* is executed.
-
-**floating_maximum_size** <width> x <height>::
- Specifies the maximum size of floating windows.
- Uses the container size as default.
- -1 x -1 will remove any restriction on size.
- 0 x 0 has the same behavior as not setting any value.
- If in conflict, this option has precedence over floating_minimum_size.
-
-**floating_minimum_size** <width> x <height>::
- Specifies the minimum size of floating windows.
- Default parameters are 75 x 50.
- -1 and 0 are invalid parameters, default will be used instead.
-
-**floating_modifier** <modifier> [normal|inverse]::
- When the _modifier_ key is held down, you may hold left click to move floating
- windows, and right click to resize them. Unlike i3, this modifier may also be
- used to resize and move windows that are tiled. With the _inverse_ mode
- enabled, left click is used for resizing and right click for dragging. The
- mode parameter is optional and defaults to _normal_ if it isn't defined.
-
-**floating_scroll** <up|down|left|right> [command]::
- Sets a command to be executed when the mouse wheel is scrolled in the
- specified direction while holding the floating modifier. Resets the command,
- when given no arguments.
-
-**focus_follows_mouse** <yes|no>::
- If set to _yes_, moving your mouse over a window will focus that window.
-
-**font** <font>::
- Sets font for use in title bars. Generally the format is something like "Name
- Style Size" e.g. "Deja Vu Sans Book 12". You can also use Pango font
- descriptions with "pango:font".
-
-**for_window** <criteria> <command>::
- Whenever a window that matches _criteria_ appears, run list of commands. See
- **Criteria** section below.
-
-**gaps** edge_gaps <on|off|toggle>::
- Whether or not to add gaps between views and workspace edges if amount of
- inner gap is not zero. When _off_, no gap is added where the view is aligned to
- the workspace edge, effectively creating gaps only between views. The toggle
- argument cannot be used in the configuration file.
-
-**gaps** <amount>::
- Sets default _amount_ pixels as the gap between each view, and around each
- workspace.
-
-**gaps** <inner|outer> <amount>::
- Sets default _amount_ pixels as the _inner_ or _outer_ gap, where the former
- affects spacing between views and the latter affects the space around each
- workspace.
-
-**gaps** <inner|outer> <all|workspace|current> <set|plus|minus> <amount>::
- Changes the gaps for the _inner_ or _outer_ gap. _all_ changes the gaps for
- all views or workspace, _workspace_ changes gaps for all views in current
- workspace (or current workspace), and _current_ changes gaps for the current
- view or workspace.
-
-**hide_edge_borders** <none|vertical|horizontal|both|smart>::
- Hide window borders adjacent to the screen edges. Default is _none_.
-
-**input** <input_device> <block of commands>::
- Append _{_ to this command, the following lines will be commands to configure
- the named input device, and _}_ on its own line will close the block.
- +
- **input * <block of commands>** may be used to match all input devices.
- +
- See **sway-input**(5) for details.
-
-**seat** <seat_name> <block of commands>::
- Append _{_ to this command, the following lines will be commands to configure
- the named seat, and _}_ on its own line will close the block.
- See **sway-input**(5) for details.
-
-**seat** <seat_name> cursor <move|set> <x> <y>::
- Move cursor relatively to current position or set to absolute screen position.
- A value of 0 causes the axis to be ignored in both commands.
-
-**seat** <seat_name> cursor <press|release> <left|right|1|2|3...>::
- Simulate press of mouse button specified by left, right, or numerical code.
-
-**kill**::
- Kills (force-closes) the currently-focused container and all of its children.
-
-**smart_gaps** <on|off>::
- If smart_gaps are _on_ then gaps will only be enabled if a workspace has more
- than one child container.
-
-**mark** \<--add|--replace> \<--toggle> <identifier>::
- Marks are arbitrary labels that can be used to identify certain windows and
- then jump to them at a later time. By default, the **mark** command sets
- _identifier_ as the only mark on a window. By specifying _--add_, mark will
- add _identifier_ to the list of current marks. If _--toggle_ is specified mark
- will remove _identifier_ if it is already a label. Marks may be found by using
- a criteria. See the **Criteria** section below.
-
-**mode** <mode_name>::
- Switches to the given mode_name. The default mode is simply _default_. To
- create a new mode append _{_ to this command, the following lines
- will be keybindings for that mode, and _}_ on its own line to close the block.
-
-**mouse_warping** <output|none>::
- When _output_: place mouse at center of newly focused window when changing
- output. When _none_: don't move mouse.
-
-**no_focus** <criteria>::
- Prevents windows matching <criteria> from being focused automatically when
- they're created. This does not apply to the first window in a workspace.
-
-**output** <name> mode|resolution|res <WIDTHxHEIGHT>[@<RATE>[Hz]]::
- Configures the specified output to use the given mode. Modes are a combination
- of width and height (in pixels) and a refresh rate that your display can be
- configured to use. For a list of available modes, use swaymsg -t get_outputs.
- +
- Examples:
- +
- output HDMI-A-1 mode 1920x1080
- +
- output HDMI-A-1 mode 1920x1080@60Hz
-
-**output** <name> position|pos <X,Y>::
- Configures the specified output to be arranged at the given position.
-
-**output** <name> scale <I>::
- Configures the specified output to be scaled up by the specified integer
- scaling factor (usually 2 for HiDPI screens). Fractional scaling is supported.
-
-**output** <name> background|bg <file> <mode>::
- Sets the wallpaper for the given output to the specified file, using the given
- scaling mode (one of "stretch", "fill", "fit", "center", "tile").
-
-**output** <name> background|bg <color> solid_color::
- Sets the background of the given output to the specified color. _color_ should
- be specified as an _#rrggbb_ (no alpha) color.
-
-**output** <name> transform <transform>::
- Sets the background transform to the given value. Can be one of "90", "180",
- "270" for rotation; or "flipped", "flipped-90", "flipped-180", "flipped-270"
- to apply a rotation and flip, or "normal" to apply no transform.
-
-**output** <name> disable::
- Disables the specified output.
-
-**NOTES FOR THE OUTPUT COMMAND**::
- You may combine output commands into one, like so:
- +
- output HDMI-A-1 mode 1920x1080 pos 1920,0 bg ~/wallpaper.png stretch
- +
- You can get a list of output names like so:
- +
- swaymsg -t get_outputs
- +
- You may also match any output by using the output name "*". Be sure to add
- this output config after the others, or it will be matched instead of the
- others.
-
-**seamless_mouse** <on|off>::
- Change output seamlessly when pointer touches edge of output. Outputs need to
- be configured with perfectly aligned adjacent positions for this option to
- have any effect.
-
-**show_marks** <on|off>::
- If **show_marks** is on then marks will be showed in the window decoration.
- However, any mark that starts with an underscore will not be drawn even if the
- option is on. The default option is _on_.
-
-**opacity** <value>::
- Set the opacity of the window between 0 (completely transparent) and 1
- (completely opaque).
-
-**unmark** <identifier>::
- **Unmark** will remove _identifier_ from the list of current marks on a window. If
- no _identifier_ is specified, then **unmark** will remove all marks.
-
-**workspace** [number] <name>::
- Switches to the specified workspace. The string "number" is optional. The
- workspace _name_, if unquoted, may not contain the string "output", as sway
- will assume that the command is moving a workspace to an output, as described
- below.
-
-**workspace** <prev|next>::
- Switches to the next workspace on the current output or on the next output
- if currently on the last workspace.
-
-**workspace** <prev_on_output|next_on_output>::
- Switches to the next workspace on the current output.
-
-**workspace** <name> output <output>::
- Specifies that the workspace named _name_ should appear on the specified
- _output_.
-
-**workspace_auto_back_and_forth** <yes|no>::
- When _yes_, repeating a workspace switch command will switch back to the
- prior workspace. For example, if you are currently on workspace 1,
- switch to workspace 2, then invoke the "workspace 2" command again, you
- will be returned to workspace 1. Defaults to _no_.
-
-**workspace_layout** <default|stacking|tabbed|auto|auto left|auto right|auto
- top|auto bottom>:: Specifies the start layout for new workspaces.
-
-**include** <path>::
- Includes a sub config file by _path_. _path_ can be either a full path or a
- path relative to the parent config.
-
-Criteria
---------
-
-A criteria is a string in the form of e.g.:
-
- [class="[Rr]egex.*" title="some title"]
-
-The string contains one or more (space separated) attribute/value pairs. They
-are used by some commands to choose which views to execute actions on. All attributes
-must match for the criteria to match.
-
-Criteria may be used with either the **for_window** or **assign** commands to
-specify operations to perform on new views. A criteria may also be used to
-perform specific commands (ones that normally act upon one window) on all views
-that match that criteria. For example:
-
-Focus on a window with the mark "IRC":
- [con_mark="IRC"] focus
-
-Kill all windows with the title "Emacs":
- [class="Emacs"] kill
-
-Mark all Firefox windows with "Browser":
- [class="Firefox"] mark Browser
-
-Currently supported attributes:
-
-**class**::
- Compare value against the window class. Can be a regular expression. If value
- is _focused_, then the window class must be the same as that of the currently
- focused window.
-
-**con_id**::
- Compare against the internal container ID, which you can find via IPC.
-
-**con_mark**::
- Compare against the window marks. Can be a regular expression.
-
-**floating**::
- Matches against floating windows.
-
-**id**::
- Compare value against the app id. Can be a regular expression.
-
-**title**::
- Compare against the window title. Can be a regular expression. If value is
- _focused_ then the window title must be the same as that of the currently
- focused window.
-
-**tiling**::
- Matches against tiling windows.
-
-**workspace**::
- Compare against the workspace name for this view. Can be a regular expression.
- If the value is _focused_, then all the views on the currently focused workspace
- matches.
-
-See Also
---------
-
-**sway**(1) **sway-input**(5) **sway-bar**(5)
diff --git a/swaygrab/json.c b/swaygrab/json.c
@@ -1,144 +0,0 @@
-#define _XOPEN_SOURCE 700
-#include <string.h>
-#include <stdio.h>
-#include <stdbool.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include "log.h"
-#include "ipc-client.h"
-#include "swaygrab/json.h"
-
-static json_object *tree;
-
-void init_json_tree(int socketfd) {
- uint32_t len = 0;
- char *res = ipc_single_command(socketfd, IPC_GET_TREE, NULL, &len);
- struct json_tokener *tok = json_tokener_new_ex(256);
- if (!tok) {
- sway_abort("Unable to get json tokener.");
- }
- tree = json_tokener_parse_ex(tok, res, len);
- if (!tree || tok->err != json_tokener_success) {
- sway_abort("Unable to parse IPC response as JSON: %s", json_tokener_error_desc(tok->err));
- }
- json_object *success;
- json_object_object_get_ex(tree, "success", &success);
- if (success && !json_object_get_boolean(success)) {
- json_object *error;
- json_object_object_get_ex(tree, "error", &error);
- sway_abort("IPC request failed: %s", json_object_get_string(error));
- }
- json_object_put(success);
- json_tokener_free(tok);
-}
-
-void free_json_tree() {
- json_object_put(tree);
-}
-
-static bool is_focused(json_object *c) {
- json_object *focused;
- json_object_object_get_ex(c, "focused", &focused);
- return json_object_get_boolean(focused);
-}
-
-static json_object *get_focused_container_r(json_object *c) {
- json_object *name;
- json_object_object_get_ex(c, "name", &name);
- if (is_focused(c)) {
- return c;
- } else {
- json_object *nodes, *node, *child;
- json_object_object_get_ex(c, "nodes", &nodes);
- int i;
- for (i = 0; i < json_object_array_length(nodes); i++) {
- node = json_object_array_get_idx(nodes, i);
-
- if ((child = get_focused_container_r(node))) {
- return child;
- }
- }
-
- json_object_object_get_ex(c, "floating_nodes", &nodes);
- for (i = 0; i < json_object_array_length(nodes); i++) {
- node = json_object_array_get_idx(nodes, i);
-
- if ((child = get_focused_container_r(node))) {
- return child;
- }
- }
-
- }
-
- return NULL;
-}
-
-json_object *get_focused_container() {
- return get_focused_container_r(tree);
-}
-
-char *get_focused_output() {
- json_object *outputs, *output, *name;
- json_object_object_get_ex(tree, "nodes", &outputs);
- if (!outputs) {
- sway_abort("Unabled to get focused output. No nodes in tree.");
- }
- for (int i = 0; i < json_object_array_length(outputs); i++) {
- output = json_object_array_get_idx(outputs, i);
-
- if (get_focused_container_r(output)) {
- json_object_object_get_ex(output, "name", &name);
- return strdup(json_object_get_string(name));
- }
- }
-
- return NULL;
-}
-
-char *create_payload(const char *output, struct wlc_geometry *g) {
- char *payload_str = malloc(256);
- json_object *payload = json_object_new_object();
-
- json_object_object_add(payload, "output", json_object_new_string(output));
- json_object_object_add(payload, "x", json_object_new_int(g->origin.x));
- json_object_object_add(payload, "y", json_object_new_int(g->origin.y));
- json_object_object_add(payload, "w", json_object_new_int(g->size.w));
- json_object_object_add(payload, "h", json_object_new_int(g->size.h));
-
- snprintf(payload_str, 256, "%s", json_object_to_json_string(payload));
- return strdup(payload_str);
-}
-
-struct wlc_geometry *get_container_geometry(json_object *container) {
- struct wlc_geometry *geo = malloc(sizeof(struct wlc_geometry));
- json_object *rect, *x, *y, *w, *h;
-
- json_object_object_get_ex(container, "rect", &rect);
- json_object_object_get_ex(rect, "x", &x);
- json_object_object_get_ex(rect, "y", &y);
- json_object_object_get_ex(rect, "width", &w);
- json_object_object_get_ex(rect, "height", &h);
-
- geo->origin.x = json_object_get_int(x);
- geo->origin.y = json_object_get_int(y);
- geo->size.w = json_object_get_int(w);
- geo->size.h = json_object_get_int(h);
-
- return geo;
-}
-
-json_object *get_output_container(const char *output) {
- json_object *outputs, *json_output, *name;
- json_object_object_get_ex(tree, "nodes", &outputs);
-
- for (int i = 0; i < json_object_array_length(outputs); i++) {
- json_output = json_object_array_get_idx(outputs, i);
- json_object_object_get_ex(json_output, "name", &name);
-
- if (strcmp(json_object_get_string(name), output) == 0) {
- return json_output;
- }
- }
-
- return NULL;
-}
diff --git a/swaygrab/main.c b/swaygrab/main.c
@@ -1,298 +0,0 @@
-#define _XOPEN_SOURCE 700
-#define _POSIX_C_SOURCE 199309L
-#include <stdio.h>
-#include <stdbool.h>
-#include <stdlib.h>
-#include <string.h>
-#include <getopt.h>
-#include <unistd.h>
-#include <stdint.h>
-#include <math.h>
-#include <time.h>
-#include <sys/wait.h>
-#include <json-c/json.h>
-#include "log.h"
-#include "ipc-client.h"
-#include "util.h"
-#include "swaygrab/json.h"
-
-void sway_terminate(int exit_code) {
- exit(exit_code);
-}
-
-void grab_and_apply_magick(const char *file, const char *payload,
- int socketfd, int raw) {
- uint32_t len = strlen(payload);
- char *pixels = ipc_single_command(socketfd,
- IPC_SWAY_GET_PIXELS, payload, &len);
- uint32_t *u32pixels = (uint32_t *)(pixels + 1);
- uint32_t width = u32pixels[0];
- uint32_t height = u32pixels[1];
- len -= 9;
- pixels += 9;
-
- if (width == 0 || height == 0) {
- // indicates geometry was clamped by WLC because it was outside of the output's area
- json_object *obj = json_tokener_parse(payload);
- json_object *output;
- json_object_object_get_ex(obj, "output", &output);
- const char *name = json_object_get_string(output);
- json_object_put(obj);
- sway_abort("Unknown output %s.", name);
- }
-
- if (raw) {
- fwrite(pixels, 1, len, stdout);
- fflush(stdout);
- free(pixels - 9);
- return;
- }
-
- char size[10 + 1 + 10 + 2 + 1]; // int32_t are max 10 digits
- sprintf(size, "%dx%d+0", width, height);
-
- pid_t child;
- int fd[2];
- pipe(fd);
-
- if ((child = fork()) < 0) {
- sway_log(L_ERROR, "Swaygrab failed to fork.");
- exit(EXIT_FAILURE);
- } else if (child != 0) {
- close(fd[0]);
- write(fd[1], pixels, len);
- close(fd[1]);
- free(pixels - 9);
- waitpid(child, NULL, 0);
- } else {
- close(fd[1]);
- if (dup2(fd[0], 0) != 0) {
- sway_log(L_ERROR, "Could not fdup the pipe");
- }
- close(fd[0]);
- execlp("convert", "convert", "-depth", "8", "-size", size, "rgba:-", "-flip", file, NULL);
- sway_log(L_ERROR, "Swaygrab could not run convert.");
- exit(EXIT_FAILURE);
- }
-}
-
-void grab_and_apply_movie_magic(const char *file, const char *payload,
- int socketfd, int raw, int framerate) {
- if (raw) {
- sway_log(L_ERROR, "Raw capture data is not yet supported. Proceeding with ffmpeg normally.");
- }
-
- uint32_t len = strlen(payload);
- char *pixels = ipc_single_command(socketfd,
- IPC_SWAY_GET_PIXELS, payload, &len);
- uint32_t *u32pixels = (uint32_t *)(pixels + 1);
- uint32_t width = u32pixels[0];
- uint32_t height = u32pixels[1];
- pixels += 9;
-
- if (width == 0 || height == 0) {
- // indicates geometry was clamped by WLC because it was outside of the output's area
- json_object *obj = json_tokener_parse(payload);
- json_object *output;
- json_object_object_get_ex(obj, "output", &output);
- const char *name = json_object_get_string(output);
- json_object_put(obj);
- sway_abort("Unknown output %s.", name);
- }
-
- char *ffmpeg_opts = getenv("SWAYGRAB_FFMPEG_OPTS");
- if(!ffmpeg_opts) {
- ffmpeg_opts = "";
- }
-
- const char *fmt = "ffmpeg %s -f rawvideo -framerate %d "
- "-video_size %dx%d -pixel_format argb "
- "-i pipe:0 -r %d -vf vflip %s";
- char *cmd = malloc(strlen(fmt) - 8 /*args*/
- + strlen(ffmpeg_opts) + numlen(width) + numlen(height)
- + numlen(framerate) * 2 + strlen(file) + 1);
- sprintf(cmd, fmt, ffmpeg_opts, framerate, width, height, framerate, file);
-
- long ns = (long)(1000000000 * (1.0 / framerate));
- struct timespec start, finish, ts;
- ts.tv_sec = 0;
-
- FILE *f = popen(cmd, "w");
- fwrite(pixels, 1, len, f);
- free(pixels - 9);
- int sleep = 0;
- while (sleep != -1) {
- clock_gettime(CLOCK_MONOTONIC, &start);
- len = strlen(payload);
- pixels = ipc_single_command(socketfd,
- IPC_SWAY_GET_PIXELS, payload, &len);
- pixels += 9;
- len -= 9;
-
- fwrite(pixels, 1, len, f);
-
- free(pixels - 9);
- clock_gettime(CLOCK_MONOTONIC, &finish);
- ts.tv_nsec = ns;
- double fts = (double)finish.tv_sec + 1.0e-9*finish.tv_nsec;
- double sts = (double)start.tv_sec + 1.0e-9*start.tv_nsec;
- long diff = (fts - sts) * 1000000000;
- ts.tv_nsec = ns - diff;
- if (ts.tv_nsec < 0) {
- ts.tv_nsec = 0;
- }
- sleep = nanosleep(&ts, NULL);
- }
- fflush(f);
-
- fclose(f);
- free(cmd);
-}
-
-char *default_filename(const char *extension) {
- int ext_len = strlen(extension);
- int len = 28 + ext_len; // format: "2015-12-17-180040_swaygrab.ext"
- char *filename = malloc(len * sizeof(char));
- time_t t = time(NULL);
-
- struct tm *lt = localtime(&t);
- strftime(filename, len, "%Y-%m-%d-%H%M%S_swaygrab.", lt);
- strncat(filename, extension, ext_len);
-
- return filename;
-}
-
-int main(int argc, char **argv) {
- static int capture = 0, raw = 0;
- char *socket_path = NULL;
- char *output = NULL;
- int framerate = 30;
- bool grab_focused = false;
-
- init_log(L_INFO);
-
- static struct option long_options[] = {
- {"help", no_argument, NULL, 'h'},
- {"capture", no_argument, NULL, 'c'},
- {"output", required_argument, NULL, 'o'},
- {"version", no_argument, NULL, 'v'},
- {"socket", required_argument, NULL, 's'},
- {"raw", no_argument, NULL, 'r'},
- {"rate", required_argument, NULL, 'R'},
- {"focused", no_argument, NULL, 'f'},
- {0, 0, 0, 0}
- };
-
- const char *usage =
- "Usage: swaygrab [options] [file]\n"
- "\n"
- " -h, --help Show help message and quit.\n"
- " -c, --capture Capture video.\n"
- " -o, --output <output> Output source.\n"
- " -v, --version Show the version number and quit.\n"
- " -s, --socket <socket> Use the specified socket.\n"
- " -R, --rate <rate> Specify framerate (default: 30)\n"
- " -r, --raw Write raw rgba data to stdout.\n"
- " -f, --focused Grab the focused container.\n";
-
- int c;
- while (1) {
- int option_index = 0;
- c = getopt_long(argc, argv, "hco:vs:R:rf", long_options, &option_index);
- if (c == -1) {
- break;
- }
- switch (c) {
- case 'f':
- grab_focused = true;
- break;
- case 's': // Socket
- socket_path = strdup(optarg);
- break;
- case 'r':
- raw = 1;
- break;
- case 'o': // output
- output = strdup(optarg);
- break;
- case 'c':
- capture = 1;
- break;
- case 'R': // Frame rate
- framerate = atoi(optarg);
- break;
- case 'v':
- fprintf(stdout, "sway version " SWAY_VERSION "\n");
- exit(EXIT_SUCCESS);
- break;
- default:
- fprintf(stderr, "%s", usage);
- exit(EXIT_FAILURE);
- }
- }
-
- if (!socket_path) {
- socket_path = get_socketpath();
- if (!socket_path) {
- sway_abort("Unable to retrieve socket path");
- }
- }
-
- char *file = NULL;
- if (raw) {
- if (optind >= argc + 1) {
- sway_abort("Invalid usage. See `man swaygrab` %d %d", argc, optind);
- }
- } else if (optind < argc) {
- file = strdup(argv[optind]);
- }
-
- int socketfd = ipc_open_socket(socket_path);
- free(socket_path);
-
- init_json_tree(socketfd);
-
- struct wlc_geometry *geo;
-
- if (grab_focused) {
- output = get_focused_output();
- json_object *con = get_focused_container();
- json_object *name;
- json_object_object_get_ex(con, "name", &name);
- geo = get_container_geometry(con);
- free(con);
- } else {
- if (!output) {
- output = get_focused_output();
- }
- geo = get_container_geometry(get_output_container(output));
- // the geometry of the output in the get_tree response is relative to a global (0, 0).
- // we need it to be relative to itself, so set origin to (0, 0) always.
- geo->origin.x = 0;
- geo->origin.y = 0;
- }
-
- const char *payload = create_payload(output, geo);
-
- free(geo);
-
- if (!file) {
- if (!capture) {
- file = default_filename("png");
- } else {
- file = default_filename("webm");
- }
- }
-
- if (!capture) {
- grab_and_apply_magick(file, payload, socketfd, raw);
- } else {
- grab_and_apply_movie_magic(file, payload, socketfd, raw, framerate);
- }
-
- free_json_tree();
- free(output);
- free(file);
- close(socketfd);
- return 0;
-}
diff --git a/swaygrab/swaygrab.1.txt b/swaygrab/swaygrab.1.txt
@@ -1,76 +0,0 @@
-/////
-vim:set ts=4 sw=4 tw=82 noet:
-/////
-:quotes.~:
-
-swaygrab (1)
-============
-
-Name
-----
-swaygrab - Grab image data from the current sway session.
-
-Synopsis
---------
-'swaygrab' [options] [file]
-
-Grabs pixels from an output and writes them to _file_. The image will be passed to
-ImageMagick convert for processing.
-
-Options
--------
-
-*-h, --help*::
- Show help message and quit.
-
-*-c, \--capture*::
- Captures multiple frames as video and passes them into ffmpeg. Continues until
- you send SIGTERM (ctrl+c) to swaygrab.
-
-*-o, \--output* <output>::
- Use the specified _output_. If no output is defined the currently focused
- output in sway will be used.
-
-*-v, \--version*::
- Print the version (of swaymsg) and quit.
-
-*-s, --socket* <path>::
- Use the specified socket path. Otherwise, swaymsg will ask sway where the
- socket is (which is the value of $SWAYSOCK, then of $I3SOCK).
-
-*-R, --rate* <rate>::
- Specify a framerate (in frames per second). Used in combination with -c.
- Default is 30. Must be an integer.
-
-*-r, --raw*::
- Instead of invoking ImageMagick or ffmpeg, dump raw rgba data to stdout.
-
-*-f, --focused*::
- Capture only the currently focused container.
-
-Environment Variables
----------------------
-swaygrab reads the following environment variables.
-
-*SWAYGRAB_FFMPEG_OPTS*::
- Pass additional arguments to FFmpeg when starting a capture.
-
-Examples
---------
-
-swaygrab output.png::
- Grab the contents of currently focused output and write to output.png.
-
-swaygrab -c -o HDMI-A-1 output.webm::
- Capture a webm of HDMI-A-1.
-
-SWAYGRAB_FFMPEG_OPTS="-f alsa -i pulse" swaygrab -c::
- Capture the focused output and encode audio from the default recording
- device.
-
-Authors
--------
-
-Maintained by Drew DeVault <sir@cmpwn.com>, who is assisted by other open
-source contributors. For more information about sway development, see
-<https://github.com/swaywm/sway>.
diff --git a/swaylock/swaylock.1.scd b/swaylock/swaylock.1.scd
@@ -0,0 +1,103 @@
+swaylock(1)
+
+# NAME
+
+swaylock - Screen locker for Wayland
+
+# SYNOPSIS
+
+_swaylock_ [options...]
+
+Locks your Wayland session.
+
+# OPTIONS
+
+*-h, --help*
+ Show help message and quit.
+
+*-c, --color* <rrggbb[aa]>
+ Turn the screen into the given color. If -i is used, this sets the
+ background of the image to the given color. Defaults to white (FFFFFF), or
+ transparent (00000000) if an image is in use.
+
+*-f, --daemonize*
+ Fork into the background after spawning. Note: this is the default behavior
+ of i3lock.
+
+*-i, --image* [<output>:]<path>
+ Display the given image, optionally only on the given output. Use -c to set
+ a background color.
+
+*--scaling*
+ Scaling mode for images: _stretch_, _fill_, _fit_, _center_, or _tile_.
+
+*-t, --tiling*
+ Same as --scaling=tile.
+
+*-u, --no-unlock-indicator*
+ Disable the unlock indicator.
+
+*-v, --version*
+ Show the version number and quit.
+
+# APPEARANCE
+
+*--bshlcolor* <rrggbb[aa]>
+ Sets the color of backspace highlight segments.
+
+*--font* <font>
+ Sets the font of the text inside the indicator.
+
+*--insidecolor* <rrggbb[aa]>
+ Sets the color of the inside of the indicator when typing or idle.
+
+*--insidevercolor* <rrggbb[aa]>
+ Sets the color of the inside of the indicator when verifying.
+
+*--insidewrongcolor* <rrggbb[aa]>
+ Sets the color of the inside of the indicator when invalid.
+
+*--keyhlcolor* <rrggbb[aa]>
+ Sets the color of keypress highlight segments.
+
+*--linecolor* <rrggbb[aa]>
+ Sets the color of the lines that separate the inside and outside of the
+ indicator.
+
+*-s, --line-uses-inside*
+ Use the color of the inside of the indicator for the line separating the
+ inside and outside of the indicator.
+
+*-r, --line-uses-ring*
+ Use the outer ring's color for the line separating the inside and outside of
+ the indicator.
+
+*--ringcolor* <rrggbb[aa]>
+ Sets the color of the outside of the indicator when typing or idle.
+
+*--ringvercolor* <rrggbb[aa]>
+ Sets the color of the outside of the indicator when verifying.
+
+*--ringwrongcolor* <rrggbb[aa]>
+ Sets the color of the outside of the indicator when invalid.
+
+*--separatorcolor* <rrggbb[aa]>
+ Sets the color of the lines that seperate highlight segments.
+
+*--textcolor* <rrggbb[aa]>
+ Sets the color of the text inside the indicator.
+
+*--indicator-radius* <radius>
+ Sets the radius of the indicator to _radius_ pixels. The default value is
+ 50.
+
+*--indicator-thickness* <thickness>
+ Sets the thickness of the indicator to _thickness_ pixels. The default value
+ is 10.
+
+# AUTHORS
+
+Maintained by Drew DeVault <sir@cmpwn.com>, who is assisted by other open
+source contributors. For more information about sway development, see
+https://github.com/swaywm/sway.
+
diff --git a/swaymsg/swaymsg.1.scd b/swaymsg/swaymsg.1.scd
@@ -0,0 +1,66 @@
+swaymsg(1)
+
+# NAME
+
+swaymsg - Send messages to a running instance of sway over the IPC socket.
+
+# SYNOPSIS
+
+_swaymsg_ [options...] [message]
+
+# OPTIONS
+
+*-h, --help*
+ Show help message and quit.
+
+*-q, --quiet*
+ Sends the IPC message but does not print the response from sway.
+
+*-r, --raw*
+ Use raw output even if using a tty.
+
+*-s, --socket* <path>
+ Use the specified socket path. Otherwise, swaymsg will ask sway where the
+ socket is (which is the value of $SWAYSOCK, then of $I3SOCK).
+
+*-t, --type* <type>
+ Specify the type of IPC message. See below.
+
+*-v, --version*
+ Print the version (of swaymsg) and quit.
+
+# IPC MESSAGE TYPES
+
+*<command>*
+ The message is a sway command (the same commands you can bind to keybindings
+ in your sway config file). It will be executed immediately.
+
+ See **sway**(5) for a list of commands.
+
+*get\_workspaces*
+ Gets a JSON-encoded list of workspaces and their status.
+
+*get\_inputs*
+ Gets a JSON-encoded list of current inputs.
+
+*get\_outputs*
+ Gets a JSON-encoded list of current outputs.
+
+*get\_tree*
+ Gets a JSON-encoded layout tree of all open windows, containers, outputs,
+ workspaces, and so on.
+
+*get\_marks*
+ Get a JSON-encoded list of marks.
+
+*get\_bar\_config*
+ Get a JSON-encoded configuration for swaybar.
+
+*get\_version*
+ Get JSON-encoded version information for the running instance of sway.
+
+*get\_clipboard*
+ Get JSON-encoded information about the clipboard.
+ Returns the current clipboard mime-types if called without
+ arguments, otherwise returns the clipboard data in the requested
+ formats. Encodes the data using base64 for non-text mime types.