feat: add -c,--change
command
Signed-off-by: Christina Sørensen <christina@cafkafk.com>
This commit is contained in:
parent
da1e7bc912
commit
5419c2a93a
3 changed files with 48 additions and 2 deletions
2
Cargo.lock
generated
2
Cargo.lock
generated
|
@ -177,7 +177,7 @@ checksum = "c4cd1a83af159aa67994778be9070f0ae1bd732942279cabb14f86f986a21456"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "lir"
|
name = "lir"
|
||||||
version = "0.1.0"
|
version = "0.0.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"clap",
|
"clap",
|
||||||
"clap_complete",
|
"clap_complete",
|
||||||
|
|
|
@ -16,7 +16,14 @@ pub fn build_cli() -> Command {
|
||||||
.author(crate_authors!("\n"))
|
.author(crate_authors!("\n"))
|
||||||
//.arg(arg!(--init ... "Init config.yaml"))
|
//.arg(arg!(--init ... "Init config.yaml"))
|
||||||
.arg(
|
.arg(
|
||||||
arg!(-p --percentage [percentage] "Set brightness by percentage")
|
arg!(-p --percentage <percentage> "Set brightness by percentage.")
|
||||||
|
.required(false)
|
||||||
|
.value_parser(value_parser!(i32)),
|
||||||
|
)
|
||||||
|
.arg(
|
||||||
|
arg!(change: -c --change <change> "Change brightness by percentage.")
|
||||||
|
.required(false)
|
||||||
|
.allow_hyphen_values(true)
|
||||||
.value_parser(value_parser!(i32)),
|
.value_parser(value_parser!(i32)),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
39
src/main.rs
39
src/main.rs
|
@ -25,6 +25,18 @@ fn get_max_brightness() -> std::io::Result<i32> {
|
||||||
.expect("max brightnesss does not cleanly parse as i32"))
|
.expect("max brightnesss does not cleanly parse as i32"))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn get_current_brightness() -> std::io::Result<i32> {
|
||||||
|
let mut current_brightness_file =
|
||||||
|
File::open("/sys/class/backlight/intel_backlight/brightness")?;
|
||||||
|
let mut current_brightness_buffer = String::new();
|
||||||
|
// POP removes trailing newline
|
||||||
|
current_brightness_file.read_to_string(&mut current_brightness_buffer)?;
|
||||||
|
current_brightness_buffer.pop();
|
||||||
|
Ok(current_brightness_buffer
|
||||||
|
.parse::<i32>()
|
||||||
|
.expect("max brightnesss does not cleanly parse as i32"))
|
||||||
|
}
|
||||||
|
|
||||||
fn set_brightness_percentage(brightness: i32) -> std::io::Result<()> {
|
fn set_brightness_percentage(brightness: i32) -> std::io::Result<()> {
|
||||||
let percentage = (get_max_brightness().expect("max brightnesss does not cleanly parse as i32")
|
let percentage = (get_max_brightness().expect("max brightnesss does not cleanly parse as i32")
|
||||||
/ 100)
|
/ 100)
|
||||||
|
@ -37,6 +49,31 @@ fn set_brightness_percentage(brightness: i32) -> std::io::Result<()> {
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Changes the brightness by percentage relative to max brightness
|
||||||
|
fn change_brightness_percentage(brightness: i32) -> std::io::Result<()> {
|
||||||
|
let max_brightness = get_max_brightness()?;
|
||||||
|
let current_brightness = get_current_brightness()?;
|
||||||
|
let delta_brightness = (max_brightness / 100) * brightness.abs();
|
||||||
|
|
||||||
|
trace!("{}", delta_brightness);
|
||||||
|
trace!("{}", brightness);
|
||||||
|
trace!("{}", max_brightness);
|
||||||
|
trace!("{}", current_brightness);
|
||||||
|
|
||||||
|
let mut new_brightness = current_brightness + delta_brightness * brightness.signum();
|
||||||
|
|
||||||
|
if new_brightness > max_brightness {
|
||||||
|
new_brightness = max_brightness;
|
||||||
|
}
|
||||||
|
trace!("{}", new_brightness);
|
||||||
|
fs::write(
|
||||||
|
"/sys/class/backlight/intel_backlight/brightness",
|
||||||
|
new_brightness.to_string(),
|
||||||
|
)?;
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
fn main() -> std::io::Result<()> {
|
fn main() -> std::io::Result<()> {
|
||||||
pretty_env_logger::init();
|
pretty_env_logger::init();
|
||||||
|
|
||||||
|
@ -44,6 +81,8 @@ fn main() -> std::io::Result<()> {
|
||||||
|
|
||||||
if let Some(brightness) = matches.get_one::<i32>("percentage") {
|
if let Some(brightness) = matches.get_one::<i32>("percentage") {
|
||||||
set_brightness_percentage(*brightness)?;
|
set_brightness_percentage(*brightness)?;
|
||||||
|
} else if let Some(brightness) = matches.get_one::<i32>("change") {
|
||||||
|
change_brightness_percentage(*brightness)?;
|
||||||
} else {
|
} else {
|
||||||
set_brightness_percentage(
|
set_brightness_percentage(
|
||||||
get_max_brightness().expect("max brightnesss does not cleanly parse as i32"),
|
get_max_brightness().expect("max brightnesss does not cleanly parse as i32"),
|
||||||
|
|
Loading…
Reference in a new issue