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
|
||||
|
||||
- Various bugfixes.
|
||||
- Floating windows can now be configured to be shown above fullscreen windows
|
||||
by using the `enable-float-above-fullscreen` action.
|
||||
- Implement xdg-toplevel-tag-v1.
|
||||
- Implement tablet-v2 version 2.
|
||||
- Floating windows can now be pinned. A pinned floating window stays visible on
|
||||
its output even when switching workspaces.
|
||||
- The toml config can now contain named actions:
|
||||
## Fixes
|
||||
|
||||
As always, this release contains many bug fixes. Notably it changes the `top` layer in the
|
||||
wlr-layer-shell-unstable-v1 protocol to be rendered below fullscreen windows. Previously
|
||||
such layers were rendered on top of fullscreen windows which deviates from the behavior of
|
||||
other compositors.
|
||||
|
||||
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
|
||||
actions.switch-to-1 = [
|
||||
{ type = "show-workspace", name = "1" },
|
||||
{ type = "define-action", name = "switch-to-next", action = "$switch-to-2" },
|
||||
]
|
||||
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"
|
||||
alt-a = "enable-float-above-fullscreen"
|
||||
alt-b = "disable-float-above-fullscreen"
|
||||
alt-c = "toggle-float-above-fullscreen"
|
||||
```
|
||||
- Add client and window rules. This is described in detail in
|
||||
[window-and-client-rules.md](./docs/window-and-client-rules.md).
|
||||
- Add client and tree CLI subcommands to inspect clients and windows, primarily
|
||||
to facilitate the writing of window and client rules.
|
||||
- Jay now supports being started with CAP_SYS_NICE capabilities to improve
|
||||
responsiveness under high system load. This is described in detail in
|
||||
[setup.md](docs/setup.md).
|
||||
- Implement wlr-foreign-toplevel-management-v1.
|
||||
- Implement wlr-output-management-v1.
|
||||
- Implement pointer-warp-v1.
|
||||
|
||||
- Floating windows can now be pinned to an output. A pinned floating window remains
|
||||
visible even if you switch to a different workspace on the same output.
|
||||
|
||||
You can pin a floating window by right-clicking on its title or with the following actions:
|
||||
|
||||
```toml
|
||||
alt-a = "pin-float"
|
||||
alt-b = "unpin-float-float"
|
||||
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)
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue