sway

i3-compatible Wayland compositor
git clone https://git.awy.one/sway
Log | Files | Refs | README | LICENSE

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:
M.build.yml | 1+
MREADME.de.md | 2+-
MREADME.el.md | 2+-
MREADME.fr.md | 2+-
MREADME.it.md | 2+-
MREADME.ja.md | 2+-
MREADME.md | 2+-
MREADME.pt.md | 2+-
MREADME.ru.md | 2+-
MREADME.uk.md | 2+-
Mmeson.build | 30++++++++++++++----------------
Asway/sway-bar.5.scd | 147+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Dsway/sway-bar.5.txt | 159-------------------------------------------------------------------------------
Asway/sway-input.5.scd | 120+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Dsway/sway-input.5.txt | 131-------------------------------------------------------------------------------
Dsway/sway-security.7.txt | 242-------------------------------------------------------------------------------
Asway/sway.1.scd | 95+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Dsway/sway.1.txt | 109-------------------------------------------------------------------------------
Asway/sway.5.scd | 582++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Dsway/sway.5.txt | 521-------------------------------------------------------------------------------
Dswaygrab/json.c | 144-------------------------------------------------------------------------------
Dswaygrab/main.c | 298-------------------------------------------------------------------------------
Dswaygrab/swaygrab.1.txt | 76----------------------------------------------------------------------------
Aswaylock/swaylock.1.scd | 103+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Aswaymsg/swaymsg.1.scd | 66++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
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.