commit
						e2b8eac4bf
					
				| @ -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) | ||||
| @ -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>. | ||||
| @ -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) | ||||
| @ -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) | ||||
| @ -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) | ||||
| @ -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) | ||||
| @ -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; | ||||
| } | ||||
| @ -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; | ||||
| } | ||||
| @ -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>. | ||||
| @ -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. | ||||
| 
 | ||||
| @ -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. | ||||
					Loading…
					
					
				
		Reference in new issue