summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJiayi Zhao <jeff.no.zhao@gmail.com>2020-03-11 15:22:17 -0400
committerJiayi Zhao <jeff.no.zhao@gmail.com>2020-03-11 15:22:17 -0400
commitd9a4d91a6b00691d4b363edeb2623ccc8d1f1d55 (patch)
tree1cc764aa7afec97d1d7f4d983f075b0c2ebd95ac
parentc23a09814d861b0e7deee7d331fdb3c97deffb4b (diff)
remove window module and fix unwrap none when opening file
-rw-r--r--src/commands/open_file.rs7
-rw-r--r--src/ui/widgets/tui_dirlist_detailed.rs14
-rw-r--r--src/window/mod.rs3
-rw-r--r--src/window/page_state.rs173
4 files changed, 12 insertions, 185 deletions
diff --git a/src/commands/open_file.rs b/src/commands/open_file.rs
index 39524e7..c871c29 100644
--- a/src/commands/open_file.rs
+++ b/src/commands/open_file.rs
@@ -55,8 +55,9 @@ impl OpenFile {
let options = Self::get_options(paths[0]);
if options.len() > 0 {
backend.terminal_drop();
- options[0].execute_with(&paths)?;
- backend.terminal_restore();
+ let res = options[0].execute_with(&paths);
+ backend.terminal_restore()?;
+ return res;
} else {
OpenFileWith::open_with(context, backend, &paths)?;
}
@@ -123,7 +124,7 @@ impl OpenFileWith {
match user_input.parse::<usize>() {
Ok(n) if n >= mimetype_options.len() => Err(std::io::Error::new(
std::io::ErrorKind::InvalidData,
- "option does not exist".to_owned(),
+ "option does not exist".to_string(),
)),
Ok(n) => {
let mimetype_entry = &mimetype_options[n];
diff --git a/src/ui/widgets/tui_dirlist_detailed.rs b/src/ui/widgets/tui_dirlist_detailed.rs
index 0fffd79..e0e580c 100644
--- a/src/ui/widgets/tui_dirlist_detailed.rs
+++ b/src/ui/widgets/tui_dirlist_detailed.rs
@@ -33,13 +33,15 @@ impl<'a> Widget for TuiDirListDetailed<'a> {
let y = area.top();
let dir_len = self.dirlist.contents.len();
- if dir_len == 0 {
- let style = Style::default().bg(Color::Red).fg(Color::White);
- buf.set_stringn(x, y, "empty", area.width as usize, style);
- return;
- }
+ let curr_index = match self.dirlist.index {
+ Some(i) => i,
+ None => {
+ let style = Style::default().bg(Color::Red).fg(Color::White);
+ buf.set_stringn(x, y, "empty", area.width as usize, style);
+ return;
+ }
+ };
- let curr_index = self.dirlist.index.unwrap();
let skip_dist = curr_index / area.height as usize * area.height as usize;
let screen_index = if skip_dist > 0 {
diff --git a/src/window/mod.rs b/src/window/mod.rs
deleted file mode 100644
index ac50e58..0000000
--- a/src/window/mod.rs
+++ /dev/null
@@ -1,3 +0,0 @@
-pub mod page_state;
-
-pub use self::page_state::JoshutoPageState;
diff --git a/src/window/page_state.rs b/src/window/page_state.rs
deleted file mode 100644
index 4556d72..0000000
--- a/src/window/page_state.rs
+++ /dev/null
@@ -1,173 +0,0 @@
-#[derive(Clone, Debug)]
-pub struct JoshutoPageState {
- pub start: usize,
- pub end: usize,
-}
-
-impl JoshutoPageState {
- pub fn update_page_state(
- &mut self,
- index: usize,
- win_rows: i32,
- vec_len: usize,
- offset: usize,
- ) {
- if self.end != self.start + win_rows as usize {
- self.end = self.start + win_rows as usize;
- }
- if self.end > vec_len {
- self.end = vec_len
- }
-
- if self.start + offset >= index {
- self.start = if index as usize <= offset {
- 0
- } else {
- index as usize - offset
- };
- self.end = if self.start + win_rows as usize >= vec_len {
- vec_len
- } else {
- self.start + win_rows as usize
- };
- self.start = if self.end <= win_rows as usize {
- 0
- } else {
- self.end - win_rows as usize
- };
- }
- if self.end <= index + offset {
- self.end = if index as usize + offset >= vec_len {
- vec_len
- } else {
- index as usize + offset
- };
- self.start = if self.end <= win_rows as usize {
- 0
- } else {
- self.end - win_rows as usize
- };
- self.end = if self.start + win_rows as usize >= vec_len {
- vec_len
- } else {
- self.start + win_rows as usize
- };
- }
- }
-}
-
-impl std::default::Default for JoshutoPageState {
- fn default() -> Self {
- JoshutoPageState {
- start: usize::default(),
- end: usize::default(),
- }
- }
-}
-
-#[cfg(test)]
-mod tests {
- use super::*;
- #[test]
- fn shorter_than_viewable_region() {
- let mut page_state = JoshutoPageState::new();
- let index = 5;
- let win_rows = 37;
- let vec_len = 12;
- let offset = 6;
- page_state.update_page_state(index, win_rows, vec_len, offset);
- assert_eq!(0, page_state.start);
- assert_eq!(12, page_state.end);
- let index = 30;
- let win_rows = 37;
- let vec_len = 12;
- let offset = 6;
- page_state.update_page_state(index, win_rows, vec_len, offset);
- assert_eq!(0, page_state.start);
- assert_eq!(12, page_state.end);
- }
- #[test]
- fn test_01() {
- let mut page_state = JoshutoPageState::new();
- let index = 3;
- let win_rows = 25;
- let vec_len = 40;
- let offset = 6;
- page_state.update_page_state(index, win_rows, vec_len, offset);
- assert_eq!(0, page_state.start);
- assert_eq!(25, page_state.end);
- }
- #[test]
- fn test_02() {
- let mut page_state = JoshutoPageState::new();
- let index = 12;
- let win_rows = 25;
- let vec_len = 40;
- let offset = 6;
- page_state.update_page_state(index, win_rows, vec_len, offset);
- assert_eq!(0, page_state.start);
- assert_eq!(25, page_state.end);
- }
- #[test]
- fn test_inside_top_offset() {
- let mut page_state = JoshutoPageState::new();
- page_state.start = 10;
- let index = 12;
- let win_rows = 25;
- let vec_len = 40;
- let offset = 6;
- page_state.update_page_state(index, win_rows, vec_len, offset);
- assert_eq!(6, page_state.start);
- assert_eq!(31, page_state.end);
- }
- #[test]
- fn test_inside_bottom_offset() {
- let mut page_state = JoshutoPageState::new();
- page_state.start = 36;
- let index = 34;
- let win_rows = 25;
- let vec_len = 40;
- let offset = 6;
- page_state.update_page_state(index, win_rows, vec_len, offset);
- assert_eq!(15, page_state.start);
- assert_eq!(40, page_state.end);
- }
- #[test]
- fn test_small_size() {
- let mut page_state = JoshutoPageState::new();
- let index = 3;
- let win_rows = 6;
- let vec_len = 6;
- let offset = 6;
- page_state.update_page_state(index, win_rows, vec_len, offset);
- assert_eq!(0, page_state.start);
- assert_eq!(6, page_state.end);
- let index = 0;
- let win_rows = 6;
- let vec_len = 6;
- let offset = 6;
- page_state.update_page_state(index, win_rows, vec_len, offset);
- assert_eq!(0, page_state.start);
- assert_eq!(6, page_state.end);
- let index = 6;
- let win_rows = 6;
- let vec_len = 6;
- let offset = 6;
- page_state.update_page_state(index, win_rows, vec_len, offset);
- assert_eq!(0, page_state.start);
- assert_eq!(6, page_state.end);
- }
- #[test]
- fn test_negative() {
- let mut page_state = JoshutoPageState::new();
- page_state.start = 10;
- page_state.end = 5;
- let index = 7;
- let win_rows = 30;
- let vec_len = 35;
- let offset = 6;
- page_state.update_page_state(index, win_rows, vec_len, offset);
- assert_eq!(1, page_state.start);
- assert_eq!(31, page_state.end);
- }
-}