riccardo-enr/playbar
GitHub: riccardo-enr/playbar
这是一个 VSCode 扩展,通过 MPRIS 在状态栏显示当前播放的音乐信息,解决开发者在编码时需要切换窗口查看播放状态的不便。
Stars: 0 | Forks: 0
# ext.
[](https://github.com/riccardo-enr/playbar/actions/workflows/build.yml)
[](https://github.com/riccardo-enr/playbar/actions/workflows/docs.yml)
[](https://github.com/riccardo-enr/playbar/releases/latest)
[](LICENSE)
[](#install)
[](https://code.visualstudio.com/)
VSCode 状态栏扩展,可镜像 `tmux-powerline` 的音乐片段。
一个小的 Rust 侧边服务 (`playbar-sidecar/`) 通过 D-Bus 与 MPRIS 通信,并发送 NDJSON;一个轻薄的 TypeScript 扩展 (`extension/`) 负责渲染结果。
完整文档:
(源代码位于 [`docs/`](docs/))。
## 安装
从[发行页面](https://github.com/riccardo-enr/playbar/releases)获取最新的 `.vsix` 文件并安装:
```
code --install-extension playbar-X.Y.Z.vsix
```
侧边服务二进制文件已捆绑在 VSIX 内,因此无需单独构建步骤。若要指向一个已检出的调试二进制文件,请在您的 VSCode 设置中设置 `playbar.sidecarPath`。
## 布局
```
playbar-sidecar/ Rust sidecar (the OS-facing binary)
extension/ VSCode extension shim (TypeScript)
```
## 构建
```
# 2. Sidecar: In computing, "sidecar" is often a term used in architecture patterns, like sidecar container in Kubernetes. It might be kept in English. Translated, it could be "边车" in Chinese, but in technical jargon, it's often kept in English. Based on the instruction, I should keep it in English. But again, I need to output a translation. Perhaps I should provide the Chinese equivalent while noting the English term. But the output should be the translation itself.
cd playbar-sidecar
cargo build --release
# From the examples: 'API Reference' -> 'API 参考', so the translation includes the English acronym 'API' and the Chinese word '参考'. Similarly, for 'Kubernetes Setup', it's 'Kubernetes 设置'.
cd ../extension
npm install
npm run compile
# So, for headings that are compound terms, I translate the non-technical parts and keep the technical parts in English.
mkdir -p bin/linux-x64
cp ../playbar-sidecar/target/release/playbar bin/linux-x64/
```
要运行此扩展,请在 VSCode 中打开 `extension/` 并按 F5 (扩展开发主机)。如果您更希望指向一个已检出的调试二进制文件,请在设置中覆盖 `playbar.sidecarPath`。
## 配置
`playbar.format` 接受一个包含以下占位符的模板字符串:
| 令牌 | 渲染内容 |
|--------------|------------------------------------------------------------------|
| `{playerIcon}` | 活动 MPRIS 播放器的 Codicon 图标(参见下方“播放器图标”) |
| `{artist}` | 音轨艺术家 |
| `{title}` | 音轨标题 |
| `{album}` | 专辑名称 |
| `{position}` | 当前播放位置,`mm:ss`(或超过一小时的 `h:mm:ss`) |
| `{length}` | 音轨时长,格式与 `{position}` 相同 |
| `{player}` | MPRIS 播放器标识符(例如 `spotify`) |
| `{status}` | 原始状态字符串(`playing` / `paused` / `stopped` / `none`) |
缺失的字段渲染为空,相邻的 ` - ` 分隔符会折叠。因此,像 `"{playerIcon} {artist} - {title} [{position}/{length}]"` 这样的格式在播放器未提供位置或专辑元数据时也能优雅降级。
### 播放器图标
`{playerIcon}` 通过合并映射(内置默认值 + 用户设置 `playbar.playerIcons`)解析。键是 MPRIS 总线后缀 (`state.player`);值是 codicon 字符串。
内置默认值:
| 播放器 | Codicon |
|-------------|------------------------|
| `spotify` | `$(music)` |
| `firefox` | `$(globe)` |
| `vlc` | `$(device-camera-video)` |
| `mpv` | `$(play-circle)` |
| `chromium` | `$(globe)` |
| `google-chrome` | `$(globe)` |
| `brave` | `$(globe)` |
| `audacious` | `$(music)` |
| `rhythmbox` | `$(music)` |
一些播放器(Firefox、Chromium)暴露的后缀类似于 `firefox.instance_1_84`。查找会回退到第一个点之前的前缀,因此 `firefox.*` 会通过 `firefox` 条目解析。要覆盖或添加条目:
```
"playbar.playerIcons": {
"spotify": "$(megaphone)",
"amberol": "$(music)"
}
```
### 自动隐藏
两个宽限期设置可在没有活动播放时保持状态栏整洁。两者均默认为 `0`(禁用)。
- `playbar.hidePausedAfterSeconds` — 当播放器暂停指定秒数后隐藏。播放恢复后状态栏会立即重新出现。
- `playbar.hideIdleAfterSeconds` — 当播放器停止时,逻辑相同。
### 跑马灯
当渲染的文本宽度超过 `playbar.maxLength` 时,默认使用省略号截断。将 `playbar.marquee.enabled` 设置为 `true` 可改为滚动文本。根据您的喜好调整 `marquee.speedMs`、`marquee.pauseEndsMs` 和 `marquee.gap` — 默认值请参见[配置页面](docs/configuration.qmd)。
### 悬停工具提示
将鼠标悬停在状态栏项目上可显示封面图片(如果播放器提供)、音轨标题,以及专辑名称(当可用时,会附带发行年份的括号)。
## 独立使用
侧边服务本身也很有用:
```
playbar --once # one JSON snapshot, then exit
playbar # event stream on stdout
echo next | playbar # control via stdin (also accepts JSON)
playbar --player spotify # restrict to a specific player
```
标签:D-Bus, MPRIS, Rust, SOC Prime, tmux-powerline, tmux 音乐状态, TypeScript, VSCode 扩展, VSCode 状态栏音乐扩展, 可视化界面, 媒体播放器状态显示, 媒体播放器集成, 安全插件, 实时状态显示, 开发工具, 状态栏, 系统集成, 编辑器扩展, 网络流量审计, 自动化攻击, 进程间通信, 音乐显示