Merge pull request #531 from mahkoh/jorth/release-notes-2
docs: write release notes
This commit is contained in:
commit
045485e4bc
1 changed files with 375 additions and 34 deletions
409
release-notes.md
409
release-notes.md
|
|
@ -1,42 +1,383 @@
|
||||||
# Unreleased
|
# Unreleased
|
||||||
|
|
||||||
- Various bugfixes.
|
## Fixes
|
||||||
- Floating windows can now be configured to be shown above fullscreen windows
|
|
||||||
by using the `enable-float-above-fullscreen` action.
|
As always, this release contains many bug fixes. Notably it changes the `top` layer in the
|
||||||
- Implement xdg-toplevel-tag-v1.
|
wlr-layer-shell-unstable-v1 protocol to be rendered below fullscreen windows. Previously
|
||||||
- Implement tablet-v2 version 2.
|
such layers were rendered on top of fullscreen windows which deviates from the behavior of
|
||||||
- Floating windows can now be pinned. A pinned floating window stays visible on
|
other compositors.
|
||||||
its output even when switching workspaces.
|
|
||||||
- The toml config can now contain named actions:
|
If this negatively affects your experience, try to configure the affected applications to
|
||||||
|
use the `overlay` layer instead.
|
||||||
|
|
||||||
|
Thanks to @disluckyguy for fixing this.
|
||||||
|
|
||||||
|
## New and Improved Protocols
|
||||||
|
|
||||||
|
This release implements the following new protocols:
|
||||||
|
|
||||||
|
- xdg-toplevel-tag-v1
|
||||||
|
|
||||||
|
This protocol allows clients to add a string tag to their windows. These tags can be
|
||||||
|
used in window rules (see below).
|
||||||
|
|
||||||
|
- wlr-foreign-toplevel-management-unstable-v1
|
||||||
|
|
||||||
|
This protocol allows task bars to display and manage application windows.
|
||||||
|
|
||||||
|
Thanks to @disluckyguy for implementing this.
|
||||||
|
|
||||||
|
- wlr-output-management-unstable-v1
|
||||||
|
|
||||||
|
This protocol allows applications to manage the position, mode, etc. of outputs.
|
||||||
|
|
||||||
|
Thanks to @disluckyguy for implementing this.
|
||||||
|
|
||||||
|
- pointer-warp-v1
|
||||||
|
|
||||||
|
This protocol allows applications to warp the cursor within their own windows.
|
||||||
|
Previously some applications abused the pointer-constraints-unstable-v1 protocol for the
|
||||||
|
same purpose.
|
||||||
|
|
||||||
|
- tablet-v2, version 2
|
||||||
|
|
||||||
|
This version of the tablet protocol adds support for pad dials.
|
||||||
|
|
||||||
|
- pointer-constraints-unstable-v1, position hints
|
||||||
|
|
||||||
|
The implementation now honors position hints set by clients.
|
||||||
|
|
||||||
|
Thanks to @tadeokondrak for suggesting this.
|
||||||
|
|
||||||
|
## Disabling the Built-In Bar
|
||||||
|
|
||||||
|
The built-in bar can now be disabled:
|
||||||
|
|
||||||
|
```toml
|
||||||
|
show-bar = true
|
||||||
|
|
||||||
|
[shortcuts]
|
||||||
|
alt-a = "show-bar"
|
||||||
|
alt-b = "hide-bar"
|
||||||
|
alt-c = "toggle-bar"
|
||||||
|
```
|
||||||
|
|
||||||
|
This can be useful if you want to use an external bar such as waybar.
|
||||||
|
|
||||||
|
## Client & Window Rules
|
||||||
|
|
||||||
|
Jay now supports client and window rules:
|
||||||
|
|
||||||
|
```toml
|
||||||
|
[[windows]]
|
||||||
|
match.content-types = ["video"]
|
||||||
|
action = "enter-fullscreen"
|
||||||
|
```
|
||||||
|
|
||||||
|
These rules are described in detail in
|
||||||
|
[window-and-client-rules.md](docs/window-and-client-rules.md).
|
||||||
|
|
||||||
|
## Window Management
|
||||||
|
|
||||||
|
This release contains many improvements related to how you can manage windows with the
|
||||||
|
mouse and keyboard.
|
||||||
|
|
||||||
|
- You can now show floating windows above fullscreen windows:
|
||||||
|
|
||||||
```toml
|
```toml
|
||||||
actions.switch-to-1 = [
|
alt-a = "enable-float-above-fullscreen"
|
||||||
{ type = "show-workspace", name = "1" },
|
alt-b = "disable-float-above-fullscreen"
|
||||||
{ type = "define-action", name = "switch-to-next", action = "$switch-to-2" },
|
alt-c = "toggle-float-above-fullscreen"
|
||||||
]
|
|
||||||
actions.switch-to-2 = [
|
|
||||||
{ type = "show-workspace", name = "2" },
|
|
||||||
{ type = "define-action", name = "switch-to-next", action = "$switch-to-3" },
|
|
||||||
]
|
|
||||||
actions.switch-to-3 = [
|
|
||||||
{ type = "show-workspace", name = "3" },
|
|
||||||
{ type = "define-action", name = "switch-to-next", action = "$switch-to-1" },
|
|
||||||
]
|
|
||||||
actions.switch-to-next = "$switch-to-1"
|
|
||||||
|
|
||||||
[shortcuts]
|
|
||||||
alt-x = "$switch-to-next"
|
|
||||||
```
|
```
|
||||||
- Add client and window rules. This is described in detail in
|
|
||||||
[window-and-client-rules.md](./docs/window-and-client-rules.md).
|
- Floating windows can now be pinned to an output. A pinned floating window remains
|
||||||
- Add client and tree CLI subcommands to inspect clients and windows, primarily
|
visible even if you switch to a different workspace on the same output.
|
||||||
to facilitate the writing of window and client rules.
|
|
||||||
- Jay now supports being started with CAP_SYS_NICE capabilities to improve
|
You can pin a floating window by right-clicking on its title or with the following actions:
|
||||||
responsiveness under high system load. This is described in detail in
|
|
||||||
[setup.md](docs/setup.md).
|
```toml
|
||||||
- Implement wlr-foreign-toplevel-management-v1.
|
alt-a = "pin-float"
|
||||||
- Implement wlr-output-management-v1.
|
alt-b = "unpin-float-float"
|
||||||
- Implement pointer-warp-v1.
|
alt-c = "toggle-float-pinned"
|
||||||
|
```
|
||||||
|
|
||||||
|
A pinned window has a pin icon drawn in front of its title. You can also configure the
|
||||||
|
compositor so that a grayed-out version of the icon is always shown even if the window
|
||||||
|
is not pinned:
|
||||||
|
|
||||||
|
```toml
|
||||||
|
[float]
|
||||||
|
show-pin-icon = true
|
||||||
|
```
|
||||||
|
|
||||||
|
In this case you can also toggle between pinned and unpinned by left-clicking on the
|
||||||
|
icon.
|
||||||
|
|
||||||
|
- Floating windows are now restacked when you click, touch, or press down a tablet tool
|
||||||
|
anywhere inside of them. Previously this only happened when clicking on the window
|
||||||
|
title.
|
||||||
|
|
||||||
|
Thanks to @disluckyguy for suggesting this.
|
||||||
|
|
||||||
|
- Fullscreen windows can now be moved to other workspaces and outputs without first
|
||||||
|
leaving fullscreen. You can do this with the usual keyboard shortcuts or in
|
||||||
|
window-management mode by dragging the window to another output. Recall that you can
|
||||||
|
configure a key to enable window-management mode as follows:
|
||||||
|
|
||||||
|
```toml
|
||||||
|
window-management-key = "XF86Macro1"
|
||||||
|
```
|
||||||
|
|
||||||
|
This will enable window-management mode while this key is being pressed.
|
||||||
|
|
||||||
|
- In window-management mode, tiled windows can now be dragged with the mouse to move them
|
||||||
|
around. Previously this was possible by dragging the window title, but in window
|
||||||
|
management mode you can now click anywhere within the window.
|
||||||
|
|
||||||
|
Note that, in window-management mode, dragging the title will actually drag the
|
||||||
|
container containing the window.
|
||||||
|
|
||||||
|
Thanks to @Stoppedpuma for suggesting this.
|
||||||
|
|
||||||
|
- Jay allows you to always revert the pointer to its default state by pressing the Escape
|
||||||
|
key. For example, if you're performing a drag-and-drop operation, you can press Escape
|
||||||
|
to abort it. Some people want to use the Escape key legitimately without having this
|
||||||
|
side effect on the pointer.
|
||||||
|
|
||||||
|
You can now configure which key performs this operation:
|
||||||
|
|
||||||
|
```toml
|
||||||
|
pointer-revert-key = "Escape"
|
||||||
|
```
|
||||||
|
|
||||||
|
You can disable this feature altogether by setting it to `NoSymbol`.
|
||||||
|
|
||||||
|
Thanks to @kotarac for suggesting this.
|
||||||
|
|
||||||
|
- You can now assign vim-like marks to windows and later jump back to them:
|
||||||
|
|
||||||
|
```toml
|
||||||
|
[shortcuts]
|
||||||
|
alt-a = "create-mark"
|
||||||
|
alt-b = "jump-to-mark"
|
||||||
|
```
|
||||||
|
|
||||||
|
When these actions are executed, the next key press marks the selected window with that
|
||||||
|
key or jumps to the window that was previously marked with that key.
|
||||||
|
|
||||||
|
Instead of selecting the key interactively, you can also specify it in the config
|
||||||
|
itself:
|
||||||
|
|
||||||
|
```toml
|
||||||
|
[shortcuts]
|
||||||
|
alt-a = { type = "create-mark", id.key = "a" }
|
||||||
|
```
|
||||||
|
|
||||||
|
The key names can be found in the `input-event-codes.h` file in your `/usr/include`
|
||||||
|
directory. The names should have the `KEY_` prefix removed and must be written
|
||||||
|
all-lowercase.
|
||||||
|
|
||||||
|
Alternatively, you can use marks that are identified by a string name instead of a key:
|
||||||
|
|
||||||
|
```toml
|
||||||
|
[shortcuts]
|
||||||
|
alt-a = { type = "create-mark", id.name = "my mark name" }
|
||||||
|
```
|
||||||
|
|
||||||
|
These marks live in their own namespace and cannot be accessed with the interactive key
|
||||||
|
selection.
|
||||||
|
|
||||||
|
- Jay now maintains a focus history. The history allows you to navigate between your
|
||||||
|
windows in the order in which you focused them:
|
||||||
|
|
||||||
|
```toml
|
||||||
|
alt-a = "focus-prev"
|
||||||
|
alt-b = "focus-next"
|
||||||
|
```
|
||||||
|
|
||||||
|
You can customize the behavior of these actions with the following settings:
|
||||||
|
|
||||||
|
```toml
|
||||||
|
[focus-history]
|
||||||
|
only-visible = false
|
||||||
|
same-workspace = true
|
||||||
|
```
|
||||||
|
|
||||||
|
If `only-visible` is `true`, then actions will only move the focus to windows that are
|
||||||
|
already visible. Otherwise it will make windows visible before focusing them, moving
|
||||||
|
between tabs and workspaces as necessary.
|
||||||
|
|
||||||
|
If `same-workspace` is `true`, then only windows on the same workspace will be focused.
|
||||||
|
|
||||||
|
The defaults are `false` for both.
|
||||||
|
|
||||||
|
- When switching to a workspace, Jay will now put the focus on the last window that was
|
||||||
|
previously focused on that workspace, which might be a floating window. Previously Jay
|
||||||
|
would always put the focus on the last _tiled_ window that was previously focused.
|
||||||
|
|
||||||
|
- You can now navigate between tiled and floating layers without using the mouse:
|
||||||
|
|
||||||
|
```toml
|
||||||
|
[shortcuts]
|
||||||
|
alt-a = "focus-below"
|
||||||
|
alt-b = "focus-above"
|
||||||
|
```
|
||||||
|
|
||||||
|
This should allow you to put the keyboard focus on any window without having to use the
|
||||||
|
mouse.
|
||||||
|
|
||||||
|
Thanks to @Stoppedpuma for suggesting this.
|
||||||
|
|
||||||
|
## Toml Improvements
|
||||||
|
|
||||||
|
These improvements apply to the toml-based configuration:
|
||||||
|
|
||||||
|
- You can now assign names to actions:
|
||||||
|
|
||||||
|
```toml
|
||||||
|
actions.xyz = [
|
||||||
|
{ type = "move-to-workspace", name = "1" },
|
||||||
|
"enter-fullscreen",
|
||||||
|
]
|
||||||
|
```
|
||||||
|
|
||||||
|
These actions can then be executed by prefixing their name with a `$`:
|
||||||
|
|
||||||
|
```toml
|
||||||
|
[shortcuts]
|
||||||
|
alt-a = "$xyz"
|
||||||
|
```
|
||||||
|
|
||||||
|
This can be useful when the same action is used in multiple places.
|
||||||
|
|
||||||
|
You can also re-define or un-define actions at runtime:
|
||||||
|
|
||||||
|
```toml
|
||||||
|
[shortcuts]
|
||||||
|
alt-a = {
|
||||||
|
type = "define-action",
|
||||||
|
name = "xyz",
|
||||||
|
action = [
|
||||||
|
{ type = "move-to-workspace", name = "2" },
|
||||||
|
"enter-fullscreen",
|
||||||
|
],
|
||||||
|
}
|
||||||
|
alt-b = { type = "undefine-action", name = "xyz" }
|
||||||
|
```
|
||||||
|
|
||||||
|
These types of redefinitions can be used for a limited amount of dynamic behavior. For
|
||||||
|
example, you can have the same key cycle between a number of workspaces.
|
||||||
|
|
||||||
|
- Jay now supports input modes:
|
||||||
|
|
||||||
|
```toml
|
||||||
|
[shortcuts]
|
||||||
|
alt-x = { type = "push-mode", name = "navigation" }
|
||||||
|
|
||||||
|
[modes."navigation".shortcuts]
|
||||||
|
Escape = "pop-mode"
|
||||||
|
w = "focus-up"
|
||||||
|
a = "focus-left"
|
||||||
|
s = "focus-down"
|
||||||
|
d = "focus-right"
|
||||||
|
q = "focus-prev"
|
||||||
|
e = "focus-next"
|
||||||
|
r = "focus-above"
|
||||||
|
f = "focus-below"
|
||||||
|
m = "create-mark"
|
||||||
|
apostrophe = "jump-to-mark"
|
||||||
|
```
|
||||||
|
|
||||||
|
These modes allow you to define shortcuts that are overlayed on the normal shortcuts
|
||||||
|
while the mode is active.
|
||||||
|
|
||||||
|
If you have a foot pedal or same easy-to-reach key, you can use Jay's complex-shortcuts
|
||||||
|
mechanism to enter the mode while you're holding the key down:
|
||||||
|
|
||||||
|
```toml
|
||||||
|
[complex-shortcuts.XF86Macro2]
|
||||||
|
action = { type = "push-mode", name = "navigation" } # Executes when the key is pressed
|
||||||
|
latch = "pop-mode" # Executes when the key is released
|
||||||
|
```
|
||||||
|
|
||||||
|
If you prefer key chords, you can use the `latch-mode` action:
|
||||||
|
|
||||||
|
```toml
|
||||||
|
[shortcuts]
|
||||||
|
alt-x = { type = "latch-mode", name = "navigation" }
|
||||||
|
```
|
||||||
|
|
||||||
|
This acts like `push-mode` except that the mode is automatically popped when the next
|
||||||
|
shortcut is executed.
|
||||||
|
|
||||||
|
By default, modes inherit from the default shortcuts, however, you can also configure
|
||||||
|
them to inherit from another mode:
|
||||||
|
|
||||||
|
```toml
|
||||||
|
[modes.m1.shortcuts]
|
||||||
|
# ...
|
||||||
|
|
||||||
|
[modes.m2]
|
||||||
|
parent = "m1"
|
||||||
|
[modes.m2.shortcuts]
|
||||||
|
# ...
|
||||||
|
```
|
||||||
|
|
||||||
|
In this case, the shortcuts that are active while the `m2` mode is active are normal
|
||||||
|
shortcuts, overwritten by the `m1` shortcuts, overwritten by the `m2` shortcuts.
|
||||||
|
|
||||||
|
Note that you can explicitly unset a shortcut by assigning it the `none` action.
|
||||||
|
|
||||||
|
## Support for Real-Time Scheduling
|
||||||
|
|
||||||
|
Jay now supports running with the `cap_sys_nice` capability:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
~$ sudo setcap cap_sys_nice=+p /path/to/jay
|
||||||
|
```
|
||||||
|
|
||||||
|
If the compositor is started with this capability, it will set its own scheduler policy
|
||||||
|
to `SCHED_RR` which will allow the compositor to stay responsive even if the system is
|
||||||
|
under heavy load.
|
||||||
|
|
||||||
|
If the Vulkan renderer is used, it will also request a high-priority context which can
|
||||||
|
allow the kernel to give it priority when scheduling GPU operations.
|
||||||
|
|
||||||
|
Note that the capability and scheduler policy will not be inherited by child processes.
|
||||||
|
|
||||||
|
## Miscellaneous Changes
|
||||||
|
|
||||||
|
- The `jay-config` crate now supports `Seat::get_keyboard_output` and
|
||||||
|
`Connector::workspaces` functions to retrieve the output that has the keyboard focus and
|
||||||
|
retrieve the list of workspaces located on an output.
|
||||||
|
|
||||||
|
Thanks to @khyperia for implementing this.
|
||||||
|
|
||||||
|
- The libinput click-method and middle-button-emulation settings can now be set via the
|
||||||
|
configuration or on the command line.
|
||||||
|
|
||||||
|
- The use of hardware cursors can now be disabled in the toml configuration:
|
||||||
|
|
||||||
|
```toml
|
||||||
|
use-hardware-cursor = false
|
||||||
|
```
|
||||||
|
|
||||||
|
- The primary selection protocol can now be disabled:
|
||||||
|
|
||||||
|
```toml
|
||||||
|
middle-click-paste = true
|
||||||
|
```
|
||||||
|
|
||||||
|
Thanks to @kotarac for suggesting this.
|
||||||
|
|
||||||
|
- Jay can now be compiled against musl libc.
|
||||||
|
|
||||||
|
Thanks to @elde-n for implementing this.
|
||||||
|
|
||||||
|
- Jay now works with some status programs that produce incorrectly formatted i3status
|
||||||
|
output.
|
||||||
|
|
||||||
|
Thanks to @disluckyguy for implementing this.
|
||||||
|
|
||||||
# 1.10.0 (2025-04-22)
|
# 1.10.0 (2025-04-22)
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue