From 03fcda2fe14a357107746ba5963a32b861c0533a Mon Sep 17 00:00:00 2001
From: gwenn <gtreguier@gmail.com>
Date: Thu, 25 Aug 2016 18:40:10 +0200
Subject: [PATCH] Fix longest_common_prefix

---
 src/completion.rs | 6 +++++-
 src/lib.rs        | 7 +++++++
 2 files changed, 12 insertions(+), 1 deletion(-)

diff --git a/src/completion.rs b/src/completion.rs
index ad0a93f0..16448c52 100644
--- a/src/completion.rs
+++ b/src/completion.rs
@@ -171,7 +171,7 @@ pub fn longest_common_prefix(candidates: &[String]) -> Option<&str> {
             let b1 = candidates[i].as_bytes();
             let b2 = candidates[i + 1].as_bytes();
             if b1.len() <= longest_common_prefix || b2.len() <= longest_common_prefix ||
-               b1[i] != b2[i] {
+               b1[longest_common_prefix] != b2[longest_common_prefix] {
                 break 'o;
             }
         }
@@ -227,5 +227,9 @@ mod tests {
             let lcp = super::longest_common_prefix(&candidates);
             assert!(lcp.is_none());
         }
+
+        let candidates = vec![String::from("fée"), String::from("fête")];
+        let lcp = super::longest_common_prefix(&candidates);
+        assert_eq!(Some("f"), lcp);
     }
 }
diff --git a/src/lib.rs b/src/lib.rs
index ebcabdd4..b115ed9b 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -600,6 +600,13 @@ fn complete_line<R: Read>(rdr: &mut tty::RawReader<R>,
                 return Ok(None);
             }
         }
+        // we can't complete any further, wait for second tab
+        let key = try!(rdr.next_key(false));
+        // if any character other than tab, pass it to the main loop
+        if key != KeyPress::Tab {
+            return Ok(Some(key))
+        }
+        // we got a second tab, maybe show list of possible completions
         // TODO ...
         Ok(None)
     } else {
-- 
GitLab