Merge branch 'master' of github.com:Ticki/libterm

This commit is contained in:
Ticki 2016-03-17 17:13:11 +01:00
commit 12e08141c4
4 changed files with 17 additions and 12 deletions

View File

@ -29,7 +29,7 @@ fn main() {
Key::Down => println!(""), Key::Down => println!(""),
Key::Backspace => println!("×"), Key::Backspace => println!("×"),
Key::Invalid => println!("???"), Key::Invalid => println!("???"),
Key::Error => println!("ERROR"), Key::Error(_) => println!("ERROR"),
_ => {}, _ => {},
} }
stdout.flush().unwrap(); stdout.flush().unwrap();

View File

@ -11,7 +11,7 @@ pub trait TermWrite {
fn csi(&mut self, b: &[u8]) -> io::Result<usize>; fn csi(&mut self, b: &[u8]) -> io::Result<usize>;
/// Print OSC (operating system command) followed by a byte string. /// Print OSC (operating system command) followed by a byte string.
fn osc(&mut self, b: &[u8]) -> io::Result<usize>; fn osc(&mut self, b: &[u8]) -> io::Result<usize>;
/// Print OSC (device control string) followed by a byte string. /// Print DSC (device control string) followed by a byte string.
fn dsc(&mut self, b: &[u8]) -> io::Result<usize>; fn dsc(&mut self, b: &[u8]) -> io::Result<usize>;

View File

@ -4,14 +4,14 @@ use std::ops::{Deref, DerefMut};
/// A terminal restorer, which keeps the previous state of the terminal, and restores it, when /// A terminal restorer, which keeps the previous state of the terminal, and restores it, when
/// dropped. /// dropped.
#[cfg(target_os = "redox")] #[cfg(target_os = "redox")]
pub struct RawTerminal<W> { pub struct RawTerminal<W: Write> {
output: W, output: W,
} }
#[cfg(target_os = "redox")] #[cfg(target_os = "redox")]
impl<W: Write> Drop for RawTerminal<W> { impl<W: Write> Drop for RawTerminal<W> {
fn drop(&mut self) { fn drop(&mut self) {
use TermControl; use control::TermWrite;
self.csi(b"R"); self.csi(b"R");
} }
} }
@ -21,27 +21,27 @@ use termios::Termios;
/// A terminal restorer, which keeps the previous state of the terminal, and restores it, when /// A terminal restorer, which keeps the previous state of the terminal, and restores it, when
/// dropped. /// dropped.
#[cfg(not(target_os = "redox"))] #[cfg(not(target_os = "redox"))]
pub struct RawTerminal<W> { pub struct RawTerminal<W: Write> {
prev_ios: Termios, prev_ios: Termios,
output: W, output: W,
} }
#[cfg(not(target_os = "redox"))] #[cfg(not(target_os = "redox"))]
impl<W> Drop for RawTerminal<W> { impl<W: Write> Drop for RawTerminal<W> {
fn drop(&mut self) { fn drop(&mut self) {
use termios::set_terminal_attr; use termios::set_terminal_attr;
set_terminal_attr(&mut self.prev_ios as *mut _); set_terminal_attr(&mut self.prev_ios as *mut _);
} }
} }
impl<W> Deref for RawTerminal<W> { impl<W: Write> Deref for RawTerminal<W> {
type Target = W; type Target = W;
fn deref(&self) -> &W { fn deref(&self) -> &W {
&self.output &self.output
} }
} }
impl<W> DerefMut for RawTerminal<W> { impl<W: Write> DerefMut for RawTerminal<W> {
fn deref_mut(&mut self) -> &mut W { fn deref_mut(&mut self) -> &mut W {
&mut self.output &mut self.output
} }
@ -58,7 +58,7 @@ impl<W: Write> Write for RawTerminal<W> {
} }
/// Types which can be converted into "raw mode". /// Types which can be converted into "raw mode".
pub trait IntoRawMode: Sized { pub trait IntoRawMode: Write + Sized {
/// Switch to raw mode. /// Switch to raw mode.
/// ///
/// Raw mode means that stdin won't be printed (it will instead have to be written manually by the /// Raw mode means that stdin won't be printed (it will instead have to be written manually by the
@ -92,10 +92,10 @@ impl<W: Write> IntoRawMode for W {
} }
} }
#[cfg(target_os = "redox")] #[cfg(target_os = "redox")]
fn into_raw_mode(self) -> IoResult<RawTerminal<W>> { fn into_raw_mode(mut self) -> IoResult<RawTerminal<W>> {
use TermControl; use control::TermWrite;
self.csi("r").map(|_| RawTerminal { self.csi(b"r").map(|_| RawTerminal {
output: self, output: self,
}) })
} }

View File

@ -13,11 +13,13 @@ struct TermSize {
} }
// Since attributes on non-item statements is not stable yet, we use a function. // Since attributes on non-item statements is not stable yet, we use a function.
#[cfg(not(target_os = "redox"))]
#[cfg(target_pointer_width = "64")] #[cfg(target_pointer_width = "64")]
fn tiocgwinsz() -> u64 { fn tiocgwinsz() -> u64 {
use termios::TIOCGWINSZ; use termios::TIOCGWINSZ;
TIOCGWINSZ as u64 TIOCGWINSZ as u64
} }
#[cfg(not(target_os = "redox"))]
#[cfg(target_pointer_width = "32")] #[cfg(target_pointer_width = "32")]
fn tiocgwinsz() -> u32 { fn tiocgwinsz() -> u32 {
use termios::TIOCGWINSZ; use termios::TIOCGWINSZ;
@ -46,6 +48,7 @@ pub fn terminal_size() -> io::Result<(usize, usize)> {
/// Get the size of the terminal. /// Get the size of the terminal.
#[cfg(target_os = "redox")] #[cfg(target_os = "redox")]
pub fn terminal_size() -> io::Result<(usize, usize)> { pub fn terminal_size() -> io::Result<(usize, usize)> {
/*
fn get_int(s: &'static str) -> io::Result<usize> { fn get_int(s: &'static str) -> io::Result<usize> {
use std::env; use std::env;
@ -58,6 +61,8 @@ pub fn terminal_size() -> io::Result<(usize, usize)> {
} }
Ok((try!(get_int("COLUMNS")), try!(get_int("LINES")))) Ok((try!(get_int("COLUMNS")), try!(get_int("LINES"))))
*/
Ok((128,48))
} }
#[cfg(test)] #[cfg(test)]