//! The playground: cumulus itself, on copies of two sample documents (a //! garden, and the kitchen its portal leads to), in a fresh temporary //! folder. Trying things never changes the files in the repository, and //! cumulus's own folders (where you left off, backups, locks) are in there //! too, apart from your real ones. //! //! Run it with `cargo run --example canvas`. Everything works as in //! `cumulus`, files included: the copies are saved as you go, and the folder //! is printed when you quit, to look at them (or to change one while the //! playground runs, and watch it reload). use std::fs; use std::io; use cumulus::app::action::Message; use cumulus::app::startup::Opening; use cumulus::app::{App, load, run}; use cumulus::config::paths::Paths; use cumulus::config::settings::Settings; use cumulus::input::keymap::{DEFAULT_LEADER, Keymap}; fn main() -> io::Result<()> { let folder = std::env::temp_dir().join(format!("cumulus-playground-{}", std::process::id())); fs::create_dir_all(&folder)?; let (garden, kitchen) = (folder.join("garden.cum"), folder.join("kitchen.cum")); fs::write(&garden, include_str!("garden.cum"))?; fs::write(&kitchen, include_str!("kitchen.cum"))?; let opening = Opening { first: load(&garden).map_err(io::Error::other)?, others: vec![load(&kitchen).map_err(io::Error::other)?], message: Some(Message::info("the playground: copies of the samples, in a temporary folder")), }; let paths = Paths::inside(&folder.join("cumulus")); run(App::new(paths, Settings::default(), Keymap::new(DEFAULT_LEADER), opening))?; println!("The playground's files are in {}", folder.display()); Ok(()) }