diff options
-rw-r--r-- | .build.yml | 1 | ||||
-rw-r--r-- | README.de.md | 2 | ||||
-rw-r--r-- | README.el.md | 2 | ||||
-rw-r--r-- | README.fr.md | 2 | ||||
-rw-r--r-- | README.it.md | 2 | ||||
-rw-r--r-- | README.ja.md | 2 | ||||
-rw-r--r-- | README.md | 2 | ||||
-rw-r--r-- | README.pt.md | 2 | ||||
-rw-r--r-- | README.ru.md | 2 | ||||
-rw-r--r-- | README.uk.md | 2 | ||||
-rw-r--r-- | meson.build | 30 | ||||
-rw-r--r-- | sway/sway-bar.5.scd (renamed from sway/sway-bar.5.txt) | 140 | ||||
-rw-r--r-- | sway/sway-input.5.scd (renamed from sway/sway-input.5.txt) | 109 | ||||
-rw-r--r-- | sway/sway-security.7.txt | 239 | ||||
-rw-r--r-- | sway/sway.1.scd | 95 | ||||
-rw-r--r-- | sway/sway.1.txt | 109 | ||||
-rw-r--r-- | sway/sway.5.scd | 582 | ||||
-rw-r--r-- | sway/sway.5.txt | 521 | ||||
-rw-r--r-- | swaygrab/json.c | 144 | ||||
-rw-r--r-- | swaygrab/main.c | 298 | ||||
-rw-r--r-- | swaygrab/swaygrab.1.txt | 76 | ||||
-rw-r--r-- | swaylock/swaylock.1.scd | 103 | ||||
-rw-r--r-- | swaymsg/swaymsg.1.scd | 66 |
23 files changed, 983 insertions, 1548 deletions
@@ -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 index d63d8318..206a1040 100644 --- 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 index 682dbc84..5c70beff 100644 --- 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 index 360fe618..0d2573f9 100644 --- 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 index 94dc96c6..0d81ea54 100644 --- 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 index 42d31b86..476d7472 100644 --- 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でのみ必要です_ @@ -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 index 98ad72e3..d1ef245f 100644 --- 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 index 7329303e..3b3de19a 100644 --- 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 index 81bc70fa..55698487 100644 --- 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 index f59d29b3..a1f406ec 100644 --- 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.txt b/sway/sway-bar.5.scd index 99238952..a61e2829 100644 --- a/sway/sway-bar.5.txt +++ b/sway/sway-bar.5.scd @@ -1,159 +1,147 @@ -///// -vim:set ts=4 sw=4 tw=82 noet: -///// -sway-bar (5) -============ - -Name ----- +sway-bar(5) + +# NAME + sway-bar - bar configuration file and commands -Description ------------ +# DESCRIPTION -Sway allows configuring swaybar in the sway configuration file. -Swaybar commands must be used inside a _bar { }_ block in the config file. +Sway allows configuring swaybar in the sway configuration file. Swaybar +commands must be used inside a _bar { }_ block in the config file. +# COMMANDS -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: -**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>:: +*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>:: +*id* <bar\_id> Sets the ID of the bar. -**position** <top|bottom>:: +*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. +*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_. +*swaybar\_command* <command> + Executes custom bar command. Default is _swaybar_. -**font** <font>:: +*font* <font> Specifies the font to be used in the bar. -**separator_symbol** <symbol>:: +*separator\_symbol* <symbol> Specifies the separator symbol to separate blocks on the bar. -**wrap_scroll** <yes|no>:: +*wrap\_scroll* yes|no Enables or disables wrapping when scrolling through workspaces with the scroll wheel. Default is _no_. -**workspace_buttons** <yes|no>:: +*workspace\_buttons* yes|no Enables or disables workspace buttons on the bar. Default is _yes_. -**strip_workspace_numbers** <yes|no>:: +*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>:: +*binding\_mode\_indicator* yes|no Enable or disable binding mode indicator. Default is _yes_. -**height** <height>:: +*height* <height> Sets the height of the bar. Default height will match the font size. -Tray ----- +## 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. +Swaybar provides a system tray where third-party applications may place icons. +The following commands configure the tray. -**activate_button** <button>:: +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). + event. The default is BTN\_LEFT (0x110). -**context_button** <button>:: +*context\_button* <button> Sets the button to be used for the _context menu_ (right click) tray item - event. The default is BTN_RIGHT (0x111). + event. The default is BTN\_RIGHT (0x111). -**secondary_button** <button>:: +*secondary\_button* <button> Sets the button to be used for the _secondary_ (middle click) tray item - event. The default is BTN_MIDDLE (0x112). + event. The default is BTN\_MIDDLE (0x112). -**tray_output** none|all|<name>:: +*tray\_output* none|all|<output> 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_. + is able to show icons on any number of bars and outputs without races. + The default is _all_. -**tray_padding** <px> [px]:: +*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>:: +*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 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. +must be defined in hex: _#RRGGBB_ or _#RRGGBBAA_. -**background** <color>:: +*background* <color> Background color of the bar. -**statusline** <color>:: +*statusline* <color> Text color to be used for the statusline. -**separator** <color>:: +*separator* <color> Text color to be used for the separator. -**focused_background** <color>:: +*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>:: +*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>:: +*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>:: +*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. +*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>:: +*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>:: +*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>:: +*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_. + the colors will be taken from _urgent\_workspace_. +# SEE ALSO -See Also --------- +*sway*(5) -**sway**(5) diff --git a/sway/sway-input.5.txt b/sway/sway-input.5.scd index c7305503..c07460b1 100644 --- a/sway/sway-input.5.txt +++ b/sway/sway-input.5.scd @@ -1,58 +1,50 @@ -///// -vim:set ft=asciidoc ts=4 sw=4 tw=82 noet: -///// -sway-input (5) -============== - -Name ----- +sway-input(5) + +# NAME + sway-input - input configuration file and commands -Description ------------ +# 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**. +To obtain a list of available device identifiers, run *swaymsg -t get\_inputs*. -Input Commands --------------- +# INPUT COMMANDS -Keyboard Configuration -~~~~~~~~~~~~~~~~~~~~~~ +## KEYBOARD CONFIGURATION For more information on these xkb configuration options, see -**xkeyboard-config**(7). +*xkeyboard-config*(7). -**input** <identifier> xkb_layout <layout_name>:: +*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\_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>:: +*input* <identifier> xkb\_options <options> Sets extra xkb configuration options for the keyboard. -**input** <identifier> xkb_rules <rules>:: +*input* <identifier> xkb\_rules <rules> Sets files of rules to be used for keyboard mapping composition. -**input** <identifier> xkb_variant <variant>:: +*input* <identifier> xkb\_variant <variant> Sets the variant of the keyboard like _dvorak_ or _colemak_. -Mapping Configuration ---------------------- +## MAPPING CONFIGURATION -**input** <identifier> map_to_output <identifier>:: +*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>:: +*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>:: +*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 @@ -60,72 +52,69 @@ Mapping Configuration as a drawing tablet or touch screen - most pointers provide events relative to the previous frame). -Libinput Configuration -~~~~~~~~~~~~~~~~~~~~~~ +## LIBINPUT CONFIGURATION -**input** <identifier> accel_profile <adaptive|flat>:: +*input* <identifier> accel\_profile adaptive|flat Sets the pointer acceleration profile for the specified input device. -**input** <identifier> click_method <none|button_areas|clickfinger>:: +*input* <identifier> click\_method none|button\_areas|clickfinger Changes the click method for the specified device. -**input** <identifier> drag_lock <enabled|disabled>:: +*input* <identifier> drag\_lock enabled|disabled Enables or disables drag lock for specified input device. -**input** <identifier> dwt <enabled|disabled>:: +*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> 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>:: +*input* <identifier> left\_handed enabled|disabled Enables or disables left handed mode for specified input device. -**input** <identifier> middle_emulation <enabled|disabled>:: +*input* <identifier> middle\_emulation enabled|disabled Enables or disables middle click emulation. -**input** <identifier> natural_scroll <enabled|disabled>:: +*input* <identifier> natural\_scroll enabled|disabled Enables or disables natural (inverted) scrolling for the specified input device. -**input** <identifier> pointer_accel <[-1,1]>:: +*input* <identifier> pointer\_accel [<-1|1>] Changes the pointer acceleration for the specified input device. -**input** <identifier> repeat_delay <milliseconds>:: +*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> 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>:: +*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>:: +*input* <identifier> tap enabled|disabled Enables or disables tap for specified input device. -Seat Configuration ------------------- +## 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. +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"). +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> 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). +*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 --------- +# SEE ALSO -**sway**(5) +*sway*(5) diff --git a/sway/sway-security.7.txt b/sway/sway-security.7.txt deleted file mode 100644 index c8d6758c..00000000 --- a/sway/sway-security.7.txt +++ /dev/null @@ -1,239 +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. - -**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 new file mode 100644 index 00000000..5b770cce --- /dev/null +++ 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 deleted file mode 100644 index 17fc13da..00000000 --- a/sway/sway.1.txt +++ /dev/null @@ -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 new file mode 100644 index 00000000..2ebdb8ed --- /dev/null +++ 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 deleted file mode 100644 index 03975349..00000000 --- a/sway/sway.5.txt +++ /dev/null @@ -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 deleted file mode 100644 index 286085c3..00000000 --- a/swaygrab/json.c +++ /dev/null @@ -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 deleted file mode 100644 index 1b699bb9..00000000 --- a/swaygrab/main.c +++ /dev/null @@ -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 deleted file mode 100644 index 8faf43f5..00000000 --- a/swaygrab/swaygrab.1.txt +++ /dev/null @@ -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 new file mode 100644 index 00000000..2580bff9 --- /dev/null +++ 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 new file mode 100644 index 00000000..1aa6a1b0 --- /dev/null +++ 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. |