diff options
author | Jeff Zhao <jeff.no.zhao@gmail.com> | 2021-02-09 20:41:07 -0500 |
---|---|---|
committer | Jeff Zhao <jeff.no.zhao@gmail.com> | 2021-02-09 20:41:07 -0500 |
commit | 35b15cdea61aa7bc36de1700d66b13a8545b6004 (patch) | |
tree | cb7212b02c698a20dd2b4b45a250159f6212992b | |
parent | 621bd8856f8e8e36ce9ff0351dedeff2a4734def (diff) |
move files around, code clean up
-rw-r--r-- | src/commands/command_line.rs | 2 | ||||
-rw-r--r-- | src/commands/file_ops.rs | 2 | ||||
-rw-r--r-- | src/commands/open_file.rs | 2 | ||||
-rw-r--r-- | src/commands/set_mode.rs | 2 | ||||
-rw-r--r-- | src/run.rs | 3 | ||||
-rw-r--r-- | src/ui/views/mod.rs | 4 | ||||
-rw-r--r-- | src/ui/views/tui_command_menu.rs | 101 | ||||
-rw-r--r-- | src/ui/views/tui_textfield.rs (renamed from src/ui/widgets/tui_textfield.rs) | 4 | ||||
-rw-r--r-- | src/ui/widgets/mod.rs | 4 | ||||
-rw-r--r-- | src/ui/widgets/tui_menu.rs | 100 | ||||
-rw-r--r-- | src/ui/widgets/tui_text.rs | 20 | ||||
-rw-r--r-- | src/ui/widgets/tui_worker.rs | 2 |
12 files changed, 123 insertions, 123 deletions
diff --git a/src/commands/command_line.rs b/src/commands/command_line.rs index 0e7c3b2..2598283 100644 --- a/src/commands/command_line.rs +++ b/src/commands/command_line.rs @@ -1,7 +1,7 @@ use crate::commands::KeyCommand; use crate::context::JoshutoContext; use crate::error::JoshutoResult; -use crate::ui::widgets::TuiTextField; +use crate::ui::views::TuiTextField; use crate::ui::TuiBackend; use super::JoshutoRunnable; diff --git a/src/commands/file_ops.rs b/src/commands/file_ops.rs index 96869ac..8abc19b 100644 --- a/src/commands/file_ops.rs +++ b/src/commands/file_ops.rs @@ -76,7 +76,7 @@ pub fn copy_filename(context: &mut JoshutoContext) -> JoshutoResult<()> { ), ]; - for (clipboard, command) in clipboards.iter() { + for (_, command) in clipboards.iter() { match Command::new("sh").args(&["-c", command.as_str()]).status() { Ok(s) if s.success() => return Ok(()), _ => {} diff --git a/src/commands/open_file.rs b/src/commands/open_file.rs index 7ce3c62..3dd8d3d 100644 --- a/src/commands/open_file.rs +++ b/src/commands/open_file.rs @@ -3,7 +3,7 @@ use std::path; use crate::config::mimetype::JoshutoMimetypeEntry; use crate::context::JoshutoContext; use crate::error::{JoshutoError, JoshutoErrorKind, JoshutoResult}; -use crate::ui::widgets::TuiTextField; +use crate::ui::views::TuiTextField; use crate::ui::TuiBackend; use crate::util::load_child::LoadChild; diff --git a/src/commands/set_mode.rs b/src/commands/set_mode.rs index 8d443ea..214843c 100644 --- a/src/commands/set_mode.rs +++ b/src/commands/set_mode.rs @@ -1,6 +1,6 @@ use crate::context::JoshutoContext; use crate::error::JoshutoResult; -use crate::ui::widgets::TuiTextField; +use crate::ui::views::TuiTextField; use crate::ui::TuiBackend; use crate::util::unix; @@ -5,8 +5,7 @@ use crate::config::JoshutoCommandMapping; use crate::context::JoshutoContext; use crate::tab::JoshutoTab; use crate::ui; -use crate::ui::views::TuiView; -use crate::ui::widgets::TuiCommandMenu; +use crate::ui::views::{TuiCommandMenu, TuiView}; use crate::util::event::JoshutoEvent; use crate::util::input; use crate::util::load_child::LoadChild; diff --git a/src/ui/views/mod.rs b/src/ui/views/mod.rs index e6b1c41..70517cf 100644 --- a/src/ui/views/mod.rs +++ b/src/ui/views/mod.rs @@ -1,7 +1,11 @@ +mod tui_command_menu; mod tui_folder_view; +mod tui_textfield; mod tui_view; mod tui_worker_view; +pub use self::tui_command_menu::TuiCommandMenu; pub use self::tui_folder_view::TuiFolderView; +pub use self::tui_textfield::TuiTextField; pub use self::tui_view::TuiView; pub use self::tui_worker_view::TuiWorkerView; diff --git a/src/ui/views/tui_command_menu.rs b/src/ui/views/tui_command_menu.rs new file mode 100644 index 0000000..fa2e857 --- /dev/null +++ b/src/ui/views/tui_command_menu.rs @@ -0,0 +1,101 @@ +use std::iter::Iterator; + +use termion::event::{Event, Key}; +use tui::layout::Rect; +use tui::widgets::Clear; + +use crate::commands::{CommandKeybind, KeyCommand}; +use crate::config::JoshutoCommandMapping; +use crate::context::JoshutoContext; +use crate::ui::views::TuiView; +use crate::ui::widgets::TuiMenu; +use crate::ui::TuiBackend; +use crate::util::event::JoshutoEvent; +use crate::util::input; +use crate::util::to_string::ToString; + +const BORDER_HEIGHT: usize = 1; +const BOTTOM_MARGIN: usize = 1; + +pub struct TuiCommandMenu; + +impl TuiCommandMenu { + pub fn new() -> Self { + Self {} + } + + pub fn get_input<'a>( + &mut self, + backend: &mut TuiBackend, + context: &mut JoshutoContext, + m: &'a JoshutoCommandMapping, + ) -> Option<&'a KeyCommand> { + let mut map: &JoshutoCommandMapping = &m; + let terminal = backend.terminal_mut(); + context.flush_event(); + + loop { + let _ = terminal.draw(|frame| { + let f_size: Rect = frame.size(); + + { + let view = TuiView::new(&context); + frame.render_widget(view, f_size); + } + + { + // draw menu + let mut display_vec: Vec<String> = map + .as_ref() + .iter() + .map(|(k, v)| format!(" {} {}", k.to_string(), v)) + .collect(); + display_vec.sort(); + let display_str: Vec<&str> = display_vec.iter().map(|v| v.as_str()).collect(); + let display_str_len = display_str.len(); + + let y = if (f_size.height as usize) + < display_str_len + BORDER_HEIGHT + BOTTOM_MARGIN + { + 0 + } else { + f_size.height + - (BORDER_HEIGHT + BOTTOM_MARGIN) as u16 + - display_str_len as u16 + }; + + let menu_rect = Rect { + x: 0, + y, + width: f_size.width, + height: (display_str_len + BORDER_HEIGHT) as u16, + }; + + frame.render_widget(Clear, menu_rect); + frame.render_widget(TuiMenu::new(&display_str), menu_rect); + } + }); + + if let Ok(event) = context.poll_event() { + match event { + JoshutoEvent::Termion(event) => { + match event { + Event::Key(Key::Esc) => return None, + event => match map.as_ref().get(&event) { + Some(CommandKeybind::SimpleKeybind(s)) => { + return Some(s); + } + Some(CommandKeybind::CompositeKeybind(m)) => { + map = m; + } + None => return None, + }, + } + context.flush_event(); + } + event => input::process_noninteractive(event, context), + } + } + } + } +} diff --git a/src/ui/widgets/tui_textfield.rs b/src/ui/views/tui_textfield.rs index 6e24083..db1bc6f 100644 --- a/src/ui/widgets/tui_textfield.rs +++ b/src/ui/views/tui_textfield.rs @@ -3,9 +3,7 @@ use rustyline::line_buffer; use termion::event::{Event, Key}; use tui::layout::Rect; -use tui::style::{Color, Modifier, Style}; -use tui::text::{Span, Spans}; -use tui::widgets::{Block, Borders, Clear, Paragraph, Wrap}; +use tui::widgets::Clear; use crate::context::JoshutoContext; use crate::ui::views::TuiView; diff --git a/src/ui/widgets/mod.rs b/src/ui/widgets/mod.rs index 66ad76f..7591073 100644 --- a/src/ui/widgets/mod.rs +++ b/src/ui/widgets/mod.rs @@ -5,17 +5,15 @@ mod tui_menu; mod tui_prompt; mod tui_tab; mod tui_text; -mod tui_textfield; mod tui_topbar; mod tui_worker; pub use self::tui_dirlist::TuiDirList; pub use self::tui_dirlist_detailed::TuiDirListDetailed; pub use self::tui_footer::TuiFooter; -pub use self::tui_menu::{TuiCommandMenu, TuiMenu}; +pub use self::tui_menu::TuiMenu; pub use self::tui_prompt::TuiPrompt; pub use self::tui_tab::TuiTabBar; pub use self::tui_text::TuiMultilineText; -pub use self::tui_textfield::TuiTextField; pub use self::tui_topbar::TuiTopBar; pub use self::tui_worker::TuiWorker; diff --git a/src/ui/widgets/tui_menu.rs b/src/ui/widgets/tui_menu.rs index 16c2cd9..2634662 100644 --- a/src/ui/widgets/tui_menu.rs +++ b/src/ui/widgets/tui_menu.rs @@ -1,105 +1,7 @@ -use std::iter::Iterator; - -use termion::event::{Event, Key}; use tui::buffer::Buffer; use tui::layout::Rect; use tui::style::{Color, Style}; -use tui::widgets::{Block, Borders, Clear, Widget}; - -use crate::commands::{CommandKeybind, KeyCommand}; -use crate::config::JoshutoCommandMapping; -use crate::context::JoshutoContext; -use crate::ui::views::TuiView; -use crate::ui::TuiBackend; -use crate::util::event::JoshutoEvent; -use crate::util::input; -use crate::util::to_string::ToString; - -const BORDER_HEIGHT: usize = 1; -const BOTTOM_MARGIN: usize = 1; - -pub struct TuiCommandMenu; - -impl TuiCommandMenu { - pub fn new() -> Self { - Self {} - } - - pub fn get_input<'a>( - &mut self, - backend: &mut TuiBackend, - context: &mut JoshutoContext, - m: &'a JoshutoCommandMapping, - ) -> Option<&'a KeyCommand> { - let mut map: &JoshutoCommandMapping = &m; - let terminal = backend.terminal_mut(); - context.flush_event(); - - loop { - let _ = terminal.draw(|frame| { - let f_size: Rect = frame.size(); - - { - let view = TuiView::new(&context); - frame.render_widget(view, f_size); - } - - { - // draw menu - let mut display_vec: Vec<String> = map - .as_ref() - .iter() - .map(|(k, v)| format!(" {} {}", k.to_string(), v)) - .collect(); - display_vec.sort(); - let display_str: Vec<&str> = display_vec.iter().map(|v| v.as_str()).collect(); - let display_str_len = display_str.len(); - - let y = if (f_size.height as usize) - < display_str_len + BORDER_HEIGHT + BOTTOM_MARGIN - { - 0 - } else { - f_size.height - - (BORDER_HEIGHT + BOTTOM_MARGIN) as u16 - - display_str_len as u16 - }; - - let menu_rect = Rect { - x: 0, - y, - width: f_size.width, - height: (display_str_len + BORDER_HEIGHT) as u16, - }; - - frame.render_widget(Clear, menu_rect); - frame.render_widget(TuiMenu::new(&display_str), menu_rect); - } - }); - - if let Ok(event) = context.poll_event() { - match event { - JoshutoEvent::Termion(event) => { - match event { - Event::Key(Key::Esc) => return None, - event => match map.as_ref().get(&event) { - Some(CommandKeybind::SimpleKeybind(s)) => { - return Some(s); - } - Some(CommandKeybind::CompositeKeybind(m)) => { - map = m; - } - None => return None, - }, - } - context.flush_event(); - } - event => input::process_noninteractive(event, context), - } - } - } - } -} +use tui::widgets::{Block, Borders, Widget}; pub struct TuiMenu<'a> { options: &'a [&'a str], diff --git a/src/ui/widgets/tui_text.rs b/src/ui/widgets/tui_text.rs index bd6d5fa..6d726c5 100644 --- a/src/ui/widgets/tui_text.rs +++ b/src/ui/widgets/tui_text.rs @@ -1,14 +1,9 @@ use tui::buffer::Buffer; use tui::layout::Rect; use tui::style::{Color, Modifier, Style}; -use tui::text::{Span, Spans}; -use tui::widgets::{Paragraph, Widget, Wrap}; +use tui::widgets::Widget; use unicode_width::{UnicodeWidthChar, UnicodeWidthStr}; -use crate::context::JoshutoContext; -use crate::io::FileOp; -use crate::ui::widgets::TuiTopBar; - #[derive(Clone, Debug)] struct IndexInfo { pub index: usize, @@ -40,6 +35,9 @@ impl<'a> TuiMultilineText<'a> { Some((i, c, w)) }; + // TODO: This is a very hacky way of doing it and I would like + // to clean this up more + let mut lines = Vec::with_capacity(s.len() / area_width + 1); let mut start = 0; let mut end = 0; @@ -47,7 +45,7 @@ impl<'a> TuiMultilineText<'a> { for (i, c, w) in s.char_indices().filter_map(filter) { end = i + c.len_utf8(); - if (line_width + w < area_width) { + if line_width + w < area_width { line_width += w; continue; } @@ -59,7 +57,7 @@ impl<'a> TuiMultilineText<'a> { start = end; line_width = 0; } - if (start < end) { + if start < end { lines.push(LineInfo { start, end: end, @@ -72,13 +70,13 @@ impl<'a> TuiMultilineText<'a> { let (row, line_info) = lines .iter() .enumerate() - .find(|(r, li)| li.start <= idx && li.end > idx) + .find(|(_, li)| li.start <= idx && li.end > idx) .unwrap(); let mut s_width = 0; let substr = &s[line_info.start..line_info.end]; for (i, c, w) in substr.char_indices().filter_map(filter) { - if (line_info.start + i <= idx) { + if line_info.start + i <= idx { s_width += w; continue; } @@ -96,7 +94,7 @@ impl<'a> TuiMultilineText<'a> { index_info = Some(IndexInfo { index: idx, x: s_width % area_width, - y: row + 1, + y: row + s_width / area_width, c: ' ', }); } diff --git a/src/ui/widgets/tui_worker.rs b/src/ui/widgets/tui_worker.rs index 24f5fdf..cc76cf6 100644 --- a/src/ui/widgets/tui_worker.rs +++ b/src/ui/widgets/tui_worker.rs @@ -1,7 +1,7 @@ use tui::buffer::Buffer; use tui::layout::Rect; use tui::style::{Color, Modifier, Style}; -use tui::widgets::{Paragraph, Widget, Wrap}; +use tui::widgets::Widget; use crate::context::JoshutoContext; use crate::io::FileOp; |