summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/vtcol.rs40
1 files changed, 38 insertions, 2 deletions
diff --git a/src/vtcol.rs b/src/vtcol.rs
index 122b471..f12af09 100644
--- a/src/vtcol.rs
+++ b/src/vtcol.rs
@@ -2,6 +2,8 @@
pub mod lib;
+#[cfg(feature = "gui")] pub mod edit;
+
use vtcol::{Console, Fade, KbLedFlags, KbLedState, Palette, Scheme};
use anyhow::{anyhow, Result};
@@ -251,6 +253,8 @@ enum ColorJob
List,
/** Dump a scheme. */
Dump(Scheme),
+ /** Launch scheme editor. */
+ Edit(Option<String>, Scheme),
/** Switch to color scheme. */
Set(Scheme),
/** Get currently active scheme. */
@@ -267,6 +271,7 @@ impl Run for ColorJob
{
match self {
Self::Dump(scm) => Self::dump(scm),
+ Self::Edit(name, scm) => Self::edit(name, scm),
Self::List => Self::list(),
Self::Set(scm) => Self::set(console, scm),
Self::Get(b64) => Self::get(console, b64),
@@ -321,6 +326,25 @@ impl ColorJob
}
}
+ #[cfg(feature = "gui")]
+ fn edit(name: Option<String>, scm: Scheme) -> Result<()>
+ {
+ vrb!("Launching color scheme editor for scheme {}", scm);
+ let editor = crate::edit::Edit::new();
+
+ editor.run(name, scm)
+ }
+
+ #[cfg(not(feature = "gui"))]
+ fn edit(scm: Scheme) -> Result<()>
+ {
+ eprintln!(
+ "scheme editor not available; try recompiling vtcol with \
+ --features=gui!"
+ );
+ Err(anyhow!("editor not available"))
+ }
+
fn set(con: Option<String>, scheme: Scheme) -> Result<()>
{
let fd = open_console(con.as_deref())?;
@@ -801,9 +825,21 @@ impl<'a> Job
#[cfg(feature = "gui")]
if let Some(name) = subm.value_of("scheme") {
let scm = Scheme::from(name);
- Ok(Self(con, Subcmd::Colors(ColorJob::Dump(scm))))
+ Ok(Self(
+ con,
+ Subcmd::Colors(ColorJob::Edit(
+ Some(name.to_string()),
+ scm,
+ )),
+ ))
} else {
- todo!() /* generate generic name */
+ Ok(Self(
+ con,
+ Subcmd::Colors(ColorJob::Edit(
+ None,
+ Scheme::from("default"),
+ )),
+ ))
}
#[cfg(not(feature = "gui"))]
Err(anyhow!(