Auto merge of #54 - matthiasbeyer:colored-output, r=matthiasbeyer
Colored output Closes #38
This commit is contained in:
commit
31c1cf078b
6 changed files with 50 additions and 50 deletions
33
Cargo.lock
generated
33
Cargo.lock
generated
|
@ -2,6 +2,7 @@
|
||||||
name = "imag"
|
name = "imag"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
|
"ansi_term 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"chrono 0.2.16 (registry+https://github.com/rust-lang/crates.io-index)",
|
"chrono 0.2.16 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"clap 1.4.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
"clap 1.4.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"config 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
"config 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
@ -12,10 +13,8 @@ dependencies = [
|
||||||
"open 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"open 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"prettytable-rs 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"prettytable-rs 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"regex 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)",
|
"regex 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"rustty 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)",
|
|
||||||
"serde 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
"serde 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"serde_json 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"serde_json 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"term 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)",
|
|
||||||
"term_grid 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
"term_grid 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"url 0.2.37 (registry+https://github.com/rust-lang/crates.io-index)",
|
"url 0.2.37 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"uuid 0.1.18 (registry+https://github.com/rust-lang/crates.io-index)",
|
"uuid 0.1.18 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
@ -43,6 +42,11 @@ name = "ansi_term"
|
||||||
version = "0.6.3"
|
version = "0.6.3"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "ansi_term"
|
||||||
|
version = "0.7.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "bitflags"
|
name = "bitflags"
|
||||||
version = "0.3.2"
|
version = "0.3.2"
|
||||||
|
@ -114,11 +118,6 @@ dependencies = [
|
||||||
"winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
"winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "lazy_static"
|
|
||||||
version = "0.1.15"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "libc"
|
name = "libc"
|
||||||
version = "0.1.10"
|
version = "0.1.10"
|
||||||
|
@ -145,15 +144,6 @@ dependencies = [
|
||||||
"libc 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
|
"libc 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "nix"
|
|
||||||
version = "0.4.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
dependencies = [
|
|
||||||
"bitflags 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
|
||||||
"libc 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "nom"
|
name = "nom"
|
||||||
version = "0.3.11"
|
version = "0.3.11"
|
||||||
|
@ -212,17 +202,6 @@ name = "rustc-serialize"
|
||||||
version = "0.3.16"
|
version = "0.3.16"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "rustty"
|
|
||||||
version = "0.1.9"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
dependencies = [
|
|
||||||
"lazy_static 0.1.15 (registry+https://github.com/rust-lang/crates.io-index)",
|
|
||||||
"libc 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
|
|
||||||
"nix 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
|
||||||
"term 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "serde"
|
name = "serde"
|
||||||
version = "0.6.1"
|
version = "0.6.1"
|
||||||
|
|
|
@ -22,11 +22,10 @@ serde = "0.6.1"
|
||||||
serde_json = "0.6.0"
|
serde_json = "0.6.0"
|
||||||
|
|
||||||
clap = { version = "1.4.5", features = ["yaml"] }
|
clap = { version = "1.4.5", features = ["yaml"] }
|
||||||
rustty = "0.1.9"
|
|
||||||
term = "0.2.12"
|
|
||||||
term_grid = "0.1.2"
|
term_grid = "0.1.2"
|
||||||
prettytable-rs = "0.4.0"
|
prettytable-rs = "0.4.0"
|
||||||
open = "1.1.0"
|
open = "1.1.0"
|
||||||
itertools = "0.4.5"
|
itertools = "0.4.5"
|
||||||
hoedown = "3.0.3"
|
hoedown = "3.0.3"
|
||||||
|
ansi_term = "0.7.1"
|
||||||
|
|
||||||
|
|
|
@ -11,6 +11,7 @@ extern crate url;
|
||||||
extern crate config;
|
extern crate config;
|
||||||
extern crate open;
|
extern crate open;
|
||||||
extern crate itertools;
|
extern crate itertools;
|
||||||
|
extern crate ansi_term;
|
||||||
|
|
||||||
pub use cli::CliConfig;
|
pub use cli::CliConfig;
|
||||||
pub use configuration::Configuration;
|
pub use configuration::Configuration;
|
||||||
|
@ -30,6 +31,8 @@ pub use module::bm::BM;
|
||||||
pub use module::notes::Notes;
|
pub use module::notes::Notes;
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
|
use ansi_term::Colour::Yellow;
|
||||||
|
|
||||||
let yaml = load_yaml!("../etc/cli.yml");
|
let yaml = load_yaml!("../etc/cli.yml");
|
||||||
let app = App::from_yaml(yaml);
|
let app = App::from_yaml(yaml);
|
||||||
let config = CliConfig::new(app);
|
let config = CliConfig::new(app);
|
||||||
|
@ -52,5 +55,5 @@ fn main() {
|
||||||
_ => false,
|
_ => false,
|
||||||
};
|
};
|
||||||
|
|
||||||
info!("Module execution ended with {}", res);
|
info!("{}", Yellow.paint(format!("Module execution ended with {}", res)));
|
||||||
}
|
}
|
||||||
|
|
|
@ -38,6 +38,7 @@ impl<'a> BM<'a> {
|
||||||
* Subcommand: add
|
* Subcommand: add
|
||||||
*/
|
*/
|
||||||
fn command_add(&self, matches: &ArgMatches) -> bool {
|
fn command_add(&self, matches: &ArgMatches) -> bool {
|
||||||
|
use ansi_term::Colour::{Green, Yellow, Red};
|
||||||
use std::process::exit;
|
use std::process::exit;
|
||||||
use self::header::build_header;
|
use self::header::build_header;
|
||||||
|
|
||||||
|
@ -69,7 +70,7 @@ impl<'a> BM<'a> {
|
||||||
.store()
|
.store()
|
||||||
.load(self, &parser, &fileid)
|
.load(self, &parser, &fileid)
|
||||||
.map(|file| {
|
.map(|file| {
|
||||||
info!("Created file in memory: {}", fileid);
|
info!("{}", Yellow.paint(format!("Created file in memory: {}", fileid)));
|
||||||
self.rt
|
self.rt
|
||||||
.store()
|
.store()
|
||||||
.persist(&parser, file)
|
.persist(&parser, file)
|
||||||
|
@ -77,9 +78,9 @@ impl<'a> BM<'a> {
|
||||||
.unwrap_or(false);
|
.unwrap_or(false);
|
||||||
|
|
||||||
if result {
|
if result {
|
||||||
info!("Adding worked");
|
info!("{}", Red.paint("Adding worked"));
|
||||||
} else {
|
} else {
|
||||||
info!("Adding failed");
|
info!("{}", Green.paint("Adding failed"));
|
||||||
}
|
}
|
||||||
|
|
||||||
result
|
result
|
||||||
|
@ -156,6 +157,7 @@ impl<'a> BM<'a> {
|
||||||
* Subcommand: open
|
* Subcommand: open
|
||||||
*/
|
*/
|
||||||
fn command_open(&self, matches: &ArgMatches) -> bool {
|
fn command_open(&self, matches: &ArgMatches) -> bool {
|
||||||
|
use ansi_term::Colour::{Green, Yellow, Red};
|
||||||
use open;
|
use open;
|
||||||
|
|
||||||
let parser = Parser::new(JsonHeaderParser::new(None));
|
let parser = Parser::new(JsonHeaderParser::new(None));
|
||||||
|
@ -175,10 +177,10 @@ impl<'a> BM<'a> {
|
||||||
let f = file.deref().borrow();
|
let f = file.deref().borrow();
|
||||||
get_url_from_header(f.header()).map(|url| {
|
get_url_from_header(f.header()).map(|url| {
|
||||||
if open::that(&url[..]).is_ok() {
|
if open::that(&url[..]).is_ok() {
|
||||||
info!("open({})", url);
|
info!("{}", Green.paint(format!("open({})", url)));
|
||||||
true
|
true
|
||||||
} else {
|
} else {
|
||||||
info!("could not open({})", url);
|
info!("{}", Red.paint(format!("could not open({})", url)));
|
||||||
false
|
false
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
@ -194,8 +196,8 @@ impl<'a> BM<'a> {
|
||||||
});
|
});
|
||||||
|
|
||||||
let (succ, fail) = result;
|
let (succ, fail) = result;
|
||||||
info!("open() succeeded for {} files", succ);
|
info!("{}", Green.paint(format!("open() succeeded for {} files", succ)));
|
||||||
info!("open() failed for {} files", fail);
|
info!("{}", Red.paint(format!( "open() failed for {} files", fail)));
|
||||||
return fail == 0;
|
return fail == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -203,6 +205,8 @@ impl<'a> BM<'a> {
|
||||||
* Subcommand: remove
|
* Subcommand: remove
|
||||||
*/
|
*/
|
||||||
fn command_remove(&self, matches: &ArgMatches) -> bool {
|
fn command_remove(&self, matches: &ArgMatches) -> bool {
|
||||||
|
use ansi_term::Colour::{Green, Yellow, Red};
|
||||||
|
|
||||||
let parser = Parser::new(JsonHeaderParser::new(None));
|
let parser = Parser::new(JsonHeaderParser::new(None));
|
||||||
|
|
||||||
let filter = {
|
let filter = {
|
||||||
|
@ -233,8 +237,8 @@ impl<'a> BM<'a> {
|
||||||
|
|
||||||
let (worked, failed) = result;
|
let (worked, failed) = result;
|
||||||
|
|
||||||
info!("Removing succeeded for {} files", worked);
|
info!("{}", Green.paint(format!("Removing succeeded for {} files", worked)));
|
||||||
info!("Removing failed for {} files", failed);
|
info!("{}", Red.paint(format!( "Removing failed for {} files", failed)));
|
||||||
|
|
||||||
return failed == 0;
|
return failed == 0;
|
||||||
}
|
}
|
||||||
|
@ -291,6 +295,8 @@ impl<'a> BM<'a> {
|
||||||
impl<'a> Module<'a> for BM<'a> {
|
impl<'a> Module<'a> for BM<'a> {
|
||||||
|
|
||||||
fn exec(&self, matches: &ArgMatches) -> bool {
|
fn exec(&self, matches: &ArgMatches) -> bool {
|
||||||
|
use ansi_term::Colour::{Green, Yellow, Red};
|
||||||
|
|
||||||
match matches.subcommand_name() {
|
match matches.subcommand_name() {
|
||||||
Some("add") => {
|
Some("add") => {
|
||||||
self.command_add(matches.subcommand_matches("add").unwrap())
|
self.command_add(matches.subcommand_matches("add").unwrap())
|
||||||
|
@ -321,7 +327,7 @@ impl<'a> Module<'a> for BM<'a> {
|
||||||
},
|
},
|
||||||
|
|
||||||
Some(_) | None => {
|
Some(_) | None => {
|
||||||
info!("No command given, doing nothing");
|
info!("{}", Red.bold().paint("No command given, doing nothing"));
|
||||||
false
|
false
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,6 +34,7 @@ impl<'a> Notes<'a> {
|
||||||
|
|
||||||
fn command_add(&self, matches: &ArgMatches) -> bool {
|
fn command_add(&self, matches: &ArgMatches) -> bool {
|
||||||
use std::process::exit;
|
use std::process::exit;
|
||||||
|
use ansi_term::Colour::Yellow;
|
||||||
use self::header::build_header;
|
use self::header::build_header;
|
||||||
use ui::external::editor::let_user_provide_content;
|
use ui::external::editor::let_user_provide_content;
|
||||||
|
|
||||||
|
@ -57,13 +58,14 @@ impl<'a> Notes<'a> {
|
||||||
.store()
|
.store()
|
||||||
.load(self, &parser, &fileid)
|
.load(self, &parser, &fileid)
|
||||||
.and_then(|file| {
|
.and_then(|file| {
|
||||||
info!("Created file in memory: {}", fileid);
|
info!("{}", Yellow.paint(format!("Created file in memory: {}", fileid)));
|
||||||
Some(self.rt.store().persist(&parser, file))
|
Some(self.rt.store().persist(&parser, file))
|
||||||
})
|
})
|
||||||
.unwrap_or(false)
|
.unwrap_or(false)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn command_edit(&self, matches: &ArgMatches) -> bool {
|
fn command_edit(&self, matches: &ArgMatches) -> bool {
|
||||||
|
use ansi_term::Colour::{Red, Green};
|
||||||
use ui::external::editor::edit_content;
|
use ui::external::editor::edit_content;
|
||||||
|
|
||||||
let parser = Parser::new(JsonHeaderParser::new(None));
|
let parser = Parser::new(JsonHeaderParser::new(None));
|
||||||
|
@ -116,13 +118,14 @@ impl<'a> Notes<'a> {
|
||||||
|
|
||||||
let (worked, failed) = result;
|
let (worked, failed) = result;
|
||||||
|
|
||||||
info!("Editing succeeded for {} files", worked);
|
info!("{}", Green.paint(format!("Editing succeeded for {} files", worked)));
|
||||||
info!("Editing failed for {} files", failed);
|
info!("{}", Red.paint(format!( "Editing failed for {} files", failed)));
|
||||||
|
|
||||||
return failed == 0;
|
return failed == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
fn command_list(&self, matches: &ArgMatches) -> bool {
|
fn command_list(&self, matches: &ArgMatches) -> bool {
|
||||||
|
use ansi_term::Colour::{Red, Green};
|
||||||
use ui::file::{FilePrinter, TablePrinter};
|
use ui::file::{FilePrinter, TablePrinter};
|
||||||
use self::header::get_name_from_header;
|
use self::header::get_name_from_header;
|
||||||
use self::header::get_tags_from_header;
|
use self::header::get_tags_from_header;
|
||||||
|
@ -162,6 +165,7 @@ impl<'a> Notes<'a> {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn command_links(&self, matches: &ArgMatches) -> bool {
|
fn command_links(&self, matches: &ArgMatches) -> bool {
|
||||||
|
use ansi_term::Colour::{Red, Green};
|
||||||
use module::helpers::content::markdown::MarkdownParser;
|
use module::helpers::content::markdown::MarkdownParser;
|
||||||
use ui::file::{FilePrinter, TablePrinter};
|
use ui::file::{FilePrinter, TablePrinter};
|
||||||
use util::is_url;
|
use util::is_url;
|
||||||
|
@ -260,13 +264,15 @@ impl<'a> Notes<'a> {
|
||||||
debug!("Not printing table as there wouldn't be any entries in it");
|
debug!("Not printing table as there wouldn't be any entries in it");
|
||||||
}
|
}
|
||||||
|
|
||||||
info!("Listing links succeeded for {} files", worked);
|
info!("{}", Green.paint(format!("Listing links succeeded for {} files", worked)));
|
||||||
info!("Listing links failed for {} files", failed);
|
info!("{}", Red.paint( format!("Listing links failed for {} files", failed)));
|
||||||
|
|
||||||
return failed == 0;
|
return failed == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
fn command_remove(&self, matches: &ArgMatches) -> bool {
|
fn command_remove(&self, matches: &ArgMatches) -> bool {
|
||||||
|
use ansi_term::Colour::{Red, Green};
|
||||||
|
|
||||||
let parser = Parser::new(JsonHeaderParser::new(None));
|
let parser = Parser::new(JsonHeaderParser::new(None));
|
||||||
|
|
||||||
let filter = {
|
let filter = {
|
||||||
|
@ -297,8 +303,9 @@ impl<'a> Notes<'a> {
|
||||||
|
|
||||||
let (worked, failed) = result;
|
let (worked, failed) = result;
|
||||||
|
|
||||||
info!("Removing succeeded for {} files", worked);
|
|
||||||
info!("Removing failed for {} files", failed);
|
info!("{}", Green.paint(format!("Removing succeeded for {} files", worked)));
|
||||||
|
info!("{}", Red.paint( format!("Removing failed for {} files", failed)));
|
||||||
|
|
||||||
return failed == 0;
|
return failed == 0;
|
||||||
}
|
}
|
||||||
|
@ -343,6 +350,8 @@ impl<'a> Notes<'a> {
|
||||||
impl<'a> Module<'a> for Notes<'a> {
|
impl<'a> Module<'a> for Notes<'a> {
|
||||||
|
|
||||||
fn exec(&self, matches: &ArgMatches) -> bool {
|
fn exec(&self, matches: &ArgMatches) -> bool {
|
||||||
|
use ansi_term::Colour::Red;
|
||||||
|
|
||||||
match matches.subcommand_name() {
|
match matches.subcommand_name() {
|
||||||
Some("add") => {
|
Some("add") => {
|
||||||
self.command_add(matches.subcommand_matches("add").unwrap())
|
self.command_add(matches.subcommand_matches("add").unwrap())
|
||||||
|
@ -377,7 +386,7 @@ impl<'a> Module<'a> for Notes<'a> {
|
||||||
},
|
},
|
||||||
|
|
||||||
Some(_) | None => {
|
Some(_) | None => {
|
||||||
info!("No command given, doing nothing");
|
info!("{}", Red.bold().paint("No command given, doing nothing"));
|
||||||
false
|
false
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
|
@ -92,25 +92,29 @@ impl FilePrinter for SimplePrinter {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn print_file(&self, f: Rc<RefCell<File>>) {
|
fn print_file(&self, f: Rc<RefCell<File>>) {
|
||||||
|
use ansi_term::Colour::Cyan;
|
||||||
|
|
||||||
if self.debug {
|
if self.debug {
|
||||||
debug!("{:?}", f);
|
debug!("{:?}", f);
|
||||||
} else if self.verbose {
|
} else if self.verbose {
|
||||||
info!("{}", &*f.deref().borrow());
|
info!("{}", &*f.deref().borrow());
|
||||||
} else {
|
} else {
|
||||||
info!("[File]: {}", f.deref().borrow().id());
|
info!("{}: {}", Cyan.paint("[File]"), f.deref().borrow().id());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn print_file_custom<F>(&self, file: Rc<RefCell<File>>, f: &F)
|
fn print_file_custom<F>(&self, file: Rc<RefCell<File>>, f: &F)
|
||||||
where F: Fn(Rc<RefCell<File>>) -> Vec<String>
|
where F: Fn(Rc<RefCell<File>>) -> Vec<String>
|
||||||
{
|
{
|
||||||
|
use ansi_term::Colour::Cyan;
|
||||||
|
|
||||||
let s = f(file).join(" ");
|
let s = f(file).join(" ");
|
||||||
if self.debug {
|
if self.debug {
|
||||||
debug!("{:?}", s);
|
debug!("{:?}", s);
|
||||||
} else if self.verbose {
|
} else if self.verbose {
|
||||||
info!("{}", s);
|
info!("{}", s);
|
||||||
} else {
|
} else {
|
||||||
info!("[File]: {}", s);
|
info!("{}: {}", Cyan.paint("[File]"), s);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue