This commit is contained in:
Timon 2020-02-08 14:23:50 +01:00 committed by GitHub
parent f58aca9354
commit e35d4d2c1c
8 changed files with 22 additions and 21 deletions

View File

@ -1,3 +1,10 @@
# Version 0.16.0
- Make terminal size function work on `/dev/tty` instead of `STDOUT_FILENO`.
- Change attribute vector in `ContentStyle` to bitmask.
- Add `SetAttributes` command.
- Add `Attributes` type, which is a bitfield of enabled attributes.
- Remove `exit()`, was useless.
# Version 0.15.0 # Version 0.15.0
- Fix CTRL + J key combination. This used to return an ENTER event. - Fix CTRL + J key combination. This used to return an ENTER event.
- Add a generic implementation `Command` for `&T: Command`. This allows commands to be queued by reference, as well as by value. - Add a generic implementation `Command` for `&T: Command`. This allows commands to be queued by reference, as well as by value.

View File

@ -1,6 +1,6 @@
[package] [package]
name = "crossterm" name = "crossterm"
version = "0.15.0" version = "0.16.0"
authors = ["T. Post"] authors = ["T. Post"]
description = "An crossplatform terminal library for manipulating terminals." description = "An crossplatform terminal library for manipulating terminals."
repository = "https://github.com/crossterm-rs/crossterm" repository = "https://github.com/crossterm-rs/crossterm"

View File

@ -55,7 +55,7 @@
//! - Colors - [`SetForegroundColor`](style/struct.SetForegroundColor.html), //! - Colors - [`SetForegroundColor`](style/struct.SetForegroundColor.html),
//! [`SetBackgroundColor`](style/struct.SetBackgroundColor.html), //! [`SetBackgroundColor`](style/struct.SetBackgroundColor.html),
//! [`ResetColor`](style/struct.ResetColor.html) //! [`ResetColor`](style/struct.ResetColor.html)
//! - Attributes - [`SetAttribute`](style/struct.SetAttribute.html), //! - Attributes - [`SetAttribute`](style/struct.SetAttribute.html), [`SetAttributes`](style/struct.SetAttributes.html),
//! [`PrintStyledContent`](style/struct.PrintStyledContent.html) //! [`PrintStyledContent`](style/struct.PrintStyledContent.html)
//! - Module `terminal` //! - Module `terminal`
//! - Scrolling - [`ScrollUp`](terminal/struct.ScrollUp.html), //! - Scrolling - [`ScrollUp`](terminal/struct.ScrollUp.html),

View File

@ -66,7 +66,6 @@ macro_rules! Attribute {
/// println!("{}", "Negative text".negative()); /// println!("{}", "Negative text".negative());
/// ``` /// ```
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] #[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
#[non_exhaustive]
#[derive(Copy, Clone, Debug, PartialEq, Eq, Ord, PartialOrd, Hash)] #[derive(Copy, Clone, Debug, PartialEq, Eq, Ord, PartialOrd, Hash)]
pub enum Attribute { pub enum Attribute {
$( $(
@ -74,9 +73,11 @@ macro_rules! Attribute {
$name, $name,
)* )*
} }
pub static SGR: &'static[i16] = &[ pub static SGR: &'static[i16] = &[
$($sgr,)* $($sgr,)*
]; ];
impl Attribute { impl Attribute {
/// Iterates over all the variants of the Attribute enum. /// Iterates over all the variants of the Attribute enum.
pub fn iterator() -> impl Iterator<Item = Attribute> { pub fn iterator() -> impl Iterator<Item = Attribute> {
@ -138,6 +139,8 @@ Attribute! {
NotFramedOrEncircled = 54, NotFramedOrEncircled = 54,
/// Turns off the `OverLined` attribute. /// Turns off the `OverLined` attribute.
NotOverLined = 55, NotOverLined = 55,
#[doc(hidden)]
__Nonexhaustive = 255,
} }
impl Display for Attribute { impl Display for Attribute {

View File

@ -107,11 +107,6 @@ pub fn disable_raw_mode() -> Result<()> {
sys::disable_raw_mode() sys::disable_raw_mode()
} }
/// Exits the current application.
pub fn exit() {
sys::exit();
}
/// Returns the terminal size `(columns, rows)`. /// Returns the terminal size `(columns, rows)`.
/// ///
/// The top left cell is represented `(1, 1)`. /// The top left cell is represented `(1, 1)`.

View File

@ -1,10 +1,10 @@
//! This module provides platform related functions. //! This module provides platform related functions.
#[cfg(unix)] #[cfg(unix)]
pub(crate) use self::unix::{disable_raw_mode, enable_raw_mode, exit, is_raw_mode_enabled, size}; pub(crate) use self::unix::{disable_raw_mode, enable_raw_mode, is_raw_mode_enabled, size};
#[cfg(windows)] #[cfg(windows)]
pub(crate) use self::windows::{ pub(crate) use self::windows::{
clear, disable_raw_mode, enable_raw_mode, exit, scroll_down, scroll_up, set_size, size, clear, disable_raw_mode, enable_raw_mode, scroll_down, scroll_up, set_size, size,
}; };
#[cfg(windows)] #[cfg(windows)]

View File

@ -2,13 +2,15 @@
use std::{io, mem, process, sync::Mutex}; use std::{io, mem, process, sync::Mutex};
use libc::{ use libc::{
cfmakeraw, ioctl, tcgetattr, tcsetattr, termios as Termios, winsize, STDIN_FILENO, cfmakeraw, ioctl, tcgetattr, tcsetattr, termios as Termios, winsize, STDIN_FILENO, TCSANOW,
STDOUT_FILENO, TCSANOW, TIOCGWINSZ, TIOCGWINSZ,
}; };
use lazy_static::lazy_static; use lazy_static::lazy_static;
use crate::error::{ErrorKind, Result}; use crate::error::{ErrorKind, Result};
use std::fs::File;
use std::os::unix::io::IntoRawFd;
lazy_static! { lazy_static! {
// Some(Termios) -> we're in the raw mode and this is the previous mode // Some(Termios) -> we're in the raw mode and this is the previous mode
@ -20,10 +22,6 @@ pub(crate) fn is_raw_mode_enabled() -> bool {
TERMINAL_MODE_PRIOR_RAW_MODE.lock().unwrap().is_some() TERMINAL_MODE_PRIOR_RAW_MODE.lock().unwrap().is_some()
} }
pub(crate) fn exit() {
::std::process::exit(0);
}
#[allow(clippy::identity_conversion)] #[allow(clippy::identity_conversion)]
pub(crate) fn size() -> Result<(u16, u16)> { pub(crate) fn size() -> Result<(u16, u16)> {
// http://rosettacode.org/wiki/Terminal_control/Dimensions#Library:_BSD_libc // http://rosettacode.org/wiki/Terminal_control/Dimensions#Library:_BSD_libc
@ -34,8 +32,10 @@ pub(crate) fn size() -> Result<(u16, u16)> {
ws_ypixel: 0, ws_ypixel: 0,
}; };
let file = File::open("/dev/tty").unwrap();
if let Ok(true) = if let Ok(true) =
wrap_with_result(unsafe { ioctl(STDOUT_FILENO, TIOCGWINSZ.into(), &mut size) }) wrap_with_result(unsafe { ioctl(file.into_raw_fd(), TIOCGWINSZ.into(), &mut size) })
{ {
Ok((size.ws_col, size.ws_row)) Ok((size.ws_col, size.ws_row))
} else { } else {

View File

@ -33,10 +33,6 @@ pub(crate) fn disable_raw_mode() -> Result<()> {
Ok(()) Ok(())
} }
pub(crate) fn exit() {
::std::process::exit(256);
}
pub(crate) fn size() -> Result<(u16, u16)> { pub(crate) fn size() -> Result<(u16, u16)> {
let terminal_size = ScreenBuffer::current()?.info()?.terminal_size(); let terminal_size = ScreenBuffer::current()?.info()?.terminal_size();
// windows starts counting at 0, unix at 1, add one to replicated unix behaviour. // windows starts counting at 0, unix at 1, add one to replicated unix behaviour.