From e63b645859cf2ff54bdc2f36da824a5c99e89ef0 Mon Sep 17 00:00:00 2001
From: ticki <ticki@users.noreply.github.com>
Date: Wed, 7 Sep 2016 11:39:32 +0200
Subject: [PATCH] Update the documentation.

---
 Cargo.toml        |  2 +-
 README.md         |  8 ++++----
 examples/async.rs |  2 +-
 src/async.rs      |  6 ++++--
 src/color.rs      | 16 +++++++++++++++-
 src/cursor.rs     | 12 +++++++++++-
 src/input.rs      |  2 +-
 src/raw.rs        | 31 ++++++++++++++++++++++++++++++-
 src/style.rs      |  2 +-
 9 files changed, 68 insertions(+), 13 deletions(-)

diff --git a/Cargo.toml b/Cargo.toml
index 927264f9..bd8e2039 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -1,6 +1,6 @@
 [package]
 name = "termion"
-version = "1.0.7"
+version = "1.0.8"
 authors = ["ticki <Ticki@users.noreply.github.com>"]
 description = "A bindless library for manipulating terminals."
 repository = "https://github.com/ticki/termion"
diff --git a/README.md b/README.md
index dc82a1bd..469cdabf 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,9 @@
 # Termion
 
-Termion is a pure Rust, bindless library for low-level handling, manipulating
+[Documentation](https://docs.rs/termion) | [Examples](https://github.com/Ticki/termion/tree/master/examples) | [Changelog](https://github.com/Ticki/termion/tree/master/CHANGELOG.md)
+|----|----|----
+
+**Termion** is a pure Rust, bindless library for low-level handling, manipulating
 and reading information about terminals. This provides a full-featured
 alternative to Termbox.
 
@@ -18,9 +21,6 @@ cleaner to use escapes.
 
 Supports Redox, Mac OS X, BSD, and Linux (or, in general, ANSI terminals).
 
-[Documentation](https://docs.rs/termion) | [Examples](https://github.com/Ticki/termion/tree/master/examples) | [Changelog](https://github.com/Ticki/termion/tree/master/CHANGELOG.md)
-|----|----|----
-
 ## A note on stability
 
 Although small breaking changes might happen, I will try my best to avoid them,
diff --git a/examples/async.rs b/examples/async.rs
index 5227e32f..bea6ceaf 100644
--- a/examples/async.rs
+++ b/examples/async.rs
@@ -2,7 +2,7 @@ extern crate termion;
 
 use termion::raw::IntoRawMode;
 use termion::async_stdin;
-use std::io::{Read, Write, stdout, stdin};
+use std::io::{Read, Write, stdout};
 use std::thread;
 use std::time::Duration;
 
diff --git a/src/async.rs b/src/async.rs
index f833f967..ed323dc7 100644
--- a/src/async.rs
+++ b/src/async.rs
@@ -28,10 +28,12 @@ pub fn async_stdin() -> AsyncReader {
 }
 
 /// An asynchronous reader.
+///
+/// This acts as any other stream, with the exception that reading from it won't block. Instead,
+/// the buffer will only be partially updated based on how much the internal buffer holds.
 pub struct AsyncReader {
     /// The underlying mpsc receiver.
-    #[doc(hidden)]
-    pub recv: mpsc::Receiver<io::Result<u8>>,
+    recv: mpsc::Receiver<io::Result<u8>>,
 }
 
 impl Read for AsyncReader {
diff --git a/src/color.rs b/src/color.rs
index e4f781d9..5361f0f0 100644
--- a/src/color.rs
+++ b/src/color.rs
@@ -1,4 +1,18 @@
-//! Colors.
+//! Color managemement.
+//!
+//! # Example
+//!
+//! ```rust
+//! use termion::{color, style};
+//!
+//! use std::io;
+//!
+//! fn main() {
+//!     println!("{}Red", color::Fg(color::Red));
+//!     println!("{}Blue", color::Fg(color::Blue));
+//!     println!("{}Back again", color::Fg(color::Reset));
+//! }
+//! ```
 
 use std::fmt;
 
diff --git a/src/cursor.rs b/src/cursor.rs
index 3f0f5554..0335b205 100644
--- a/src/cursor.rs
+++ b/src/cursor.rs
@@ -1,4 +1,4 @@
-//! Cursor.
+//! Cursor movement.
 
 use std::fmt;
 
@@ -12,6 +12,16 @@ derive_csi_sequence!("Show the cursor.", Show, "?25h");
 /// ANSI escapes are very poorly designed, and one of the many odd aspects is being one-based. This
 /// can be quite strange at first, but it is not that big of an obstruction once you get used to
 /// it.
+///
+/// # Example
+///
+/// ```rust
+/// extern crate termion;
+///
+/// fn main() {
+///     print!("{}{}Stuff", termion::clear::All, termion::cursor::Goto(5, 3));
+/// }
+/// ```
 #[derive(Copy, Clone, PartialEq, Eq)]
 pub struct Goto(pub u16, pub u16);
 
diff --git a/src/input.rs b/src/input.rs
index d395de98..6d57cdba 100644
--- a/src/input.rs
+++ b/src/input.rs
@@ -1,4 +1,4 @@
-//! Input.
+//! User input.
 
 use std::io::{self, Read, Write};
 use std::ops;
diff --git a/src/raw.rs b/src/raw.rs
index e0d8ae98..20a07f94 100644
--- a/src/raw.rs
+++ b/src/raw.rs
@@ -1,10 +1,34 @@
-//! Raw mode.
+//! Managing raw mode.
+//!
+//! Raw mode is a particular state a TTY can have. It signifies that:
+//!
+//! 1. No line buffering (the input is given byte-by-byte).
+//! 2. The input is not written out, instead it has to be done manually by the programmer.
+//! 3. The output is not canonicalized (for example, `\n` means "go one line down", not "line
+//!    break").
+//!
+//! It is essential to design terminal programs.
+//!
+//! # Example
+//!
+//! ```rust,ignore
+//! use termion::raw::IntoRawMode;
+//! use std::io::{Write, stdout};
+//!
+//! fn main() {
+//!     let mut stdout = stdout().into_raw_mode().unwrap();
+//!
+//!     write!(stdout, "Hey there.").unwrap();
+//! }
+//! ```
 
 use std::io::{self, Write};
 use std::ops;
 
 /// A terminal restorer, which keeps the previous state of the terminal, and restores it, when
 /// dropped.
+///
+/// Restoring will entirely bring back the old TTY state.
 #[cfg(target_os = "redox")]
 pub struct RawTerminal<W: Write> {
     output: W,
@@ -60,6 +84,11 @@ impl<W: Write> Write for RawTerminal<W> {
 }
 
 /// Types which can be converted into "raw mode".
+///
+/// # Why is this type defined on writers and not readers?
+///
+/// TTYs has their state controlled by the writer, not the reader. You use the writer to clear the
+/// screen, move the cursor and so on, so naturally you use the writer to change the mode as well.
 pub trait IntoRawMode: Write + Sized {
     /// Switch to raw mode.
     ///
diff --git a/src/style.rs b/src/style.rs
index fba488b3..cd3eb249 100644
--- a/src/style.rs
+++ b/src/style.rs
@@ -1,4 +1,4 @@
-//! Style.
+//! Text styling management.
 
 use std::fmt;
 
-- 
GitLab