summaryrefslogtreecommitdiffstats
path: root/src/git_interactive.rs
diff options
context:
space:
mode:
authorTim Oram <dev@mitmaro.ca>2020-10-28 10:00:52 -0230
committerTim Oram <dev@mitmaro.ca>2020-10-29 20:58:36 -0230
commit02ad2569f3b0c2608b873af132e7ba89a9a9837e (patch)
tree50c2e5ce25ad6518ff0dfcd1c2f48fcdd393df13 /src/git_interactive.rs
parentecaa141d6bab8081ed7fd59fbd05399d22aa5236 (diff)
Move swap range functions to List module
The range swapping is purely the responsibility of the list module, so move those functions out of the GitInteractive struct and into that module.
Diffstat (limited to 'src/git_interactive.rs')
-rw-r--r--src/git_interactive.rs59
1 files changed, 8 insertions, 51 deletions
diff --git a/src/git_interactive.rs b/src/git_interactive.rs
index 54b2acb..d440fe0 100644
--- a/src/git_interactive.rs
+++ b/src/git_interactive.rs
@@ -75,6 +75,10 @@ impl GitInteractive {
self.selected_line_index = selected_line_index;
}
+ pub(crate) fn set_visual_index(&mut self, visual_index: usize) {
+ self.visual_index_start = Some(visual_index);
+ }
+
pub(crate) fn start_visual_mode(&mut self) {
self.visual_index_start = Some(self.selected_line_index);
}
@@ -83,55 +87,8 @@ impl GitInteractive {
self.visual_index_start = None;
}
- pub(crate) fn swap_range_up(&mut self) {
- let end_index = self.visual_index_start.unwrap_or(self.selected_line_index);
- let start_index = self.selected_line_index;
-
- if end_index == 1 || start_index == 1 {
- return;
- }
-
- let range = if end_index <= start_index {
- end_index..=start_index
- }
- else {
- start_index..=end_index
- };
-
- for index in range {
- self.lines.swap(index - 1, index - 2);
- }
-
- if let Some(visual_index_start) = self.visual_index_start {
- self.visual_index_start = Some(visual_index_start - 1);
- }
- self.selected_line_index -= 1;
- }
-
- pub(crate) fn swap_range_down(&mut self) {
- let end_index = self.visual_index_start.unwrap_or(self.selected_line_index);
- let start_index = self.selected_line_index;
-
- if end_index == self.lines.len() || start_index == self.lines.len() {
- return;
- }
-
- let range = if end_index <= start_index {
- end_index..=start_index
- }
- else {
- start_index..=end_index
- };
-
- for index in range.rev() {
- self.lines.swap(index - 1, index);
- }
-
- if let Some(visual_index_start) = self.visual_index_start {
- self.visual_index_start = Some(visual_index_start + 1);
- }
-
- self.selected_line_index += 1;
+ pub(crate) fn swap_lines(&mut self, a: usize, b: usize) {
+ self.lines.swap(a, b);
}
pub(crate) fn edit_selected_line(&mut self, content: &str) {
@@ -177,8 +134,8 @@ impl GitInteractive {
self.selected_line_index
}
- pub(crate) fn get_visual_start_index(&self) -> usize {
- self.visual_index_start.unwrap_or(self.selected_line_index)
+ pub(crate) const fn get_visual_start_index(&self) -> Option<usize> {
+ self.visual_index_start
}
pub(crate) fn get_filepath(&self) -> &str {