2 个稳定版本
2.0.1 | 2024 年 5 月 11 日 |
---|---|
2.0.0 | 2024 年 3 月 27 日 |
1.0.0 |
|
0.0.7 |
|
0.0.4 |
|
#10 in #eww
15KB
230 行
hyprland-workspaces
一个支持多显示器的 Hyprland 工作区小部件。根据指定的显示器输出当前打开的工作区。设计用于与 Eww 一起使用,但可能与其他栏一起工作。与 hyprland-autoname-workspaces 兼容。
安装说明
依赖项
Arch Linux
Arch 用户可以使用您喜欢的包管理器从 AUR 安装。
pikaur -S hyprland-workspaces
NixOS
NixOS 用户可以使用 不稳定频道 尝试或安装该软件包。
nix-shell -p hyprland-workspaces
Crates.io
可以直接使用 cargo 从 crates.io 安装。
cargo install hyprland-workspaces
从源码构建
git clone https://github.com/FieldofClay/hyprland-workspaces.git
cd hyprland-workspaces
cargo build --release
使用方法
基本使用
将要跟踪的显示器的名称作为唯一参数传递。
./hyprland-workspaces eDP-1
如果您希望获取所有显示器上的所有工作区,请传递特殊参数 "ALL"。
./hyprland-workspaces ALL
然后跟踪该显示器(们),并将工作区详细信息以 JSON 格式输出到 stdout。
[{"active":false,"class":"workspace-button w1","id":1,"name":"1: "},{"active":false,"class":"workspace-button w2","id":2,"name":"2: "},{"active":true,"class":"workspace-button w4 workspace-active wa4","id":4,"name":"4: "}]
您可以通过运行
hyprctl monitors -j
它可以作为 Eww 中的工作区小部件使用,配置类似于以下。
(deflisten workspace0 "hyprland-workspaces `hyprctl monitors -j | jq -r \".[0].name\"`")
(deflisten workspace1 "hyprland-workspaces `hyprctl monitors -j | jq -r \".[1].name\"`")
(defwidget workspaces0 []
(eventbox :onscroll "hyprctl dispatch workspace `echo {} | sed 's/up/+/\' | sed 's/down/-/'`1"
(box :class "workspaces"
(for i in workspace0
(button
:onclick "hyprctl dispatch workspace ${i.id}"
:class "${i.class}"
"${i.name}")))))
(defwidget workspaces1 []
(eventbox :onscroll "hyprctl dispatch workspace `echo {} | sed 's/up/+/\' | sed 's/down/-/'`1"
(box :class "workspaces"
(for i in workspace1
(button
:onclick "hyprctl dispatch workspace ${i.id}"
:class "${i.class}"
"${i.name}")))))
(defwindow bar0 []
:monitor 0
(box
(workspaces0)
(other_widget)))
(defwindow bar1 []
:monitor 1
(box
(workspaces1)
(other_widget)))
高级使用
传递特殊参数 '_' 将输出所有工作区,包含在一个显示器数组的包装中。这允许只运行一个 hyprland-workspaces 实例并简化 eww 配置。
./hyprland-workspaces _
每个显示器将有一个子数组,称为 workspaces,它将输出与 hyprland-workspaces MONITORNAME
相同的信息。
[
{
"name": "eDP-1",
"workspaces": [
{"active": false,"class": "workspace-button w6","id": 6,"name": "6 []"}
]
},
{
"name": "DP-3",
"workspaces": [
{"active": false,"class": "workspace-button w1","id": 1,"name": "1 "},
{"active": true,"class": "workspace-button w3 workspace-active wa3","id": 3,"name": "3 "}
]
},
{
"name": "DP-4",
"workspaces": [
{"active": false,"class": "workspace-button w2","id": 2,"name": "2 "},
{"active": false,"class": "workspace-button w5","id": 5,"name": "5 "}
]
}
]
这有助于通过使用类似以下的方法来避免在 eww 配置中的重复。
(deflisten workspaces "hyprland-workspaces _")
(defwidget workspaceWidget [monitor]
(eventbox :onscroll "hyprctl dispatch workspace `echo {} | sed 's/up/+/\' | sed 's/down/-/'`1"
(box :class "workspaces"
(for i in {workspaces[monitor].workspaces}
(button
:onclick "hyprctl dispatch workspace ${i.id}"
:class "${i.class}"
"${i.name}")))))
(defwidget bar0 []
(box
(workspaceWidget :monitor 0)
)
)
(defwidget bar1 []
(box
(workspaceWidget :monitor 1)
)
)
类
以下类被输出,以提供多种主题化工作区小部件的选项。
workspace-button
:所有工作区都将具有此类workspace-active
:只有活动工作区将具有此类。如果工作区处于活动状态但焦点在另一个显示器上,则不会存在。w<WORKSPACEID>
:每个工作空间都将具有此类,以允许每个工作空间有独特的CSS。wa<WORKSPACEID>
:当工作空间处于活动状态时,将具有此类以允许每个工作空间有独特的CSS,类似于workspace-active
,当焦点在其他显示器上时,此元素不会显示。
依赖项
~8–19MB
~236K SLoC