aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--helix-term/src/application.rs50
-rw-r--r--helix-view/src/prompt.rs38
2 files changed, 61 insertions, 27 deletions
diff --git a/helix-term/src/application.rs b/helix-term/src/application.rs
index b48fafd8..16e8a53d 100644
--- a/helix-term/src/application.rs
+++ b/helix-term/src/application.rs
@@ -34,6 +34,8 @@ type Terminal = tui::Terminal<CrosstermBackend<std::io::Stdout>>;
static EX: smol::Executor = smol::Executor::new();
+const BASE_WIDTH: u16 = 30;
+
pub struct Application {
editor: Editor,
prompt: Option<Prompt>,
@@ -253,9 +255,10 @@ impl Renderer {
);
let mut row = 0;
let mut col = 0;
+ let max_row: u16 = self.size.0 / BASE_WIDTH;
// TODO: this will crash if there are too many cols added
// TODO: set char limit
- for i in (0..completion.len()) {
+ for (i, command) in completion.iter().enumerate() {
let color = if prompt.completion_selection_index.is_some()
&& i == prompt.completion_selection_index.unwrap()
{
@@ -263,16 +266,20 @@ impl Renderer {
} else {
self.text_color
};
- self.surface.set_string(
- 1 + col * 10,
- self.size.1 - 6 + row as u16,
- &completion[i],
+ self.surface.set_stringn(
+ 1 + row * BASE_WIDTH,
+ self.size.1 - 6 + col as u16,
+ &command,
+ BASE_WIDTH as usize - 1,
color,
);
- row += 1;
- if row > 3 {
- row = 0;
- col += 1;
+ col += 1;
+ if col > 3 {
+ col = 0;
+ row += 1;
+ }
+ if row > max_row {
+ break;
}
}
}
@@ -436,6 +443,31 @@ impl Application {
String::from("ccc"),
String::from("ddd"),
String::from("eee"),
+ String::from("averylongcommandaverylongcommandaverylongcommandaverylongcommandaverylongcommand"),
+ String::from("q"),
+ String::from("aaa"),
+ String::from("bbb"),
+ String::from("ccc"),
+ String::from("ddd"),
+ String::from("eee"),
+ String::from("q"),
+ String::from("aaa"),
+ String::from("bbb"),
+ String::from("ccc"),
+ String::from("ddd"),
+ String::from("eee"),
+ String::from("q"),
+ String::from("aaa"),
+ String::from("bbb"),
+ String::from("ccc"),
+ String::from("ddd"),
+ String::from("eee"),
+ String::from("q"),
+ String::from("aaa"),
+ String::from("bbb"),
+ String::from("ccc"),
+ String::from("ddd"),
+ String::from("eee"),
];
for command in command_list {
if command.contains(_input) {
diff --git a/helix-view/src/prompt.rs b/helix-view/src/prompt.rs
index beb5e76d..749e54d2 100644
--- a/helix-view/src/prompt.rs
+++ b/helix-view/src/prompt.rs
@@ -39,7 +39,7 @@ impl Prompt {
}
pub fn move_char_left(&mut self) {
- if self.cursor > 1 {
+ if self.cursor > 0 {
self.cursor -= 1;
}
}
@@ -68,23 +68,25 @@ impl Prompt {
}
pub fn change_completion_selection(&mut self) {
- self.completion_selection_index = self
- .completion_selection_index
- .map(|i| {
- if i == self.completion.as_ref().unwrap().len() - 1 {
- 0
- } else {
- i + 1
- }
- })
- .or(Some(0));
- self.line = String::from(
- self.completion
- .as_ref()
- .unwrap()
- .get(self.completion_selection_index.unwrap())
- .unwrap(),
- );
+ if self.completion.is_some() {
+ self.completion_selection_index = self
+ .completion_selection_index
+ .map(|i| {
+ if i == self.completion.as_ref().unwrap().len() - 1 {
+ 0
+ } else {
+ i + 1
+ }
+ })
+ .or(Some(0));
+ self.line = String::from(
+ self.completion
+ .as_ref()
+ .unwrap()
+ .get(self.completion_selection_index.unwrap())
+ .unwrap(),
+ );
+ }
}
pub fn exit_selection(&mut self) {