16 个版本
0.8.4 | 2023 年 12 月 22 日 |
---|---|
0.8.2 | 2023 年 7 月 29 日 |
0.7.3 | 2023 年 3 月 23 日 |
0.6.1 | 2022 年 12 月 19 日 |
0.6.0 | 2022 年 11 月 2 日 |
在 命令行工具 中排名 #91
每月下载 53 次
62KB
1.5K SLoC
smolbar
smolbar
是 sway 的 smol 状态命令。
安装
smolbar
在 crates.io 上!
$ cargo install --locked smolbar
使用方法
确保 smolbar
已安装并在您的 $PATH
中。在 sway 配置中,使用 smolbar
调用 bar
子命令的 status_command
。
bar {
status_command smolbar
# the rest of your bar config
}
心智模型
smolbar
履行由 swaybar-protocol(7)
描述的角色[^1]。用户通过其配置文件控制 smolbar
的行为。请注意,其可配置行为是协议中概述行为的超集。
[^1]: 如果您在配置或理解 smolbar
时遇到问题,阅读此手册页是个好主意。
块
块是可刷新内容的基本单位。该内容的结构由协议中的 Body
JSON 对象定义,并包含额外的信息以便使用。为了动态更新,块需要同时具有“内容来源”(即内容来源)和“何时更新内容”(即何时刷新内容)。
“内容来源”通过为块提供要执行的命令来实现。整个 Body
JSON 对象用该命令的输出填充。
“何时更新内容”目前有两种实现方式:周期性间隔和操作系统信号。这意味着块的内容会在计时器上刷新,并且每当 smolbar
收到特定信号时。
请参阅 本地作用域配置。
栏
栏是块的所有者[^2]。smolbar
的核心行为是当块有新内容时发送栏的块。
条形图还负责响应 cont_signal
和 stop_signal
,它通过 Header
JSON 对象(也来自协议)发送这些信号。如果接收到 stop_signal
,则 smolbar
将按照规范优雅地关闭。在接收到 cont_signal
后,smolbar
将重新加载其配置。请注意,smolbar
为 cont_signal
赋予了新的含义,因为协议中描述的含义并不特别适用。
[^2]: 在代码库之外,“bar” 并不是一个非常有用的抽象,可以将其视为 smolbar
本身。
配置
smolbar
通过 TOML 文件进行配置。
如果没有指定作为参数的 --config
,则 smolbar
会查找位于 $XDG_CONFIG_HOME/smolbar
或 $HOME/.config/smolbar
的名为 config.toml
的文件。
配置的示例 可用。
头部
首次发送给 sway 的 Header
(由 swaybar-protocol(7)
定义)可以在 header
TOML 表中进行配置。它直接继承自 Header
的所有键。
[header]
cont_signal = "SIGCONT" # default value, as per swaybar-protocol(7)
stop_signal = "SIGINT"
块
可以在三个范围内定义块的内容和行为。
- “全局”范围优先级最低,但适用于所有块。
- “本地”范围按块定义。
- “立即”范围优先级最高,按块定义,但由块的命令定义。
这意味着全局和本地范围可用于为 Body
属性提供默认值,而立即范围对属性更改很有用。
[^3]: “块的 内容”指的是 swaybar-protocol(7)
定义的 Body
JSON 对象属性的超集。更多关于此的信息可以在 心智模型 部分找到。
全局范围
全局范围在配置文件的根级别进行配置。
键 | 类型 | 描述 |
---|---|---|
command_dir | 字符串 | 设置要执行 command (在本地范围中定义)的目录 |
smolbar_version | 字符串 | 需要当前 smolbar 版本以满足给定的版本要求(根据 Cargo 的语义版本控制风格 解析) |
全局范围还继承自 swaybar-protocol(7)
定义的 Body
JSON 对象的所有属性。
例如
# global
full_text = "only visible if no other scopes define full_text"
[[block]]
# local
full_text = "never see global full_text"
本地范围
所有本地范围都是 block
数组中的表。
键 | 类型 | 描述 |
---|---|---|
command | 字符串 | 为新的内容执行命令的完整路径[^4] |
prefix | 字符串 | 前缀 full_text |
postfix | 字符串 | 附加到 full_text |
interval | 数字 | 周期刷新块的时间间隔,单位为秒 |
信号 | 字符串 | 当接收到该操作系统信号时刷新块的信号名 |
本地作用域继承自 Body
的所有其他键。
例如
[[block]]
# this block displays the date every second
command = "date" # assuming date coreutil is in $PATH
prefix = "Today is "
interval = 1
[^4]: 刷新不会干扰命令的执行,它会等待命令完成。
立即作用域
执行的 command
(在本地作用域中定义)的每行标准输出都会按顺序解析为 Body
属性。顺序与在 swaybar-protocol(7)
中出现顺序相同。
例如,假设以下脚本是一个块的命令
# interpreted as `full_text`
echo 'amazing status information'
# interpreted as `short_text`
echo 'short info'
# interpreted as `color`
echo '#ff0000'
热插拔
smolbar
对 cont_signal
的响应是通过重新加载其配置。
这意味着默认情况下,向 smolbar
的进程发送 SIGCONT
信号将导致其热插拔配置。
[header]
# cont_signal is SIGCONT by default, as per swaybar-protocol(7)
$ pkill -SIGCONT smolbar
# causes smolbar to reload config
cont_signal
也可以配置。
[header]
cont_signal = "SIGUSR1"
$ pkill -SIGUSR1 smolbar
# causes smolbar to reload config
注意,在运行时不能重新配置标题。这是因为在 swaybar-protocol(7)
中,它只发送一次,在状态命令进程的开始处。
支持的信号
目前支持以下操作系统信号
SIGALRM
SIGCHLD
SIGCONT
SIGHUP
SIGINT
SIGIO
SIGPIPE
SIGQUIT
SIGSTOP
SIGTERM
SIGUSR1
SIGUSR2
SIGWINCH
安全考虑
根据其配置文件定义,smolbar
以其固有的方式执行任意代码。
如果攻击者可以写入配置文件,或者写入定义为其命令的任何文件,则攻击者可以执行任意代码(立即执行或当配置重新加载时执行)。
防止这种情况是 您的责任。确保没有其他用户被授予配置或其命令的写权限是个好主意。然而,您采取的措施将 取决于您的具体情况。
贡献
欢迎和赞赏提交票据和改进!您可以在 GitLab 上的 问题跟踪器 找到。
贡献将根据 smolbar
相同的许可证授权。
许可证
smolbar
授权根据 GNU 通用公共许可证 v3.0 或更高版本。
有关完整的许可证文本,请参阅 LICENSE。
依赖关系
~7-19MB
~215K SLoC