Handle switch from crossterm::Result to io::Result

This commit is contained in:
Michael Davis 2023-08-22 09:49:54 -05:00 committed by Blaž Hrastnik
parent 050c019ccb
commit 546c8ca344
2 changed files with 31 additions and 38 deletions

View file

@ -288,7 +288,7 @@ impl Application {
pub async fn event_loop<S>(&mut self, input_stream: &mut S) pub async fn event_loop<S>(&mut self, input_stream: &mut S)
where where
S: Stream<Item = crossterm::Result<crossterm::event::Event>> + Unpin, S: Stream<Item = std::io::Result<crossterm::event::Event>> + Unpin,
{ {
self.render().await; self.render().await;
@ -301,7 +301,7 @@ impl Application {
pub async fn event_loop_until_idle<S>(&mut self, input_stream: &mut S) -> bool pub async fn event_loop_until_idle<S>(&mut self, input_stream: &mut S) -> bool
where where
S: Stream<Item = crossterm::Result<crossterm::event::Event>> + Unpin, S: Stream<Item = std::io::Result<crossterm::event::Event>> + Unpin,
{ {
loop { loop {
if self.editor.should_close() { if self.editor.should_close() {
@ -615,10 +615,7 @@ impl Application {
false false
} }
pub async fn handle_terminal_events( pub async fn handle_terminal_events(&mut self, event: std::io::Result<CrosstermEvent>) {
&mut self,
event: Result<CrosstermEvent, crossterm::ErrorKind>,
) {
let mut cx = crate::compositor::Context { let mut cx = crate::compositor::Context {
editor: &mut self.editor, editor: &mut self.editor,
jobs: &mut self.jobs, jobs: &mut self.jobs,
@ -1159,7 +1156,7 @@ impl Application {
pub async fn run<S>(&mut self, input_stream: &mut S) -> Result<i32, Error> pub async fn run<S>(&mut self, input_stream: &mut S) -> Result<i32, Error>
where where
S: Stream<Item = crossterm::Result<crossterm::event::Event>> + Unpin, S: Stream<Item = std::io::Result<crossterm::event::Event>> + Unpin,
{ {
self.claim_term().await?; self.claim_term().await?;

View file

@ -201,7 +201,7 @@ where
for (x, y, cell) in content { for (x, y, cell) in content {
// Move the cursor if the previous location was not (x - 1, y) // Move the cursor if the previous location was not (x - 1, y)
if !matches!(last_pos, Some(p) if x == p.0 + 1 && y == p.1) { if !matches!(last_pos, Some(p) if x == p.0 + 1 && y == p.1) {
map_error(queue!(self.buffer, MoveTo(x, y)))?; queue!(self.buffer, MoveTo(x, y))?;
} }
last_pos = Some((x, y)); last_pos = Some((x, y));
if cell.modifier != modifier { if cell.modifier != modifier {
@ -214,12 +214,12 @@ where
} }
if cell.fg != fg { if cell.fg != fg {
let color = CColor::from(cell.fg); let color = CColor::from(cell.fg);
map_error(queue!(self.buffer, SetForegroundColor(color)))?; queue!(self.buffer, SetForegroundColor(color))?;
fg = cell.fg; fg = cell.fg;
} }
if cell.bg != bg { if cell.bg != bg {
let color = CColor::from(cell.bg); let color = CColor::from(cell.bg);
map_error(queue!(self.buffer, SetBackgroundColor(color)))?; queue!(self.buffer, SetBackgroundColor(color))?;
bg = cell.bg; bg = cell.bg;
} }
@ -227,7 +227,7 @@ where
if self.capabilities.has_extended_underlines { if self.capabilities.has_extended_underlines {
if cell.underline_color != underline_color { if cell.underline_color != underline_color {
let color = CColor::from(cell.underline_color); let color = CColor::from(cell.underline_color);
map_error(queue!(self.buffer, SetUnderlineColor(color)))?; queue!(self.buffer, SetUnderlineColor(color))?;
underline_color = cell.underline_color; underline_color = cell.underline_color;
} }
} else { } else {
@ -239,24 +239,24 @@ where
if new_underline_style != underline_style { if new_underline_style != underline_style {
let attr = CAttribute::from(new_underline_style); let attr = CAttribute::from(new_underline_style);
map_error(queue!(self.buffer, SetAttribute(attr)))?; queue!(self.buffer, SetAttribute(attr))?;
underline_style = new_underline_style; underline_style = new_underline_style;
} }
map_error(queue!(self.buffer, Print(&cell.symbol)))?; queue!(self.buffer, Print(&cell.symbol))?;
} }
map_error(queue!( queue!(
self.buffer, self.buffer,
SetUnderlineColor(CColor::Reset), SetUnderlineColor(CColor::Reset),
SetForegroundColor(CColor::Reset), SetForegroundColor(CColor::Reset),
SetBackgroundColor(CColor::Reset), SetBackgroundColor(CColor::Reset),
SetAttribute(CAttribute::Reset) SetAttribute(CAttribute::Reset)
)) )
} }
fn hide_cursor(&mut self) -> io::Result<()> { fn hide_cursor(&mut self) -> io::Result<()> {
map_error(execute!(self.buffer, Hide)) execute!(self.buffer, Hide)
} }
fn show_cursor(&mut self, kind: CursorKind) -> io::Result<()> { fn show_cursor(&mut self, kind: CursorKind) -> io::Result<()> {
@ -266,7 +266,7 @@ where
CursorKind::Underline => SetCursorStyle::SteadyUnderScore, CursorKind::Underline => SetCursorStyle::SteadyUnderScore,
CursorKind::Hidden => unreachable!(), CursorKind::Hidden => unreachable!(),
}; };
map_error(execute!(self.buffer, Show, shape)) execute!(self.buffer, Show, shape)
} }
fn get_cursor(&mut self) -> io::Result<(u16, u16)> { fn get_cursor(&mut self) -> io::Result<(u16, u16)> {
@ -275,11 +275,11 @@ where
} }
fn set_cursor(&mut self, x: u16, y: u16) -> io::Result<()> { fn set_cursor(&mut self, x: u16, y: u16) -> io::Result<()> {
map_error(execute!(self.buffer, MoveTo(x, y))) execute!(self.buffer, MoveTo(x, y))
} }
fn clear(&mut self) -> io::Result<()> { fn clear(&mut self) -> io::Result<()> {
map_error(execute!(self.buffer, Clear(ClearType::All))) execute!(self.buffer, Clear(ClearType::All))
} }
fn size(&self) -> io::Result<Rect> { fn size(&self) -> io::Result<Rect> {
@ -294,10 +294,6 @@ where
} }
} }
fn map_error(error: crossterm::Result<()>) -> io::Result<()> {
error.map_err(|e| io::Error::new(io::ErrorKind::Other, e.to_string()))
}
#[derive(Debug)] #[derive(Debug)]
struct ModifierDiff { struct ModifierDiff {
pub from: Modifier, pub from: Modifier,
@ -312,48 +308,48 @@ impl ModifierDiff {
//use crossterm::Attribute; //use crossterm::Attribute;
let removed = self.from - self.to; let removed = self.from - self.to;
if removed.contains(Modifier::REVERSED) { if removed.contains(Modifier::REVERSED) {
map_error(queue!(w, SetAttribute(CAttribute::NoReverse)))?; queue!(w, SetAttribute(CAttribute::NoReverse))?;
} }
if removed.contains(Modifier::BOLD) { if removed.contains(Modifier::BOLD) {
map_error(queue!(w, SetAttribute(CAttribute::NormalIntensity)))?; queue!(w, SetAttribute(CAttribute::NormalIntensity))?;
if self.to.contains(Modifier::DIM) { if self.to.contains(Modifier::DIM) {
map_error(queue!(w, SetAttribute(CAttribute::Dim)))?; queue!(w, SetAttribute(CAttribute::Dim))?;
} }
} }
if removed.contains(Modifier::ITALIC) { if removed.contains(Modifier::ITALIC) {
map_error(queue!(w, SetAttribute(CAttribute::NoItalic)))?; queue!(w, SetAttribute(CAttribute::NoItalic))?;
} }
if removed.contains(Modifier::DIM) { if removed.contains(Modifier::DIM) {
map_error(queue!(w, SetAttribute(CAttribute::NormalIntensity)))?; queue!(w, SetAttribute(CAttribute::NormalIntensity))?;
} }
if removed.contains(Modifier::CROSSED_OUT) { if removed.contains(Modifier::CROSSED_OUT) {
map_error(queue!(w, SetAttribute(CAttribute::NotCrossedOut)))?; queue!(w, SetAttribute(CAttribute::NotCrossedOut))?;
} }
if removed.contains(Modifier::SLOW_BLINK) || removed.contains(Modifier::RAPID_BLINK) { if removed.contains(Modifier::SLOW_BLINK) || removed.contains(Modifier::RAPID_BLINK) {
map_error(queue!(w, SetAttribute(CAttribute::NoBlink)))?; queue!(w, SetAttribute(CAttribute::NoBlink))?;
} }
let added = self.to - self.from; let added = self.to - self.from;
if added.contains(Modifier::REVERSED) { if added.contains(Modifier::REVERSED) {
map_error(queue!(w, SetAttribute(CAttribute::Reverse)))?; queue!(w, SetAttribute(CAttribute::Reverse))?;
} }
if added.contains(Modifier::BOLD) { if added.contains(Modifier::BOLD) {
map_error(queue!(w, SetAttribute(CAttribute::Bold)))?; queue!(w, SetAttribute(CAttribute::Bold))?;
} }
if added.contains(Modifier::ITALIC) { if added.contains(Modifier::ITALIC) {
map_error(queue!(w, SetAttribute(CAttribute::Italic)))?; queue!(w, SetAttribute(CAttribute::Italic))?;
} }
if added.contains(Modifier::DIM) { if added.contains(Modifier::DIM) {
map_error(queue!(w, SetAttribute(CAttribute::Dim)))?; queue!(w, SetAttribute(CAttribute::Dim))?;
} }
if added.contains(Modifier::CROSSED_OUT) { if added.contains(Modifier::CROSSED_OUT) {
map_error(queue!(w, SetAttribute(CAttribute::CrossedOut)))?; queue!(w, SetAttribute(CAttribute::CrossedOut))?;
} }
if added.contains(Modifier::SLOW_BLINK) { if added.contains(Modifier::SLOW_BLINK) {
map_error(queue!(w, SetAttribute(CAttribute::SlowBlink)))?; queue!(w, SetAttribute(CAttribute::SlowBlink))?;
} }
if added.contains(Modifier::RAPID_BLINK) { if added.contains(Modifier::RAPID_BLINK) {
map_error(queue!(w, SetAttribute(CAttribute::RapidBlink)))?; queue!(w, SetAttribute(CAttribute::RapidBlink))?;
} }
Ok(()) Ok(())
@ -407,7 +403,7 @@ impl Command for SetUnderlineColor {
} }
#[cfg(windows)] #[cfg(windows)]
fn execute_winapi(&self) -> crossterm::Result<()> { fn execute_winapi(&self) -> io::Result<()> {
Err(std::io::Error::new( Err(std::io::Error::new(
std::io::ErrorKind::Other, std::io::ErrorKind::Other,
"SetUnderlineColor not supported by winapi.", "SetUnderlineColor not supported by winapi.",