//! Demonstrates how to use color escape sequences in the prompt string, //! using the `ansi_term` crate. extern crate ansi_term; extern crate linefeed; use std::io; use ansi_term::Color; use linefeed::{Interface, ReadResult}; fn main() -> io::Result<()> { let interface = Interface::new("color-demo")?; let style = Color::Red.bold(); let text = "color-demo> "; // The character values '\x01' and '\x02' are used to indicate the beginning // and end of an escape sequence. This informs linefeed, which cannot itself // interpret the meaning of escape sequences, that these characters are not // visible when the prompt is drawn and should not factor into calculating // the visible length of the prompt string. interface.set_prompt(&format!("\x01{prefix}\x02{text}\x01{suffix}\x02", prefix=style.prefix(), text=text, suffix=style.suffix()))?; while let ReadResult::Input(line) = interface.read_line()? { println!("read input: {:?}", line); interface.add_history_unique(line); } Ok(()) }