feat: implement declarative scratchpads
This commit is contained in:
parent
d756c8a6a2
commit
b6502e1d8a
17 changed files with 549 additions and 78 deletions
|
|
@ -163,7 +163,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"description": "Sends the currently focused window to a scratchpad and hides it.\n\nIf `name` is omitted, the default scratchpad is used.\n\n- Example:\n\n ```toml\n [shortcuts]\n alt-shift-minus = { type = \"send-to-scratchpad\", name = \"terminal\" }\n ```\n",
|
||||
"description": "Sends the currently focused window to a scratchpad and hides it.\n\nA scratchpad can hold any number of windows. If `name` is omitted, the\ndefault scratchpad is used.\n\n- Example:\n\n ```toml\n [shortcuts]\n alt-shift-minus = { type = \"send-to-scratchpad\", name = \"terminal\" }\n ```\n",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"type": {
|
||||
|
|
@ -179,7 +179,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"description": "Toggles a scratchpad.\n\nIf the scratchpad has a visible window, that window is hidden. Otherwise, the\nmost recently hidden window in the scratchpad is shown on the current workspace.\nIf `name` is omitted, the default scratchpad is used.\n\n- Example:\n\n ```toml\n [shortcuts]\n alt-minus = { type = \"toggle-scratchpad\", name = \"terminal\" }\n ```\n",
|
||||
"description": "Toggles a scratchpad.\n\nIf the scratchpad has a visible window, that window is hidden. Otherwise, the\nmost recently hidden window in the scratchpad is shown on the current workspace.\nOnly one window of a scratchpad is shown at a time, and scratchpad windows are\nalways shown floating. If `name` is omitted, the default scratchpad is used.\n\n- Example:\n\n ```toml\n [shortcuts]\n alt-minus = { type = \"toggle-scratchpad\", name = \"terminal\" }\n ```\n",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"type": {
|
||||
|
|
@ -194,6 +194,22 @@
|
|||
"type"
|
||||
]
|
||||
},
|
||||
{
|
||||
"description": "Cycles through the windows of a scratchpad, one at a time.\n\nWith no window shown, the first window is brought up. Each further invocation\nhides the current window and shows the next; after the last window the\nscratchpad is hidden again. Scratchpad windows are always shown floating.\nIf `name` is omitted, the default scratchpad is used.\n\n- Example:\n\n ```toml\n [shortcuts]\n alt-minus = { type = \"cycle-scratchpad\", name = \"terminal\" }\n ```\n",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"type": {
|
||||
"const": "cycle-scratchpad"
|
||||
},
|
||||
"name": {
|
||||
"type": "string",
|
||||
"description": "The name of the scratchpad."
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"type"
|
||||
]
|
||||
},
|
||||
{
|
||||
"description": "Moves a workspace to a different output.\n\n- Example 1: Move a specific workspace to a named output\n\n ```toml\n [shortcuts]\n alt-F1 = { type = \"move-to-output\", workspace = \"1\", output.name = \"right\" }\n ```\n\n- Example 2: Move the current workspace to a named output\n\n ```toml\n [shortcuts]\n alt-F1 = { type = \"move-to-output\", output.name = \"right\" }\n ```\n\n- Example 3: Move the current workspace to the output on the right (directional)\n\n ```toml\n [shortcuts]\n \"logo+ctrl+shift+Right\" = { type = \"move-to-output\", direction = \"right\" }\n \"logo+ctrl+shift+Left\" = { type = \"move-to-output\", direction = \"left\" }\n \"logo+ctrl+shift+Up\" = { type = \"move-to-output\", direction = \"up\" }\n \"logo+ctrl+shift+Down\" = { type = \"move-to-output\", direction = \"down\" }\n ```\n",
|
||||
"type": "object",
|
||||
|
|
@ -1272,6 +1288,14 @@
|
|||
"egui": {
|
||||
"description": "Sets the egui settings of the compositor.\n",
|
||||
"$ref": "#/$defs/Egui"
|
||||
},
|
||||
"scratchpads": {
|
||||
"type": "array",
|
||||
"description": "An array of pre-configured scratchpads.\n\nEach entry launches a program when the graphics are first initialized and\nimmediately parks its window in the named scratchpad. The window is captured\nvia a unique tag attached to the spawned process, so other windows of the\nsame application are never affected.\n\nUse a `toggle-scratchpad` or `cycle-scratchpad` action to bring the windows\nup; they are always shown floating.\n\n- Example:\n\n ```toml\n [[scratchpads]]\n name = \"term\"\n exec = \"foot\"\n\n [[scratchpads]]\n name = \"notes\"\n exec = [\"obsidian\"]\n ```\n",
|
||||
"items": {
|
||||
"description": "",
|
||||
"$ref": "#/$defs/Scratchpad"
|
||||
}
|
||||
}
|
||||
},
|
||||
"required": []
|
||||
|
|
@ -2086,6 +2110,23 @@
|
|||
},
|
||||
"required": []
|
||||
},
|
||||
"Scratchpad": {
|
||||
"description": "A pre-configured scratchpad whose program is launched at startup and parked\nin the scratchpad.\n\n- Example:\n\n ```toml\n [[scratchpads]]\n name = \"term\"\n exec = \"foot\"\n ```\n",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"name": {
|
||||
"type": "string",
|
||||
"description": "The name of the scratchpad that the spawned window is parked in."
|
||||
},
|
||||
"exec": {
|
||||
"description": "The program to launch when the graphics are first initialized.\n\nIf omitted, no program is launched and the scratchpad is only created on\ndemand by `send-to-scratchpad`.\n",
|
||||
"$ref": "#/$defs/Exec"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"name"
|
||||
]
|
||||
},
|
||||
"SimpleActionName": {
|
||||
"type": "string",
|
||||
"description": "The name of a `simple` Action.\n\nWhen used inside a window rule, the following actions apply to the matched window\ninstead fo the focused window:\n\n- `move-left`\n- `move-down`\n- `move-up`\n- `move-right`\n- `toggle-fullscreen`\n- `enter-fullscreen`\n- `exit-fullscreen`\n- `close`\n- `toggle-floating`\n- `float`\n- `tile`\n- `toggle-float-pinned`\n- `pin-float`\n- `unpin-float`\n\n\n- Example:\n\n ```toml\n [shortcuts]\n alt-q = \"quit\"\n ```\n",
|
||||
|
|
@ -2112,6 +2153,7 @@
|
|||
"exit-fullscreen",
|
||||
"send-to-scratchpad",
|
||||
"toggle-scratchpad",
|
||||
"cycle-scratchpad",
|
||||
"focus-parent",
|
||||
"close",
|
||||
"disable-pointer-constraint",
|
||||
|
|
|
|||
|
|
@ -289,11 +289,12 @@ This table is a tagged union. The variant is determined by the `type` field. It
|
|||
- `send-to-scratchpad`:
|
||||
|
||||
Sends the currently focused window to a scratchpad and hides it.
|
||||
|
||||
If `name` is omitted, the default scratchpad is used.
|
||||
|
||||
|
||||
A scratchpad can hold any number of windows. If `name` is omitted, the
|
||||
default scratchpad is used.
|
||||
|
||||
- Example:
|
||||
|
||||
|
||||
```toml
|
||||
[shortcuts]
|
||||
alt-shift-minus = { type = "send-to-scratchpad", name = "terminal" }
|
||||
|
|
@ -310,13 +311,14 @@ This table is a tagged union. The variant is determined by the `type` field. It
|
|||
- `toggle-scratchpad`:
|
||||
|
||||
Toggles a scratchpad.
|
||||
|
||||
|
||||
If the scratchpad has a visible window, that window is hidden. Otherwise, the
|
||||
most recently hidden window in the scratchpad is shown on the current workspace.
|
||||
If `name` is omitted, the default scratchpad is used.
|
||||
|
||||
Only one window of a scratchpad is shown at a time, and scratchpad windows are
|
||||
always shown floating. If `name` is omitted, the default scratchpad is used.
|
||||
|
||||
- Example:
|
||||
|
||||
|
||||
```toml
|
||||
[shortcuts]
|
||||
alt-minus = { type = "toggle-scratchpad", name = "terminal" }
|
||||
|
|
@ -330,6 +332,30 @@ This table is a tagged union. The variant is determined by the `type` field. It
|
|||
|
||||
The value of this field should be a string.
|
||||
|
||||
- `cycle-scratchpad`:
|
||||
|
||||
Cycles through the windows of a scratchpad, one at a time.
|
||||
|
||||
With no window shown, the first window is brought up. Each further invocation
|
||||
hides the current window and shows the next; after the last window the
|
||||
scratchpad is hidden again. Scratchpad windows are always shown floating.
|
||||
If `name` is omitted, the default scratchpad is used.
|
||||
|
||||
- Example:
|
||||
|
||||
```toml
|
||||
[shortcuts]
|
||||
alt-minus = { type = "cycle-scratchpad", name = "terminal" }
|
||||
```
|
||||
|
||||
The table has the following fields:
|
||||
|
||||
- `name` (optional):
|
||||
|
||||
The name of the scratchpad.
|
||||
|
||||
The value of this field should be a string.
|
||||
|
||||
- `move-to-output`:
|
||||
|
||||
Moves a workspace to a different output.
|
||||
|
|
@ -1074,7 +1100,7 @@ The table has the following fields:
|
|||
- `enabled` (optional):
|
||||
|
||||
Enables or disables window animations.
|
||||
|
||||
|
||||
The default is `false`.
|
||||
|
||||
The value of this field should be a boolean.
|
||||
|
|
@ -1082,7 +1108,7 @@ The table has the following fields:
|
|||
- `duration-ms` (optional):
|
||||
|
||||
Sets the animation duration in milliseconds.
|
||||
|
||||
|
||||
The default is `160`.
|
||||
|
||||
The value of this field should be a number.
|
||||
|
|
@ -1092,7 +1118,7 @@ The table has the following fields:
|
|||
- `style` (optional):
|
||||
|
||||
Sets the animation style used for tiled window movement animations.
|
||||
|
||||
|
||||
The default is `multiphase`.
|
||||
|
||||
The value of this field should be a [AnimationStyle](#types-AnimationStyle).
|
||||
|
|
@ -1100,7 +1126,7 @@ The table has the following fields:
|
|||
- `curve` (optional):
|
||||
|
||||
Sets the animation curve.
|
||||
|
||||
|
||||
The default is `ease-out`.
|
||||
|
||||
The value of this field should be a [AnimationCurve](#types-AnimationCurve).
|
||||
|
|
@ -2336,11 +2362,11 @@ The table has the following fields:
|
|||
- `animations` (optional):
|
||||
|
||||
Configures window animations.
|
||||
|
||||
|
||||
Animations are disabled by default.
|
||||
|
||||
|
||||
- Example:
|
||||
|
||||
|
||||
```toml
|
||||
[animations]
|
||||
enabled = true
|
||||
|
|
@ -2646,6 +2672,32 @@ The table has the following fields:
|
|||
|
||||
The value of this field should be a [Egui](#types-Egui).
|
||||
|
||||
- `scratchpads` (optional):
|
||||
|
||||
An array of pre-configured scratchpads.
|
||||
|
||||
Each entry launches a program when the graphics are first initialized and
|
||||
immediately parks its window in the named scratchpad. The window is captured
|
||||
via a unique tag attached to the spawned process, so other windows of the
|
||||
same application are never affected.
|
||||
|
||||
Use a `toggle-scratchpad` or `cycle-scratchpad` action to bring the windows
|
||||
up; they are always shown floating.
|
||||
|
||||
- Example:
|
||||
|
||||
```toml
|
||||
[[scratchpads]]
|
||||
name = "term"
|
||||
exec = "foot"
|
||||
|
||||
[[scratchpads]]
|
||||
name = "notes"
|
||||
exec = ["obsidian"]
|
||||
```
|
||||
|
||||
The value of this field should be an array of [Scratchpads](#types-Scratchpad).
|
||||
|
||||
|
||||
<a name="types-Connector"></a>
|
||||
### `Connector`
|
||||
|
|
@ -4579,6 +4631,40 @@ The table has the following fields:
|
|||
The value of this field should be a string.
|
||||
|
||||
|
||||
<a name="types-Scratchpad"></a>
|
||||
### `Scratchpad`
|
||||
|
||||
A pre-configured scratchpad whose program is launched at startup and parked
|
||||
in the scratchpad.
|
||||
|
||||
- Example:
|
||||
|
||||
```toml
|
||||
[[scratchpads]]
|
||||
name = "term"
|
||||
exec = "foot"
|
||||
```
|
||||
|
||||
Values of this type should be tables.
|
||||
|
||||
The table has the following fields:
|
||||
|
||||
- `name` (required):
|
||||
|
||||
The name of the scratchpad that the spawned window is parked in.
|
||||
|
||||
The value of this field should be a string.
|
||||
|
||||
- `exec` (optional):
|
||||
|
||||
The program to launch when the graphics are first initialized.
|
||||
|
||||
If omitted, no program is launched and the scratchpad is only created on
|
||||
demand by `send-to-scratchpad`.
|
||||
|
||||
The value of this field should be a [Exec](#types-Exec).
|
||||
|
||||
|
||||
<a name="types-SimpleActionName"></a>
|
||||
### `SimpleActionName`
|
||||
|
||||
|
|
@ -4702,6 +4788,10 @@ The string should have one of the following values:
|
|||
|
||||
Toggles the default scratchpad.
|
||||
|
||||
- `cycle-scratchpad`:
|
||||
|
||||
Cycles through the windows of the default scratchpad.
|
||||
|
||||
- `focus-parent`:
|
||||
|
||||
Focus the parent of the currently focused window.
|
||||
|
|
@ -5883,3 +5973,5 @@ The table has the following fields:
|
|||
The scaling mode of X windows.
|
||||
|
||||
The value of this field should be a [XScalingMode](#types-XScalingMode).
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -349,7 +349,8 @@ Action:
|
|||
description: |
|
||||
Sends the currently focused window to a scratchpad and hides it.
|
||||
|
||||
If `name` is omitted, the default scratchpad is used.
|
||||
A scratchpad can hold any number of windows. If `name` is omitted, the
|
||||
default scratchpad is used.
|
||||
|
||||
- Example:
|
||||
|
||||
|
|
@ -368,7 +369,8 @@ Action:
|
|||
|
||||
If the scratchpad has a visible window, that window is hidden. Otherwise, the
|
||||
most recently hidden window in the scratchpad is shown on the current workspace.
|
||||
If `name` is omitted, the default scratchpad is used.
|
||||
Only one window of a scratchpad is shown at a time, and scratchpad windows are
|
||||
always shown floating. If `name` is omitted, the default scratchpad is used.
|
||||
|
||||
- Example:
|
||||
|
||||
|
|
@ -381,6 +383,26 @@ Action:
|
|||
description: The name of the scratchpad.
|
||||
required: false
|
||||
kind: string
|
||||
cycle-scratchpad:
|
||||
description: |
|
||||
Cycles through the windows of a scratchpad, one at a time.
|
||||
|
||||
With no window shown, the first window is brought up. Each further invocation
|
||||
hides the current window and shows the next; after the last window the
|
||||
scratchpad is hidden again. Scratchpad windows are always shown floating.
|
||||
If `name` is omitted, the default scratchpad is used.
|
||||
|
||||
- Example:
|
||||
|
||||
```toml
|
||||
[shortcuts]
|
||||
alt-minus = { type = "cycle-scratchpad", name = "terminal" }
|
||||
```
|
||||
fields:
|
||||
name:
|
||||
description: The name of the scratchpad.
|
||||
required: false
|
||||
kind: string
|
||||
move-to-output:
|
||||
description: |
|
||||
Moves a workspace to a different output.
|
||||
|
|
@ -1116,6 +1138,8 @@ SimpleActionName:
|
|||
description: Sends the currently focused window to the default scratchpad.
|
||||
- value: toggle-scratchpad
|
||||
description: Toggles the default scratchpad.
|
||||
- value: cycle-scratchpad
|
||||
description: Cycles through the windows of the default scratchpad.
|
||||
- value: focus-parent
|
||||
description: Focus the parent of the currently focused window.
|
||||
- value: close
|
||||
|
|
@ -3286,6 +3310,61 @@ Config:
|
|||
required: false
|
||||
description: |
|
||||
Sets the egui settings of the compositor.
|
||||
scratchpads:
|
||||
kind: array
|
||||
items:
|
||||
ref: Scratchpad
|
||||
required: false
|
||||
description: |
|
||||
An array of pre-configured scratchpads.
|
||||
|
||||
Each entry launches a program when the graphics are first initialized and
|
||||
immediately parks its window in the named scratchpad. The window is captured
|
||||
via a unique tag attached to the spawned process, so other windows of the
|
||||
same application are never affected.
|
||||
|
||||
Use a `toggle-scratchpad` or `cycle-scratchpad` action to bring the windows
|
||||
up; they are always shown floating.
|
||||
|
||||
- Example:
|
||||
|
||||
```toml
|
||||
[[scratchpads]]
|
||||
name = "term"
|
||||
exec = "foot"
|
||||
|
||||
[[scratchpads]]
|
||||
name = "notes"
|
||||
exec = ["obsidian"]
|
||||
```
|
||||
|
||||
|
||||
Scratchpad:
|
||||
kind: table
|
||||
description: |
|
||||
A pre-configured scratchpad whose program is launched at startup and parked
|
||||
in the scratchpad.
|
||||
|
||||
- Example:
|
||||
|
||||
```toml
|
||||
[[scratchpads]]
|
||||
name = "term"
|
||||
exec = "foot"
|
||||
```
|
||||
fields:
|
||||
name:
|
||||
kind: string
|
||||
required: true
|
||||
description: The name of the scratchpad that the spawned window is parked in.
|
||||
exec:
|
||||
ref: Exec
|
||||
required: false
|
||||
description: |
|
||||
The program to launch when the graphics are first initialized.
|
||||
|
||||
If omitted, no program is launched and the scratchpad is only created on
|
||||
demand by `send-to-scratchpad`.
|
||||
|
||||
|
||||
Idle:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue