get_passwd(), new example, update README
This commit is contained in:
parent
098ce66b84
commit
45b1136f75
19
README.md
19
README.md
|
@ -1,7 +1,24 @@
|
||||||
libterm
|
libterm
|
||||||
=======
|
=======
|
||||||
|
|
||||||
A Rust Termios wrapper, providing various useful abstractions for dealing with terminals.
|
A pure Rust library for handling, manipulating and reading information about terminals. This provides a full-featured alternative to Termbox.
|
||||||
|
|
||||||
|
Features
|
||||||
|
--------
|
||||||
|
|
||||||
|
- Raw mode.
|
||||||
|
- Cursor movement.
|
||||||
|
- Color output.
|
||||||
|
- Text formatting.
|
||||||
|
- Console size.
|
||||||
|
- Control sequences.
|
||||||
|
- Termios control.
|
||||||
|
- Password input.
|
||||||
|
|
||||||
|
TODO
|
||||||
|
----
|
||||||
|
|
||||||
|
- Mouse input
|
||||||
|
|
||||||
Usage
|
Usage
|
||||||
-----
|
-----
|
||||||
|
|
|
@ -0,0 +1,22 @@
|
||||||
|
extern crate libterm;
|
||||||
|
|
||||||
|
use libterm::ReadExt;
|
||||||
|
use std::io::{Write, stdout, stdin};
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let stdout = stdout();
|
||||||
|
let mut stdout = stdout.lock();
|
||||||
|
let mut stdin = stdin();
|
||||||
|
|
||||||
|
stdout.write(b"password: ").unwrap();
|
||||||
|
stdout.flush().unwrap();
|
||||||
|
|
||||||
|
let pass = stdin.read_passwd();
|
||||||
|
|
||||||
|
if let Some(pass) = pass {
|
||||||
|
stdout.write(pass.as_bytes()).unwrap();
|
||||||
|
stdout.write(b"\n").unwrap();
|
||||||
|
} else {
|
||||||
|
stdout.write(b"Error\n").unwrap();
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,12 +1,13 @@
|
||||||
extern crate libterm;
|
extern crate libterm;
|
||||||
|
|
||||||
use libterm::{TermControl, raw_mode, Color, Mode};
|
use libterm::{TermControl, raw_mode, Color, Mode, ReadExt};
|
||||||
use std::io::{Read, Write, stdout, stdin};
|
use std::io::{Read, Write, stdout, stdin};
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let _raw = raw_mode();
|
let _raw = raw_mode();
|
||||||
let mut stdout = stdout();
|
let stdout = stdout();
|
||||||
let stdin = stdin();
|
let mut stdout = stdout.lock();
|
||||||
|
let mut stdin = stdin();
|
||||||
|
|
||||||
stdout.goto(5, 5).unwrap();
|
stdout.goto(5, 5).unwrap();
|
||||||
stdout.clear().unwrap();
|
stdout.clear().unwrap();
|
||||||
|
|
|
@ -0,0 +1,29 @@
|
||||||
|
use std::io::Read;
|
||||||
|
use raw_mode;
|
||||||
|
|
||||||
|
/// Extension to `Read` trait.
|
||||||
|
pub trait ReadExt {
|
||||||
|
/// Read a password.
|
||||||
|
fn read_passwd(&mut self) -> Option<String>;
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<R: Read> ReadExt for R {
|
||||||
|
fn read_passwd(&mut self) -> Option<String> {
|
||||||
|
let _raw = raw_mode();
|
||||||
|
let mut string = String::with_capacity(30);
|
||||||
|
|
||||||
|
for c in self.chars() {
|
||||||
|
match if let Ok(c) = c {
|
||||||
|
c
|
||||||
|
} else {
|
||||||
|
return None;
|
||||||
|
} {
|
||||||
|
'\x00' | '\x03' | '\x04' => return None,
|
||||||
|
'\r' => return Some(string),
|
||||||
|
b => string.push(b),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Some(string)
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,4 +1,6 @@
|
||||||
|
#![feature(io)]
|
||||||
#![feature(libc)]
|
#![feature(libc)]
|
||||||
|
|
||||||
#[warn(missing_docs)]
|
#[warn(missing_docs)]
|
||||||
|
|
||||||
extern crate libc;
|
extern crate libc;
|
||||||
|
@ -19,3 +21,6 @@ pub use color::Color;
|
||||||
|
|
||||||
mod mode;
|
mod mode;
|
||||||
pub use mode::Mode;
|
pub use mode::Mode;
|
||||||
|
|
||||||
|
mod extra;
|
||||||
|
pub use extra::ReadExt;
|
||||||
|
|
Loading…
Reference in New Issue