Add SetCursorStyle command (#742)
This commit is contained in:
parent
05229b71f9
commit
614e6a73b7
@ -1,3 +1,11 @@
|
||||
# Version 0.26.0
|
||||
## Added ⭐
|
||||
|
||||
- ⚠️ Add `SetCursorStyle` to set the cursor style.
|
||||
|
||||
## Breaking
|
||||
|
||||
- Remove `SetCursorShape` in vavour of `SetCursorStyle`.
|
||||
|
||||
# Version 0.25.0
|
||||
BREAKING: `Copy` trait is removed from `Event`, you can keep it by removing the "bracked-paste" feature flag. However this flag might be standardized in the future.
|
||||
|
@ -74,28 +74,43 @@ where
|
||||
execute!(w, style::Print("ShowCursor"), cursor::Show)
|
||||
}
|
||||
|
||||
fn test_enable_cursor_blinking<W>(w: &mut W) -> Result<()>
|
||||
fn test_cursor_blinking_block<W>(w: &mut W) -> Result<()>
|
||||
where
|
||||
W: Write,
|
||||
{
|
||||
execute!(
|
||||
w,
|
||||
style::Print("EnableCursorBlinking"),
|
||||
cursor::EnableBlinking
|
||||
style::Print("Blinking Block:"),
|
||||
cursor::MoveLeft(2),
|
||||
cursor::SetCursorStyle::BlinkingBlock,
|
||||
)
|
||||
}
|
||||
|
||||
fn test_disable_cursor_blinking<W>(w: &mut W) -> Result<()>
|
||||
fn test_cursor_blinking_underscore<W>(w: &mut W) -> Result<()>
|
||||
where
|
||||
W: Write,
|
||||
{
|
||||
execute!(
|
||||
w,
|
||||
style::Print("DisableCursorBlinking"),
|
||||
cursor::DisableBlinking
|
||||
style::Print("Blinking Underscore:"),
|
||||
cursor::MoveLeft(2),
|
||||
cursor::SetCursorStyle::BlinkingUnderScore,
|
||||
)
|
||||
}
|
||||
|
||||
fn test_cursor_blinking_bar<W>(w: &mut W) -> Result<()>
|
||||
where
|
||||
W: Write,
|
||||
{
|
||||
execute!(
|
||||
w,
|
||||
style::Print("Blinking bar:"),
|
||||
cursor::MoveLeft(2),
|
||||
cursor::SetCursorStyle::BlinkingBar,
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
fn test_move_cursor_to<W>(w: &mut W) -> Result<()>
|
||||
where
|
||||
W: Write,
|
||||
@ -192,8 +207,9 @@ where
|
||||
w,
|
||||
test_hide_cursor,
|
||||
test_show_cursor,
|
||||
test_enable_cursor_blinking,
|
||||
test_disable_cursor_blinking,
|
||||
test_cursor_blinking_bar,
|
||||
test_cursor_blinking_block,
|
||||
test_cursor_blinking_underscore,
|
||||
test_move_cursor_left,
|
||||
test_move_cursor_right,
|
||||
test_move_cursor_up,
|
||||
|
@ -329,25 +329,28 @@ impl Command for Show {
|
||||
|
||||
/// A command that enables blinking of the terminal cursor.
|
||||
///
|
||||
/// See `SetCursorStyle` which is more advanced and better supported.
|
||||
///
|
||||
/// # Notes
|
||||
///
|
||||
/// - Windows versions lower than Windows 10 do not support this functionality.
|
||||
/// - Commands must be executed/queued for execution otherwise they do nothing.
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
|
||||
pub struct EnableBlinking;
|
||||
|
||||
impl Command for EnableBlinking {
|
||||
fn write_ansi(&self, f: &mut impl fmt::Write) -> fmt::Result {
|
||||
f.write_str(csi!("?12h"))
|
||||
}
|
||||
|
||||
#[cfg(windows)]
|
||||
fn execute_winapi(&self) -> Result<()> {
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// A command that disables blinking of the terminal cursor.
|
||||
///
|
||||
/// See `SetCursorStyle` which is more advanced and better supported.
|
||||
///
|
||||
/// # Notes
|
||||
///
|
||||
@ -355,45 +358,49 @@ impl Command for EnableBlinking {
|
||||
/// - Commands must be executed/queued for execution otherwise they do nothing.
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
|
||||
pub struct DisableBlinking;
|
||||
|
||||
impl Command for DisableBlinking {
|
||||
fn write_ansi(&self, f: &mut impl fmt::Write) -> fmt::Result {
|
||||
f.write_str(csi!("?12l"))
|
||||
}
|
||||
|
||||
#[cfg(windows)]
|
||||
fn execute_winapi(&self) -> Result<()> {
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
/// All supported cursor shapes
|
||||
///
|
||||
/// # Note
|
||||
///
|
||||
/// - Used with SetCursorShape
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
|
||||
pub enum CursorShape {
|
||||
UnderScore,
|
||||
Line,
|
||||
Block,
|
||||
}
|
||||
|
||||
/// A command that sets the shape of the cursor
|
||||
///
|
||||
/// A command that sets the style of the cursor.
|
||||
/// It uses two types of escape codes, one to control blinking, and the other the shape.
|
||||
///
|
||||
/// # Note
|
||||
///
|
||||
/// - Commands must be executed/queued for execution otherwise they do nothing.
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
|
||||
pub struct SetCursorShape(pub CursorShape);
|
||||
pub enum SetCursorStyle {
|
||||
/// Default cursor shape configured by the user.
|
||||
DefaultUserShape,
|
||||
/// A blinking block cursor shape (■).
|
||||
BlinkingBlock,
|
||||
/// A non blinking block cursor shape (inverse of `BlinkingBlock`).
|
||||
SteadyBlock,
|
||||
/// A blinking underscore cursor shape(_).
|
||||
BlinkingUnderScore,
|
||||
/// A non blinking underscore cursor shape (inverse of `BlinkingUnderScore`).
|
||||
SteadyUnderScore,
|
||||
/// A blinking cursor bar shape (|)
|
||||
BlinkingBar,
|
||||
/// A steady cursor bar shape (inverse of `BlinkingBar`).
|
||||
SteadyBar,
|
||||
}
|
||||
|
||||
impl Command for SetCursorShape {
|
||||
impl Command for SetCursorStyle {
|
||||
fn write_ansi(&self, f: &mut impl fmt::Write) -> fmt::Result {
|
||||
use CursorShape::*;
|
||||
match self.0 {
|
||||
UnderScore => f.write_str("\x1b[3 q"),
|
||||
Line => f.write_str("\x1b[5 q"),
|
||||
Block => f.write_str("\x1b[2 q"),
|
||||
match self {
|
||||
SetCursorStyle::DefaultUserShape => f.write_str("\x1b[?12h\x1b[0 q"),
|
||||
SetCursorStyle::BlinkingBlock => f.write_str("\x1b[?12h\x1b[1 q"),
|
||||
SetCursorStyle::SteadyBlock => f.write_str("\x1b[?12l\x1b[2 q"),
|
||||
SetCursorStyle::BlinkingUnderScore => f.write_str("\x1b[?12h\x1b[3 q"),
|
||||
SetCursorStyle::SteadyUnderScore => f.write_str("\x1b[?12l\x1b[4 q"),
|
||||
SetCursorStyle::BlinkingBar => f.write_str("\x1b[?12h\x1b[5 q"),
|
||||
SetCursorStyle::SteadyBar => f.write_str("\x1b[?12l\x1b[6 q"),
|
||||
}
|
||||
}
|
||||
|
||||
@ -418,7 +425,7 @@ impl_display!(for Hide);
|
||||
impl_display!(for Show);
|
||||
impl_display!(for EnableBlinking);
|
||||
impl_display!(for DisableBlinking);
|
||||
impl_display!(for SetCursorShape);
|
||||
impl_display!(for SetCursorStyle);
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
|
Loading…
Reference in New Issue
Block a user