diff --git a/Cargo.lock b/Cargo.lock index 21c68a0..e590070 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -102,7 +102,7 @@ dependencies = [ [[package]] name = "merlin" -version = "2.2.4" +version = "2.2.5" dependencies = [ "clap", "ctrlc", diff --git a/Cargo.toml b/Cargo.toml index 039554c..5043304 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "merlin" -version = "2.2.4" +version = "2.2.5" authors = ["geremachek "] edition = "2021" diff --git a/src/commands/mod.rs b/src/commands/mod.rs index ca674b2..bd458d0 100644 --- a/src/commands/mod.rs +++ b/src/commands/mod.rs @@ -53,6 +53,7 @@ pub enum Command { Dub, Carve, Spellbook, + Protean, } impl FromStr for Command { @@ -107,6 +108,7 @@ impl FromStr for Command { "dub" => Ok(Command::Dub), "carve" => Ok(Command::Carve), "spellbook" => Ok(Command::Spellbook), + "protean" => Ok(Command::Protean), _ => Err(MerlinError::UnknownCommand), } } @@ -138,7 +140,7 @@ impl Command { Command::Nomen => all_with_min(1), // min of 1 Command::Spot | Command::Span | Command::Molecule | Command::Pen | Command::Orbit | Command::Pervert | Command::Decay | Command::Destroy | Command::Atom | Command::Scribe | Command::Adieu | Command::Carve | Command::Pin | Command::Columns | Command::Burn | Command::Volume | - Command::Volumes | Command::Carved | Command::Atoms | Command::Tether | Command::Stitch | Command::Fray => 0, + Command::Volumes | Command::Carved | Command::Atoms | Command::Tether | Command::Stitch | Command::Fray | Command::Protean => 0, Command::Focus | Command::Traverse | Command::Appear | Command::Shave | Command::Shelve | Command::Inscribe | Command::Trample | Command::Incant | Command::Summon | Command::Dub | Command::Spellbook | Command::Shift | Command::Infix | Command::Spine | Command::Merlin | Command::Disenchant | Command::Smash | Command::Decant | Command::Rune => 1, diff --git a/src/plane/mod.rs b/src/plane/mod.rs index 958029e..2d4fac2 100644 --- a/src/plane/mod.rs +++ b/src/plane/mod.rs @@ -77,7 +77,7 @@ impl Plane { fn push_volume(&mut self, v: Volume) { if self.volumes.is_empty() || self.current_volume == self.volumes.len()-1 { - self.volumes.push_back(v); + self.volumes.push_back(v) } else { self.volumes.insert(self.current_volume+1, v); } @@ -87,6 +87,7 @@ impl Plane { if self.volumes.len() > 1 { self.current_volume += 1; } + } } diff --git a/src/plane/parse.rs b/src/plane/parse.rs index 986a5cd..a89f140 100644 --- a/src/plane/parse.rs +++ b/src/plane/parse.rs @@ -156,6 +156,7 @@ impl Plane { Command::Volume => return ok_some(self.volume().to_string()), Command::Volumes => return ok_some(self.volumes.len().to_string()), Command::Atoms => return ok_some(self.stack.len().to_string()), + Command::Protean => return ok_some(self.protean()), _ => { // the following commands require buffers to be open if self.volumes.len() > 0 { // buffers / files are open let cvol = &mut self.volumes[self.current_volume]; // current volume diff --git a/src/plane/plane_commands.rs b/src/plane/plane_commands.rs index 3c155cc..3e1c245 100644 --- a/src/plane/plane_commands.rs +++ b/src/plane/plane_commands.rs @@ -113,5 +113,16 @@ impl Plane { .ok_or(MerlinError::UnknownNomen)? .join(" ")) } -} + // return a list of all defined nomens to the stack + + pub fn protean(&self) -> String { + let mut memory = String::new(); + + self.nomens + .keys() + .for_each(|nomen| { memory.push_str(nomen) ; memory.push_str("\n")}); + + return memory + } +}