summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJeff Zhao <jeff.no.zhao@gmail.com>2021-02-09 20:41:07 -0500
committerJeff Zhao <jeff.no.zhao@gmail.com>2021-02-09 20:41:07 -0500
commit35b15cdea61aa7bc36de1700d66b13a8545b6004 (patch)
treecb7212b02c698a20dd2b4b45a250159f6212992b
parent621bd8856f8e8e36ce9ff0351dedeff2a4734def (diff)
move files around, code clean up
-rw-r--r--src/commands/command_line.rs2
-rw-r--r--src/commands/file_ops.rs2
-rw-r--r--src/commands/open_file.rs2
-rw-r--r--src/commands/set_mode.rs2
-rw-r--r--src/run.rs3
-rw-r--r--src/ui/views/mod.rs4
-rw-r--r--src/ui/views/tui_command_menu.rs101
-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.rs4
-rw-r--r--src/ui/widgets/tui_menu.rs100
-rw-r--r--src/ui/widgets/tui_text.rs20
-rw-r--r--src/ui/widgets/tui_worker.rs2
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;
diff --git a/src/run.rs b/src/run.rs
index e011973..7804d28 100644
--- a/src/run.rs
+++ b/src/run.rs
@@ -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;