diff options
Diffstat (limited to 'src/poem/anthology')
-rw-r--r-- | src/poem/anthology/alias.rs | 24 | ||||
-rw-r--r-- | src/poem/anthology/source.rs | 10 |
2 files changed, 22 insertions, 12 deletions
diff --git a/src/poem/anthology/alias.rs b/src/poem/anthology/alias.rs index 96682db..0183ec2 100644 --- a/src/poem/anthology/alias.rs +++ b/src/poem/anthology/alias.rs @@ -10,7 +10,7 @@ use std::collections::HashMap; /// ```sh /// alias vim=nvim /// ``` -pub fn incant(verse: &Verse, aliases: &mut HashMap<String, String>) -> i32 { +pub fn incant(verse: &Verse, out: &mut String, aliases: &mut HashMap<String, String>) -> i32 { match verse.clause() { Some(clause) => { for stanza in clause { @@ -22,18 +22,26 @@ pub fn incant(verse: &Verse, aliases: &mut HashMap<String, String>) -> i32 { } } None => { + let mut lines = Vec::new(); for (key, val) in aliases { - if key.contains(' ') && val.contains(' ') { - println!("'{}'='{}'", key, val); + let line = if key.contains(' ') && val.contains(' ') { + format!("'{}'='{}'", key, val) } else if key.contains(' ') { - println!("'{}'={}", key, val); + format!("'{}'={}", key, val) } else if val.contains(' ') { - println!("{}='{}'", key, val); + format!("{}='{}'", key, val) } else if val.is_empty() { - println!("{}=''", key); + format!("{}=''", key) } else { - println!("{}={}", key, val); - } + format!("{}={}", key, val) + }; + lines.push(line); + } + + if verse.couplet { + *out = lines.join("\n"); + } else { + println!("{}", lines.join("\n")); } } } diff --git a/src/poem/anthology/source.rs b/src/poem/anthology/source.rs index ed4ed13..77d1330 100644 --- a/src/poem/anthology/source.rs +++ b/src/poem/anthology/source.rs @@ -12,7 +12,7 @@ use std::fs; /// ```sh /// source ~/.dwvshrc /// ``` -pub fn incant(verse: &Verse, env: &mut Environment) -> i32 { +pub fn incant(verse: &Verse, out: &mut String, env: &mut Environment) -> i32 { let files = match verse.clause() { Some(clause) => clause, None => { @@ -42,13 +42,15 @@ pub fn incant(verse: &Verse, env: &mut Environment) -> i32 { } }; - match poem.recite(env, None) { - Ok(_) => {} + let stdout = if verse.couplet { Some(true) } else { None }; + + *out = match poem.recite(env, stdout) { + Ok(out) => out, Err(e) => { eprintln!("dwvsh: {}", e.to_string().to_lowercase()); continue; } - } + }; } 0 |