change colors, split up main loop

pull/6/head
dvkt 5 years ago
parent 08b124f55c
commit 51dfa9fa74

@ -10,60 +10,63 @@ use termion::input::TermRead;
use termion::raw::IntoRawMode; use termion::raw::IntoRawMode;
fn main() { fn main() {
phetch("phkt.io", 70, "/"); let response = phetch("phkt.io", 70, "/links");
render(&response);
user_input();
} }
fn phetch(host: &str, port: i8, selector: &str) { fn user_input() {
let stdin = stdin(); let stdin = stdin();
let mut stdout = stdout().into_raw_mode().unwrap(); let mut stdout = stdout().into_raw_mode().unwrap();
let mut y = 1;
if let Ok((_col, row)) = termion::terminal_size() {
y = row + 1;
}
for c in stdin.keys() {
// Clear the current line.
write!(
stdout,
"{}{}",
termion::cursor::Goto(1, y),
termion::clear::CurrentLine
)
.unwrap();
// Print the key we type...
match c.unwrap() {
// Exit.
Key::Char('q') => break,
Key::Char(c) => print!("{}", c),
Key::Alt(c) => print!("Alt-{}", c),
Key::Ctrl('c') => break,
Key::Ctrl(c) => print!("Ctrl-{}", c),
Key::Left => print!("<left>"),
Key::Right => print!("<right>"),
Key::Up => print!("<up>"),
Key::Down => print!("<down>"),
_ => print!("Other"),
}
// Flush again.
stdout.flush().unwrap();
}
}
fn phetch(host: &str, port: i8, selector: &str) -> String {
let mut out = String::new();
TcpStream::connect(format!("{}:{}", host, port)) TcpStream::connect(format!("{}:{}", host, port))
.and_then(|mut stream| { .and_then(|mut stream| {
stream.write(format!("{}\r\n", selector).as_ref()); stream.write(format!("{}\r\n", selector).as_ref());
Ok(stream) Ok(stream)
}) })
.and_then(|mut stream| { .and_then(|mut stream| {
let mut buf = String::new(); stream.read_to_string(&mut out);
stream.read_to_string(&mut buf);
render(&buf);
let mut y = 1;
if let Ok((_col, row)) = termion::terminal_size() {
y = row + 1;
}
for c in stdin.keys() {
// Clear the current line.
write!(
stdout,
"{}{}",
termion::cursor::Goto(1, y),
termion::clear::CurrentLine
)
.unwrap();
// Print the key we type...
match c.unwrap() {
// Exit.
Key::Char('q') => break,
Key::Char(c) => print!("{}", c),
Key::Alt(c) => print!("Alt-{}", c),
Key::Ctrl('c') => break,
Key::Ctrl(c) => print!("Ctrl-{}", c),
Key::Left => print!("<left>"),
Key::Right => print!("<right>"),
Key::Up => print!("<up>"),
Key::Down => print!("<down>"),
_ => print!("Other"),
}
// Flush again.
stdout.flush().unwrap();
}
Ok(()) Ok(())
}) })
.map_err(|err| { .map_err(|err| {
eprintln!("err: {}", err); eprintln!("err: {}", err);
}); });
out
} }
fn render(buf: &str) { fn render(buf: &str) {
@ -75,9 +78,9 @@ fn draw(buf: &str) -> String {
let mut skip_to_end = false; let mut skip_to_end = false;
let mut links = 0; let mut links = 0;
let mut out = String::with_capacity(buf.len() * 2); let mut out = String::with_capacity(buf.len() * 2);
let mut prefix: &str; let mut prefix = "";
let mut is_link = false; for (i, c) in buf.chars().enumerate() {
for c in buf.chars() { let mut is_link = false;
if start { if start {
match c { match c {
'i' => { 'i' => {
@ -85,30 +88,44 @@ fn draw(buf: &str) -> String {
is_link = false; is_link = false;
} }
'h' => { 'h' => {
prefix = "\x1B[94m"; prefix = "\x1B[96m";
links += 1; links += 1;
is_link = true; is_link = true;
} }
'0' => { '0' => {
prefix = "\x1B[95m"; prefix = "\x1B[94m";
links += 1; links += 1;
is_link = true; is_link = true;
} }
'1' => { '1' => {
prefix = "\x1B[96m"; prefix = "\x1B[94m";
links += 1; links += 1;
is_link = true; is_link = true;
} }
'.' => {
if buf.len() > i + 2
&& buf[i..].chars().next().unwrap() == '\r'
&& buf[i + 1..].chars().next().unwrap() == '\n'
{
continue;
}
}
'\r' => continue,
'\n' => continue,
_ => prefix = "", _ => prefix = "",
} }
out.push_str(" "); out.push_str(" ");
if is_link { if is_link {
out.push_str("\x1B[95m");
if links < 10 {
out.push(' ');
}
out.push_str(&links.to_string()); out.push_str(&links.to_string());
out.push_str(". "); out.push_str(". \x1B[0m");
} else { } else {
out.push(' '); out.push(' ');
out.push_str("\x1B[0m"); out.push_str("\x1B[0m");
out.push_str(" "); out.push_str(" ");
} }
out.push_str(prefix); out.push_str(prefix);
start = false start = false

Loading…
Cancel
Save