diff options
author | Jiayi Zhao <jeff.no.zhao@gmail.com> | 2020-04-18 19:10:57 -0400 |
---|---|---|
committer | Jiayi Zhao <jeff.no.zhao@gmail.com> | 2020-04-18 19:10:57 -0400 |
commit | 3fa40b654a96df76f445da7da3a35bce69730ca8 (patch) | |
tree | fa80a7c2b8d622f3adcd5bbb1585ab99d0bccebd | |
parent | 06b9a79c02717463ed360077a837534b362784b3 (diff) |
update to tui-rs 0.9
-rw-r--r-- | src/commands/delete_files.rs | 2 | ||||
-rw-r--r-- | src/commands/new_directory.rs | 4 | ||||
-rw-r--r-- | src/commands/open_file.rs | 8 | ||||
-rw-r--r-- | src/commands/reload_dir.rs | 2 | ||||
-rw-r--r-- | src/commands/rename_file.rs | 2 | ||||
-rw-r--r-- | src/commands/sort.rs | 6 | ||||
-rw-r--r-- | src/commands/tab_operations.rs | 6 | ||||
-rw-r--r-- | src/config/keymap.rs | 98 | ||||
-rw-r--r-- | src/config/mimetype.rs | 2 | ||||
-rw-r--r-- | src/history.rs | 2 | ||||
-rw-r--r-- | src/run.rs | 10 | ||||
-rw-r--r-- | src/ui/tui_backend.rs | 4 | ||||
-rw-r--r-- | src/ui/widgets/tui_dirlist.rs | 2 | ||||
-rw-r--r-- | src/ui/widgets/tui_dirlist_detailed.rs | 2 | ||||
-rw-r--r-- | src/ui/widgets/tui_footer.rs | 6 | ||||
-rw-r--r-- | src/ui/widgets/tui_menu.rs | 16 | ||||
-rw-r--r-- | src/ui/widgets/tui_prompt.rs | 11 | ||||
-rw-r--r-- | src/ui/widgets/tui_tab.rs | 4 | ||||
-rw-r--r-- | src/ui/widgets/tui_textfield.rs | 26 | ||||
-rw-r--r-- | src/ui/widgets/tui_topbar.rs | 4 | ||||
-rw-r--r-- | src/ui/widgets/tui_view.rs | 22 | ||||
-rw-r--r-- | src/util/format.rs | 2 |
22 files changed, 118 insertions, 123 deletions
diff --git a/src/commands/delete_files.rs b/src/commands/delete_files.rs index c70cee7..4f1c19a 100644 --- a/src/commands/delete_files.rs +++ b/src/commands/delete_files.rs @@ -95,7 +95,7 @@ impl JoshutoRunnable for DeleteFiles { let options = &context.config_t.sort_option; let curr_path = context.tabs[context.curr_tab_index].curr_path.clone(); for tab in context.tabs.iter_mut() { - tab.history.reload(&curr_path, options); + tab.history.reload(&curr_path, options)?; } LoadChild::load_child(context)?; Ok(()) diff --git a/src/commands/new_directory.rs b/src/commands/new_directory.rs index ce27bc9..5152374 100644 --- a/src/commands/new_directory.rs +++ b/src/commands/new_directory.rs @@ -1,6 +1,6 @@ use std::path; -use crate::commands::{JoshutoCommand, JoshutoRunnable, ReloadDirList}; +use crate::commands::{JoshutoCommand, JoshutoRunnable}; use crate::context::JoshutoContext; use crate::error::JoshutoResult; use crate::history::DirectoryHistory; @@ -38,7 +38,7 @@ impl JoshutoRunnable for NewDirectory { let options = &context.config_t.sort_option; let curr_path = context.tabs[context.curr_tab_index].curr_path.clone(); for tab in context.tabs.iter_mut() { - tab.history.reload(&curr_path, options); + tab.history.reload(&curr_path, options)?; } LoadChild::load_child(context)?; diff --git a/src/commands/open_file.rs b/src/commands/open_file.rs index dc2bb13..ca07a11 100644 --- a/src/commands/open_file.rs +++ b/src/commands/open_file.rs @@ -1,10 +1,10 @@ -use std::path::{Path, PathBuf}; +use std::path::Path; use crate::commands::{ChangeDirectory, JoshutoCommand, JoshutoRunnable}; use crate::config::mimetype::JoshutoMimetypeEntry; use crate::context::JoshutoContext; use crate::error::{JoshutoError, JoshutoErrorKind, JoshutoResult}; -use crate::fs::{JoshutoDirEntry, JoshutoMetadata}; +use crate::fs::JoshutoDirEntry; use crate::ui::widgets::{TuiMenu, TuiTextField}; use crate::ui::TuiBackend; use crate::util::load_child::LoadChild; @@ -134,12 +134,12 @@ impl OpenFileWith { .map(|(i, e)| format!(" {} | {}", i, e)) .collect(); let menu_options_str: Vec<&str> = menu_options.iter().map(|e| e.as_str()).collect(); - let mut menu_widget = TuiMenu::new(&menu_options_str); + let menu_widget = TuiMenu::new(&menu_options_str); let mut textfield = TuiTextField::default() .prompt(":") .prefix(PROMPT) - .menu(&mut menu_widget); + .menu(menu_widget); textfield.get_input(backend, &context) }; let entry_paths: Vec<&Path> = entries.iter().map(|e| e.file_path().as_path()).collect(); diff --git a/src/commands/reload_dir.rs b/src/commands/reload_dir.rs index 30aa386..0f37eec 100644 --- a/src/commands/reload_dir.rs +++ b/src/commands/reload_dir.rs @@ -65,7 +65,7 @@ impl std::fmt::Display for ReloadDirList { } impl JoshutoRunnable for ReloadDirList { - fn execute(&self, context: &mut JoshutoContext, backend: &mut TuiBackend) -> JoshutoResult<()> { + fn execute(&self, context: &mut JoshutoContext, _: &mut TuiBackend) -> JoshutoResult<()> { Self::reload(context.curr_tab_index, context)?; LoadChild::load_child(context)?; Ok(()) diff --git a/src/commands/rename_file.rs b/src/commands/rename_file.rs index a36c86c..f8bb5c6 100644 --- a/src/commands/rename_file.rs +++ b/src/commands/rename_file.rs @@ -48,7 +48,7 @@ impl std::fmt::Display for RenameFile { } impl JoshutoRunnable for RenameFile { - fn execute(&self, context: &mut JoshutoContext, backend: &mut TuiBackend) -> JoshutoResult<()> { + fn execute(&self, context: &mut JoshutoContext, _: &mut TuiBackend) -> JoshutoResult<()> { let mut path: Option<path::PathBuf> = None; if let Some(curr_list) = context.curr_tab_ref().curr_list_ref() { diff --git a/src/commands/sort.rs b/src/commands/sort.rs index bbb90c2..7209cb4 100644 --- a/src/commands/sort.rs +++ b/src/commands/sort.rs @@ -1,5 +1,3 @@ -use std::path; - use crate::commands::{JoshutoCommand, JoshutoRunnable, ReloadDirList}; use crate::context::JoshutoContext; use crate::error::JoshutoResult; @@ -9,8 +7,6 @@ use crate::ui::TuiBackend; use crate::util::load_child::LoadChild; use crate::util::sort::SortType; -use crate::HOME_DIR; - #[derive(Clone, Debug)] pub struct Sort { sort_method: SortType, @@ -34,7 +30,7 @@ impl std::fmt::Display for Sort { } impl JoshutoRunnable for Sort { - fn execute(&self, context: &mut JoshutoContext, backend: &mut TuiBackend) -> JoshutoResult<()> { + fn execute(&self, context: &mut JoshutoContext, _: &mut TuiBackend) -> JoshutoResult<()> { context.config_t.sort_option.sort_method = self.sort_method; for tab in context.tabs.iter_mut() { tab.history.depreciate_all_entries(); diff --git a/src/commands/tab_operations.rs b/src/commands/tab_operations.rs index 52c03ef..bc3ed9a 100644 --- a/src/commands/tab_operations.rs +++ b/src/commands/tab_operations.rs @@ -20,7 +20,7 @@ impl NewTab { "new_tab" } - pub fn new_tab(context: &mut JoshutoContext, backend: &mut TuiBackend) -> JoshutoResult<()> { + pub fn new_tab(context: &mut JoshutoContext) -> JoshutoResult<()> { /* start the new tab in $HOME or root */ let curr_path = match HOME_DIR.as_ref() { Some(s) => s.clone(), @@ -45,8 +45,8 @@ impl std::fmt::Display for NewTab { } impl JoshutoRunnable for NewTab { - fn execute(&self, context: &mut JoshutoContext, backend: &mut TuiBackend) -> JoshutoResult<()> { - Self::new_tab(context, backend) + fn execute(&self, context: &mut JoshutoContext, _: &mut TuiBackend) -> JoshutoResult<()> { + Self::new_tab(context) } } diff --git a/src/config/keymap.rs b/src/config/keymap.rs index c1199e8..608b12c 100644 --- a/src/config/keymap.rs +++ b/src/config/keymap.rs @@ -33,173 +33,181 @@ impl JoshutoCommandMapping { map: HashMap::new(), } } -} -impl std::default::Default for JoshutoCommandMapping { - fn default() -> Self { - let mut m = Self { - map: HashMap::new(), - }; + pub fn default_res(&mut self) -> Result<(), String> { + let mut m = self; let cmd = Box::new(commands::CursorMoveUp::new(1)); let keys = [Key::Up]; - insert_keycommand(&mut m, cmd, &keys); + insert_keycommand(&mut m, cmd, &keys)?; let cmd = Box::new(commands::CursorMoveDown::new(1)); let keys = [Key::Down]; - insert_keycommand(&mut m, cmd, &keys); + insert_keycommand(&mut m, cmd, &keys)?; let cmd = Box::new(commands::ParentDirectory::new()); let keys = [Key::Left]; - insert_keycommand(&mut m, cmd, &keys); + insert_keycommand(&mut m, cmd, &keys)?; let cmd = Box::new(commands::OpenFile::new()); let keys = [Key::Right]; - insert_keycommand(&mut m, cmd, &keys); + insert_keycommand(&mut m, cmd, &keys)?; let cmd = Box::new(commands::OpenFile::new()); let keys = [Key::Char('\n')]; - insert_keycommand(&mut m, cmd, &keys); + insert_keycommand(&mut m, cmd, &keys)?; let cmd = Box::new(commands::CursorMoveHome::new()); let keys = [Key::Home]; - insert_keycommand(&mut m, cmd, &keys); + insert_keycommand(&mut m, cmd, &keys)?; let cmd = Box::new(commands::CursorMoveEnd::new()); let keys = [Key::End]; - insert_keycommand(&mut m, cmd, &keys); + insert_keycommand(&mut m, cmd, &keys)?; let cmd = Box::new(commands::CursorMovePageUp::new()); let keys = [Key::PageUp]; - insert_keycommand(&mut m, cmd, &keys); + insert_keycommand(&mut m, cmd, &keys)?; let cmd = Box::new(commands::CursorMovePageDown::new()); let keys = [Key::PageDown]; - insert_keycommand(&mut m, cmd, &keys); + insert_keycommand(&mut m, cmd, &keys)?; // vim keys let cmd = Box::new(commands::CursorMoveUp::new(1)); let keys = [Key::Char('k')]; - insert_keycommand(&mut m, cmd, &keys); + insert_keycommand(&mut m, cmd, &keys)?; let cmd = Box::new(commands::CursorMoveDown::new(1)); let keys = [Key::Char('j')]; - insert_keycommand(&mut m, cmd, &keys); + insert_keycommand(&mut m, cmd, &keys)?; let cmd = Box::new(commands::ParentDirectory::new()); let keys = [Key::Char('h')]; - insert_keycommand(&mut m, cmd, &keys); + insert_keycommand(&mut m, cmd, &keys)?; let cmd = Box::new(commands::OpenFile::new()); let keys = [Key::Char('l')]; - insert_keycommand(&mut m, cmd, &keys); + insert_keycommand(&mut m, cmd, &keys)?; let cmd = Box::new(commands::NewTab::new()); let keys = [Key::Char('T')]; - insert_keycommand(&mut m, cmd, &keys); + insert_keycommand(&mut m, cmd, &keys)?; let cmd = Box::new(commands::NewTab::new()); let keys = [Key::Ctrl('t')]; - insert_keycommand(&mut m, cmd, &keys); + insert_keycommand(&mut m, cmd, &keys)?; let cmd = Box::new(commands::NewTab::new()); let keys = [Key::Char('W')]; - insert_keycommand(&mut m, cmd, &keys); + insert_keycommand(&mut m, cmd, &keys)?; let cmd = Box::new(commands::NewTab::new()); let keys = [Key::Ctrl('w')]; - insert_keycommand(&mut m, cmd, &keys); + insert_keycommand(&mut m, cmd, &keys)?; let cmd = Box::new(commands::CloseTab::new()); let keys = [Key::Char('q')]; - insert_keycommand(&mut m, cmd, &keys); + insert_keycommand(&mut m, cmd, &keys)?; let cmd = Box::new(commands::ForceQuit::new()); let keys = [Key::Char('Q')]; - insert_keycommand(&mut m, cmd, &keys); + insert_keycommand(&mut m, cmd, &keys)?; let cmd = Box::new(commands::ReloadDirList::new()); let keys = [Key::Char('R')]; - insert_keycommand(&mut m, cmd, &keys); + insert_keycommand(&mut m, cmd, &keys)?; let cmd = Box::new(commands::ToggleHiddenFiles::new()); let keys = [Key::Char('z'), Key::Char('h')]; - insert_keycommand(&mut m, cmd, &keys); + insert_keycommand(&mut m, cmd, &keys)?; let cmd = Box::new(commands::TabSwitch::new(1)); let keys = [Key::Char('\t')]; - insert_keycommand(&mut m, cmd, &keys); + insert_keycommand(&mut m, cmd, &keys)?; let cmd = Box::new(commands::TabSwitch::new(-1)); let keys = [Key::BackTab]; - insert_keycommand(&mut m, cmd, &keys); + insert_keycommand(&mut m, cmd, &keys)?; let cmd = Box::new(commands::OpenFileWith::new()); let keys = [Key::Char('r')]; - insert_keycommand(&mut m, cmd, &keys); + insert_keycommand(&mut m, cmd, &keys)?; let cmd = Box::new(commands::CutFiles::new()); let keys = [Key::Char('d'), Key::Char('d')]; - insert_keycommand(&mut m, cmd, &keys); + insert_keycommand(&mut m, cmd, &keys)?; let cmd = Box::new(commands::CopyFiles::new()); let keys = [Key::Char('y'), Key::Char('y')]; - insert_keycommand(&mut m, cmd, &keys); + insert_keycommand(&mut m, cmd, &keys)?; let cmd = Box::new(commands::PasteFiles::new(Options::default())); let keys = [Key::Char('p'), Key::Char('p')]; - insert_keycommand(&mut m, cmd, &keys); + insert_keycommand(&mut m, cmd, &keys)?; let cmd = Box::new(commands::DeleteFiles::new()); let keys = [Key::Delete]; - insert_keycommand(&mut m, cmd, &keys); + insert_keycommand(&mut m, cmd, &keys)?; let cmd = Box::new(commands::DeleteFiles::new()); let keys = [Key::Char('D'), Key::Char('d')]; - insert_keycommand(&mut m, cmd, &keys); + insert_keycommand(&mut m, cmd, &keys)?; let cmd = Box::new(commands::RenameFileAppend::new()); let keys = [Key::Char('a')]; - insert_keycommand(&mut m, cmd, &keys); + insert_keycommand(&mut m, cmd, &keys)?; let cmd = Box::new(commands::RenameFilePrepend::new()); let keys = [Key::Char('A')]; - insert_keycommand(&mut m, cmd, &keys); + insert_keycommand(&mut m, cmd, &keys)?; let cmd = Box::new(commands::CommandLine::new( "search ".to_string(), "".to_string(), )); let keys = [Key::Char('/')]; - insert_keycommand(&mut m, cmd, &keys); + insert_keycommand(&mut m, cmd, &keys)?; let cmd = Box::new(commands::SearchNext::new()); let keys = [Key::Char('n')]; - insert_keycommand(&mut m, cmd, &keys); + insert_keycommand(&mut m, cmd, &keys)?; let cmd = Box::new(commands::SearchPrev::new()); let keys = [Key::Char('N')]; - insert_keycommand(&mut m, cmd, &keys); + insert_keycommand(&mut m, cmd, &keys)?; let cmd = Box::new(commands::BulkRename::new()); let keys = [Key::Char('b'), Key::Char('b')]; - insert_keycommand(&mut m, cmd, &keys); + insert_keycommand(&mut m, cmd, &keys)?; let cmd = Box::new(commands::SetMode::new()); let keys = [Key::Char('=')]; - insert_keycommand(&mut m, cmd, &keys); + insert_keycommand(&mut m, cmd, &keys)?; let cmd = Box::new(commands::CommandLine::new("".to_string(), "".to_string())); let keys = [Key::Char(';')]; - insert_keycommand(&mut m, cmd, &keys); + insert_keycommand(&mut m, cmd, &keys)?; let cmd = Box::new(commands::CommandLine::new( "mkdir ".to_string(), "".to_string(), )); let keys = [Key::Char('m'), Key::Char('k')]; - insert_keycommand(&mut m, cmd, &keys); + insert_keycommand(&mut m, cmd, &keys)?; let cmd = Box::new(commands::CommandLine::new( "rename ".to_string(), "".to_string(), )); let keys = [Key::Char('c'), Key::Char('w')]; - insert_keycommand(&mut m, cmd, &keys); + insert_keycommand(&mut m, cmd, &keys)?; + + Ok(()) + } +} + +impl std::default::Default for JoshutoCommandMapping { + fn default() -> Self { + let mut m = Self { + map: HashMap::new(), + }; + + let _ = m.default_res(); m } diff --git a/src/config/mimetype.rs b/src/config/mimetype.rs index ce542ff..f8b163f 100644 --- a/src/config/mimetype.rs +++ b/src/config/mimetype.rs @@ -2,7 +2,7 @@ use serde_derive::Deserialize; use std::collections::HashMap; use std::fmt; use std::io::Read; -use std::path::{Path, PathBuf}; +use std::path::Path; use std::process; use super::{parse_config_file, ConfigStructure}; diff --git a/src/history.rs b/src/history.rs index f4a0391..edb1a95 100644 --- a/src/history.rs +++ b/src/history.rs @@ -106,7 +106,7 @@ impl DirectoryHistory for JoshutoHistory { let dirlist = entry.get_mut(); dirlist.reload_contents(sort_option)?; } - Entry::Vacant(entry) => {} + _ => {} } Ok(()) } @@ -1,4 +1,4 @@ -use crate::commands::{CommandKeybind, JoshutoRunnable}; +use crate::commands::CommandKeybind; use crate::config::{JoshutoCommandMapping, JoshutoConfig}; use crate::context::JoshutoContext; use crate::history::DirectoryHistory; @@ -25,8 +25,8 @@ pub fn run(config_t: JoshutoConfig, keymap_t: JoshutoCommandMapping) -> std::io: LoadChild::load_child(&mut context)?; // render our view - let mut view = TuiView::new(&context); - backend.render(&mut view); + let view = TuiView::new(&context); + backend.render(view); } let mut io_observer = None; @@ -115,8 +115,8 @@ pub fn run(config_t: JoshutoConfig, keymap_t: JoshutoCommandMapping) -> std::io: context.events.flush(); } } - let mut view = TuiView::new(&context); - backend.render(&mut view); + let view = TuiView::new(&context); + backend.render(view); } Ok(()) diff --git a/src/ui/tui_backend.rs b/src/ui/tui_backend.rs index 28103a3..7ab348d 100644 --- a/src/ui/tui_backend.rs +++ b/src/ui/tui_backend.rs @@ -26,13 +26,13 @@ impl TuiBackend { }) } - pub fn render<W>(&mut self, widget: &mut W) + pub fn render<W>(&mut self, widget: W) where W: Widget, { self.terminal_mut().draw(|mut frame| { let rect = frame.size(); - widget.render(&mut frame, rect); + frame.render_widget(widget, rect); }); } diff --git a/src/ui/widgets/tui_dirlist.rs b/src/ui/widgets/tui_dirlist.rs index 8840bda..d4c7db1 100644 --- a/src/ui/widgets/tui_dirlist.rs +++ b/src/ui/widgets/tui_dirlist.rs @@ -17,7 +17,7 @@ impl<'a> TuiDirList<'a> { } impl<'a> Widget for TuiDirList<'a> { - fn draw(&mut self, area: Rect, buf: &mut Buffer) { + fn render(self, area: Rect, buf: &mut Buffer) { if area.width < 1 || area.height < 1 { return; } diff --git a/src/ui/widgets/tui_dirlist_detailed.rs b/src/ui/widgets/tui_dirlist_detailed.rs index 1e40cbd..114b499 100644 --- a/src/ui/widgets/tui_dirlist_detailed.rs +++ b/src/ui/widgets/tui_dirlist_detailed.rs @@ -20,7 +20,7 @@ impl<'a> TuiDirListDetailed<'a> { } impl<'a> Widget for TuiDirListDetailed<'a> { - fn draw(&mut self, area: Rect, buf: &mut Buffer) { + fn render(self, area: Rect, buf: &mut Buffer) { if area.width < 4 || area.height < 1 { return; } diff --git a/src/ui/widgets/tui_footer.rs b/src/ui/widgets/tui_footer.rs index 83598a2..6cb8a70 100644 --- a/src/ui/widgets/tui_footer.rs +++ b/src/ui/widgets/tui_footer.rs @@ -1,5 +1,3 @@ -use std::fs; - use tui::buffer::Buffer; use tui::layout::Rect; use tui::style::{Color, Style}; @@ -19,7 +17,7 @@ impl<'a> TuiFooter<'a> { } impl<'a> Widget for TuiFooter<'a> { - fn draw(&mut self, area: Rect, buf: &mut Buffer) { + fn render(self, area: Rect, buf: &mut Buffer) { use std::os::unix::fs::PermissionsExt; let mode = self.entry.metadata.permissions.mode(); @@ -59,6 +57,6 @@ impl<'a> Widget for TuiFooter<'a> { _ => {} } - Paragraph::new(text.iter()).wrap(true).draw(area, buf); + Paragraph::new(text.iter()).wrap(true).render(area, buf); } } diff --git a/src/ui/widgets/tui_menu.rs b/src/ui/widgets/tui_menu.rs index e862065..ce663af 100644 --- a/src/ui/widgets/tui_menu.rs +++ b/src/ui/widgets/tui_menu.rs @@ -36,11 +36,11 @@ impl TuiCommandMenu { loop { terminal.draw(|mut frame| { - let f_size = frame.size(); + let f_size: Rect = frame.size(); { - let mut view = TuiView::new(&context); - view.render(&mut frame, f_size); + let view = TuiView::new(&context); + frame.render_widget(view, f_size); } { @@ -72,7 +72,7 @@ impl TuiCommandMenu { height: (display_str_len + BORDER_HEIGHT) as u16, }; - TuiMenu::new(&display_str).render(&mut frame, menu_rect); + frame.render_widget(TuiMenu::new(&display_str), menu_rect); } }); @@ -117,11 +117,11 @@ impl<'a> TuiMenu<'a> { const LONG_SPACE: &str = " "; impl<'a> Widget for TuiMenu<'a> { - fn draw(&mut self, area: Rect, buf: &mut Buffer) { + fn render(self, area: Rect, buf: &mut Buffer) { let text_iter = self.options.iter(); - let mut block = Block::default().borders(Borders::TOP); - - block.draw(area, buf); + let block = Block::default() + .borders(Borders::TOP) + .render(area, buf); let style = Style::default(); diff --git a/src/ui/widgets/tui_prompt.rs b/src/ui/widgets/tui_prompt.rs index b9848d0..2840d79 100644 --- a/src/ui/widgets/tui_prompt.rs +++ b/src/ui/widgets/tui_prompt.rs @@ -1,7 +1,7 @@ use termion::event::Key; use tui::layout::Rect; use tui::style::{Color, Style}; -use tui::widgets::{Paragraph, Text, Widget}; +use tui::widgets::{Paragraph, Text}; use crate::context::JoshutoContext; use crate::ui::TuiBackend; @@ -24,7 +24,7 @@ impl<'a> TuiPrompt<'a> { context.events.flush(); loop { terminal.draw(|mut frame| { - let f_size = frame.size(); + let f_size: Rect = frame.size(); if f_size.height == 0 { return; } @@ -32,7 +32,7 @@ impl<'a> TuiPrompt<'a> { { let mut view = TuiView::new(&context); view.show_bottom_status = false; - view.render(&mut frame, f_size); + frame.render_widget(view, f_size); } let prompt_style = Style::default().fg(Color::LightYellow); @@ -46,9 +46,8 @@ impl<'a> TuiPrompt<'a> { height: 1, }; - Paragraph::new(text.iter()) - .wrap(true) - .render(&mut frame, textfield_rect); + frame.render_widget(Paragraph::new(text.iter()) + .wrap(true), textfield_rect); }); if let Ok(event) = context.events.next() { diff --git a/src/ui/widgets/tui_tab.rs b/src/ui/widgets/tui_tab.rs index 55ca497..fd74a9c 100644 --- a/src/ui/widgets/tui_tab.rs +++ b/src/ui/widgets/tui_tab.rs @@ -16,7 +16,7 @@ impl<'a> TuiTabBar<'a> { } impl<'a> Widget for TuiTabBar<'a> { - fn draw(&mut self, area: Rect, buf: &mut Buffer) { + fn render(self, area: Rect, buf: &mut Buffer) { let selected = Style::default().modifier(Modifier::REVERSED); let text = [ @@ -24,6 +24,6 @@ impl<'a> Widget for TuiTabBar<'a> { Text::raw(format!("/{}", self.len)), ]; - Paragraph::new(text.iter()).wrap(true).draw(area, buf); + Paragraph::new(text.iter()).wrap(true).render(area, buf); } } diff --git a/src/ui/widgets/tui_textfield.rs b/src/ui/widgets/tui_textfield.rs index 096e589..78f3b37 100644 --- a/src/ui/widgets/tui_textfield.rs +++ b/src/ui/widgets/tui_textfield.rs @@ -1,13 +1,10 @@ -use std::io::Write; - use rustyline::completion::{Candidate, Completer, FilenameCompleter, Pair}; use rustyline::line_buffer; use termion::event::Key; use tui::layout::Rect; use tui::style::{Color, Modifier, Style}; -use tui::widgets::{Paragraph, Text, Widget}; -use unicode_width::UnicodeWidthChar; +use tui::widgets::{Paragraph, Text}; use crate::context::JoshutoContext; use crate::ui::TuiBackend; @@ -37,11 +34,11 @@ pub struct TuiTextField<'a> { _prompt: &'a str, _prefix: &'a str, _suffix: &'a str, - _menu: Option<&'a mut TuiMenu<'a>>, + _menu: Option<TuiMenu<'a>>, } impl<'a> TuiTextField<'a> { - pub fn menu(mut self, menu: &'a mut TuiMenu<'a>) -> Self { + pub fn menu(mut self, menu: TuiMenu<'a>) -> Self { self._menu = Some(menu); self } @@ -80,13 +77,12 @@ impl<'a> TuiTextField<'a> { line_buffer.set_pos(char_idx); let terminal = backend.terminal_mut(); - let mut cursor_xpos = line_buffer.pos(); loop { - cursor_xpos = line_buffer.pos(); + let cursor_xpos = line_buffer.pos(); terminal .draw(|mut frame| { - let f_size = frame.size(); + let f_size: Rect = frame.size(); if f_size.height == 0 { return; } @@ -94,10 +90,10 @@ impl<'a> TuiTextField<'a> { { let mut view = TuiView::new(&context); view.show_bottom_status = false; - view.render(&mut frame, f_size); + frame.render_widget(view, f_size); } - if let Some(menu) = self._menu.as_mut() { + if let Some(menu) = self._menu.take() { let menu_len = menu.len(); let menu_y = if menu_len + 2 > f_size.height as usize { 0 @@ -111,7 +107,7 @@ impl<'a> TuiTextField<'a> { width: f_size.width, height: menu_len as u16, }; - menu.render(&mut frame, rect); + frame.render_widget(menu, rect); } let cmd_prompt_style = Style::default().fg(Color::LightGreen); @@ -145,9 +141,8 @@ impl<'a> TuiTextField<'a> { height: 1, }; - Paragraph::new(text.iter()) - .wrap(true) - .render(&mut frame, textfield_rect); + frame.render_widget(Paragraph::new(text.iter()) + .wrap(true), textfield_rect); }) .unwrap(); @@ -186,7 +181,6 @@ impl<'a> TuiTextField<'a> { Key::Up => {} Key::Down => {} Key::Esc => { - terminal.hide_cursor(); return None; } Key::Char('\t') => { diff --git a/src/ui/widgets/tui_topbar.rs b/src/ui/widgets/tui_topbar.rs index e87a3e5..eabbb96 100644 --- a/src/ui/widgets/tui_topbar.rs +++ b/src/ui/widgets/tui_topbar.rs @@ -18,7 +18,7 @@ impl<'a> TuiTopBar<'a> { } impl<'a> Widget for TuiTopBar<'a> { - fn draw(&mut self, area: Rect, buf: &mut Buffer) { + fn render(self, area: Rect, buf: &mut Buffer) { let username_style = Style::default() .fg(Color::LightGreen) .modifier(Modifier::BOLD); @@ -34,6 +34,6 @@ impl<'a> Widget for TuiTopBar<'a> { Text::styled(curr_path_str, path_style), ]; - Paragraph::new(text.iter()).wrap(true).draw(area, buf); + Paragraph::new(text.iter()).wrap(true).render(area, buf); } } diff --git a/src/ui/widgets/tui_view.rs b/src/ui/widgets/tui_view.rs index cc6e1b2..481bcc6 100644 --- a/src/ui/widgets/tui_view.rs +++ b/src/ui/widgets/tui_view.rs @@ -1,6 +1,6 @@ use tui::buffer::Buffer; use tui::layout::{Direction, Layout, Rect}; -use tui::style::{Color, Modifier, Style}; +use tui::style::{Color, Style}; use tui::widgets::{Paragraph, Text, Widget}; use super::{TuiDirList, TuiDirListDetailed, TuiFooter, TuiTabBar, TuiTopBar}; @@ -25,7 +25,7 @@ impl<'a> TuiView<'a> { } impl<'a> Widget for TuiView<'a> { - fn draw(&mut self, area: Rect, buf: &mut Buffer) { + fn render(self, area: Rect, buf: &mut Buffer) { let f_size = area; let curr_tab = self.context.curr_tab_ref(); @@ -60,7 +60,7 @@ impl<'a> Widget for TuiView<'a> { width: topbar_width, height: 1, }; - TuiTopBar::new(curr_path).draw(rect, buf); + TuiTopBar::new(curr_path).render(rect, buf); let rect = Rect { x: topbar_width, @@ -74,7 +74,7 @@ impl<'a> Widget for TuiView<'a> { "" }; TuiTabBar::new(name, self.context.curr_tab_index, self.context.tabs.len()) - .draw(rect, buf); + .render(rect, buf); } else { let topbar_width = f_size.width; @@ -84,16 +84,16 @@ impl<'a> Widget for TuiView<'a> { width: topbar_width, height: 1, }; - TuiTopBar::new(curr_path).draw(rect, buf); + TuiTopBar::new(curr_path).render(rect, buf); } } if let Some(curr_list) = parent_list.as_ref() { - TuiDirList::new(&curr_list).draw(layout_rect[0], buf); + TuiDirList::new(&curr_list).render(layout_rect[0], buf); }; if let Some(curr_list) = curr_list.as_ref() { - TuiDirListDetailed::new(&curr_list).draw(layout_rect[1], buf); + TuiDirListDetailed::new(&curr_list).render(layout_rect[1], buf); let rect = Rect { x: 0, y: f_size.height - 1, @@ -108,19 +108,19 @@ impl<'a> Widget |