mirror of
				https://github.com/swaywm/sway.git
				synced 2025-11-03 09:01:43 -05:00 
			
		
		
		
	Merge branch 'master' into edge-borders
This commit is contained in:
		
						commit
						ec60e24f75
					
				
					 33 changed files with 1081 additions and 1559 deletions
				
			
		| 
						 | 
					@ -12,6 +12,7 @@ packages:
 | 
				
			||||||
  - gdk-pixbuf2
 | 
					  - gdk-pixbuf2
 | 
				
			||||||
  - libinput
 | 
					  - libinput
 | 
				
			||||||
  - libxkbcommon
 | 
					  - libxkbcommon
 | 
				
			||||||
 | 
					  - scdoc
 | 
				
			||||||
sources:
 | 
					sources:
 | 
				
			||||||
  - https://github.com/swaywm/sway
 | 
					  - https://github.com/swaywm/sway
 | 
				
			||||||
  - https://github.com/swaywm/wlroots
 | 
					  - https://github.com/swaywm/wlroots
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -58,7 +58,6 @@ Abhängigkeiten:
 | 
				
			||||||
* xwayland
 | 
					* xwayland
 | 
				
			||||||
* libinput >= 1.6.0
 | 
					* libinput >= 1.6.0
 | 
				
			||||||
* libcap
 | 
					* libcap
 | 
				
			||||||
* asciidoc
 | 
					 | 
				
			||||||
* pcre
 | 
					* pcre
 | 
				
			||||||
* json-c >= 0.13
 | 
					* json-c >= 0.13
 | 
				
			||||||
* pango
 | 
					* pango
 | 
				
			||||||
| 
						 | 
					@ -67,6 +66,7 @@ Abhängigkeiten:
 | 
				
			||||||
* pam **
 | 
					* pam **
 | 
				
			||||||
* imagemagick (erforderlich für Bildaufnahme mit swaygrab)
 | 
					* imagemagick (erforderlich für Bildaufnahme mit swaygrab)
 | 
				
			||||||
* ffmpeg (erforderlich für Videoaufnahme swaygrab)
 | 
					* ffmpeg (erforderlich für Videoaufnahme swaygrab)
 | 
				
			||||||
 | 
					* [scdoc](https://git.sr.ht/~sircmpwn/scdoc) (erforderlich für man pages)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
_\*Nur erforderlich für swaybar, swaybg, und swaylock_
 | 
					_\*Nur erforderlich für swaybar, swaybg, und swaylock_
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -51,7 +51,6 @@ To username μου στο Freenode είναι kon14 και θα με βρείτ
 | 
				
			||||||
* xwayland
 | 
					* xwayland
 | 
				
			||||||
* libinput >= 1.6.0
 | 
					* libinput >= 1.6.0
 | 
				
			||||||
* libcap
 | 
					* libcap
 | 
				
			||||||
* asciidoc
 | 
					 | 
				
			||||||
* pcre
 | 
					* pcre
 | 
				
			||||||
* json-c >= 0.13
 | 
					* json-c >= 0.13
 | 
				
			||||||
* pango
 | 
					* pango
 | 
				
			||||||
| 
						 | 
					@ -60,6 +59,7 @@ To username μου στο Freenode είναι kon14 και θα με βρείτ
 | 
				
			||||||
* pam **
 | 
					* pam **
 | 
				
			||||||
* imagemagick (αναγκαίο για καταγραφή εικόνας μέσω του swaygrab)
 | 
					* imagemagick (αναγκαίο για καταγραφή εικόνας μέσω του swaygrab)
 | 
				
			||||||
* ffmpeg (αναγκαίο για καταγραφή video μέσω του swaygrab)
 | 
					* ffmpeg (αναγκαίο για καταγραφή video μέσω του swaygrab)
 | 
				
			||||||
 | 
					* [scdoc](https://git.sr.ht/~sircmpwn/scdoc) (required for man pages)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
_\*Απαιτείται μόνο για swaybar, swaybg, and swaylock_
 | 
					_\*Απαιτείται μόνο για swaybar, swaybg, and swaylock_
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -53,7 +53,6 @@ Installez les dépendances :
 | 
				
			||||||
* xwayland
 | 
					* xwayland
 | 
				
			||||||
* libinput >= 1.6.0
 | 
					* libinput >= 1.6.0
 | 
				
			||||||
* libcap
 | 
					* libcap
 | 
				
			||||||
* asciidoc
 | 
					 | 
				
			||||||
* pcre
 | 
					* pcre
 | 
				
			||||||
* json-c >= 0.13
 | 
					* json-c >= 0.13
 | 
				
			||||||
* pango
 | 
					* pango
 | 
				
			||||||
| 
						 | 
					@ -62,6 +61,7 @@ Installez les dépendances :
 | 
				
			||||||
* pam **
 | 
					* pam **
 | 
				
			||||||
* imagemagick (requis pour la capture d'image avec swaygrab)
 | 
					* imagemagick (requis pour la capture d'image avec swaygrab)
 | 
				
			||||||
* ffmpeg (requis pour la capture vidéo avec swaygrab)
 | 
					* ffmpeg (requis pour la capture vidéo avec swaygrab)
 | 
				
			||||||
 | 
					* [scdoc](https://git.sr.ht/~sircmpwn/scdoc) (requis pour les pages man)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
_\*Uniquement requis pour swaybar, swaybg, and swaylock_
 | 
					_\*Uniquement requis pour swaybar, swaybg, and swaylock_
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -54,7 +54,6 @@ Installa queste dipendenze:
 | 
				
			||||||
* xwayland
 | 
					* xwayland
 | 
				
			||||||
* libinput >= 1.6.0
 | 
					* libinput >= 1.6.0
 | 
				
			||||||
* libcap
 | 
					* libcap
 | 
				
			||||||
* asciidoc
 | 
					 | 
				
			||||||
* pcre
 | 
					* pcre
 | 
				
			||||||
* json-c >= 0.13
 | 
					* json-c >= 0.13
 | 
				
			||||||
* pango
 | 
					* pango
 | 
				
			||||||
| 
						 | 
					@ -63,6 +62,7 @@ Installa queste dipendenze:
 | 
				
			||||||
* pam **
 | 
					* pam **
 | 
				
			||||||
* imagemagick (richiesto per catturare immagini con swaygrab)
 | 
					* imagemagick (richiesto per catturare immagini con swaygrab)
 | 
				
			||||||
* ffmpeg (rrichiesto per catturare video con swaygrab)
 | 
					* ffmpeg (rrichiesto per catturare video con swaygrab)
 | 
				
			||||||
 | 
					* [scdoc](https://git.sr.ht/~sircmpwn/scdoc) (rrichiesto per man pages)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
_\*Richiesto solo per swaybar, swaybg, e swaylock_
 | 
					_\*Richiesto solo per swaybar, swaybg, e swaylock_
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -44,7 +44,6 @@ Swayは沢山のディストリビューションで提供されています。"
 | 
				
			||||||
* xwayland
 | 
					* xwayland
 | 
				
			||||||
* libinput >= 1.6.0
 | 
					* libinput >= 1.6.0
 | 
				
			||||||
* libcap
 | 
					* libcap
 | 
				
			||||||
* asciidoc
 | 
					 | 
				
			||||||
* pcre
 | 
					* pcre
 | 
				
			||||||
* json-c >= 0.13
 | 
					* json-c >= 0.13
 | 
				
			||||||
* pango
 | 
					* pango
 | 
				
			||||||
| 
						 | 
					@ -53,6 +52,7 @@ Swayは沢山のディストリビューションで提供されています。"
 | 
				
			||||||
* pam **
 | 
					* pam **
 | 
				
			||||||
* imagemagick (swaygrabでスクリーンショットを撮るのに必要です)
 | 
					* imagemagick (swaygrabでスクリーンショットを撮るのに必要です)
 | 
				
			||||||
* ffmpeg (swaygrabで画面を録画するのに必要です)
 | 
					* ffmpeg (swaygrabで画面を録画するのに必要です)
 | 
				
			||||||
 | 
					* [scdoc](https://git.sr.ht/~sircmpwn/scdoc) (manで必要です)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
_\*swaybar,swaybg,swaylockでのみ必要です_
 | 
					_\*swaybar,swaybg,swaylockでのみ必要です_
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -51,7 +51,6 @@ Install dependencies:
 | 
				
			||||||
* xwayland
 | 
					* xwayland
 | 
				
			||||||
* libinput >= 1.6.0
 | 
					* libinput >= 1.6.0
 | 
				
			||||||
* libcap
 | 
					* libcap
 | 
				
			||||||
* asciidoc
 | 
					 | 
				
			||||||
* pcre
 | 
					* pcre
 | 
				
			||||||
* json-c >= 0.13
 | 
					* json-c >= 0.13
 | 
				
			||||||
* pango
 | 
					* pango
 | 
				
			||||||
| 
						 | 
					@ -61,6 +60,7 @@ Install dependencies:
 | 
				
			||||||
* dbus >= 1.10 ***
 | 
					* dbus >= 1.10 ***
 | 
				
			||||||
* imagemagick (required for image capture with swaygrab)
 | 
					* imagemagick (required for image capture with swaygrab)
 | 
				
			||||||
* ffmpeg (required for video capture with swaygrab)
 | 
					* ffmpeg (required for video capture with swaygrab)
 | 
				
			||||||
 | 
					* [scdoc](https://git.sr.ht/~sircmpwn/scdoc) (required for man pages)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
_\*Only required for swaybar, swaybg, and swaylock_
 | 
					_\*Only required for swaybar, swaybg, and swaylock_
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -60,7 +60,6 @@ Antes de iniciar a compilação, instale as dependências:
 | 
				
			||||||
* xwayland
 | 
					* xwayland
 | 
				
			||||||
* libinput >= 1.6.0
 | 
					* libinput >= 1.6.0
 | 
				
			||||||
* libcap
 | 
					* libcap
 | 
				
			||||||
* asciidoc
 | 
					 | 
				
			||||||
* pcre
 | 
					* pcre
 | 
				
			||||||
* json-c >= 0.13
 | 
					* json-c >= 0.13
 | 
				
			||||||
* pango
 | 
					* pango
 | 
				
			||||||
| 
						 | 
					@ -69,6 +68,7 @@ Antes de iniciar a compilação, instale as dependências:
 | 
				
			||||||
* pam **
 | 
					* pam **
 | 
				
			||||||
* imagemagick (capturar imagem com o swaygrab)
 | 
					* imagemagick (capturar imagem com o swaygrab)
 | 
				
			||||||
* ffmpeg (capturar vídeo com o swaygrab)
 | 
					* ffmpeg (capturar vídeo com o swaygrab)
 | 
				
			||||||
 | 
					* [scdoc](https://git.sr.ht/~sircmpwn/scdoc) (man pages)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
_\*Dependência apenas de swaybar, swaybg, e swaylock_
 | 
					_\*Dependência apenas de swaybar, swaybg, e swaylock_
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -55,7 +55,6 @@ Sway доступен во многих дистрибутивах и наход
 | 
				
			||||||
* xwayland
 | 
					* xwayland
 | 
				
			||||||
* libinput >= 1.6.0
 | 
					* libinput >= 1.6.0
 | 
				
			||||||
* libcap
 | 
					* libcap
 | 
				
			||||||
* asciidoc
 | 
					 | 
				
			||||||
* pcre
 | 
					* pcre
 | 
				
			||||||
* json-c >= 0.13
 | 
					* json-c >= 0.13
 | 
				
			||||||
* pango
 | 
					* pango
 | 
				
			||||||
| 
						 | 
					@ -65,6 +64,7 @@ Sway доступен во многих дистрибутивах и наход
 | 
				
			||||||
* dbus >= 1.10 ***
 | 
					* dbus >= 1.10 ***
 | 
				
			||||||
* imagemagick (требуется для захвата изображений через swaygrab)
 | 
					* imagemagick (требуется для захвата изображений через swaygrab)
 | 
				
			||||||
* ffmpeg (требуется для захвата видео через swaygrab)
 | 
					* ffmpeg (требуется для захвата видео через swaygrab)
 | 
				
			||||||
 | 
					* [scdoc](https://git.sr.ht/~sircmpwn/scdoc) (required for man pages)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
_\*Требуется только для swaybar, swaybg и swaylock_
 | 
					_\*Требуется только для swaybar, swaybg и swaylock_
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -60,7 +60,6 @@ Sway доступний у багатьох дистрибутивах Linux (а
 | 
				
			||||||
* xwayland
 | 
					* xwayland
 | 
				
			||||||
* libinput >= 1.6.0
 | 
					* libinput >= 1.6.0
 | 
				
			||||||
* libcap
 | 
					* libcap
 | 
				
			||||||
* asciidoc
 | 
					 | 
				
			||||||
* pcre
 | 
					* pcre
 | 
				
			||||||
* json-c >= 0.13
 | 
					* json-c >= 0.13
 | 
				
			||||||
* pango
 | 
					* pango
 | 
				
			||||||
| 
						 | 
					@ -69,6 +68,7 @@ Sway доступний у багатьох дистрибутивах Linux (а
 | 
				
			||||||
* pam **
 | 
					* pam **
 | 
				
			||||||
* imagemagick (для захоплення зображень за допомогою swaygrab)
 | 
					* imagemagick (для захоплення зображень за допомогою swaygrab)
 | 
				
			||||||
* ffmpeg (для захоплення відео за допомогою swaygrab)
 | 
					* ffmpeg (для захоплення відео за допомогою swaygrab)
 | 
				
			||||||
 | 
					* [scdoc](https://git.sr.ht/~sircmpwn/scdoc) (required for man pages)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
_\*Лише для swaybar, swaybg та swaylock_
 | 
					_\*Лише для swaybar, swaybg та swaylock_
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -15,6 +15,7 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
types=(
 | 
					types=(
 | 
				
			||||||
'get_workspaces'
 | 
					'get_workspaces'
 | 
				
			||||||
 | 
					'get_seats'
 | 
				
			||||||
'get_inputs'
 | 
					'get_inputs'
 | 
				
			||||||
'get_outputs'
 | 
					'get_outputs'
 | 
				
			||||||
'get_tree'
 | 
					'get_tree'
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -4,6 +4,7 @@
 | 
				
			||||||
#define event_mask(ev) (1 << (ev & 0x7F))
 | 
					#define event_mask(ev) (1 << (ev & 0x7F))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
enum ipc_command_type {
 | 
					enum ipc_command_type {
 | 
				
			||||||
 | 
						// i3 command types - see i3's I3_REPLY_TYPE constants
 | 
				
			||||||
	IPC_COMMAND = 0,
 | 
						IPC_COMMAND = 0,
 | 
				
			||||||
	IPC_GET_WORKSPACES = 1,
 | 
						IPC_GET_WORKSPACES = 1,
 | 
				
			||||||
	IPC_SUBSCRIBE = 2,
 | 
						IPC_SUBSCRIBE = 2,
 | 
				
			||||||
| 
						 | 
					@ -12,9 +13,13 @@ enum ipc_command_type {
 | 
				
			||||||
	IPC_GET_MARKS = 5,
 | 
						IPC_GET_MARKS = 5,
 | 
				
			||||||
	IPC_GET_BAR_CONFIG = 6,
 | 
						IPC_GET_BAR_CONFIG = 6,
 | 
				
			||||||
	IPC_GET_VERSION = 7,
 | 
						IPC_GET_VERSION = 7,
 | 
				
			||||||
	IPC_GET_INPUTS = 8,
 | 
					
 | 
				
			||||||
	IPC_GET_CLIPBOARD = 9,
 | 
						// sway-specific command types
 | 
				
			||||||
	// Events send from sway to clients. Events have the highest bits set.
 | 
						IPC_GET_INPUTS = 100,
 | 
				
			||||||
 | 
						IPC_GET_CLIPBOARD = 101,
 | 
				
			||||||
 | 
						IPC_GET_SEATS = 102,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Events sent from sway to clients. Events have the highest bits set.
 | 
				
			||||||
	IPC_EVENT_WORKSPACE = ((1<<31) | 0),
 | 
						IPC_EVENT_WORKSPACE = ((1<<31) | 0),
 | 
				
			||||||
	IPC_EVENT_OUTPUT = ((1<<31) | 1),
 | 
						IPC_EVENT_OUTPUT = ((1<<31) | 1),
 | 
				
			||||||
	IPC_EVENT_MODE = ((1<<31) | 2),
 | 
						IPC_EVENT_MODE = ((1<<31) | 2),
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -263,8 +263,10 @@ enum ipc_feature {
 | 
				
			||||||
	IPC_FEATURE_EVENT_BINDING = 4096,
 | 
						IPC_FEATURE_EVENT_BINDING = 4096,
 | 
				
			||||||
	IPC_FEATURE_EVENT_INPUT = 8192,
 | 
						IPC_FEATURE_EVENT_INPUT = 8192,
 | 
				
			||||||
	IPC_FEATURE_GET_CLIPBOARD = 16384,
 | 
						IPC_FEATURE_GET_CLIPBOARD = 16384,
 | 
				
			||||||
 | 
						IPC_FEATURE_GET_SEATS = 32768,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	IPC_FEATURE_ALL_COMMANDS = 1 | 2 | 4 | 8 | 16 | 32 | 64 | 128 | 16384,
 | 
						IPC_FEATURE_ALL_COMMANDS =
 | 
				
			||||||
 | 
							1 | 2 | 4 | 8 | 16 | 32 | 64 | 128 | 16384 | 32768,
 | 
				
			||||||
	IPC_FEATURE_ALL_EVENTS = 256 | 512 | 1024 | 2048 | 4096 | 8192,
 | 
						IPC_FEATURE_ALL_EVENTS = 256 | 512 | 1024 | 2048 | 4096 | 8192,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	IPC_FEATURE_ALL = IPC_FEATURE_ALL_COMMANDS | IPC_FEATURE_ALL_EVENTS,
 | 
						IPC_FEATURE_ALL = IPC_FEATURE_ALL_COMMANDS | IPC_FEATURE_ALL_EVENTS,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -9,6 +9,7 @@ json_object *ipc_json_get_version();
 | 
				
			||||||
json_object *ipc_json_describe_container(struct sway_container *c);
 | 
					json_object *ipc_json_describe_container(struct sway_container *c);
 | 
				
			||||||
json_object *ipc_json_describe_container_recursive(struct sway_container *c);
 | 
					json_object *ipc_json_describe_container_recursive(struct sway_container *c);
 | 
				
			||||||
json_object *ipc_json_describe_input(struct sway_input_device *device);
 | 
					json_object *ipc_json_describe_input(struct sway_input_device *device);
 | 
				
			||||||
 | 
					json_object *ipc_json_describe_seat(struct sway_seat *seat);
 | 
				
			||||||
json_object *ipc_json_describe_bar_config(struct bar_config *bar);
 | 
					json_object *ipc_json_describe_bar_config(struct bar_config *bar);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										30
									
								
								meson.build
									
										
									
									
									
								
							
							
						
						
									
										30
									
								
								meson.build
									
										
									
									
									
								
							| 
						 | 
					@ -40,7 +40,6 @@ libpam         = cc.find_library('pam')
 | 
				
			||||||
math           = cc.find_library('m')
 | 
					math           = cc.find_library('m')
 | 
				
			||||||
rt             = cc.find_library('rt')
 | 
					rt             = cc.find_library('rt')
 | 
				
			||||||
git = find_program('git', required: false)
 | 
					git = find_program('git', required: false)
 | 
				
			||||||
a2x = find_program('a2x', required: false)
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
conf_data = configuration_data()
 | 
					conf_data = configuration_data()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -48,31 +47,30 @@ if gdk_pixbuf.found()
 | 
				
			||||||
	conf_data.set('HAVE_GDK_PIXBUF', true)
 | 
						conf_data.set('HAVE_GDK_PIXBUF', true)
 | 
				
			||||||
endif
 | 
					endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if a2x.found()
 | 
					scdoc = find_program('scdoc', required: false)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if scdoc.found()
 | 
				
			||||||
 | 
						sh = find_program('sh')
 | 
				
			||||||
	mandir = get_option('mandir')
 | 
						mandir = get_option('mandir')
 | 
				
			||||||
	man_files = [
 | 
						man_files = [
 | 
				
			||||||
		'sway/sway.1.txt',
 | 
							'sway/sway.1.scd',
 | 
				
			||||||
		'sway/sway.5.txt',
 | 
							'sway/sway.5.scd',
 | 
				
			||||||
		'sway/sway-bar.5.txt',
 | 
							'sway/sway-bar.5.scd',
 | 
				
			||||||
		'sway/sway-input.5.txt',
 | 
							'sway/sway-input.5.scd',
 | 
				
			||||||
		'sway/sway-security.7.txt',
 | 
							'swaylock/swaylock.1.scd',
 | 
				
			||||||
		'swaymsg/swaymsg.1.txt',
 | 
							'swaymsg/swaymsg.1.scd',
 | 
				
			||||||
	]
 | 
						]
 | 
				
			||||||
	foreach filename : man_files
 | 
						foreach filename : man_files
 | 
				
			||||||
		topic = filename.split('.')[-3].split('/')[-1]
 | 
							topic = filename.split('.')[-3].split('/')[-1]
 | 
				
			||||||
		section = filename.split('.')[-2]
 | 
							section = filename.split('.')[-2]
 | 
				
			||||||
 | 
							output = '@0@.@1@'.format(topic, section)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		custom_target(
 | 
							custom_target(
 | 
				
			||||||
			'man-@0@-@1@'.format(topic, section),
 | 
								output,
 | 
				
			||||||
			input: filename,
 | 
								input: filename,
 | 
				
			||||||
			output: '@BASENAME@',
 | 
								output: output,
 | 
				
			||||||
			command: [
 | 
								command: [
 | 
				
			||||||
				a2x,
 | 
									sh, '-c', '@0@ < @INPUT@ > @1@'.format(scdoc.path(), output)
 | 
				
			||||||
				'--no-xmllint',
 | 
					 | 
				
			||||||
				'--doctype', 'manpage',
 | 
					 | 
				
			||||||
				'--format', 'manpage',
 | 
					 | 
				
			||||||
				'--destination-dir', meson.current_build_dir(),
 | 
					 | 
				
			||||||
				'@INPUT@'
 | 
					 | 
				
			||||||
			],
 | 
								],
 | 
				
			||||||
			install: true,
 | 
								install: true,
 | 
				
			||||||
			install_dir: '@0@/man@1@'.format(mandir, section)
 | 
								install_dir: '@0@/man@1@'.format(mandir, section)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -240,7 +240,7 @@ static void handle_cursor_axis(struct wl_listener *listener, void *data) {
 | 
				
			||||||
	struct sway_cursor *cursor = wl_container_of(listener, cursor, axis);
 | 
						struct sway_cursor *cursor = wl_container_of(listener, cursor, axis);
 | 
				
			||||||
	struct wlr_event_pointer_axis *event = data;
 | 
						struct wlr_event_pointer_axis *event = data;
 | 
				
			||||||
	wlr_seat_pointer_notify_axis(cursor->seat->wlr_seat, event->time_msec,
 | 
						wlr_seat_pointer_notify_axis(cursor->seat->wlr_seat, event->time_msec,
 | 
				
			||||||
		event->orientation, event->delta);
 | 
							event->orientation, event->delta, event->delta_discrete, event->source);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void handle_touch_down(struct wl_listener *listener, void *data) {
 | 
					static void handle_touch_down(struct wl_listener *listener, void *data) {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -267,6 +267,31 @@ json_object *ipc_json_describe_input(struct sway_input_device *device) {
 | 
				
			||||||
	return object;
 | 
						return object;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					json_object *ipc_json_describe_seat(struct sway_seat *seat) {
 | 
				
			||||||
 | 
						if (!(sway_assert(seat, "Seat must not be null"))) {
 | 
				
			||||||
 | 
							return NULL;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						json_object *object = json_object_new_object();
 | 
				
			||||||
 | 
						struct sway_container *focus = seat_get_focus(seat);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						json_object_object_add(object, "name",
 | 
				
			||||||
 | 
							json_object_new_string(seat->wlr_seat->name));
 | 
				
			||||||
 | 
						json_object_object_add(object, "capabilities",
 | 
				
			||||||
 | 
							json_object_new_int(seat->wlr_seat->capabilities));
 | 
				
			||||||
 | 
						json_object_object_add(object, "focus",
 | 
				
			||||||
 | 
							json_object_new_int(focus ? focus->id : 0));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						json_object *devices = json_object_new_array();
 | 
				
			||||||
 | 
						struct sway_seat_device *device = NULL;
 | 
				
			||||||
 | 
						wl_list_for_each(device, &seat->devices, link) {
 | 
				
			||||||
 | 
							json_object_array_add(devices, ipc_json_describe_input(device->input_device));
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						json_object_object_add(object, "devices", devices);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return object;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
json_object *ipc_json_describe_bar_config(struct bar_config *bar) {
 | 
					json_object *ipc_json_describe_bar_config(struct bar_config *bar) {
 | 
				
			||||||
	if (!sway_assert(bar, "Bar must not be NULL")) {
 | 
						if (!sway_assert(bar, "Bar must not be NULL")) {
 | 
				
			||||||
		return NULL;
 | 
							return NULL;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -546,6 +546,19 @@ void ipc_client_handle_command(struct ipc_client *client) {
 | 
				
			||||||
		goto exit_cleanup;
 | 
							goto exit_cleanup;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						case IPC_GET_SEATS:
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							json_object *seats = json_object_new_array();
 | 
				
			||||||
 | 
							struct sway_seat *seat = NULL;
 | 
				
			||||||
 | 
							wl_list_for_each(seat, &input_manager->seats, link) {
 | 
				
			||||||
 | 
								json_object_array_add(seats, ipc_json_describe_seat(seat));
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							const char *json_string = json_object_to_json_string(seats);
 | 
				
			||||||
 | 
							ipc_send_reply(client, json_string, (uint32_t)strlen(json_string));
 | 
				
			||||||
 | 
							json_object_put(seats); // free
 | 
				
			||||||
 | 
							goto exit_cleanup;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	case IPC_GET_TREE:
 | 
						case IPC_GET_TREE:
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		json_object *tree =
 | 
							json_object *tree =
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,159 +1,147 @@
 | 
				
			||||||
/////
 | 
					sway-bar(5)
 | 
				
			||||||
vim:set ts=4 sw=4 tw=82 noet:
 | 
					
 | 
				
			||||||
/////
 | 
					# NAME
 | 
				
			||||||
sway-bar (5)
 | 
					 | 
				
			||||||
============
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
Name
 | 
					 | 
				
			||||||
----
 | 
					 | 
				
			||||||
sway-bar - bar configuration file and commands
 | 
					sway-bar - bar configuration file and commands
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Description
 | 
					# DESCRIPTION
 | 
				
			||||||
-----------
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
Sway allows configuring swaybar in the sway configuration file.
 | 
					Sway allows configuring swaybar in the sway configuration file. Swaybar
 | 
				
			||||||
Swaybar commands must be used inside a _bar { }_ block in the config file.
 | 
					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
 | 
						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
 | 
						Enables or disables pango markup for status lines. This has no effect on
 | 
				
			||||||
	status lines using the i3bar JSON protocol.
 | 
						status lines using the i3bar JSON protocol.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
**id** <bar_id>::
 | 
					*id* <bar\_id>
 | 
				
			||||||
	Sets the ID of the bar.
 | 
						Sets the ID of the bar.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
**position** <top|bottom>::
 | 
					*position* top|bottom
 | 
				
			||||||
	Sets position of the bar. Default is _bottom_.
 | 
						Sets position of the bar. Default is _bottom_.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
**output** <output>::
 | 
					*output* <output>
 | 
				
			||||||
	Restrict the bar to a certain output, can be specified multiple times. If the
 | 
						Restrict the bar to a certain output, can be specified multiple times. If
 | 
				
			||||||
	output command is omitted, the bar will be displayed on all outputs.
 | 
						the output command is omitted, the bar will be displayed on all outputs.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
**swaybar_command** <command>::
 | 
					*swaybar\_command* <command>
 | 
				
			||||||
	Executes custom bar command, default is _swaybar_.
 | 
						Executes custom bar command. Default is _swaybar_.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
**font** <font>::
 | 
					*font* <font>
 | 
				
			||||||
	Specifies the font to be used in the bar.
 | 
						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.
 | 
						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
 | 
						Enables or disables wrapping when scrolling through workspaces with the
 | 
				
			||||||
	scroll wheel. Default is _no_.
 | 
						scroll wheel. Default is _no_.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
**workspace_buttons** <yes|no>::
 | 
					*workspace\_buttons* yes|no
 | 
				
			||||||
	Enables or disables workspace buttons on the bar. Default is _yes_.
 | 
						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
 | 
						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_.
 | 
						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_.
 | 
						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.
 | 
						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,
 | 
					Swaybar provides a system tray where third-party applications may place icons.
 | 
				
			||||||
Pidgin, etc. can place little icons. The following commands configure
 | 
					The following commands configure the tray.
 | 
				
			||||||
interaction with the tray or individual icons.
 | 
					 | 
				
			||||||
The _button_ argument in all following commands is a Linux input event code as
 | 
					 | 
				
			||||||
defined in linux/input-event-codes.h. This is because wayland defines button
 | 
					 | 
				
			||||||
codes in this manner.
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
**activate_button** <button>::
 | 
					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
 | 
						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
 | 
						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
 | 
						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
 | 
						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
 | 
						is able to show icons on any number of bars and outputs without races.
 | 
				
			||||||
	races. Because of this, the default value for this is _all_.
 | 
						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
 | 
						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.
 | 
						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
 | 
						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,
 | 
						no default value, because sway will always default to the fallback theme,
 | 
				
			||||||
	hicolor.
 | 
						hicolor.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Colors
 | 
					## COLORS
 | 
				
			||||||
------
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
Colors are defined within a _colors { }_ block inside a _bar { }_ block. 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
 | 
					must be defined in hex: _#RRGGBB_ or _#RRGGBBAA_.
 | 
				
			||||||
channel.
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
**background** <color>::
 | 
					*background* <color>
 | 
				
			||||||
	Background color of the bar.
 | 
						Background color of the bar.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
**statusline** <color>::
 | 
					*statusline* <color>
 | 
				
			||||||
	Text color to be used for the statusline.
 | 
						Text color to be used for the statusline.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
**separator** <color>::
 | 
					*separator* <color>
 | 
				
			||||||
	Text color to be used for the separator.
 | 
						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
 | 
						Background color of the bar on the currently focused monitor output. If not
 | 
				
			||||||
	used, the color will be taken from _background_.
 | 
						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
 | 
						Text color to be used for the statusline on the currently focused monitor
 | 
				
			||||||
	output. If not used, the color will be taken from _statusline_.
 | 
						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
 | 
						Text color to be used for the separator on the currently focused monitor
 | 
				
			||||||
	output. If not used, the color will be taken from _separator_.
 | 
						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
 | 
						Border, background and text color for a workspace button when the workspace
 | 
				
			||||||
	has focus.
 | 
						has focus.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
**active_workspace** <border> <background> <text>::
 | 
					*active\_workspace* <border> <background> <text>
 | 
				
			||||||
	Border, background and text color for a workspace button when the workspace is
 | 
						Border, background and text color for a workspace button when the workspace
 | 
				
			||||||
	active (visible) on some output, but the focus is on another one. You can only
 | 
						is active (visible) on some output, but the focus is on another one. You
 | 
				
			||||||
	tell this apart from the focused workspace when you are using multiple
 | 
						can only tell this apart from the focused workspace when you are using
 | 
				
			||||||
	monitors.
 | 
						multiple monitors.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
**inactive_workspace** <border> <background> <text>::
 | 
					*inactive\_workspace* <border> <background> <text>
 | 
				
			||||||
	Border, background and text color for a workspace button when the workspace
 | 
						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
 | 
						does not have focus and is not active (visible) on any output. This will be
 | 
				
			||||||
	the case for most workspaces.
 | 
						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
 | 
						Border, background and text color for a workspace button when the workspace
 | 
				
			||||||
	contains a window with the urgency hint set.
 | 
						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,
 | 
						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,58 +1,50 @@
 | 
				
			||||||
/////
 | 
					sway-input(5)
 | 
				
			||||||
vim:set ft=asciidoc ts=4 sw=4 tw=82 noet:
 | 
					
 | 
				
			||||||
/////
 | 
					# NAME
 | 
				
			||||||
sway-input (5)
 | 
					 | 
				
			||||||
==============
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
Name
 | 
					 | 
				
			||||||
----
 | 
					 | 
				
			||||||
sway-input - input configuration file and commands
 | 
					sway-input - input configuration file and commands
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Description
 | 
					# DESCRIPTION
 | 
				
			||||||
-----------
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
Sway allows for configuration of devices within the sway configuration file.
 | 
					Sway allows for configuration of devices within the sway configuration file.
 | 
				
			||||||
sway-input commands must be used inside an _input { }_ block in the config.
 | 
					sway-input commands must be used inside an _input { }_ block in the config.
 | 
				
			||||||
To obtain a list of available device identifiers, run **swaymsg -t get_inputs**.
 | 
					To obtain a list of available device identifiers, run *swaymsg -t get\_inputs*.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Input Commands
 | 
					# INPUT COMMANDS
 | 
				
			||||||
--------------
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
Keyboard Configuration
 | 
					## KEYBOARD CONFIGURATION
 | 
				
			||||||
~~~~~~~~~~~~~~~~~~~~~~
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
For more information on these xkb configuration options, see
 | 
					For more information on these xkb configuration options, see
 | 
				
			||||||
**xkeyboard-config**(7).
 | 
					*xkeyboard-config*(7).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
**input** <identifier> xkb_layout <layout_name>::
 | 
					*input* <identifier> xkb\_layout <layout\_name>
 | 
				
			||||||
	Sets the layout of the keyboard like _us_ or _de_.
 | 
						Sets the layout of the keyboard like _us_ or _de_.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
**input** <identifier> xkb_model <model_name>::
 | 
					*input* <identifier> xkb\_model <model\_name>
 | 
				
			||||||
	Sets the model of the keyboard. This has an influence for some extra keys your
 | 
						Sets the model of the keyboard. This has an influence for some extra keys
 | 
				
			||||||
	keyboard might have.
 | 
						your keyboard might have.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
**input** <identifier> xkb_options <options>::
 | 
					*input* <identifier> xkb\_options <options>
 | 
				
			||||||
	Sets extra xkb configuration options for the keyboard.
 | 
						Sets extra xkb configuration options for the keyboard.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
**input** <identifier> xkb_rules <rules>::
 | 
					*input* <identifier> xkb\_rules <rules>
 | 
				
			||||||
	Sets files of rules to be used for keyboard mapping composition.
 | 
						Sets files of rules to be used for keyboard mapping composition.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
**input** <identifier> xkb_variant <variant>::
 | 
					*input* <identifier> xkb\_variant <variant>
 | 
				
			||||||
	Sets the variant of the keyboard like _dvorak_ or _colemak_.
 | 
						Sets the variant of the keyboard like _dvorak_ or _colemak_.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Mapping Configuration
 | 
					## MAPPING CONFIGURATION
 | 
				
			||||||
---------------------
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
**input** <identifier> map_to_output <identifier>::
 | 
					*input* <identifier> map\_to\_output <identifier>
 | 
				
			||||||
	Maps inputs from this device to the specified output. Only meaningful if the
 | 
						Maps inputs from this device to the specified output. Only meaningful if the
 | 
				
			||||||
	device is a pointer, touch, or drawing tablet device.
 | 
						device is a pointer, touch, or drawing tablet device.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
**input** <identifier> map_to_region <WxH\@X,Y>::
 | 
					*input* <identifier> map\_to\_region <WxH@X,Y>
 | 
				
			||||||
	Maps inputs from this device to the specified region of the global output
 | 
						Maps inputs from this device to the specified region of the global output
 | 
				
			||||||
	layout. Only meaningful if the device is a pointer, touch, or drawing tablet
 | 
						layout. Only meaningful if the device is a pointer, touch, or drawing tablet
 | 
				
			||||||
	device.
 | 
						device.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
**input** <identifier> map_from_region <X1xY1> <X2xY2>::
 | 
					*input* <identifier> map\_from\_region <X1xY1> <X2xY2>
 | 
				
			||||||
	Ignores inputs from this device that do not occur within the specified
 | 
						Ignores inputs from this device that do not occur within the specified
 | 
				
			||||||
	region. Can be in millimeters (e.g. 10x20mm 20x40mm) or in terms of 0..1
 | 
						region. Can be in millimeters (e.g. 10x20mm 20x40mm) or in terms of 0..1
 | 
				
			||||||
	(e.g. 0.5x0.5 0.7x0.7). Not all devices support millimeters. Only meaningful
 | 
						(e.g. 0.5x0.5 0.7x0.7). Not all devices support millimeters. Only meaningful
 | 
				
			||||||
| 
						 | 
					@ -60,72 +52,69 @@ Mapping Configuration
 | 
				
			||||||
	as a drawing tablet or touch screen - most pointers provide events relative
 | 
						as a drawing tablet or touch screen - most pointers provide events relative
 | 
				
			||||||
	to the previous frame).
 | 
						to the previous frame).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Libinput Configuration
 | 
					## LIBINPUT CONFIGURATION
 | 
				
			||||||
~~~~~~~~~~~~~~~~~~~~~~
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
**input** <identifier> accel_profile <adaptive|flat>::
 | 
					*input* <identifier> accel\_profile adaptive|flat
 | 
				
			||||||
	Sets the pointer acceleration profile for the specified input device.
 | 
						Sets the pointer acceleration profile for the specified input device.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
**input** <identifier> click_method <none|button_areas|clickfinger>::
 | 
					*input* <identifier> click\_method none|button\_areas|clickfinger
 | 
				
			||||||
	Changes the click method for the specified device.
 | 
						Changes the click method for the specified device.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
**input** <identifier> drag_lock <enabled|disabled>::
 | 
					*input* <identifier> drag\_lock enabled|disabled
 | 
				
			||||||
	Enables or disables drag lock for specified input device.
 | 
						Enables or disables drag lock for specified input device.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
**input** <identifier> dwt <enabled|disabled>::
 | 
					*input* <identifier> dwt enabled|disabled
 | 
				
			||||||
	Enables or disables disable-while-typing for the specified input device.
 | 
						Enables or disables disable-while-typing for the specified input device.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
**input** <identifier> events <enabled|disabled|disabled_on_external_mouse>::
 | 
					*input* <identifier> events enabled|disabled|disabled\_on\_external\_mouse
 | 
				
			||||||
	Enables or disables send_events for specified input device.
 | 
						Enables or disables send_events for specified input device. (Disabling
 | 
				
			||||||
	(Disabling send_events disables the input device)
 | 
						send_events disables the input device)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
**input** <identifier> left_handed <enabled|disabled>::
 | 
					*input* <identifier> left\_handed enabled|disabled
 | 
				
			||||||
	Enables or disables left handed mode for specified input device.
 | 
						Enables or disables left handed mode for specified input device.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
**input** <identifier> middle_emulation <enabled|disabled>::
 | 
					*input* <identifier> middle\_emulation enabled|disabled
 | 
				
			||||||
	Enables or disables middle click emulation.
 | 
						Enables or disables middle click emulation.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
**input** <identifier> natural_scroll <enabled|disabled>::
 | 
					*input* <identifier> natural\_scroll enabled|disabled
 | 
				
			||||||
	Enables or disables natural (inverted) scrolling for the specified input
 | 
						Enables or disables natural (inverted) scrolling for the specified input
 | 
				
			||||||
	device.
 | 
						device.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
**input** <identifier> pointer_accel <[-1,1]>::
 | 
					*input* <identifier> pointer\_accel [<-1|1>]
 | 
				
			||||||
	Changes the pointer acceleration for the specified input device.
 | 
						Changes the pointer acceleration for the specified input device.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
**input** <identifier> repeat_delay <milliseconds>::
 | 
					*input* <identifier> repeat\_delay <milliseconds>
 | 
				
			||||||
	Sets the amount of time a key must be held before it starts repeating.
 | 
						Sets the amount of time a key must be held before it starts repeating.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
**input** <identifier> repeat_rate <characters per second>::
 | 
					*input* <identifier> repeat\_rate <characters per second>
 | 
				
			||||||
	Sets the frequency of key repeats once the repeat_delay has passed.
 | 
						Sets the frequency of key repeats once the repeat\_delay has passed.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
**input** <identifier> scroll_method <none|two_finger|edge|on_button_down>::
 | 
					*input* <identifier> scroll\_method none|two\_finger|edge|on\_button\_down
 | 
				
			||||||
	Changes the scroll method for the specified input device.
 | 
						Changes the scroll method for the specified input device.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
**input** <identifier> tap <enabled|disabled>::
 | 
					*input* <identifier> tap enabled|disabled
 | 
				
			||||||
	Enables or disables tap for specified input device.
 | 
						Enables or disables tap for specified input device.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Seat Configuration
 | 
					## SEAT CONFIGURATION
 | 
				
			||||||
------------------
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
Configure options for multiseat mode. sway-seat commands must be used inside a
 | 
					Configure options for multiseat mode. sway-seat commands must be used inside a
 | 
				
			||||||
_seat { }_ block in the config.
 | 
					_seat { }_ block in the config.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
A _seat_ is a collection of input devices that act independently of each other.
 | 
					A *seat* is a collection of input devices that act independently of each other.
 | 
				
			||||||
Seats are identified by name and the default seat is _seat0_ if no seats are
 | 
					Seats are identified by name and the default seat is _seat0_ if no seats are
 | 
				
			||||||
configured. Each seat has an independent keyboard focus and a separate cursor that
 | 
					configured. Each seat has an independent keyboard focus and a separate cursor that
 | 
				
			||||||
is controlled by the pointer devices of the seat. This is useful for multiple
 | 
					is controlled by the pointer devices of the seat. This is useful for multiple
 | 
				
			||||||
people using the desktop at the same time with their own devices (each sitting in
 | 
					people using the desktop at the same time with their own devices (each sitting
 | 
				
			||||||
their own "seat").
 | 
					in their own "seat").
 | 
				
			||||||
 | 
					
 | 
				
			||||||
**seat** <name> attach <input_identifier>::
 | 
					*seat* <name> attach <input\_identifier>
 | 
				
			||||||
	Attach an input device to this seat by its input identifier. A special value
 | 
						Attach an input device to this seat by its input identifier. A special
 | 
				
			||||||
	of _*_ will attach all devices to the seat.
 | 
						value of "\*" will attach all devices to the seat.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
**seat** <name> fallback <true|false>::
 | 
					*seat* <name> fallback true|false
 | 
				
			||||||
	Set this seat as the fallback seat. A fallback seat will attach any device not
 | 
						Set this seat as the fallback seat. A fallback seat will attach any device
 | 
				
			||||||
	explicitly attached to another seat (similar to a "default" seat).
 | 
						not explicitly attached to another seat (similar to a "default" seat).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
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>.
 | 
					 | 
				
			||||||
							
								
								
									
										95
									
								
								sway/sway.1.scd
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										95
									
								
								sway/sway.1.scd
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -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)
 | 
				
			||||||
							
								
								
									
										109
									
								
								sway/sway.1.txt
									
										
									
									
									
								
							
							
						
						
									
										109
									
								
								sway/sway.1.txt
									
										
									
									
									
								
							| 
						 | 
					@ -1,109 +0,0 @@
 | 
				
			||||||
/////
 | 
					 | 
				
			||||||
vim:set ft=asciidoc ts=4 sw=4 tw=82 noet:
 | 
					 | 
				
			||||||
/////
 | 
					 | 
				
			||||||
:quotes.~:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
sway (1)
 | 
					 | 
				
			||||||
========
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Name
 | 
					 | 
				
			||||||
----
 | 
					 | 
				
			||||||
sway - SirCmpwn's Wayland window manager
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Synopsis
 | 
					 | 
				
			||||||
--------
 | 
					 | 
				
			||||||
'sway' [options] [command]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Options
 | 
					 | 
				
			||||||
-------
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
*-h, --help*::
 | 
					 | 
				
			||||||
	Show help message and quit.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
*-c, \--config* <config>::
 | 
					 | 
				
			||||||
	Specifies a config file.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
*-C, \--validate*::
 | 
					 | 
				
			||||||
	Check the validity of the config file, then exit.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
*-d, --debug*::
 | 
					 | 
				
			||||||
	Enables full logging, including debug information.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
*-v, \--version*::
 | 
					 | 
				
			||||||
	Show the version number and quit.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
*-V, --verbose*::
 | 
					 | 
				
			||||||
	Enables more verbose logging.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
*--get-socketpath*::
 | 
					 | 
				
			||||||
	Gets the IPC socket path and prints it, then exits.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Description
 | 
					 | 
				
			||||||
-----------
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
sway was created to fill the need of an i3-like window manager for Wayland. The
 | 
					 | 
				
			||||||
upstream i3 developers have no intention of porting i3 to Wayland, and projects
 | 
					 | 
				
			||||||
proposed by others ended up as vaporware. Many thanks to the i3 folks for
 | 
					 | 
				
			||||||
providing such a great piece of software, so good that your users would rather
 | 
					 | 
				
			||||||
write an entirely new window manager from scratch that behaved _exactly_ like i3
 | 
					 | 
				
			||||||
rather than switch to something else.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Launch sway directly from a tty or via your favorite Wayland-compatible login
 | 
					 | 
				
			||||||
manager.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Commands
 | 
					 | 
				
			||||||
--------
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
If sway is currently running, you may run _sway [command]_ to send _command_ to
 | 
					 | 
				
			||||||
the running instance of sway. The same commands you would use in the config file
 | 
					 | 
				
			||||||
are valid here (see **sway**(5)). For compatibility reasons, you may also issue
 | 
					 | 
				
			||||||
commands with **swaymsg**(1) or **i3-msg**(1) (or even with **i3**(1), probably).
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Configuration
 | 
					 | 
				
			||||||
-------------
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
The path to a config file can be given via the _-c_ parameter, else
 | 
					 | 
				
			||||||
sway searches for it in the following locations:
 | 
					 | 
				
			||||||
- ~/.sway/config
 | 
					 | 
				
			||||||
- $XDG_CONFIG_HOME/sway/config (suggested location)
 | 
					 | 
				
			||||||
- ~/.i3/config
 | 
					 | 
				
			||||||
- $XDG_CONFIG_HOME/i3/config (XDG_HOME )
 | 
					 | 
				
			||||||
- /etc/sway/config
 | 
					 | 
				
			||||||
- /etc/i3/config
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
In /etc/sway/config the standard config file is installed.
 | 
					 | 
				
			||||||
An error is raised when no config file is found.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
To write your own configuration, it's suggested that you copy the default config file to
 | 
					 | 
				
			||||||
the location of your choosing and start there.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
For information on the config file format, see **sway**(5).
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Environment
 | 
					 | 
				
			||||||
-----------
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
The following environment variables have an effect on sway:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
*SWAY_CURSOR_THEME*::
 | 
					 | 
				
			||||||
	Specifies the name of the cursor theme to use.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
*SWAY_CURSOR_SIZE*::
 | 
					 | 
				
			||||||
	Specifies the size of the cursor to use.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
*SWAYSOCK*::
 | 
					 | 
				
			||||||
	Specifies the path to the sway IPC socket.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
*XKB_DEFAULT_RULES*, *XKB_DEFAULT_MODEL*, *XKB_DEFAULT_LAYOUT*, *XKB_DEFAULT_VARIANT*, *XKB_DEFAULT_OPTIONS*::
 | 
					 | 
				
			||||||
	Configures the xkb keyboard settings. See xkeyboard-config(7).
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Authors
 | 
					 | 
				
			||||||
-------
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Maintained by Drew DeVault <sir@cmpwn.com>, who is assisted by other open
 | 
					 | 
				
			||||||
source contributors. For more information about sway development, see
 | 
					 | 
				
			||||||
<https://github.com/swaywm/sway>.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See Also
 | 
					 | 
				
			||||||
--------
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
**sway**(5) **swaymsg**(1) **swaygrab**(1) **sway-input**(5) **sway-bar**(5)
 | 
					 | 
				
			||||||
							
								
								
									
										582
									
								
								sway/sway.5.scd
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										582
									
								
								sway/sway.5.scd
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -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)
 | 
				
			||||||
							
								
								
									
										521
									
								
								sway/sway.5.txt
									
										
									
									
									
								
							
							
						
						
									
										521
									
								
								sway/sway.5.txt
									
										
									
									
									
								
							| 
						 | 
					@ -1,521 +0,0 @@
 | 
				
			||||||
/////
 | 
					 | 
				
			||||||
vim:set ts=4 sw=4 tw=82 noet:
 | 
					 | 
				
			||||||
/////
 | 
					 | 
				
			||||||
sway (5)
 | 
					 | 
				
			||||||
========
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Name
 | 
					 | 
				
			||||||
----
 | 
					 | 
				
			||||||
sway - configuration file and commands
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Description
 | 
					 | 
				
			||||||
-----------
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
A sway configuration file is a list of sway commands that are executed by sway
 | 
					 | 
				
			||||||
on startup.  These commands usually consist of setting your preferences and
 | 
					 | 
				
			||||||
setting key bindings. An example config is likely present in /etc/sway/config
 | 
					 | 
				
			||||||
for you to check out.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Lines in the configuration file might be extended through multiple lines by
 | 
					 | 
				
			||||||
adding a '\' character at the end of line. e.g.:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	bindsym Shift+XF86AudioRaiseVolume exec pactl set-sink-volume \
 | 
					 | 
				
			||||||
		$(pactl list sinks | grep -B 1 RUNNING | sed '1q;d' | sed 's/[^0-9]\+//g') +5%
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
These commands can be executed in your config file, via **swaymsg**(1), or via
 | 
					 | 
				
			||||||
the bindsym command.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Commands
 | 
					 | 
				
			||||||
--------
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
The following commands may only be used in the configuration file.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
**bar** <block of commands>::
 | 
					 | 
				
			||||||
	Append _{_ to this command, the following lines will be commands that
 | 
					 | 
				
			||||||
	configure **swaybar**, and _}_ on its own line to close the block.
 | 
					 | 
				
			||||||
	+
 | 
					 | 
				
			||||||
	See **sway-bar**(5) for details.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
**default_orientation** <horizontal|vertical|auto>::
 | 
					 | 
				
			||||||
	Sets the default container layout for tiled containers.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
**set** <name> <value>::
 | 
					 | 
				
			||||||
	Sets variable $name to _value_. You can use the new variable in the arguments
 | 
					 | 
				
			||||||
	of future commands.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
**swaybg_command** <command>::
 | 
					 | 
				
			||||||
	Executes custom bg command, default is _swaybg_.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
The following commands cannot be used directly in the configuration file.
 | 
					 | 
				
			||||||
They are expected to be used with **bindsym** or at runtime through **swaymsg**(1).
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
**border** <normal|pixel> [<n>]::
 | 
					 | 
				
			||||||
	Set border style for focused window. _normal_ includes a border of thickness
 | 
					 | 
				
			||||||
	_n_ and a title bar. _pixel_ is a border without title bar _n_ pixels thick.
 | 
					 | 
				
			||||||
	Default is _normal_ with border thickness 2.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
**border** <none|toggle>::
 | 
					 | 
				
			||||||
	Set border style for focused window to _none_ or _toggle_ between the
 | 
					 | 
				
			||||||
	available border styles: _normal_, _pixel_, _none_.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
**exit**::
 | 
					 | 
				
			||||||
	Exit sway and end your Wayland session.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
**floating** <enable|disable|toggle>::
 | 
					 | 
				
			||||||
	Make focused view floating, non-floating, or the opposite of what it is now.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
**focus** <direction>::
 | 
					 | 
				
			||||||
	Direction may be one of _up_, _down_, _left_, _right_, _next_, _prev_,
 | 
					 | 
				
			||||||
	_parent_, or _child_. The directional focus commands will move the focus
 | 
					 | 
				
			||||||
	in that direction. The _next_ and _prev_ directions will focus the next,
 | 
					 | 
				
			||||||
	respectively previous, element in the current container. The parent
 | 
					 | 
				
			||||||
	focus command will change the focus to the parent of the currently
 | 
					 | 
				
			||||||
	focused container, which is useful, for example, to open a sibling of
 | 
					 | 
				
			||||||
	the parent container, or to move the entire container around.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
**focus** output <direction|name>::
 | 
					 | 
				
			||||||
	Direction may be one of _up_, _down_, _left_, _right_. The directional focus
 | 
					 | 
				
			||||||
	commands will move the focus to the output in that direction. When name is
 | 
					 | 
				
			||||||
	given, the focus is changed to the output with that name.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
**focus** mode_toggle::
 | 
					 | 
				
			||||||
	Toggles focus between floating view and tiled view.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
**fullscreen**::
 | 
					 | 
				
			||||||
	Toggles fullscreen status for the focused view.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
**layout** <mode>::
 | 
					 | 
				
			||||||
	Sets the layout mode of the focused container. _mode_ can be one of _splith_,
 | 
					 | 
				
			||||||
	_splitv_, _toggle split_, _stacking_, _tabbed_.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
**layout** auto <mode>::
 | 
					 | 
				
			||||||
	Sets layout to one of the auto modes, i.e. one of _left_, _right_, _top_,
 | 
					 | 
				
			||||||
	or _bottom_.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
**layout** auto <next|prev>::
 | 
					 | 
				
			||||||
	Cycles between available auto layouts.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
**layout** auto [master|ncol] [inc|set] <n>::
 | 
					 | 
				
			||||||
	Modify the number of master elements, respectively slave columns, in the
 | 
					 | 
				
			||||||
	focused container. <n> can be a positive or negative integer. These commands
 | 
					 | 
				
			||||||
	only have an effect if the focused container uses one of the "auto" layouts.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
**layout** toggle split::
 | 
					 | 
				
			||||||
	Cycles between available split layouts.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
**move** <left|right|up|down> <[px]>::
 | 
					 | 
				
			||||||
	Moves the focused container _left_, _right_, _up_, or _down_. If the window
 | 
					 | 
				
			||||||
	is floating it moves it _px_ in that direction, defaulting to 10. Tiled
 | 
					 | 
				
			||||||
	containers are moved the same regardless of the _px_ argument.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
**move** <next|prev|first>::
 | 
					 | 
				
			||||||
	Moving to _prev_ or _next_ swaps the container with its sibling in the same
 | 
					 | 
				
			||||||
	container. Move _first_ exchanges the focused element in an auto layout with
 | 
					 | 
				
			||||||
	the first element, i.e. promotes the focused element to master position.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
**move** <container|window> to workspace <name>::
 | 
					 | 
				
			||||||
	Moves the focused container to the workspace identified by _name_.
 | 
					 | 
				
			||||||
	_name_ may be a special workspace name. See **workspace**.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
**move** <container|window|workspace> to output <name|direction>::
 | 
					 | 
				
			||||||
	Moves the focused container or workspace to the output identified by _name_ or
 | 
					 | 
				
			||||||
	_direction_. _direction_ may be one of _up_, _down_, _left_, _right_.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
**move** [to] scratchpad::
 | 
					 | 
				
			||||||
	Moves the focused window to the scratchpad.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
**reload**::
 | 
					 | 
				
			||||||
	Reloads the sway config file without restarting sway.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
**resize** <shrink|grow> <width|height> [<amount>] [px|ppt]::
 | 
					 | 
				
			||||||
	Resizes the currently focused container or view by _amount_. _amount_ is
 | 
					 | 
				
			||||||
	optional: the default value is 10 (either px or ppt depending on the view type).
 | 
					 | 
				
			||||||
	The [px|ppt] parameter is optional. _px_ specifies that _amount_ refers to pixels;
 | 
					 | 
				
			||||||
	_ppt_ specifies that _amount_ refers to percentage points of the current
 | 
					 | 
				
			||||||
	size. Floating views use px by default (but can use ppt if specified); tiled
 | 
					 | 
				
			||||||
	views use ppt by default (but can use px if specified).
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
**resize set** <width> [px] <height> [px]::
 | 
					 | 
				
			||||||
	Sets the width and height of the currently focused container to _width_ pixels
 | 
					 | 
				
			||||||
	and _height_ pixels. The [px] parameters are optional and have no effect. This
 | 
					 | 
				
			||||||
	command only accepts a size in pixels.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
**resize set** <width|height> <amount> [px] [<width|height> <amount> [px]]::
 | 
					 | 
				
			||||||
	Sets the _width_ and/or _height_ of the currently focused container to
 | 
					 | 
				
			||||||
	_amount_. The [px] parameters are optional and have no effect. This command
 | 
					 | 
				
			||||||
	only accepts a size in pixels.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
**scratchpad show**::
 | 
					 | 
				
			||||||
	Shows a window from the scratchpad. Repeatedly using this command will cycle
 | 
					 | 
				
			||||||
	through the windows in the scratchpad.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
**split** <vertical|v|horizontal|h|toggle|t>::
 | 
					 | 
				
			||||||
	Splits the current container, vertically or horizontally. If toggled, then the
 | 
					 | 
				
			||||||
	current container is split opposite to the parent container.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
**splith**::
 | 
					 | 
				
			||||||
	Equivalent to **split horizontal**.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
**splitv**::
 | 
					 | 
				
			||||||
	Equivalent to **split vertical**.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
**splitt**::
 | 
					 | 
				
			||||||
	Equivalent to **split toggle**.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
**sticky** <enable|disable|toggle>::
 | 
					 | 
				
			||||||
	"Sticks" a floating window to the current output so that it shows up on all
 | 
					 | 
				
			||||||
	workspaces.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
The following commands may be used either in the configuration file
 | 
					 | 
				
			||||||
or triggered at runtime.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
**assign** <criteria> [→] <workspace>::
 | 
					 | 
				
			||||||
	Assigns views matching _criteria_ (see **Criteria** section below) to
 | 
					 | 
				
			||||||
	_workspace_. The → (U+2192) is optional and purely for aesthetics. This
 | 
					 | 
				
			||||||
	command is exactly equivalent to "for_window <criteria> move container to
 | 
					 | 
				
			||||||
	workspace <workspace>".
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
**bindsym** <key combo> <command>::
 | 
					 | 
				
			||||||
	Binds _key combo_ to execute _command_ when pressed. You may use XKB key
 | 
					 | 
				
			||||||
	names here (**xev**(1) is a good tool for discovering them). An example
 | 
					 | 
				
			||||||
	bindsym command would be **bindsym Mod1+Shift+f exec firefox**, which would
 | 
					 | 
				
			||||||
	execute Firefox if the alt, shift, and F keys are pressed together. Any
 | 
					 | 
				
			||||||
	valid sway command is eligible to be bound to a key combo.
 | 
					 | 
				
			||||||
	+
 | 
					 | 
				
			||||||
	**bindcode** <code> <command> is also available for binding with key codes
 | 
					 | 
				
			||||||
	instead of key names.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
**client**.<color_class> <border> <background> <text> <indicator> <child_border>::
 | 
					 | 
				
			||||||
	The client commands control the colors of the view borders and title bars. All
 | 
					 | 
				
			||||||
	client commands _require_ five color values. (The one exception is
 | 
					 | 
				
			||||||
	**client.background** which _requires_ one color value.) If you only want to
 | 
					 | 
				
			||||||
	specify a subset, supply default colors for all the others. Colors must be
 | 
					 | 
				
			||||||
	defined in hex. i.e. _#rrggbb_ or _#rrggbbaa_, when including the alpha
 | 
					 | 
				
			||||||
	channel.
 | 
					 | 
				
			||||||
	+
 | 
					 | 
				
			||||||
	The command tokens are:
 | 
					 | 
				
			||||||
		**color_class**::: Specifies the view to which the colors apply.
 | 
					 | 
				
			||||||
			**client.background**:::: The color a view will be painted, underneath the
 | 
					 | 
				
			||||||
			client itself. This will only be visible if a client does not fully
 | 
					 | 
				
			||||||
			cover its allocated view space. This command only requires one color. _Note_:
 | 
					 | 
				
			||||||
			This is not currently implemented.
 | 
					 | 
				
			||||||
			**client.focused**:::: The view that has focus.
 | 
					 | 
				
			||||||
			**client.focused_inactive**:::: A view that has focus within its
 | 
					 | 
				
			||||||
			container, but the container is not focused.
 | 
					 | 
				
			||||||
			**client.placeholder**:::: Used when drawing placeholder view contents.
 | 
					 | 
				
			||||||
			Only background and text colors are used. _Note_: This is not
 | 
					 | 
				
			||||||
			currently implemented.
 | 
					 | 
				
			||||||
			**client.unfocused**:::: A view that does not have focus.
 | 
					 | 
				
			||||||
			**client.urgent**:::: A view with an urgency hint. _Note_: This is not
 | 
					 | 
				
			||||||
			currently implemented.
 | 
					 | 
				
			||||||
		**border**::: The border around the title bar.
 | 
					 | 
				
			||||||
		**background**::: The background of the title bar.
 | 
					 | 
				
			||||||
		**text**::: The text color of the title bar.
 | 
					 | 
				
			||||||
		**indicator**::: The color used to indicate where a new view will open. In a
 | 
					 | 
				
			||||||
		tiled container, this would paint the right border of the current view if
 | 
					 | 
				
			||||||
		a new view would be opened to the right.
 | 
					 | 
				
			||||||
		**child_border**::: The border around the view itself.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
+
 | 
					 | 
				
			||||||
The default colors are:
 | 
					 | 
				
			||||||
+
 | 
					 | 
				
			||||||
--
 | 
					 | 
				
			||||||
[options="header"]
 | 
					 | 
				
			||||||
|===========================================================================
 | 
					 | 
				
			||||||
|color_class      |border    |background |text      |indicator |child_border
 | 
					 | 
				
			||||||
|background       |n/a       |#ffffff  |n/a       |n/a       |n/a
 | 
					 | 
				
			||||||
|focused          |#4c7899 |#285577  |#ffffff |#2e9ef4 |#285577
 | 
					 | 
				
			||||||
|focused_inactive |#333333 |#5f676a  |#ffffff |#484e50 |#5f676a
 | 
					 | 
				
			||||||
|unfocused        |#333333 |#222222  |#888888 |#292d2e |#222222
 | 
					 | 
				
			||||||
|urgent           |#2f343a |#900000  |#ffffff |#900000 |#900000
 | 
					 | 
				
			||||||
|placeholder      |#000000 |#0c0c0c  |#ffffff |#000000 |#0c0c0c
 | 
					 | 
				
			||||||
|===========================================================================
 | 
					 | 
				
			||||||
--
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
**debuglog** <on|off|toggle>::
 | 
					 | 
				
			||||||
	Enables, disables or toggles debug logging. The toggle argument cannot be used
 | 
					 | 
				
			||||||
	in the configuration file.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
**default_border** <normal|none|pixel> [<n>]::
 | 
					 | 
				
			||||||
	Set default border style for new windows. This command was previously called
 | 
					 | 
				
			||||||
	**new_window**. While **new_window** still works, it is considered deprecated
 | 
					 | 
				
			||||||
	and support for it will be removed in the future.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
**default_floating_border** <normal|none|pixel> [<n>]::
 | 
					 | 
				
			||||||
	Set default border style for new floating windows. This only applies to
 | 
					 | 
				
			||||||
	windows that are spawned in floating mode, not windows that become floating
 | 
					 | 
				
			||||||
	after the fact. This command was previously called **new_float**. While
 | 
					 | 
				
			||||||
	**new_float** still works, it is considered deprecated and support for it will
 | 
					 | 
				
			||||||
	be removed in the future.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
**exec** <shell command>::
 | 
					 | 
				
			||||||
	Executes _shell command_ with sh.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
**exec_always** <shell command>::
 | 
					 | 
				
			||||||
	Like exec, but the shell command will be executed _again_ after *reload* or
 | 
					 | 
				
			||||||
	*restart* is executed.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
**floating_maximum_size** <width> x <height>::
 | 
					 | 
				
			||||||
	Specifies the maximum size of floating windows.
 | 
					 | 
				
			||||||
	Uses the container size as default.
 | 
					 | 
				
			||||||
	-1 x -1 will remove any restriction on size.
 | 
					 | 
				
			||||||
	0 x 0 has the same behavior as not setting any value.
 | 
					 | 
				
			||||||
	If in conflict, this option has precedence over floating_minimum_size.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
**floating_minimum_size** <width> x <height>::
 | 
					 | 
				
			||||||
	Specifies the minimum size of floating windows.
 | 
					 | 
				
			||||||
	Default parameters are 75 x 50.
 | 
					 | 
				
			||||||
	-1 and 0 are invalid parameters, default will be used instead.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
**floating_modifier** <modifier> [normal|inverse]::
 | 
					 | 
				
			||||||
	When the _modifier_ key is held down, you may hold left click to move floating
 | 
					 | 
				
			||||||
	windows, and right click to resize them. Unlike i3, this modifier may also be
 | 
					 | 
				
			||||||
	used to resize and move windows that are tiled. With the _inverse_ mode
 | 
					 | 
				
			||||||
	enabled, left click is used for resizing and right click for dragging. The
 | 
					 | 
				
			||||||
	mode parameter is optional and defaults to _normal_ if it isn't defined.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
**floating_scroll** <up|down|left|right> [command]::
 | 
					 | 
				
			||||||
	Sets a command to be executed when the mouse wheel is scrolled in the
 | 
					 | 
				
			||||||
	specified direction while holding the floating modifier. Resets the command,
 | 
					 | 
				
			||||||
	when given no arguments.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
**focus_follows_mouse** <yes|no>::
 | 
					 | 
				
			||||||
	If set to _yes_, moving your mouse over a window will focus that window.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
**font** <font>::
 | 
					 | 
				
			||||||
	Sets font for use in title bars. Generally the format is something like "Name
 | 
					 | 
				
			||||||
	Style Size" e.g. "Deja Vu Sans Book 12". You can also use Pango font
 | 
					 | 
				
			||||||
	descriptions with "pango:font".
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
**for_window** <criteria> <command>::
 | 
					 | 
				
			||||||
	Whenever a window that matches _criteria_ appears, run list of commands. See
 | 
					 | 
				
			||||||
	**Criteria** section below.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
**gaps** edge_gaps <on|off|toggle>::
 | 
					 | 
				
			||||||
	Whether or not to add gaps between views and workspace edges if amount of
 | 
					 | 
				
			||||||
	inner gap is not zero. When _off_, no gap is added where the view is aligned to
 | 
					 | 
				
			||||||
	the workspace edge, effectively creating gaps only between views. The toggle
 | 
					 | 
				
			||||||
	argument cannot be used in the configuration file.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
**gaps** <amount>::
 | 
					 | 
				
			||||||
	Sets default _amount_ pixels as the gap between each view, and around each
 | 
					 | 
				
			||||||
	workspace.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
**gaps** <inner|outer> <amount>::
 | 
					 | 
				
			||||||
	Sets default _amount_ pixels as the _inner_ or _outer_ gap, where the former
 | 
					 | 
				
			||||||
	affects spacing between views and the latter affects the space around each
 | 
					 | 
				
			||||||
	workspace.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
**gaps** <inner|outer> <all|workspace|current> <set|plus|minus> <amount>::
 | 
					 | 
				
			||||||
	Changes the gaps for the _inner_ or _outer_ gap. _all_ changes the gaps for
 | 
					 | 
				
			||||||
	all views or workspace, _workspace_ changes gaps for all views in current
 | 
					 | 
				
			||||||
	workspace (or current workspace), and _current_ changes gaps for the current
 | 
					 | 
				
			||||||
	view or workspace.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
**hide_edge_borders** <none|vertical|horizontal|both|smart>::
 | 
					 | 
				
			||||||
	Hide window borders adjacent to the screen edges. Default is _none_.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
**input** <input_device> <block of commands>::
 | 
					 | 
				
			||||||
	Append _{_ to this command, the following lines will be commands to configure
 | 
					 | 
				
			||||||
	the named input device, and _}_ on its own line will close the block.
 | 
					 | 
				
			||||||
	+
 | 
					 | 
				
			||||||
	**input * <block of commands>** may be used to match all input devices.
 | 
					 | 
				
			||||||
	+
 | 
					 | 
				
			||||||
	See **sway-input**(5) for details.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
**seat** <seat_name> <block of commands>::
 | 
					 | 
				
			||||||
	Append _{_ to this command, the following lines will be commands to configure
 | 
					 | 
				
			||||||
	the named seat, and _}_ on its own line will close the block.
 | 
					 | 
				
			||||||
	See **sway-input**(5) for details.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
**seat** <seat_name> cursor <move|set> <x> <y>::
 | 
					 | 
				
			||||||
	Move cursor relatively to current position or set to absolute screen position.
 | 
					 | 
				
			||||||
	A value of 0 causes the axis to be ignored in both commands.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
**seat** <seat_name> cursor <press|release> <left|right|1|2|3...>::
 | 
					 | 
				
			||||||
	Simulate press of mouse button specified by left, right, or numerical code.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
**kill**::
 | 
					 | 
				
			||||||
	Kills (force-closes) the currently-focused container and all of its children.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
**smart_gaps** <on|off>::
 | 
					 | 
				
			||||||
	If smart_gaps are _on_ then gaps will only be enabled if a workspace has more
 | 
					 | 
				
			||||||
	than one child container.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
**mark** \<--add|--replace> \<--toggle> <identifier>::
 | 
					 | 
				
			||||||
	Marks are arbitrary labels that can be used to identify certain windows and
 | 
					 | 
				
			||||||
	then jump to them at a later time. By default, the **mark** command sets
 | 
					 | 
				
			||||||
	_identifier_ as the only mark on a window. By specifying _--add_, mark will
 | 
					 | 
				
			||||||
	add _identifier_ to the list of current marks. If _--toggle_ is specified mark
 | 
					 | 
				
			||||||
	will remove _identifier_ if it is already a label. Marks may be found by using
 | 
					 | 
				
			||||||
	a criteria. See the **Criteria** section below.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
**mode** <mode_name>::
 | 
					 | 
				
			||||||
	Switches to the given mode_name. The default mode is simply _default_. To
 | 
					 | 
				
			||||||
	create a new mode append _{_ to this command, the following lines
 | 
					 | 
				
			||||||
	will be keybindings for that mode, and _}_ on its own line to close the block.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
**mouse_warping** <output|none>::
 | 
					 | 
				
			||||||
	When _output_: place mouse at center of newly focused window when changing
 | 
					 | 
				
			||||||
	output. When _none_: don't move mouse.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
**no_focus** <criteria>::
 | 
					 | 
				
			||||||
	Prevents windows matching <criteria> from being focused automatically when
 | 
					 | 
				
			||||||
	they're created. This does not apply to the first window in a workspace.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
**output** <name> mode|resolution|res <WIDTHxHEIGHT>[@<RATE>[Hz]]::
 | 
					 | 
				
			||||||
	Configures the specified output to use the given mode. Modes are a combination
 | 
					 | 
				
			||||||
	of width and height (in pixels) and a refresh rate that your display can be
 | 
					 | 
				
			||||||
	configured to use. For a list of available modes, use swaymsg -t get_outputs.
 | 
					 | 
				
			||||||
	+
 | 
					 | 
				
			||||||
	Examples:
 | 
					 | 
				
			||||||
	+
 | 
					 | 
				
			||||||
	output HDMI-A-1 mode 1920x1080
 | 
					 | 
				
			||||||
	+
 | 
					 | 
				
			||||||
	output HDMI-A-1 mode 1920x1080@60Hz
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
**output** <name> position|pos <X,Y>::
 | 
					 | 
				
			||||||
	Configures the specified output to be arranged at the given position.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
**output** <name> scale <I>::
 | 
					 | 
				
			||||||
	Configures the specified output to be scaled up by the specified integer
 | 
					 | 
				
			||||||
	scaling factor (usually 2 for HiDPI screens). Fractional scaling is supported.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
**output** <name> background|bg <file> <mode>::
 | 
					 | 
				
			||||||
	Sets the wallpaper for the given output to the specified file, using the given
 | 
					 | 
				
			||||||
	scaling mode (one of "stretch", "fill", "fit", "center", "tile").
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
**output** <name> background|bg <color> solid_color::
 | 
					 | 
				
			||||||
	Sets the background of the given output to the specified color. _color_ should
 | 
					 | 
				
			||||||
	be specified as an _#rrggbb_ (no alpha) color.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
**output** <name> transform <transform>::
 | 
					 | 
				
			||||||
	Sets the background transform to the given value. Can be one of "90", "180",
 | 
					 | 
				
			||||||
	"270" for rotation; or "flipped", "flipped-90", "flipped-180", "flipped-270"
 | 
					 | 
				
			||||||
	to apply a rotation and flip, or "normal" to apply no transform.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
**output** <name> disable::
 | 
					 | 
				
			||||||
	Disables the specified output.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
**NOTES FOR THE OUTPUT COMMAND**::
 | 
					 | 
				
			||||||
	You may combine output commands into one, like so:
 | 
					 | 
				
			||||||
	+
 | 
					 | 
				
			||||||
	output HDMI-A-1 mode 1920x1080 pos 1920,0 bg ~/wallpaper.png stretch
 | 
					 | 
				
			||||||
	+
 | 
					 | 
				
			||||||
	You can get a list of output names like so:
 | 
					 | 
				
			||||||
	+
 | 
					 | 
				
			||||||
	swaymsg -t get_outputs
 | 
					 | 
				
			||||||
	+
 | 
					 | 
				
			||||||
	You may also match any output by using the output name "*". Be sure to add
 | 
					 | 
				
			||||||
	this output config after the others, or it will be matched instead of the
 | 
					 | 
				
			||||||
	others.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
**seamless_mouse** <on|off>::
 | 
					 | 
				
			||||||
	Change output seamlessly when pointer touches edge of output. Outputs need to
 | 
					 | 
				
			||||||
	be configured with perfectly aligned adjacent positions for this option to
 | 
					 | 
				
			||||||
	have any effect.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
**show_marks** <on|off>::
 | 
					 | 
				
			||||||
	If **show_marks** is on then marks will be showed in the window decoration.
 | 
					 | 
				
			||||||
	However, any mark that starts with an underscore will not be drawn even if the
 | 
					 | 
				
			||||||
	option is on. The default option is _on_.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
**opacity** <value>::
 | 
					 | 
				
			||||||
	Set the opacity of the window between 0 (completely transparent) and 1
 | 
					 | 
				
			||||||
	(completely opaque).
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
**unmark** <identifier>::
 | 
					 | 
				
			||||||
	**Unmark** will remove _identifier_ from the list of current marks on a window. If
 | 
					 | 
				
			||||||
	no _identifier_ is specified, then **unmark** will remove all marks.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
**workspace** [number] <name>::
 | 
					 | 
				
			||||||
	Switches to the specified workspace. The string "number" is optional. The
 | 
					 | 
				
			||||||
	workspace _name_, if unquoted, may not contain the string "output", as sway
 | 
					 | 
				
			||||||
	will assume that the command is moving a workspace to an output, as described
 | 
					 | 
				
			||||||
	below.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
**workspace** <prev|next>::
 | 
					 | 
				
			||||||
	Switches to the next workspace on the current output or on the next output
 | 
					 | 
				
			||||||
	if currently on the last workspace.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
**workspace** <prev_on_output|next_on_output>::
 | 
					 | 
				
			||||||
	Switches to the next workspace on the current output.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
**workspace** <name> output <output>::
 | 
					 | 
				
			||||||
	Specifies that the workspace named _name_ should appear on the specified
 | 
					 | 
				
			||||||
	_output_.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
**workspace_auto_back_and_forth** <yes|no>::
 | 
					 | 
				
			||||||
	When _yes_, repeating a workspace switch command will switch back to the
 | 
					 | 
				
			||||||
	prior workspace. For example, if you are currently on workspace 1,
 | 
					 | 
				
			||||||
	switch to workspace 2, then invoke the "workspace 2" command again, you
 | 
					 | 
				
			||||||
	will be returned to workspace 1. Defaults to _no_.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
**workspace_layout** <default|stacking|tabbed|auto|auto left|auto right|auto
 | 
					 | 
				
			||||||
	top|auto bottom>:: Specifies the start layout for new workspaces.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
**include** <path>::
 | 
					 | 
				
			||||||
	Includes a sub config file by _path_. _path_ can be either a full path or a
 | 
					 | 
				
			||||||
	path relative to the parent config.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Criteria
 | 
					 | 
				
			||||||
--------
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
A criteria is a string in the form of e.g.:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	[class="[Rr]egex.*" title="some title"]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
The string contains one or more (space separated) attribute/value pairs. They
 | 
					 | 
				
			||||||
are used by some commands to choose which views to execute actions on. All attributes
 | 
					 | 
				
			||||||
must match for the criteria to match.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Criteria may be used with either the **for_window** or **assign** commands to
 | 
					 | 
				
			||||||
specify operations to perform on new views. A criteria may also be used to
 | 
					 | 
				
			||||||
perform specific commands (ones that normally act upon one window) on all views
 | 
					 | 
				
			||||||
that match that criteria. For example:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Focus on a window with the mark "IRC":
 | 
					 | 
				
			||||||
	[con_mark="IRC"] focus
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Kill all windows with the title "Emacs":
 | 
					 | 
				
			||||||
	[class="Emacs"] kill
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Mark all Firefox windows with "Browser":
 | 
					 | 
				
			||||||
	[class="Firefox"] mark Browser
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Currently supported attributes:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
**class**::
 | 
					 | 
				
			||||||
	Compare value against the window class. Can be a regular expression. If value
 | 
					 | 
				
			||||||
	is _focused_, then the window class must be the same as that of the currently
 | 
					 | 
				
			||||||
	focused window.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
**con_id**::
 | 
					 | 
				
			||||||
	Compare against the internal container ID, which you can find via IPC.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
**con_mark**::
 | 
					 | 
				
			||||||
	Compare against the window marks. Can be a regular expression.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
**floating**::
 | 
					 | 
				
			||||||
	Matches against floating windows.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
**id**::
 | 
					 | 
				
			||||||
	Compare value against the app id. Can be a regular expression.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
**title**::
 | 
					 | 
				
			||||||
	Compare against the window title. Can be a regular expression. If value is
 | 
					 | 
				
			||||||
	_focused_ then the window title must be the same as that of the currently
 | 
					 | 
				
			||||||
	focused window.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
**tiling**::
 | 
					 | 
				
			||||||
	Matches against tiling windows.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
**workspace**::
 | 
					 | 
				
			||||||
	Compare against the workspace name for this view. Can be a regular expression.
 | 
					 | 
				
			||||||
	If the value is _focused_, then all the views on the currently focused workspace
 | 
					 | 
				
			||||||
	matches.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See Also
 | 
					 | 
				
			||||||
--------
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
**sway**(1) **sway-input**(5) **sway-bar**(5)
 | 
					 | 
				
			||||||
| 
						 | 
					@ -199,8 +199,9 @@ void view_set_fullscreen_raw(struct sway_view *view, bool fullscreen) {
 | 
				
			||||||
		struct sway_container *focus, *focus_ws;
 | 
							struct sway_container *focus, *focus_ws;
 | 
				
			||||||
		wl_list_for_each(seat, &input_manager->seats, link) {
 | 
							wl_list_for_each(seat, &input_manager->seats, link) {
 | 
				
			||||||
			focus = seat_get_focus(seat);
 | 
								focus = seat_get_focus(seat);
 | 
				
			||||||
 | 
								if (focus) {
 | 
				
			||||||
				focus_ws = focus;
 | 
									focus_ws = focus;
 | 
				
			||||||
			if (focus_ws->type != C_WORKSPACE) {
 | 
									if (focus && focus_ws->type != C_WORKSPACE) {
 | 
				
			||||||
					focus_ws = container_parent(focus_ws, C_WORKSPACE);
 | 
										focus_ws = container_parent(focus_ws, C_WORKSPACE);
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
				seat_set_focus(seat, view->swayc);
 | 
									seat_set_focus(seat, view->swayc);
 | 
				
			||||||
| 
						 | 
					@ -208,6 +209,7 @@ void view_set_fullscreen_raw(struct sway_view *view, bool fullscreen) {
 | 
				
			||||||
					seat_set_focus(seat, focus);
 | 
										seat_set_focus(seat, focus);
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
		workspace->sway_workspace->fullscreen = NULL;
 | 
							workspace->sway_workspace->fullscreen = NULL;
 | 
				
			||||||
		view->swayc->width = view->swayc->saved_width;
 | 
							view->swayc->width = view->swayc->saved_width;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										144
									
								
								swaygrab/json.c
									
										
									
									
									
								
							
							
						
						
									
										144
									
								
								swaygrab/json.c
									
										
									
									
									
								
							| 
						 | 
					@ -1,144 +0,0 @@
 | 
				
			||||||
#define _XOPEN_SOURCE 700
 | 
					 | 
				
			||||||
#include <string.h>
 | 
					 | 
				
			||||||
#include <stdio.h>
 | 
					 | 
				
			||||||
#include <stdbool.h>
 | 
					 | 
				
			||||||
#include <stdlib.h>
 | 
					 | 
				
			||||||
#include <unistd.h>
 | 
					 | 
				
			||||||
#include "log.h"
 | 
					 | 
				
			||||||
#include "ipc-client.h"
 | 
					 | 
				
			||||||
#include "swaygrab/json.h"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static json_object *tree;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void init_json_tree(int socketfd) {
 | 
					 | 
				
			||||||
	uint32_t len = 0;
 | 
					 | 
				
			||||||
	char *res = ipc_single_command(socketfd, IPC_GET_TREE, NULL, &len);
 | 
					 | 
				
			||||||
	struct json_tokener *tok = json_tokener_new_ex(256);
 | 
					 | 
				
			||||||
	if (!tok) {
 | 
					 | 
				
			||||||
		sway_abort("Unable to get json tokener.");
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	tree = json_tokener_parse_ex(tok, res, len);
 | 
					 | 
				
			||||||
	if (!tree || tok->err != json_tokener_success) {
 | 
					 | 
				
			||||||
		sway_abort("Unable to parse IPC response as JSON: %s", json_tokener_error_desc(tok->err));
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	json_object *success;
 | 
					 | 
				
			||||||
	json_object_object_get_ex(tree, "success", &success);
 | 
					 | 
				
			||||||
	if (success && !json_object_get_boolean(success)) {
 | 
					 | 
				
			||||||
		json_object *error;
 | 
					 | 
				
			||||||
		json_object_object_get_ex(tree, "error", &error);
 | 
					 | 
				
			||||||
		sway_abort("IPC request failed: %s", json_object_get_string(error));
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	json_object_put(success);
 | 
					 | 
				
			||||||
	json_tokener_free(tok);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void free_json_tree() {
 | 
					 | 
				
			||||||
	json_object_put(tree);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static bool is_focused(json_object *c) {
 | 
					 | 
				
			||||||
	json_object *focused;
 | 
					 | 
				
			||||||
	json_object_object_get_ex(c, "focused", &focused);
 | 
					 | 
				
			||||||
	return json_object_get_boolean(focused);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static json_object *get_focused_container_r(json_object *c) {
 | 
					 | 
				
			||||||
	json_object *name;
 | 
					 | 
				
			||||||
	json_object_object_get_ex(c, "name", &name);
 | 
					 | 
				
			||||||
	if (is_focused(c)) {
 | 
					 | 
				
			||||||
		return c;
 | 
					 | 
				
			||||||
	} else {
 | 
					 | 
				
			||||||
		json_object *nodes, *node, *child;
 | 
					 | 
				
			||||||
		json_object_object_get_ex(c, "nodes", &nodes);
 | 
					 | 
				
			||||||
		int i;
 | 
					 | 
				
			||||||
		for (i = 0; i < json_object_array_length(nodes); i++) {
 | 
					 | 
				
			||||||
			node = json_object_array_get_idx(nodes, i);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
			if ((child = get_focused_container_r(node))) {
 | 
					 | 
				
			||||||
				return child;
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		json_object_object_get_ex(c, "floating_nodes", &nodes);
 | 
					 | 
				
			||||||
		for (i = 0; i < json_object_array_length(nodes); i++) {
 | 
					 | 
				
			||||||
			node = json_object_array_get_idx(nodes, i);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
			if ((child = get_focused_container_r(node))) {
 | 
					 | 
				
			||||||
				return child;
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return NULL;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
json_object *get_focused_container() {
 | 
					 | 
				
			||||||
	return get_focused_container_r(tree);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
char *get_focused_output() {
 | 
					 | 
				
			||||||
	json_object *outputs, *output, *name;
 | 
					 | 
				
			||||||
	json_object_object_get_ex(tree, "nodes", &outputs);
 | 
					 | 
				
			||||||
	if (!outputs) {
 | 
					 | 
				
			||||||
		sway_abort("Unabled to get focused output. No nodes in tree.");
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	for (int i = 0; i < json_object_array_length(outputs); i++) {
 | 
					 | 
				
			||||||
		output = json_object_array_get_idx(outputs, i);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		if (get_focused_container_r(output)) {
 | 
					 | 
				
			||||||
			json_object_object_get_ex(output, "name", &name);
 | 
					 | 
				
			||||||
			return strdup(json_object_get_string(name));
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return NULL;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
char *create_payload(const char *output, struct wlc_geometry *g) {
 | 
					 | 
				
			||||||
	char *payload_str = malloc(256);
 | 
					 | 
				
			||||||
	json_object *payload = json_object_new_object();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	json_object_object_add(payload, "output", json_object_new_string(output));
 | 
					 | 
				
			||||||
	json_object_object_add(payload, "x", json_object_new_int(g->origin.x));
 | 
					 | 
				
			||||||
	json_object_object_add(payload, "y", json_object_new_int(g->origin.y));
 | 
					 | 
				
			||||||
	json_object_object_add(payload, "w", json_object_new_int(g->size.w));
 | 
					 | 
				
			||||||
	json_object_object_add(payload, "h", json_object_new_int(g->size.h));
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	snprintf(payload_str, 256, "%s", json_object_to_json_string(payload));
 | 
					 | 
				
			||||||
	return strdup(payload_str);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
struct wlc_geometry *get_container_geometry(json_object *container) {
 | 
					 | 
				
			||||||
	struct wlc_geometry *geo = malloc(sizeof(struct wlc_geometry));
 | 
					 | 
				
			||||||
	json_object *rect, *x, *y, *w, *h;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	json_object_object_get_ex(container, "rect", &rect);
 | 
					 | 
				
			||||||
	json_object_object_get_ex(rect, "x", &x);
 | 
					 | 
				
			||||||
	json_object_object_get_ex(rect, "y", &y);
 | 
					 | 
				
			||||||
	json_object_object_get_ex(rect, "width", &w);
 | 
					 | 
				
			||||||
	json_object_object_get_ex(rect, "height", &h);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	geo->origin.x = json_object_get_int(x);
 | 
					 | 
				
			||||||
	geo->origin.y = json_object_get_int(y);
 | 
					 | 
				
			||||||
	geo->size.w = json_object_get_int(w);
 | 
					 | 
				
			||||||
	geo->size.h = json_object_get_int(h);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return geo;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
json_object *get_output_container(const char *output) {
 | 
					 | 
				
			||||||
	json_object *outputs, *json_output, *name;
 | 
					 | 
				
			||||||
	json_object_object_get_ex(tree, "nodes", &outputs);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	for (int i = 0; i < json_object_array_length(outputs); i++) {
 | 
					 | 
				
			||||||
		json_output = json_object_array_get_idx(outputs, i);
 | 
					 | 
				
			||||||
		json_object_object_get_ex(json_output, "name", &name);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		if (strcmp(json_object_get_string(name), output) == 0) {
 | 
					 | 
				
			||||||
			return json_output;
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return NULL;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
							
								
								
									
										298
									
								
								swaygrab/main.c
									
										
									
									
									
								
							
							
						
						
									
										298
									
								
								swaygrab/main.c
									
										
									
									
									
								
							| 
						 | 
					@ -1,298 +0,0 @@
 | 
				
			||||||
#define _XOPEN_SOURCE 700
 | 
					 | 
				
			||||||
#define _POSIX_C_SOURCE 199309L
 | 
					 | 
				
			||||||
#include <stdio.h>
 | 
					 | 
				
			||||||
#include <stdbool.h>
 | 
					 | 
				
			||||||
#include <stdlib.h>
 | 
					 | 
				
			||||||
#include <string.h>
 | 
					 | 
				
			||||||
#include <getopt.h>
 | 
					 | 
				
			||||||
#include <unistd.h>
 | 
					 | 
				
			||||||
#include <stdint.h>
 | 
					 | 
				
			||||||
#include <math.h>
 | 
					 | 
				
			||||||
#include <time.h>
 | 
					 | 
				
			||||||
#include <sys/wait.h>
 | 
					 | 
				
			||||||
#include <json-c/json.h>
 | 
					 | 
				
			||||||
#include "log.h"
 | 
					 | 
				
			||||||
#include "ipc-client.h"
 | 
					 | 
				
			||||||
#include "util.h"
 | 
					 | 
				
			||||||
#include "swaygrab/json.h"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void sway_terminate(int exit_code) {
 | 
					 | 
				
			||||||
	exit(exit_code);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void grab_and_apply_magick(const char *file, const char *payload,
 | 
					 | 
				
			||||||
		int socketfd, int raw) {
 | 
					 | 
				
			||||||
	uint32_t len = strlen(payload);
 | 
					 | 
				
			||||||
	char *pixels = ipc_single_command(socketfd,
 | 
					 | 
				
			||||||
			IPC_SWAY_GET_PIXELS, payload, &len);
 | 
					 | 
				
			||||||
	uint32_t *u32pixels = (uint32_t *)(pixels + 1);
 | 
					 | 
				
			||||||
	uint32_t width = u32pixels[0];
 | 
					 | 
				
			||||||
	uint32_t height = u32pixels[1];
 | 
					 | 
				
			||||||
	len -= 9;
 | 
					 | 
				
			||||||
	pixels += 9;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if (width == 0 || height == 0) {
 | 
					 | 
				
			||||||
		// indicates geometry was clamped by WLC because it was outside of the output's area
 | 
					 | 
				
			||||||
		json_object *obj = json_tokener_parse(payload);
 | 
					 | 
				
			||||||
		json_object *output;
 | 
					 | 
				
			||||||
		json_object_object_get_ex(obj, "output", &output);
 | 
					 | 
				
			||||||
		const char *name = json_object_get_string(output);
 | 
					 | 
				
			||||||
		json_object_put(obj);
 | 
					 | 
				
			||||||
		sway_abort("Unknown output %s.", name);
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if (raw) {
 | 
					 | 
				
			||||||
		fwrite(pixels, 1, len, stdout);
 | 
					 | 
				
			||||||
		fflush(stdout);
 | 
					 | 
				
			||||||
		free(pixels - 9);
 | 
					 | 
				
			||||||
		return;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	char size[10 + 1 + 10 + 2 + 1]; // int32_t are max 10 digits
 | 
					 | 
				
			||||||
	sprintf(size, "%dx%d+0", width, height);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	pid_t child;
 | 
					 | 
				
			||||||
	int fd[2];
 | 
					 | 
				
			||||||
	pipe(fd);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if ((child = fork()) < 0) {
 | 
					 | 
				
			||||||
		sway_log(L_ERROR, "Swaygrab failed to fork.");
 | 
					 | 
				
			||||||
		exit(EXIT_FAILURE);
 | 
					 | 
				
			||||||
	} else if (child != 0) {
 | 
					 | 
				
			||||||
		close(fd[0]);
 | 
					 | 
				
			||||||
		write(fd[1], pixels, len);
 | 
					 | 
				
			||||||
		close(fd[1]);
 | 
					 | 
				
			||||||
		free(pixels - 9);
 | 
					 | 
				
			||||||
		waitpid(child, NULL, 0);
 | 
					 | 
				
			||||||
	} else {
 | 
					 | 
				
			||||||
		close(fd[1]);
 | 
					 | 
				
			||||||
		if (dup2(fd[0], 0) != 0) {
 | 
					 | 
				
			||||||
			sway_log(L_ERROR, "Could not fdup the pipe");
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		close(fd[0]);
 | 
					 | 
				
			||||||
		execlp("convert", "convert", "-depth", "8", "-size", size, "rgba:-", "-flip", file, NULL);
 | 
					 | 
				
			||||||
		sway_log(L_ERROR, "Swaygrab could not run convert.");
 | 
					 | 
				
			||||||
		exit(EXIT_FAILURE);
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void grab_and_apply_movie_magic(const char *file, const char *payload,
 | 
					 | 
				
			||||||
		int socketfd, int raw, int framerate) {
 | 
					 | 
				
			||||||
	if (raw) {
 | 
					 | 
				
			||||||
		sway_log(L_ERROR, "Raw capture data is not yet supported. Proceeding with ffmpeg normally.");
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	uint32_t len = strlen(payload);
 | 
					 | 
				
			||||||
	char *pixels = ipc_single_command(socketfd,
 | 
					 | 
				
			||||||
			IPC_SWAY_GET_PIXELS, payload, &len);
 | 
					 | 
				
			||||||
	uint32_t *u32pixels = (uint32_t *)(pixels + 1);
 | 
					 | 
				
			||||||
	uint32_t width = u32pixels[0];
 | 
					 | 
				
			||||||
	uint32_t height = u32pixels[1];
 | 
					 | 
				
			||||||
	pixels += 9;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if (width == 0 || height == 0) {
 | 
					 | 
				
			||||||
		// indicates geometry was clamped by WLC because it was outside of the output's area
 | 
					 | 
				
			||||||
		json_object *obj = json_tokener_parse(payload);
 | 
					 | 
				
			||||||
		json_object *output;
 | 
					 | 
				
			||||||
		json_object_object_get_ex(obj, "output", &output);
 | 
					 | 
				
			||||||
		const char *name = json_object_get_string(output);
 | 
					 | 
				
			||||||
		json_object_put(obj);
 | 
					 | 
				
			||||||
		sway_abort("Unknown output %s.", name);
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	char *ffmpeg_opts = getenv("SWAYGRAB_FFMPEG_OPTS");
 | 
					 | 
				
			||||||
	if(!ffmpeg_opts) {
 | 
					 | 
				
			||||||
			ffmpeg_opts = "";
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	const char *fmt = "ffmpeg %s -f rawvideo -framerate %d "
 | 
					 | 
				
			||||||
		"-video_size %dx%d -pixel_format argb "
 | 
					 | 
				
			||||||
		"-i pipe:0 -r %d -vf vflip %s";
 | 
					 | 
				
			||||||
	char *cmd = malloc(strlen(fmt) - 8 /*args*/
 | 
					 | 
				
			||||||
			+ strlen(ffmpeg_opts) + numlen(width) + numlen(height)
 | 
					 | 
				
			||||||
			+ numlen(framerate) * 2 + strlen(file) + 1);
 | 
					 | 
				
			||||||
	sprintf(cmd, fmt, ffmpeg_opts, framerate, width, height, framerate, file);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	long ns = (long)(1000000000 * (1.0 / framerate));
 | 
					 | 
				
			||||||
	struct timespec start, finish, ts;
 | 
					 | 
				
			||||||
	ts.tv_sec = 0;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	FILE *f = popen(cmd, "w");
 | 
					 | 
				
			||||||
	fwrite(pixels, 1, len, f);
 | 
					 | 
				
			||||||
	free(pixels - 9);
 | 
					 | 
				
			||||||
	int sleep = 0;
 | 
					 | 
				
			||||||
	while (sleep != -1) {
 | 
					 | 
				
			||||||
		clock_gettime(CLOCK_MONOTONIC, &start);
 | 
					 | 
				
			||||||
		len = strlen(payload);
 | 
					 | 
				
			||||||
		pixels = ipc_single_command(socketfd,
 | 
					 | 
				
			||||||
				IPC_SWAY_GET_PIXELS, payload, &len);
 | 
					 | 
				
			||||||
		pixels += 9;
 | 
					 | 
				
			||||||
		len -= 9;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		fwrite(pixels, 1, len, f);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		free(pixels - 9);
 | 
					 | 
				
			||||||
		clock_gettime(CLOCK_MONOTONIC, &finish);
 | 
					 | 
				
			||||||
		ts.tv_nsec = ns;
 | 
					 | 
				
			||||||
		double fts = (double)finish.tv_sec + 1.0e-9*finish.tv_nsec;
 | 
					 | 
				
			||||||
		double sts = (double)start.tv_sec + 1.0e-9*start.tv_nsec;
 | 
					 | 
				
			||||||
		long diff = (fts - sts) * 1000000000;
 | 
					 | 
				
			||||||
		ts.tv_nsec = ns - diff;
 | 
					 | 
				
			||||||
		if (ts.tv_nsec < 0) {
 | 
					 | 
				
			||||||
			ts.tv_nsec = 0;
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		sleep = nanosleep(&ts, NULL);
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	fflush(f);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	fclose(f);
 | 
					 | 
				
			||||||
	free(cmd);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
char *default_filename(const char *extension) {
 | 
					 | 
				
			||||||
	int ext_len = strlen(extension);
 | 
					 | 
				
			||||||
	int len = 28 + ext_len; // format: "2015-12-17-180040_swaygrab.ext"
 | 
					 | 
				
			||||||
	char *filename = malloc(len * sizeof(char));
 | 
					 | 
				
			||||||
	time_t t = time(NULL);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	struct tm *lt = localtime(&t);
 | 
					 | 
				
			||||||
	strftime(filename, len, "%Y-%m-%d-%H%M%S_swaygrab.", lt);
 | 
					 | 
				
			||||||
	strncat(filename, extension, ext_len);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return filename;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
int main(int argc, char **argv) {
 | 
					 | 
				
			||||||
	static int capture = 0, raw = 0;
 | 
					 | 
				
			||||||
	char *socket_path = NULL;
 | 
					 | 
				
			||||||
	char *output = NULL;
 | 
					 | 
				
			||||||
	int framerate = 30;
 | 
					 | 
				
			||||||
	bool grab_focused = false;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	init_log(L_INFO);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	static struct option long_options[] = {
 | 
					 | 
				
			||||||
		{"help", no_argument, NULL, 'h'},
 | 
					 | 
				
			||||||
		{"capture", no_argument, NULL, 'c'},
 | 
					 | 
				
			||||||
		{"output", required_argument, NULL, 'o'},
 | 
					 | 
				
			||||||
		{"version", no_argument, NULL, 'v'},
 | 
					 | 
				
			||||||
		{"socket", required_argument, NULL, 's'},
 | 
					 | 
				
			||||||
		{"raw", no_argument, NULL, 'r'},
 | 
					 | 
				
			||||||
		{"rate", required_argument, NULL, 'R'},
 | 
					 | 
				
			||||||
		{"focused", no_argument, NULL, 'f'},
 | 
					 | 
				
			||||||
		{0, 0, 0, 0}
 | 
					 | 
				
			||||||
	};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	const char *usage =
 | 
					 | 
				
			||||||
		"Usage: swaygrab [options] [file]\n"
 | 
					 | 
				
			||||||
		"\n"
 | 
					 | 
				
			||||||
		"  -h, --help             Show help message and quit.\n"
 | 
					 | 
				
			||||||
		"  -c, --capture          Capture video.\n"
 | 
					 | 
				
			||||||
		"  -o, --output <output>  Output source.\n"
 | 
					 | 
				
			||||||
		"  -v, --version          Show the version number and quit.\n"
 | 
					 | 
				
			||||||
		"  -s, --socket <socket>  Use the specified socket.\n"
 | 
					 | 
				
			||||||
		"  -R, --rate <rate>      Specify framerate (default: 30)\n"
 | 
					 | 
				
			||||||
		"  -r, --raw              Write raw rgba data to stdout.\n"
 | 
					 | 
				
			||||||
		"  -f, --focused          Grab the focused container.\n";
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	int c;
 | 
					 | 
				
			||||||
	while (1) {
 | 
					 | 
				
			||||||
		int option_index = 0;
 | 
					 | 
				
			||||||
		c = getopt_long(argc, argv, "hco:vs:R:rf", long_options, &option_index);
 | 
					 | 
				
			||||||
		if (c == -1) {
 | 
					 | 
				
			||||||
			break;
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		switch (c) {
 | 
					 | 
				
			||||||
		case 'f':
 | 
					 | 
				
			||||||
			grab_focused = true;
 | 
					 | 
				
			||||||
			break;
 | 
					 | 
				
			||||||
		case 's': // Socket
 | 
					 | 
				
			||||||
			socket_path = strdup(optarg);
 | 
					 | 
				
			||||||
			break;
 | 
					 | 
				
			||||||
		case 'r':
 | 
					 | 
				
			||||||
			raw = 1;
 | 
					 | 
				
			||||||
			break;
 | 
					 | 
				
			||||||
		case 'o': // output
 | 
					 | 
				
			||||||
			output = strdup(optarg);
 | 
					 | 
				
			||||||
			break;
 | 
					 | 
				
			||||||
		case 'c':
 | 
					 | 
				
			||||||
			capture = 1;
 | 
					 | 
				
			||||||
			break;
 | 
					 | 
				
			||||||
		case 'R': // Frame rate
 | 
					 | 
				
			||||||
			framerate = atoi(optarg);
 | 
					 | 
				
			||||||
			break;
 | 
					 | 
				
			||||||
		case 'v':
 | 
					 | 
				
			||||||
			fprintf(stdout, "sway version " SWAY_VERSION "\n");
 | 
					 | 
				
			||||||
			exit(EXIT_SUCCESS);
 | 
					 | 
				
			||||||
			break;
 | 
					 | 
				
			||||||
		default:
 | 
					 | 
				
			||||||
			fprintf(stderr, "%s", usage);
 | 
					 | 
				
			||||||
			exit(EXIT_FAILURE);
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if (!socket_path) {
 | 
					 | 
				
			||||||
		socket_path = get_socketpath();
 | 
					 | 
				
			||||||
		if (!socket_path) {
 | 
					 | 
				
			||||||
			sway_abort("Unable to retrieve socket path");
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	char *file = NULL;
 | 
					 | 
				
			||||||
	if (raw) {
 | 
					 | 
				
			||||||
		if (optind >= argc + 1) {
 | 
					 | 
				
			||||||
			sway_abort("Invalid usage. See `man swaygrab` %d %d", argc, optind);
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	} else if (optind < argc) {
 | 
					 | 
				
			||||||
		file = strdup(argv[optind]);
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	int socketfd = ipc_open_socket(socket_path);
 | 
					 | 
				
			||||||
	free(socket_path);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	init_json_tree(socketfd);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	struct wlc_geometry *geo;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if (grab_focused) {
 | 
					 | 
				
			||||||
		output = get_focused_output();
 | 
					 | 
				
			||||||
		json_object *con = get_focused_container();
 | 
					 | 
				
			||||||
		json_object *name;
 | 
					 | 
				
			||||||
		json_object_object_get_ex(con, "name", &name);
 | 
					 | 
				
			||||||
		geo = get_container_geometry(con);
 | 
					 | 
				
			||||||
		free(con);
 | 
					 | 
				
			||||||
	} else {
 | 
					 | 
				
			||||||
		if (!output) {
 | 
					 | 
				
			||||||
			output = get_focused_output();
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		geo = get_container_geometry(get_output_container(output));
 | 
					 | 
				
			||||||
		// the geometry of the output in the get_tree response is relative to a global (0, 0).
 | 
					 | 
				
			||||||
		// we need it to be relative to itself, so set origin to (0, 0) always.
 | 
					 | 
				
			||||||
		geo->origin.x = 0;
 | 
					 | 
				
			||||||
		geo->origin.y = 0;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	const char *payload = create_payload(output, geo);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	free(geo);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if (!file) {
 | 
					 | 
				
			||||||
		if (!capture) {
 | 
					 | 
				
			||||||
			file = default_filename("png");
 | 
					 | 
				
			||||||
		} else {
 | 
					 | 
				
			||||||
			file = default_filename("webm");
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if (!capture) {
 | 
					 | 
				
			||||||
		grab_and_apply_magick(file, payload, socketfd, raw);
 | 
					 | 
				
			||||||
	} else {
 | 
					 | 
				
			||||||
		grab_and_apply_movie_magic(file, payload, socketfd, raw, framerate);
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	free_json_tree();
 | 
					 | 
				
			||||||
	free(output);
 | 
					 | 
				
			||||||
	free(file);
 | 
					 | 
				
			||||||
	close(socketfd);
 | 
					 | 
				
			||||||
	return 0;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
| 
						 | 
					@ -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>.
 | 
					 | 
				
			||||||
							
								
								
									
										103
									
								
								swaylock/swaylock.1.scd
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										103
									
								
								swaylock/swaylock.1.scd
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -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.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -106,6 +106,35 @@ static void pretty_print_input(json_object *i) {
 | 
				
			||||||
		json_object_get_int(vendor));
 | 
							json_object_get_int(vendor));
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void pretty_print_seat(json_object *i) {
 | 
				
			||||||
 | 
						json_object *name, *capabilities, *devices;
 | 
				
			||||||
 | 
						json_object_object_get_ex(i, "name", &name);
 | 
				
			||||||
 | 
						json_object_object_get_ex(i, "capabilities", &capabilities);
 | 
				
			||||||
 | 
						json_object_object_get_ex(i, "devices", &devices);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						const char *fmt =
 | 
				
			||||||
 | 
							"Seat: %s\n"
 | 
				
			||||||
 | 
							"  Capabilities: %d\n";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						printf(fmt, json_object_get_string(name),
 | 
				
			||||||
 | 
							json_object_get_int(capabilities));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						size_t devices_len = json_object_array_length(devices);
 | 
				
			||||||
 | 
						if (devices_len > 0) {
 | 
				
			||||||
 | 
							printf("  Devices:\n");
 | 
				
			||||||
 | 
							for (size_t i = 0; i < devices_len; ++i) {
 | 
				
			||||||
 | 
								json_object *device = json_object_array_get_idx(devices, i);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								json_object *device_name;
 | 
				
			||||||
 | 
								json_object_object_get_ex(device, "name", &device_name);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								printf("    %s\n", json_object_get_string(device_name));
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						printf("\n");
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void pretty_print_output(json_object *o) {
 | 
					static void pretty_print_output(json_object *o) {
 | 
				
			||||||
	json_object *name, *rect, *focused, *active, *ws;
 | 
						json_object *name, *rect, *focused, *active, *ws;
 | 
				
			||||||
	json_object_object_get_ex(o, "name", &name);
 | 
						json_object_object_get_ex(o, "name", &name);
 | 
				
			||||||
| 
						 | 
					@ -211,7 +240,8 @@ static void pretty_print_clipboard(json_object *v) {
 | 
				
			||||||
static void pretty_print(int type, json_object *resp) {
 | 
					static void pretty_print(int type, json_object *resp) {
 | 
				
			||||||
	if (type != IPC_COMMAND && type != IPC_GET_WORKSPACES &&
 | 
						if (type != IPC_COMMAND && type != IPC_GET_WORKSPACES &&
 | 
				
			||||||
			type != IPC_GET_INPUTS && type != IPC_GET_OUTPUTS &&
 | 
								type != IPC_GET_INPUTS && type != IPC_GET_OUTPUTS &&
 | 
				
			||||||
			type != IPC_GET_VERSION && type != IPC_GET_CLIPBOARD) {
 | 
								type != IPC_GET_VERSION && type != IPC_GET_CLIPBOARD &&
 | 
				
			||||||
 | 
								type != IPC_GET_SEATS) {
 | 
				
			||||||
		printf("%s\n", json_object_to_json_string_ext(resp,
 | 
							printf("%s\n", json_object_to_json_string_ext(resp,
 | 
				
			||||||
			JSON_C_TO_STRING_PRETTY | JSON_C_TO_STRING_SPACED));
 | 
								JSON_C_TO_STRING_PRETTY | JSON_C_TO_STRING_SPACED));
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
| 
						 | 
					@ -244,6 +274,9 @@ static void pretty_print(int type, json_object *resp) {
 | 
				
			||||||
		case IPC_GET_OUTPUTS:
 | 
							case IPC_GET_OUTPUTS:
 | 
				
			||||||
			pretty_print_output(obj);
 | 
								pretty_print_output(obj);
 | 
				
			||||||
			break;
 | 
								break;
 | 
				
			||||||
 | 
							case IPC_GET_SEATS:
 | 
				
			||||||
 | 
								pretty_print_seat(obj);
 | 
				
			||||||
 | 
								break;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -324,6 +357,8 @@ int main(int argc, char **argv) {
 | 
				
			||||||
		type = IPC_COMMAND;
 | 
							type = IPC_COMMAND;
 | 
				
			||||||
	} else if (strcasecmp(cmdtype, "get_workspaces") == 0) {
 | 
						} else if (strcasecmp(cmdtype, "get_workspaces") == 0) {
 | 
				
			||||||
		type = IPC_GET_WORKSPACES;
 | 
							type = IPC_GET_WORKSPACES;
 | 
				
			||||||
 | 
						} else if (strcasecmp(cmdtype, "get_seats") == 0) {
 | 
				
			||||||
 | 
							type = IPC_GET_SEATS;
 | 
				
			||||||
	} else if (strcasecmp(cmdtype, "get_inputs") == 0) {
 | 
						} else if (strcasecmp(cmdtype, "get_inputs") == 0) {
 | 
				
			||||||
		type = IPC_GET_INPUTS;
 | 
							type = IPC_GET_INPUTS;
 | 
				
			||||||
	} else if (strcasecmp(cmdtype, "get_outputs") == 0) {
 | 
						} else if (strcasecmp(cmdtype, "get_outputs") == 0) {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										66
									
								
								swaymsg/swaymsg.1.scd
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										66
									
								
								swaymsg/swaymsg.1.scd
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -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.
 | 
				
			||||||
| 
						 | 
					@ -48,6 +48,9 @@ IPC Message Types
 | 
				
			||||||
*get_workspaces*::
 | 
					*get_workspaces*::
 | 
				
			||||||
	Gets a JSON-encoded list of workspaces and their status.
 | 
						Gets a JSON-encoded list of workspaces and their status.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					*get_seats*::
 | 
				
			||||||
 | 
						Gets a JSON-encoded list of current seats.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
*get_inputs*::
 | 
					*get_inputs*::
 | 
				
			||||||
	Gets a JSON-encoded list of current inputs.
 | 
						Gets a JSON-encoded list of current inputs.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue