diff --git a/cli/tools/pm/interactive_picker.rs b/cli/tools/pm/interactive_picker.rs index 804124e576..628b4dd81b 100644 --- a/cli/tools/pm/interactive_picker.rs +++ b/cli/tools/pm/interactive_picker.rs @@ -3,7 +3,6 @@ use std::collections::HashSet; use std::io; -use console_static_text::ConsoleSize; use console_static_text::TextItem; use crossterm::ExecutableCommand; use crossterm::cursor; @@ -18,6 +17,7 @@ use unicode_width::UnicodeWidthStr; use crate::util::console::HideCursorGuard; use crate::util::console::RawMode; +use crate::util::console::new_console_static_text; pub fn select_items( instructions_line: &str, @@ -35,20 +35,7 @@ where let mut stderr = io::stderr(); let raw_mode = RawMode::enable()?; - let mut static_text = - console_static_text::ConsoleStaticText::new(move || { - if let Ok((cols, rows)) = terminal::size() { - ConsoleSize { - cols: Some(cols), - rows: Some(rows), - } - } else { - ConsoleSize { - cols: None, - rows: None, - } - } - }); + let mut static_text = new_console_static_text(); static_text.keep_cursor_zero_column(true); let (_, start_row) = cursor::position().unwrap_or_default(); diff --git a/cli/util/console.rs b/cli/util/console.rs index 92588019c0..30f8f43543 100644 --- a/cli/util/console.rs +++ b/cli/util/console.rs @@ -3,6 +3,7 @@ use std::io; use std::sync::Arc; +use console_static_text::ConsoleStaticText; use crossterm::ExecutableCommand; use crossterm::cursor; use crossterm::event::KeyCode; @@ -21,6 +22,17 @@ pub fn console_size() -> Option { deno_runtime::ops::tty::console_size(stderr).ok() } +pub fn new_console_static_text() -> ConsoleStaticText { + ConsoleStaticText::new(move || { + let size = console_size(); + let to_u16 = |value: u32| value.min(u16::MAX as u32) as u16; + console_static_text::ConsoleSize { + cols: size.map(|size| size.cols).map(to_u16), + rows: size.map(|size| size.rows).map(to_u16), + } + }) +} + pub struct RawMode { needs_disable: bool, } diff --git a/cli/util/draw_thread.rs b/cli/util/draw_thread.rs index 769e7d28e5..8a153d333d 100644 --- a/cli/util/draw_thread.rs +++ b/cli/util/draw_thread.rs @@ -10,6 +10,7 @@ use deno_core::unsync::spawn_blocking; use deno_runtime::ops::tty::ConsoleSize; use once_cell::sync::Lazy; +use super::console::new_console_static_text; use crate::util::console::console_size; /// Renders text that will be displayed stacked in a @@ -61,13 +62,7 @@ static INTERNAL_STATE: Lazy>> = Lazy::new(|| { has_draw_thread: false, entries: Vec::new(), next_entry_id: 0, - static_text: ConsoleStaticText::new(|| { - let size = console_size().unwrap(); - console_static_text::ConsoleSize { - cols: Some(size.cols as u16), - rows: Some(size.rows as u16), - } - }), + static_text: new_console_static_text(), })) });