[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

[tor-commits] [arm/master] fix: tab completion could truncated results



commit 48e955db099c5295edcee19508844fbd812b5948
Author: Damian Johnson <atagar@xxxxxxxxxxxxxx>
Date:   Mon Sep 19 08:10:12 2011 -0700

    fix: tab completion could truncated results
    
    When the tab completion matches had prefixes with multiple cases (for instance
    "MAPADDRESS" and "MapAddress") then tab completion would crop input to the
    common portion (just "M"). Instead picking the prefix with the largest set of
    results. This isn't perfect since it could hide some results but seems like the
    best option for getting around this stupid behavior.
---
 src/util/torInterpretor.py |   24 ++++++++++++++++++++++++
 1 files changed, 24 insertions(+), 0 deletions(-)

diff --git a/src/util/torInterpretor.py b/src/util/torInterpretor.py
index d5abb88..593f29c 100644
--- a/src/util/torInterpretor.py
+++ b/src/util/torInterpretor.py
@@ -348,6 +348,30 @@ class TorControlCompleter:
     if text != self._prefix:
       self._prefix = text
       self._prefixMatches = self.getMatches(text)
+      
+      # Tab completion fills in the first common prefix which can be
+      # problematic if they don't all match. For instance completing "Map" will
+      # result in ["MAPADDRESS", "MapAddress"], which gets truncated to the
+      # common prefix of just "M" when the user presses tab.
+      
+      if len(self._prefixMatches) > 1:
+        prefixToResult = {}
+        
+        for match in self._prefixMatches:
+          prefix = match[:len(text)]
+          
+          if prefix in prefixToResult:
+            prefixToResult[prefix].append(match)
+          else:
+            prefixToResult[prefix] = [match]
+        
+        if len(prefixToResult) > 1:
+          # we have multiple prefixes, pick the one with the most results
+          self._prefixMatches = None
+          
+          for matchSet in prefixToResult.values():
+            if not self._prefixMatches or len(self._prefixMatches) < len(matchSet):
+              self._prefixMatches = matchSet
     
     if state < len(self._prefixMatches):
       return self._prefixMatches[state]



_______________________________________________
tor-commits mailing list
tor-commits@xxxxxxxxxxxxxxxxxxxx
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits