@@ -5,16 +5,16 @@ use promkit::{
55 core:: {
66 crossterm:: {
77 event:: {
8- self , Event , KeyCode , KeyEvent , KeyEventKind , KeyEventState , KeyModifiers ,
9- MouseEvent , MouseEventKind ,
8+ Event , KeyCode , KeyEvent , KeyEventKind , KeyEventState , KeyModifiers , MouseEvent ,
9+ MouseEventKind ,
1010 } ,
11- execute , terminal,
11+ terminal,
1212 } ,
1313 render:: { Renderer , SharedRenderer } ,
1414 Widget ,
1515 } ,
1616 widgets:: table:: { CsvOptions , Document , State } ,
17- Prompt , Signal ,
17+ Prompt , Signal , TerminalModes , TerminalSession ,
1818} ;
1919
2020/// Interactive CSV viewer powered by promkit.
@@ -202,30 +202,16 @@ fn parse_document(args: &Args) -> anyhow::Result<Document> {
202202 }
203203}
204204
205- /// Ensure the terminal is restored to its original state when dropped.
206- struct TerminalGuard ;
207-
208- impl Drop for TerminalGuard {
209- fn drop ( & mut self ) {
210- let _ = execute ! (
211- io:: stdout( ) ,
212- terminal:: LeaveAlternateScreen ,
213- event:: DisableMouseCapture
214- ) ;
215- }
216- }
217-
218205#[ tokio:: main]
219206async fn main ( ) -> anyhow:: Result < ( ) > {
220207 let args = Args :: parse ( ) ;
221208 let document = parse_document ( & args) ?;
222209
223- execute ! (
224- io:: stdout( ) ,
225- terminal:: EnterAlternateScreen ,
226- event:: EnableMouseCapture
227- ) ?;
228- let _terminal_guard = TerminalGuard ;
210+ let modes = TerminalModes :: RAW_MODE
211+ | TerminalModes :: ALTERNATE_SCREEN
212+ | TerminalModes :: HIDDEN_CURSOR
213+ | TerminalModes :: MOUSE_CAPTURE ;
214+ let _terminal_session = TerminalSession :: try_new ( modes) ?;
229215
230216 CsvViewer :: new ( document) . run ( ) . await
231217}
0 commit comments