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) 中,它只发送一次,在状态命令进程的开始处。
支持的信号
目前支持以下操作系统信号
SIGALRMSIGCHLDSIGCONTSIGHUPSIGINTSIGIOSIGPIPESIGQUITSIGSTOPSIGTERMSIGUSR1SIGUSR2SIGWINCH
安全考虑
根据其配置文件定义,smolbar 以其固有的方式执行任意代码。
如果攻击者可以写入配置文件,或者写入定义为其命令的任何文件,则攻击者可以执行任意代码(立即执行或当配置重新加载时执行)。
防止这种情况是 您的责任。确保没有其他用户被授予配置或其命令的写权限是个好主意。然而,您采取的措施将 取决于您的具体情况。
贡献
欢迎和赞赏提交票据和改进!您可以在 GitLab 上的 问题跟踪器 找到。
贡献将根据 smolbar 相同的许可证授权。
许可证
smolbar 授权根据 GNU 通用公共许可证 v3.0 或更高版本。
有关完整的许可证文本,请参阅 LICENSE。
依赖关系
~7-19MB
~215K SLoC