2021-03-05 22:14:02 +00:00
|
|
|
labwc-actions(5)
|
|
|
|
|
|
|
|
|
|
# NAME
|
|
|
|
|
|
|
|
|
|
labwc - actions
|
|
|
|
|
|
|
|
|
|
# ACTIONS
|
|
|
|
|
|
2022-05-31 22:01:26 +01:00
|
|
|
Actions are used in menus and keyboard/mouse bindings.
|
2021-03-05 22:14:02 +00:00
|
|
|
|
2023-07-16 10:04:19 +02:00
|
|
|
*<action name="Close" />*
|
2022-05-31 22:01:26 +01:00
|
|
|
Close top-most window.
|
2021-07-12 21:46:10 +01:00
|
|
|
|
2023-07-16 10:04:19 +02:00
|
|
|
*<action name="Kill" />*
|
2022-12-08 05:07:49 +00:00
|
|
|
Kill the process associated with the current window by sending it the
|
|
|
|
|
SIGTERM signal.
|
|
|
|
|
|
2023-02-19 12:36:32 +01:00
|
|
|
*<action name="Execute" command="value" />*
|
2022-05-06 21:55:46 +01:00
|
|
|
Execute command. Note that in the interest of backward compatibility,
|
|
|
|
|
labwc supports <execute> as an alternative to <command> even though
|
|
|
|
|
openbox documentation states that it is deprecated.
|
2023-09-21 23:09:05 +01:00
|
|
|
Note: Tilde (~) is expanded in the command before passing to execvp()
|
2021-03-05 22:14:02 +00:00
|
|
|
|
2023-07-16 10:04:19 +02:00
|
|
|
*<action name="Exit" />*
|
2021-03-05 22:14:02 +00:00
|
|
|
Exit labwc.
|
|
|
|
|
|
2023-07-16 10:04:19 +02:00
|
|
|
*<action name="Focus" />*
|
2021-12-11 23:03:38 +00:00
|
|
|
Give focus to window under cursor.
|
|
|
|
|
|
2023-11-07 18:53:27 +00:00
|
|
|
*<action name="Unfocus" />*
|
|
|
|
|
Remove focus from the window that is currently focused.
|
|
|
|
|
|
2023-07-16 10:04:19 +02:00
|
|
|
*<action name="Raise" />*
|
2021-12-11 23:03:38 +00:00
|
|
|
Restack the current window above other open windows.
|
|
|
|
|
|
2023-07-16 10:04:19 +02:00
|
|
|
*<action name="Lower" />*
|
2023-03-20 03:31:49 +01:00
|
|
|
Restack the current window below other open windows.
|
|
|
|
|
|
2023-07-16 10:04:19 +02:00
|
|
|
*<action name="Iconify" />*
|
2021-09-20 22:01:47 +01:00
|
|
|
Iconify (minimize) focused window.
|
|
|
|
|
|
2023-07-16 10:04:19 +02:00
|
|
|
*<action name="Move" />*
|
2021-11-26 18:30:11 +00:00
|
|
|
Begin interactive move of window under cursor
|
|
|
|
|
|
2023-08-05 23:58:40 +02:00
|
|
|
*<action name="MoveToEdge" direction="value" snapWindows="value" />*
|
|
|
|
|
Move window until it hits the next edge.
|
|
|
|
|
|
|
|
|
|
*direction* [left|up|right|down] Direction in which to move.
|
|
|
|
|
|
|
|
|
|
*snapWindows* [yes|no] Move window until it hits an edge of
|
|
|
|
|
another window or screen edge. If set to "no", only move to
|
|
|
|
|
the next screen edge. Default is yes.
|
2021-10-17 21:27:25 +01:00
|
|
|
|
2023-07-16 10:04:19 +02:00
|
|
|
*<action name="Resize" />*
|
2021-12-11 22:58:00 +00:00
|
|
|
Begin interactive resize of window under cursor
|
|
|
|
|
|
2023-07-16 10:04:19 +02:00
|
|
|
*<action name="ResizeRelative" left="" right="" top="" bottom="" />*
|
2023-06-27 21:20:04 +03:00
|
|
|
Resize window relative to its current size. Values of left, right,
|
|
|
|
|
top or bottom tell how much to resize on that edge of window,
|
|
|
|
|
positive values grow window, negative shrink window.
|
|
|
|
|
|
2023-08-05 23:58:40 +02:00
|
|
|
*<action name="GrowToEdge" direction="value" />*
|
|
|
|
|
Resize window to fill the space between its edge and any other
|
|
|
|
|
window edge.
|
|
|
|
|
|
|
|
|
|
*direction* [left|up|right|down] Direction in which to grow.
|
|
|
|
|
|
|
|
|
|
*<action name="ShrinkToEdge" direction="value" />*
|
|
|
|
|
Reverse of GrowToEdge. Shrinks by a maximum of 50%.
|
|
|
|
|
|
|
|
|
|
*direction* [left|up|right|down] Direction in which to shrink.
|
|
|
|
|
|
2023-06-06 20:33:53 +01:00
|
|
|
*<action name="MoveTo" x="" y="" />*
|
|
|
|
|
Move to position (x, y)
|
|
|
|
|
|
2023-12-01 17:03:58 +00:00
|
|
|
*<action name="ResizeTo" width="" height="" />*
|
|
|
|
|
Resize window
|
|
|
|
|
|
|
|
|
|
*width* The width to resize the window to in pixels.
|
|
|
|
|
|
|
|
|
|
*height* The height to resize the window to in pixels.
|
|
|
|
|
|
2023-10-14 14:57:44 +02:00
|
|
|
*<action name="MoveToCursor" />*
|
|
|
|
|
Move to be centered on cursor.
|
|
|
|
|
Tries to prevent any part of the window from going off-screen.
|
|
|
|
|
|
2023-06-27 21:17:57 +03:00
|
|
|
*<action name="MoveRelative" x="" y="" />*
|
|
|
|
|
Move window relative to its current position. Positive value of x moves
|
|
|
|
|
it right, negative left. Positive value of y moves it down, negative up.
|
|
|
|
|
|
2023-02-19 12:36:32 +01:00
|
|
|
*<action name="SnapToEdge" direction="value" />*
|
2022-05-31 22:01:26 +01:00
|
|
|
Resize window to fill half the output in the given direction. Supports
|
2021-10-18 19:47:32 +01:00
|
|
|
directions "left", "up", "right", "down" and "center".
|
2021-07-20 20:06:48 +01:00
|
|
|
|
2023-02-19 12:36:32 +01:00
|
|
|
*<action name="SnapToRegion" region="value" />*
|
2023-01-07 03:30:10 +01:00
|
|
|
Resize and move active window according to the given region.
|
|
|
|
|
See labwc-config(5) for further information on how to define regions.
|
|
|
|
|
|
2023-07-16 10:04:19 +02:00
|
|
|
*<action name="NextWindow" />*
|
2021-03-05 22:14:02 +00:00
|
|
|
Cycle focus to next window.
|
|
|
|
|
|
2023-07-16 10:04:19 +02:00
|
|
|
*<action name="PreviousWindow" />*
|
2021-12-06 21:13:21 +00:00
|
|
|
Cycle focus to previous window.
|
|
|
|
|
|
2023-07-16 10:04:19 +02:00
|
|
|
*<action name="Reconfigure" />*
|
2021-03-05 22:14:02 +00:00
|
|
|
Re-load configuration and theme files.
|
|
|
|
|
|
2023-02-19 12:36:32 +01:00
|
|
|
*<action name="ShowMenu" menu="value" />*
|
2022-01-26 00:07:10 +01:00
|
|
|
Show menu. Valid menu names are "root-menu" and "client-menu".
|
2021-03-05 22:14:02 +00:00
|
|
|
|
2023-07-16 10:04:19 +02:00
|
|
|
*<action name="ToggleDecorations" />*
|
2021-09-20 22:01:47 +01:00
|
|
|
Toggle decorations of focused window.
|
|
|
|
|
|
2023-04-14 09:01:13 +02:00
|
|
|
This is a 3-state action which can be executed multiple times:
|
|
|
|
|
- Only the titlebar will be hidden, borders and resize area are kept
|
|
|
|
|
- Remaining decorations will be disabled
|
|
|
|
|
- Decorations will be shown normally
|
|
|
|
|
|
|
|
|
|
By disabling the theme configuration 'keepBorder' the first step
|
|
|
|
|
will be removed and the action only toggles between on and off.
|
|
|
|
|
|
2023-07-16 10:04:19 +02:00
|
|
|
*<action name="ToggleFullscreen" />*
|
2021-09-20 22:01:47 +01:00
|
|
|
Toggle fullscreen state of focused window.
|
|
|
|
|
|
view: implement separate horizontal/vertical maximize
This is a useful (if lesser-known) feature of at least a few popular X11
window managers, for example Openbox and XFWM4. Typically right-click on
the maximize button toggles horizontal maximize, while middle-click
toggles vertical maximize.
Support in labwc uses the same configuration syntax as Openbox, where the
Maximize/ToggleMaximize actions have an optional "direction" argument:
horizontal, vertical, or both (default). The default mouse bindings match
the XFWM4 defaults (not sure what Openbox has by default).
Most of the external protocols still assume "maximized" is a Boolean,
which is no longer true internally. For the sake of the outside world,
a view is only "maximized" if maximized in both directions.
Internally, I've taken the following approach:
- SSD code decorates the view as "maximized" (i.e. hiding borders) only
if maximized in both directions.
- Layout code (interactive move/resize, tiling, etc.) generally treats
the view as "maximized" (with the restrictions that entails) if
maximized in either direction. For example, moving a vertically-
maximized view first restores the natural geometry (this differs from
Openbox, which instead allows the view to move only horizontally.)
v2: use enum view_axis for view->maximized
v3:
- update docs
- allow resizing if partly maximized
- add TODOs & corrections noted by Consolatis
2023-10-26 00:38:29 -04:00
|
|
|
*<action name="ToggleMaximize" direction="value" />*
|
|
|
|
|
Toggle maximize state of focused window. Supported directions are
|
|
|
|
|
"both" (default), "horizontal", and "vertical".
|
2021-07-13 21:54:22 +01:00
|
|
|
|
view: implement separate horizontal/vertical maximize
This is a useful (if lesser-known) feature of at least a few popular X11
window managers, for example Openbox and XFWM4. Typically right-click on
the maximize button toggles horizontal maximize, while middle-click
toggles vertical maximize.
Support in labwc uses the same configuration syntax as Openbox, where the
Maximize/ToggleMaximize actions have an optional "direction" argument:
horizontal, vertical, or both (default). The default mouse bindings match
the XFWM4 defaults (not sure what Openbox has by default).
Most of the external protocols still assume "maximized" is a Boolean,
which is no longer true internally. For the sake of the outside world,
a view is only "maximized" if maximized in both directions.
Internally, I've taken the following approach:
- SSD code decorates the view as "maximized" (i.e. hiding borders) only
if maximized in both directions.
- Layout code (interactive move/resize, tiling, etc.) generally treats
the view as "maximized" (with the restrictions that entails) if
maximized in either direction. For example, moving a vertically-
maximized view first restores the natural geometry (this differs from
Openbox, which instead allows the view to move only horizontally.)
v2: use enum view_axis for view->maximized
v3:
- update docs
- allow resizing if partly maximized
- add TODOs & corrections noted by Consolatis
2023-10-26 00:38:29 -04:00
|
|
|
*<action name="Maximize" direction="value" />*
|
|
|
|
|
Maximize focused window. Supported directions are "both" (default),
|
|
|
|
|
"horizontal", and "vertical".
|
2023-05-04 21:29:14 +01:00
|
|
|
|
2023-07-16 10:04:19 +02:00
|
|
|
*<action name="ToggleAlwaysOnTop" />*
|
2022-04-09 01:16:09 +02:00
|
|
|
Toggle always-on-top of focused window.
|
|
|
|
|
|
2023-07-16 10:04:19 +02:00
|
|
|
*<action name="ToggleAlwaysOnBottom" />*
|
2023-05-24 13:06:48 +03:00
|
|
|
Toggle between layers 'always-on-bottom' and 'normal'. When a window is
|
2023-05-11 22:26:41 +01:00
|
|
|
in the 'always-on-bottom' layer, it is rendered below all other
|
|
|
|
|
top-level windows. It is anticipated that this action will be useful
|
|
|
|
|
when defining window-rules for desktop-management tools that do not
|
|
|
|
|
support the wlr-layer-shell protocol.
|
|
|
|
|
|
2023-11-25 17:54:36 -06:00
|
|
|
*<action name="ToggleOmnipresent" />*
|
|
|
|
|
Toggle omnipresent (visible on all workspaces / sticky) for the focused window.
|
|
|
|
|
|
2023-07-16 10:04:19 +02:00
|
|
|
*<action name="ToggleKeybinds" />*
|
2023-03-03 18:16:46 +01:00
|
|
|
Stop handling keybinds other than ToggleKeybinds itself.
|
|
|
|
|
This can be used to allow A-Tab and similar keybinds to be delivered
|
|
|
|
|
to Virtual Machines, VNC clients or nested compositors.
|
|
|
|
|
A second call will restore all original keybinds.
|
|
|
|
|
|
2023-03-05 10:35:56 +01:00
|
|
|
This action will only affect the window that had keyboard focus when
|
|
|
|
|
the binding was executed. Thus when switching to another window, all
|
|
|
|
|
the usual keybinds will function again until switching back to the
|
|
|
|
|
original window. There can be multiple windows with this mode set.
|
|
|
|
|
|
2024-01-08 22:58:58 +02:00
|
|
|
*<action name="ToggleTearing" />*
|
|
|
|
|
Toggles tearing for the focused window.
|
|
|
|
|
|
2023-03-05 17:16:23 +01:00
|
|
|
*<action name="FocusOutput" output="HDMI-A-1" />*
|
|
|
|
|
Give focus to topmost window on given output and warp the cursor
|
|
|
|
|
to the center of the window. If the given output does not contain
|
|
|
|
|
any windows, the cursor is centered on the given output.
|
|
|
|
|
|
2023-05-14 20:44:59 +03:00
|
|
|
*<action name="GoToDesktop" to="value" wrap="yes" />*
|
2023-03-26 10:57:53 +01:00
|
|
|
Switch to workspace.
|
2022-06-15 01:38:22 +02:00
|
|
|
|
2023-08-29 13:12:09 +03:00
|
|
|
*to* The workspace to switch to. Supported values are "current", "last",
|
|
|
|
|
"left", "right" or the full name of a workspace or its index (starting
|
|
|
|
|
at 1) as configured in rc.xml.
|
2023-03-26 10:57:53 +01:00
|
|
|
|
2023-05-14 20:44:59 +03:00
|
|
|
*wrap* [yes|no] Wrap around from last desktop to first, and vice
|
|
|
|
|
versa. Default yes.
|
|
|
|
|
|
|
|
|
|
*<action name="SendToDesktop" to="value" follow="yes" wrap="yes" />*
|
2022-06-15 01:38:22 +02:00
|
|
|
Send active window to workspace.
|
2023-03-26 10:57:53 +01:00
|
|
|
|
|
|
|
|
*to* The workspace to send the window to. Supported values are the same
|
|
|
|
|
as for GoToDesktop.
|
|
|
|
|
|
|
|
|
|
*follow* [yes|no] Also switch to the specified workspace. Default yes.
|
2022-06-15 01:38:22 +02:00
|
|
|
|
2023-05-14 20:44:59 +03:00
|
|
|
*wrap* [yes|no] Wrap around from last desktop to first, and vice
|
|
|
|
|
versa. Default yes.
|
|
|
|
|
|
2023-12-09 12:01:11 +03:00
|
|
|
*<action name="VirtualOutputAdd" output_name="value" />*
|
|
|
|
|
Add virtual output (headless backend).
|
|
|
|
|
|
|
|
|
|
For example, it can be used to overlay virtual output on real output, but with
|
|
|
|
|
a different resolution (this can be done with `wlr-randr` or `wdisplays`).
|
|
|
|
|
After that, virtual output can be selected for screen sharing (casting),
|
|
|
|
|
effectively sharing only the region of the screen.
|
|
|
|
|
|
|
|
|
|
It must be noted that overlaying virtual output and real output is not
|
2024-01-04 19:42:26 +02:00
|
|
|
endorsed or explicitly supported by wlroots. For example, after configuring
|
2023-12-09 12:01:11 +03:00
|
|
|
virtual output, real output must be reconfigured as well (for the overlay
|
|
|
|
|
configuration to work correctly). This is the example configuration:
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
<keybind key="W-v">
|
|
|
|
|
<action name="VirtualOutputAdd" output_name="ScreenCasting"/>
|
|
|
|
|
<action name="Execute" command='sh -c "wlr-randr --output ScreenCasting --pos 0,0 --scale 2 --custom-mode 3840x2110; wlr-randr --output eDP-1 --pos 0,0 --scale 2 --mode 3840x2160"'/>
|
|
|
|
|
</keybind>
|
|
|
|
|
<keybind key="W-c">
|
|
|
|
|
<action name="VirtualOutputRemove"/>
|
|
|
|
|
</keybind>
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
Note that the vertical resolution of "ScreenCasting" output is just 50px
|
|
|
|
|
smaller than "eDP-1" output to cut off bottom panel from screen sharing.
|
|
|
|
|
|
|
|
|
|
Virtual output is also useful for extending the desktop to (maybe mobile)
|
|
|
|
|
remote systems like tablets. E.g. simply adding a virtual output, attaching
|
|
|
|
|
wayvnc to it and running a VNC client on the remote system.
|
|
|
|
|
|
|
|
|
|
*output_name* The name of virtual output. Providing virtual output name is
|
|
|
|
|
beneficial for further automation. Default is "HEADLESS-X".
|
|
|
|
|
|
|
|
|
|
*<action name="VirtualOutputRemove" output_name="value" />*
|
|
|
|
|
Remove virtual output (headless backend).
|
|
|
|
|
|
|
|
|
|
*output_name* The name of virtual output. If not supplied, will remove the
|
|
|
|
|
last virtual output added.
|
|
|
|
|
|
2023-12-28 16:47:21 -05:00
|
|
|
*<action name="AutoPlace" />*
|
|
|
|
|
Use the automatic placement policy to move the active window to a
|
|
|
|
|
position on its output that will minimize overlap with other windows.
|
|
|
|
|
|
2023-07-16 10:04:19 +02:00
|
|
|
*<action name="None" />*
|
2022-09-06 13:22:43 -04:00
|
|
|
If used as the only action for a binding: clear an earlier defined binding.
|
|
|
|
|
|
2023-08-28 19:14:04 +03:00
|
|
|
# CONDITIONAL ACTIONS
|
|
|
|
|
|
|
|
|
|
Actions that execute other actions. Used in keyboard/mouse bindings.
|
|
|
|
|
|
|
|
|
|
*<action name="If">*
|
|
|
|
|
This action will execute one set of actions if the focused window
|
|
|
|
|
matches the criteria, or another if it does not.
|
|
|
|
|
|
|
|
|
|
The arguments are as follows:
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
<action name="If">
|
|
|
|
|
<query/>
|
|
|
|
|
<then><action/></then>
|
|
|
|
|
<else><action/></else>
|
|
|
|
|
</action>
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
*query*
|
|
|
|
|
Define a query with zero or more conditions. All conditions must
|
|
|
|
|
be evaluated as true in order for the window to match this
|
|
|
|
|
query. Multiple queries can be defined.
|
|
|
|
|
|
|
|
|
|
Pattern matching is done according to glob(7) and is
|
|
|
|
|
case-insensitive.
|
|
|
|
|
|
|
|
|
|
Conditions are as follows:
|
|
|
|
|
|
|
|
|
|
*identifier*
|
|
|
|
|
XDG shell app_id for Wayland clients, WM_CLASS for
|
|
|
|
|
XWayland clients.
|
|
|
|
|
|
|
|
|
|
*title*
|
|
|
|
|
XDG shell title for Wayland clients, WM_NAME for
|
|
|
|
|
XWayland clients.
|
|
|
|
|
|
|
|
|
|
This argument is optional.
|
|
|
|
|
|
|
|
|
|
*then*
|
|
|
|
|
A list of actions to be executed if the window matches any
|
|
|
|
|
query. This argument is optional.
|
|
|
|
|
|
|
|
|
|
*else*
|
|
|
|
|
A list of actions to be executed if the window does not match
|
|
|
|
|
any query. This argument is optional.
|
|
|
|
|
|
|
|
|
|
*<action name="ForEach">*
|
|
|
|
|
Identical to "If" action, but applies to all windows, not just the
|
|
|
|
|
focused one.
|
|
|
|
|
|
2021-03-05 22:14:02 +00:00
|
|
|
# SEE ALSO
|
|
|
|
|
|
2023-08-28 19:14:04 +03:00
|
|
|
labwc(1), labwc-config(5), labwc-theme(5), glob(7)
|