summaryrefslogtreecommitdiffstats
path: root/src/search_buffer.rs
diff options
context:
space:
mode:
authorAndrew Gallant <jamslam@gmail.com>2016-11-20 11:14:52 -0500
committerAndrew Gallant <jamslam@gmail.com>2016-11-20 11:14:52 -0500
commite8a30cb8934106e63f9d0938c547e535acb7b888 (patch)
treef1f7bb102ddcfc858c9ff65d04c34ec46810986d /src/search_buffer.rs
parent03f76053228b646a7febed3853ab28f42b83b1ad (diff)
Completely re-work colored output and tty handling.
This commit completely guts all of the color handling code and replaces most of it with two new crates: wincolor and termcolor. wincolor provides a simple API to coloring using the Windows console and termcolor provides a platform independent coloring API tuned for multithreaded command line programs. This required a lot more flexibility than what the `term` crate provided, so it was dropped. We instead switch to writing ANSI escape sequences directly and ignore the TERMINFO database. In addition to fixing several bugs, this commit also permits end users to customize colors to a certain extent. For example, this command will set the match color to magenta and the line number background to yellow: rg --colors 'match:fg:magenta' --colors 'line:bg:yellow' foo For tty handling, we've adopted a hack from `git` to do tty detection in MSYS/mintty terminals. As a result, ripgrep should get both color detection and piping correct on Windows regardless of which terminal you use. Finally, switch to line buffering. Performance doesn't seem to be impacted and it's an otherwise more user friendly option. Fixes #37, Fixes #51, Fixes #94, Fixes #117, Fixes #182, Fixes #231
Diffstat (limited to 'src/search_buffer.rs')
-rw-r--r--src/search_buffer.rs12
1 files changed, 5 insertions, 7 deletions
diff --git a/src/search_buffer.rs b/src/search_buffer.rs
index 16a161e1..1e8cfe8f 100644
--- a/src/search_buffer.rs
+++ b/src/search_buffer.rs
@@ -10,7 +10,7 @@ use std::cmp;
use std::path::Path;
use grep::Grep;
-use term::Terminal;
+use termcolor::WriteColor;
use printer::Printer;
use search_stream::{IterLines, Options, count_lines, is_binary};
@@ -26,7 +26,7 @@ pub struct BufferSearcher<'a, W: 'a> {
last_line: usize,
}
-impl<'a, W: Send + Terminal> BufferSearcher<'a, W> {
+impl<'a, W: WriteColor> BufferSearcher<'a, W> {
pub fn new(
printer: &'a mut Printer<W>,
grep: &'a Grep,
@@ -196,10 +196,9 @@ mod tests {
use std::path::Path;
use grep::GrepBuilder;
- use term::{Terminal, TerminfoTerminal};
- use out::ColoredTerminal;
use printer::Printer;
+ use termcolor;
use super::BufferSearcher;
@@ -216,15 +215,14 @@ and exhibited clearly, with a label attached.\
&Path::new("/baz.rs")
}
- type TestSearcher<'a> =
- BufferSearcher<'a, ColoredTerminal<TerminfoTerminal<Vec<u8>>>>;
+ type TestSearcher<'a> = BufferSearcher<'a, termcolor::NoColor<Vec<u8>>>;
fn search<F: FnMut(TestSearcher) -> TestSearcher>(
pat: &str,
haystack: &str,
mut map: F,
) -> (u64, String) {
- let outbuf = ColoredTerminal::NoColor(vec![]);
+ let outbuf = termcolor::NoColor::new(vec![]);
let mut pp = Printer::new(outbuf).with_filename(true);
let grep = GrepBuilder::new(pat).build().unwrap();
let count = {