#media #controller #unix-socket #窗口 #透明度 #套接字 #设置

bin+lib media-controller

与设置无关的媒体控制器

3 个不稳定版本

0.2.1 2024年1月3日
0.2.0 2024年1月3日
0.1.0 2024年1月2日

93可视化

MIT 许可证

150KB
559 代码行

媒体控制器

Crates.io Version

media-controller 提供一个始终位于顶部的具有透明度支持的 GTK-3 窗口,在相应地更改后立即显示当前的音量/亮度。

它使用 UNIX 套接字,因此如果在第一个实例运行时创建了另一个实例,它不会创建另一个窗口,而是简单地更新另一个实例的值,从而提供平滑的体验。

Demo

[演示中使用的选项:--color=#000000aa --font-description="BigBlueTerm437 Nerd Font Mono"]

media-controller v0.2.1
Nuno David <email@ndavd.com>

USAGE:
    media-controller [OPTIONS] v up|down|mute {number}
    media-controller [OPTIONS] b up|down {number}

OPTIONS:
Format --{option}={value}
    duration            Lifespan of the window in seconds. Default: 2
    width               Width of the window in px. Default: 300
    height              Height of the window in px. Default: 20
    bottom              Offset from the bottom of the screen in px. Default: 100
    color               Color of the window in hex (#RRGGBB or #RRGGBBAA). Default: "#000000FF"
    font-description    Font used. Default: "Monospace 13"
    filled              Filled character used in the progress bar. Default: ""
    half-filled         Half filled character used in the progress bar. Default: ""
    empty               Empty character used in the progress bar. Default: " "

为了在您的系统上运行它,只需创建一个新的 cargo 项目。添加库

cargo add media-controller

然后只需实现一些函数。您的 main.rs 应该看起来像这样

/// Should toggle mute.
fn toggle_mute() {
    todo!();
}
/// Should return whether it's muted.
fn get_mute() -> bool {
    todo!();
}
/// Should return the volume (0-100).
fn get_volume() -> u8 {
    todo!();
}
/// Should return the brightness (0-100).
fn get_brightness() -> u8 {
    todo!();
}
/// Should increment the volume. To decrement use a negative value.
fn inc_volume(value: i8) {
    todo!();
}
/// Should increment the brightness. To decrement use a negative value.
fn inc_brightness(value: i8) {
    todo!();
}
fn main() {
    /// Pass `Some` to use custom options.
    /// Pass `None` to manage them through command line arguments.
    let custom_controller = None;

    controller::MediaControllerApp {
        toggle_mute,
        get_mute,
        get_volume,
        get_brightness,
        inc_volume,
        inc_brightness,
        custom_controller,
    }
    .run();
}

一个具体的例子可以在 src/main.rs 中找到,这是一个使用 wpctlbrightnessctl 的 Linux 系统的示例。

media-controller 映射到媒体键特别有用。使用 sxhkd,它应该看起来像这样

# Volume Control
XF86AudioLowerVolume
  media-controller v down 5
XF86AudioRaiseVolume
  media-controller v up 5
XF86AudioMute
  media-controller v mute

# Brightness Control
XF86MonBrightnessDown
  media-controller b down 5
XF86MonBrightnessUp
  media-controller b up 5

依赖项

~17MB
~403K SLoC