Commit 979e6f0b authored by jocutajar's avatar jocutajar
parents 0e82cf9a cd8a90a2
Pipeline #2757 passed with stages
in 3 minutes and 21 seconds
//! Cursor movement. //! Cursor movement.
use std::fmt; use std::fmt;
use std::ops;
use std::io::{self, Write, Error, ErrorKind, Read}; use std::io::{self, Write, Error, ErrorKind, Read};
use async::async_stdin_until; use async::async_stdin_until;
use std::time::{SystemTime, Duration}; use std::time::{SystemTime, Duration};
...@@ -174,3 +175,48 @@ impl<W: Write> DetectCursorPos for W { ...@@ -174,3 +175,48 @@ impl<W: Write> DetectCursorPos for W {
Ok((cx, cy)) Ok((cx, cy))
} }
} }
/// Hide the cursor for the lifetime of this struct.
/// It will hide the cursor on creation with from() and show it back on drop().
pub struct HideCursor<W: Write> {
/// The output target.
output: W,
}
impl<W: Write> HideCursor<W> {
/// Create a hide cursor wrapper struct for the provided output and hides the cursor.
pub fn from(mut output: W) -> Self {
write!(output, "{}", Hide).expect("hide the cursor");
HideCursor { output: output }
}
}
impl<W: Write> Drop for HideCursor<W> {
fn drop(&mut self) {
write!(self, "{}", Show).expect("show the cursor");
}
}
impl<W: Write> ops::Deref for HideCursor<W> {
type Target = W;
fn deref(&self) -> &W {
&self.output
}
}
impl<W: Write> ops::DerefMut for HideCursor<W> {
fn deref_mut(&mut self) -> &mut W {
&mut self.output
}
}
impl<W: Write> Write for HideCursor<W> {
fn write(&mut self, buf: &[u8]) -> io::Result<usize> {
self.output.write(buf)
}
fn flush(&mut self) -> io::Result<()> {
self.output.flush()
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment