浏览代码

Remove prefix-free requirement on SelectPrompt.

Kestrel 20 小时之前
父节点
当前提交
1eace0a11f
共有 2 个文件被更改,包括 9 次插入4 次删除
  1. 1 1
      examples/select_prompt.rs
  2. 8 3
      src/lib.rs

+ 1 - 1
examples/select_prompt.rs

@@ -4,6 +4,6 @@ fn main() {
         .run().unwrap();
 
     cliask::SelectPrompt::new("Choose a number:")
-        .with_items(0..100)
+        .with_items(0..1000)
         .run_cancellable().unwrap();
 }

+ 8 - 3
src/lib.rs

@@ -283,9 +283,14 @@ impl<'l, T: std::fmt::Display> SelectPrompt<'l, T> {
                 },
                 termion::event::Key::Char('\r') | termion::event::Key::Char('\n') => {
                     self.refilter();
-                    if self.filtered_items.len() == 1 {
-                        return Ok(Some(self.items.swap_remove(self.filtered_items[0]).1))
-                    }
+                    let pos = if self.filtered_items.len() == 1 {
+                        self.filtered_items[0]
+                    } else if let Some(pos) = self.items.iter().position(|p| p.0 == self.input) {
+                        pos
+                    } else {
+                        continue
+                    };
+                    return Ok(Some(self.items.swap_remove(pos).1))
                 },
                 termion::event::Key::Ctrl('u') => {
                     self.input.clear();