From f1ec00a1c9a24c0738fb5d5ac309d6af16e67415 Mon Sep 17 00:00:00 2001 From: Jacob <53652728+RegenJacob@users.noreply.github.com> Date: Wed, 20 Mar 2024 11:45:08 +0000 Subject: [PATCH] add get_env function to yuck (#779) * added basic get_env function to yuck * added get_env to changelog * added get_env to docs * changed key to string in doc * changed suggested code * credit myself in CHANGELOG.md --- CHANGELOG.md | 1 + crates/simplexpr/src/eval.rs | 7 +++++++ docs/src/expression_language.md | 17 +++++++++-------- 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 768bd1950..bc4409fdd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,7 @@ All notable changes to eww will be listed here, starting at changes since versio - Remove `eww windows` command, replace with `eww active-windows` and `eww list-windows` ### Features +- Add `get_env` function (By: RegenJacob) - Add `:namespace` window option - Default to building with x11 and wayland support simultaneously - Add `truncate-left` property on `label` widgets (By: kawaki-san) diff --git a/crates/simplexpr/src/eval.rs b/crates/simplexpr/src/eval.rs index 02b047d5b..cad180d8b 100644 --- a/crates/simplexpr/src/eval.rs +++ b/crates/simplexpr/src/eval.rs @@ -313,6 +313,13 @@ impl SimplExpr { fn call_expr_function(name: &str, args: Vec) -> Result { match name { + "get_env" => match args.as_slice() { + [var_name] => { + let var = std::env::var(var_name.as_string()?).unwrap_or_default(); + Ok(DynVal::from(var)) + } + _ => Err(EvalError::WrongArgCount(name.to_string())), + }, "round" => match args.as_slice() { [num, digits] => { let num = num.as_f64()?; diff --git a/docs/src/expression_language.md b/docs/src/expression_language.md index 574e8e569..15dfc6eda 100644 --- a/docs/src/expression_language.md +++ b/docs/src/expression_language.md @@ -51,11 +51,12 @@ Supported currently are the following features: - `arraylength(value)`: Gets the length of the array - `objectlength(value)`: Gets the amount of entries in the object - `jq(value, jq_filter_string)`: run a [jq](https://stedolan.github.io/jq/manual/) style command on a json value. (Uses [jaq](https://crates.io/crates/jaq) internally). - - `formattime(unix_timestamp, format_str, timezone)`: Gets the time in a given format from UNIX timestamp. - Check [chrono's documentation](https://docs.rs/chrono/latest/chrono/format/strftime/index.html) for more - information about format string and [chrono-tz's documentation](https://docs.rs/chrono-tz/latest/chrono_tz/enum.Tz.html) - for available time zones. - - `formattime(unix_timestamp, format_str)`: Gets the time in a given format from UNIX timestamp. - Same as other `formattime`, but does not accept timezone. Instead, it uses system's local timezone. - Check [chrono's documentation](https://docs.rs/chrono/latest/chrono/format/strftime/index.html) for more - information about format string. + - `get_env(string)`: Gets the specified enviroment variable + - `formattime(unix_timestamp, format_str, timezone)`: Gets the time in a given format from UNIX timestamp. + Check [chrono's documentation](https://docs.rs/chrono/latest/chrono/format/strftime/index.html) for more + information about format string and [chrono-tz's documentation](https://docs.rs/chrono-tz/latest/chrono_tz/enum.Tz.html) + for available time zones. + - `formattime(unix_timestamp, format_str)`: Gets the time in a given format from UNIX timestamp. + Same as other `formattime`, but does not accept timezone. Instead, it uses system's local timezone. + Check [chrono's documentation](https://docs.rs/chrono/latest/chrono/format/strftime/index.html) for more + information about format string.